'비용함수'에 해당되는 글 3건


Logistic 회귀의 cost function


지금까지 해온 것 처럼 로지스틱회귀의 비용함수 역시 어설프나마 문돌이식 수학으로 이해해 보려고 했다. 그래서 
일주일이 넘는 시간을 투자했으나 이번 시도는 앞선 시도들 보다 더 이해하기가 어려운 내용이었다. 때문에 이번
포스팅에서는 로지스틱회귀의 비용함수 이해에 필요한 몇가지 개념에 대한 설명과 지난 일주일간의 검색 과정에서
발견한 몇가지 팁을 설명하는 것 정도로 마무리 해야 할 것 같다.


몇 가지 개념


이미 많은 사람들이 알고 있다시피 기존 선형회귀에서 사용하던 비용함수를 로지스틱회귀에서 그대로 사용할 경우
그래프의 형태가 아래와 같이 표현된다고 한다(함수를 통해 아래 형태의 그래프를 그려보려고 무진 애를 썼으나
결국 실패했다).


선형회귀분석에서 이미 언급했지만 비용 함수라는 것은 예측값과 실제 값의 오차에 대한 제곱 평균을 구하는 것이고
이를 표현하는 함수에 대한 미분을 통해 기울기가 최소가 되는 지점을 찾는 과정이라고 하였다. 그리고 선형회귀분석의
경우 이 비용함수의 그래프가 U자 형으로 하나의 최소 기울기만이 존재하는 형태였다. 그러나 로지스틱회귀의 가설 
함수를 선형회귀의 비용함수에 바로 대입하는 경우에는 위의 그래프와 같이 기울기가 0이되는 지점이 다수 발생한다.
하지만 위의 그래프에서 실제로 최솟값을 갖는 위치는 빨간 점으로 표시된 위치이고 이 지점을 global minimum
이라 말하며 파란색 선으로 표시된 위치들은 비록 기울기는 0이지만 진정한 의미에서의 최솟값은 아니며 이 지점을
local minimum으로 부른다. 문제는 컴퓨터는 계산을 하면서 ‘기울기가 0인 지점’만을 찾게 되기에 local minimum
에서 계산을 멈추는 문제가 발생하게 되는 것이다.


이렇게 하나의 최솟값만을 구할 수 있는 형태의 함수를 convex 함수라고 하고 다수의 local minimum이 존재하는
함수를 non-convex 함수라 한다.


이와같은 이유로 해서 로지스틱회귀에서 사용할 비용함수는 convex 함수가 될 수 있도록 다시 만들어져야 한다.


그래서…로지스틱회귀의 비용함수는?


이미 많은 자료들에서 그 내용을 설명하고 있으니 굳이 내가 재차 설명할 필요는 없을 것 같다. 가장 많이 언급되는
홍콩과기대 김성훈 교수님의 슬라이드를 링크하는 것으로 대신한다.


http://hunkim.github.io/ml/lec5.pdf


다만 이 자료에서 주의할 점이 New cost function for logistic섹션의 함수 표기 중 H(𝑥)는 H(X)로 표기되어야
하는 것이 아닌가 싶은데 바로 다음 장에서 H(𝑥)가 로지스틱회귀 가설함수임을 표시하고 있으므로 그렇게 이해하면
될 것 같다.


결국 실제의 값이 1인 경우와 0인 경우 각각에 대해 로그를 취함으로써 convex 함수 형태를 만들어 비용을 최소화 할
수 있도록 만든 것이다. 간단하게 최종 결과만 보자.


위 식은 다음과 같이 해석된다. 우선 H(𝑥)는 로지스틱회귀의 가설함수임을 주지하자. 그리고 𝑦는 실제의 값이다.
이 실제의 값이 1일 경우 비용함수는 다음과 같이 변한다.



그리고 이 식의 그래프는 다음과 같다.



이 그래프의 x축은 가설함수의 결과 값이고 y축은 비용함수의 결과값이다. 그래프를 보면 직관적으로 알 수 있듯이 
가설 함수의 결과 값이 실제 𝑦의 값인 1인 경우 비용 함수는 최솟값 0을 얻을 수 있다. 하지만 가설함수의 결과 값이
0이 될 경우 비용함수의 결과는 ∞에 수렴하게 되어 엄청난 패널티를 받게 되는 것이다.


반대로 실제 𝑦값이 0인 경우는 이와는 반대로 진행된다. 먼저 𝑦가 0인 경우 비용함수는 다음과 같이 변하며



그래프는 다음과 같다.



이 경우에는 𝑦가 1일 때와 그래프 방향이 반대가 되어 가설함수의 결과 0일 경우 0이 1일 경우 ∞가 되어 역시나 최소
비용을 찾아낼 수 있게 되는 것이다.


desmos 살펴보기


사실 앞서 정리한 내용은 이미 많은 곳에서 더 잘 설명을 하고 있는내용이다보니 굳이 또다시 정리하기가 조금 민망할
정도이다. 그래서 더더욱 non-convex 함수를 그래프로 구현해보고자 했는데 수학적 지식이 일천하다보니 실패하고
말았다. 대신에 이 과정에서 좋은 사이트 하나를 발견하여 소개한다. 함수를 그래프로 표현해주는 웹 기반 서비스이며
이름은 desmos이다. 김성훈 교수님의 자료 중 시그모이드 함수와 그래프를 표시한 부분이 바로 desmos 화면이다.


링크 : https://www.desmos.com


웹 서비스 뿐만 아니라 모바일 앱으로도 같은 서비스를 제공하고 있으며 별다른 비용은 없는 것으로 보인다.
사용법은 비교적 단순한데 아래 동영상을 참고해서 설명을 이해하시도록…



먼저 사이트 접속 후 상단의 ‘Start Graphing’ 버튼을 클릭하면 시작할 수 있다. 회원 가입을 하면 작업했던 그래프를
저장하고 다음에 또 사용할 수도 있다.


우선 시작하게 되면 좌측 영역을 클릭하여 그래프를 그리고자 하는 함수 식을 입력한다. 미지수가 1개인 함수는 바로 
그래프가 그려지지만 미지수가 2개 이상인 경우 기본 미지수를 제외한 나머지에 대해서는 직접 값을 조작할 수 있도록
슬라이드를 생성할 수 있도록 해준다. 처음 식인 W = wx + b에 대해 w와 b는 슬라이드를 생성하였다.


슬라이드는 하단의 슬라이드 컨트롤을 클릭하면 값의 범위와 변화 단게를 설정할 수 있다. 최소 -10 ~ 최대 10, 0.1씩
변화와 같은 식으로 설정한다. 그리고 슬라이드 왼편의 플레이 버튼을 클릭하면 범위 내에서 변화 단계만큼씩 자동으로
변화하면서 그래프를 보여준다.


그리고 이미 생성한 함수를 다시 사용할 수 있다. 두 번째 식인 c = (W-r)에서 W는 앞서 생성한 함수이다. 만일
W 함수의 미지수 슬라이드를 변경하면 W를 사용한 c 함수의 그래프도 같이 변화하는 것이 보일 것이다.


이상이 기본적인 사용법이다.


사실 이 서비스를 이용하여 non-convex 그래프를 그려보려 했지만 뭔가 잘 안되었다. 아래 화면은 내가 시도한
흔적이다.



두 번째 이미지가 non-convex 그래프를 시도한 것인데…뭔가 잘못했나보다…ㅠ.ㅠ


정리


이미 이전에도 겪은 바이지만 무리하게 수학적인 이해를 추구하다보니 불필요하게 많은 시간들을 소모하는 경향이
있다. 그렇다고 완벽한 결론을 얻는 것도 아니고. 아무래도 앞으로는 적당히 수위를 조절해 가면서 버릴 것은 버리고
취할 것은 취해야겠다. 뭐 그래도 궁금한 것은 풀고 넘어가야 직성이 풀리니…


그래도 회귀 분석을 진행하면서 많은 수학적 개념에 대해 이해하게 된 것은 나름 성과라면 성과이다. 특히나 로지스틱
회귀의 경우 이후 신경망에 대한 학습에 매우 중요한 단서를 제공하므로 가능하면 꼼꼼히 알아 둘 필요도 있다고 판단
된다. 동영상 강의도 이제 곧 신경망쪽으로 넘어갈테니 기존 내용을 조금 더 훑어보며 복습을 좀 해야겠다.








블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

머신러닝을 위한 기초 수학 #2

지난 포스팅에서는 선형회귀분석의 가설 함수에 들어있는 개념인 기울기와 절편에 대해 알아보았다.
이번 포스팅에서는 비용함수와 관련하여 ∑ 연산과 제곱함수의 U자 형태 그래프로부터 경사하강법을 이용하여
비용의 최솟값을 찾아내는데 필요한 미분에 대해서 알아보도록 하자.


∑ 연산

∑는 특정 범위 내에 있는 일련의 수들의 합을 표시하는 기호이다. 이 기호를 이용한 수식의 각 항을 보면 아래
그림과 같다.


시그마 기호를 기준으로 밑에는 변화하는 값을 표현할 문자(보통 i나 k를 사용)와 그 시작값을 등호로 연결하여
표시한다. 위 그림과 같이 i = 1이라고 표시하면 i라는 기호는 1부터 시작인 것이다. i = 10이라고 한다면
당연히 i가 10부터 시작된다는 의미이다. 다음으로 기호 위에는 밑에 표시한 기호의 마지막 값을 표시한다. 
이 때는 기호는 생략하고 값만 표시한다. 위 이미지와 같이 문자를 표시하게 되면 임의의 수를 의미하는 것이고
숫자를 표시하면 정확히 그 숫자까지 이다. 간단하게 몇가지 예를 보자.


A는 i가 1부터 50번 째까지 일반항에 해당하는 값들을 더하고 B는 50번 째부터 100번 째까지, 그리고 C는 
100번 째부터 임의 수 m까지 더하는 것이다.


마지막으로 가장 중요한 일반항이며 시그마 기호의 오른쪽에 표시한다. 이 일반항은 보통 i에 대한 식으로 
표현되며 i 자체가 될 수도 있다. 만일 i가 1부터 100번 째까지 더해지는 시그마의 일반항이 i 자체일 경우에는
1부터 100까지의 자연수를 더하라는 의미인 것이다. 아래 몇가지 예를 보자


위 각각의 식을 설명하다면 다음과 같다.

A : 1 + 2 + 3 + 4 + … + 47 + 48 + 49 + 50
B : (a^50) + (a^51) + (a^52) + … + (a^98) + (a^99) + (a^100)
C : (a + 100) + (a + 101) + (a + 102) + … + (a + m -2) + (a + m - 1) + (a + m)
D와 E는 같은 의미로 1번 째 a부터 50번 째 a까지를 모두 더하라는 의미이다.


선형회귀분석의 비용함수 복습


지난 포스팅에서 보았던 비용함수의 수식이다. 우선 앞부분만 떼어놓고 보자면 지난 번 포스팅에도 언급했지만
평균을 의미한다는 것을 알 수 있다. 시그마 기호의 밑이 i = 1이고 위가 m이니 i가 1부터 임의의 수 m까지
변하는 동안 어떤 일반항을 모두 더한 후 다시 m으로 나눈 것이니 바로 평균이 된다. 그리고 여기에서의 일반항은
역시 이미 설명한 바가 있지만 y에 대한 예측값 - 실제 y값 즉, 실제값에 대한 예측값의 오차를 제곱한 것이다.


그리고 이 제곱의 역할로 전체 그래프는 U자형 그래프가 나오는데 지난 시간까지 진행하면서 아직도 이해를 못한
부분이 바로 어떻게 이 U자형의 기울기 중 가장 낮은 지점인 0(제곱 함수이니 0보다 작을 수는 없다)에 접근하는가 
하는 것이다. 이 것을 알기 위해 필요한 것이 바로 미분법이다.


함수의 미분

위에 보았던 비용함수는 반복해서 말하지만 오차에 대한 함수이다. 따라서 값이 가장 작을수록 바람직하다.
다시 말해 전체 수식 중 H(x(i)) - y(i)가 0에 가까울수록 이 함수는 가장 작은 값을 갖게 되는 것이다.
이 것은 U자형 그래프의 가장 오목한 곳이며 바로 y축의 값이 0이되는 지점이다.

참고 : H(x(i))는 선형회귀분석 가설함수의 결과이다. 즉 예측 값인 y이다.


사람의 눈으로는 쉽게 이 지점을 발견할 수 있지만 우리는 컴퓨터에게 이 지점을 찾도록 해야 하며 그러기 위해서는
수학적으로 그 지점을 찾아낼 수 있도록 컴퓨터에게 알려주어야 한다. 그 방법 중에 하나가 바로 기울기를 이용
하는 것이다. 그래프를 봤을 때 x축이 0인 지점에서는 경사가 이루어진 부분이 없으므로 기울기가 0이다. 바로
이 기울기가 0인 지점을 찾으면 되는 것이다. 게다가 우리는 이미 기울기를 어떻게 구해야 하는지도 알고있다.


그런데…
우리가 기울기라 할 때에는 전체 그래프의 어느 지점에서 어떤 범위의 값을 취하더라도 항상 동일한 값이
나와야 한다. 아래 2개의 그래프를 보면서 살펴보자


왼쪽의 직선 그래프를 보면 x1과 x3은 시작점이 서로 다르다. 더군다나 x2 - x1의 값은 x4 - x3의 값보다 작다.
하지만 x1 ~ x2 위치에서 측정한 기울기는 x3 ~ x4 위치에서 측정한 기울기와 동일하다. 하지만 곡선으로 된
그래프의 경우에는 사정이 다르다. 측정하는 지점에 따라 기울기가 다르다. 오른쪽 그래프를 보게 되면 x와 x1의
위치는 다르지만 x ~ x’의 간격과 x1 ~ x’1의 간격은 동일하다. 그러나 직관적으로 보아도 기울기는 정 반대로
표현될 수 있다. x ~ x’에서의 기울기는 x가 증가함에 따라 y는 감소하는 -값의 기울기를 갖는 반면 x1 ~ x’1
에서의 기울기는 x가 증가함에 따라 y도 증가하는 +값의 기울기를 갖는다. 더 어려운 것은 x2 ~ x’2인데 이
범위에서는 양의 값의 기울기와 음의 값의 기울기가 동시에 보인다.


그렇다면 이번에는 x ~ x’ 사이를 반으로 갈라보면 어떨까. 이 그래프는 곡선이기 때문에 나누어진 각각은 다시
서로 다른 기울기 값을 갖게 될 것이다.


이렇게 곡선에서는 그래프 전체를 일관되게 표현해줄 기울기가 존재하지 않는다. 역으로 말하면 무수히 많은 
기울기가 존재한다. 그럼에도 불구하고 우리는 이 곡선의 그래프에서 기울기가 0인 지점 즉, 그래프에서 최소의
값(혹은 다른 상황이라면 최댓값이 될 수도 있다)을 찾아내야 하는 것이다.


그래서 사용하는 것이 바로 미분(微分)이다. 한자의 뜻 그대로 말하자면 아주 작게 나눈다는 것이다. 앞서
설명한 바와 같이 곡선에서는 무수히 많은 기울기가 존재하는데 이는 곧 x의 변화량이 달라질 때마다 각각의
시점에서의 기울기가 다르다는 말이다. 이러한 이유로 특정 지점에서 x의 변화량이 가장 작을 때의 기울기를
구하는 것이 바로 미분이다.


하지만 여기에서도 문제는 발생을 한다. 우리의 좌표계를 실수(實數)계로 놓고 보면 최소값은 무한히 생길 수
있다. 그렇다고 0이되면 안된다. 기울기라는 것이 변화량간의 관계이기 때문에 변화량이 0이라는 것은 하나의
점을 의미하는 것이고 점에 대한 기울기는 있을 수가 없기 때문이다. 여기서 다시 알아야 할 개념이 바로 극한이다.
극한이란 어떤 수가 되면 안되지만 그 수에 가장 가까운 수를 찾기 위한 일종의 편법이라고 할 수 있다(이 때 그
수에 가장 가까이 다가간다고 하는 것을 수렴이라는 용어로 표시한다).

극한 기호 : ∆𝑥는 x의 변화량을 의미하며 →0은 0으로 수렴함을 의미한다. 기호 lim은 limit를 의미한다.



By Brnbrnz - 자작, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=43249235


이와 같이 x의 변화량이 0으로 수렴할 때의 기울기를 찾아내는 것이 미분이고 이 미분을 이용하여 오차 함수의 
U자형 그래프로부터 최소값을 찾아낼 수 있는 것이다.
미분에 대한 추가적인 수학적 설명은 링크로 대신한다.


http://terms.naver.com/entry.nhn?docId=2073828&cid=47324&categoryId=47324

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

선형회귀분석과 관련된 2가지 함수의 의미 정리

이 글은 홍콩 과기대의 김성훈 교수님의 유튜브 강좌를 보고 제 나름대로 조금 더 이해를 하려고 풀어서
정리해본 글입니다.


  • 선형회귀분석 가설함수(Hypothesis function)

선형회귀분석의 기본적인 가설 함수 (Hypothesis function). 기존 데이터를 가장 잘 표현하는 
직선을 결정하는 함수이며 이 직선은 W와 b를 변화시켜가면서 찾을 수 있다. 바로 이 최적의 W와 b를
찾는 것이 선형회귀분석의 목적이다. 그리고 이렇게 찾아진 W와 b를 함수에 대입하게 되면 기존의
데이터가 아닌 새로운 x값이 나타났을 때 그 새로운 x에 대한 y값을 예측할 수 있게 되는 것이다.



이 과정에서 가장 중요한 것은 기울기를 나타내는 W값이다. 즉, 전체적인 데이터가 그래프 상에서
어떤 모양(어떤 기울기의 직선형 그래프)과 가장 유사한가 하는 것을 확인하는 일이며 b는 그렇게
예측된 직선과 실제 데이터간의 오차를 보정해준다고 생각하면 될 것이다.

W의 역할b의 역할



  • 선형회귀분석 비용함수(cost function)



선형회귀분석에서 가장 적절한 W와 b의 값을 찾는 과정에서 변화하는 W와 b의 값을 검증하는 함수.
검증은 아주 상식적이며 단순하다. 우리가 예측할 직선상의 y값(가설함수의 결과인 y값)과 실제 
좌표상의 y값 (우리가 이미 알고있는 실제의y의 값)의 오차가 작으면 작을수록 좋은 값인 것이다.
그래서 우선 H(x(i)) - y(i)라는 공식이 도출된다(H(x(i))는 가설 함수의 결과를 의미한다). 
즉, 이 비용 함수는 ‘오차’에 대한 함수인 것이다.



그런데 이 값을 그냥 사용한 것이 아니라 제곱을 했다. 이 것은 그냥 사용하게 될 경우 이 값은
음수와 양수로 그 부호가 달라진다. 위 그림에서 가설함수인 빨간 선 상의 H(x(i))값에서 a의 y값을
뺄 경우에는 그 결과가 음수가 나오고 b의 값을 뺄 경우에는 양수가 나온다. 각각의 데이터에 대해
이렇게 계산을 한 후 평균을 구하기 위해 합산을 하게 되면 양수와 음수가 상쇄되어 계산에 어려움이
생길 것이다. 따라서 제곱을 함으로써 양의 정수로 만들어주는 것이다. 여기까지 만들어진 공식이
(H(x(i)) - y(i))^2이다. 그리고 이렇게 제곱을 할 경우 결과 값이 크면 클수록 제곱 값은 
기하급수적으로 커지기 때문에 일종이 패널티 역할을 하게 되는 것이다.

이후 공식은 중고등 수학책을 잠시 열어보면 쉽게 알 수 있다. 시그마(∑) 기호는 밑에 있는 i가 1부터
특정 수인 m까지 늘어나는 동안 기호 우측에 있는 계산식을 모두 더하라는 의미이고 수식의 가장
앞의 1/m은 m개의 계산 결과를 더한 것을 다시 m으로 나눈 것이니 바로 평균의 의미가 되는 것이다. 
즉, 이 cost 함수는 예측값과 실제 값의 차(오차)를 제곱한 모든 값의 평균이 되는 것이다.

이렇게 구한 cost 함수의 식을 그래프로 그려보면 다음과 같은 곡선이 만들어진다. 즉, 이 함수는 제곱에
대한 함수이기 때문에 H(x(i)) - y(i)의 절대값이 크면 클수록 cost가 커지고 절대값이 작을 수록 cost가
0에 가까워지는 U자 형태의 그래프로 표현된다.



블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^