케이스윔의 개발 블로그

[Lec6-1&6-2] Softmax Regression 개념과 cost function 본문

모두를 위한 딥러닝

[Lec6-1&6-2] Softmax Regression 개념과 cost function

kswim 2018. 5. 7. 15:49

오늘은 여러개의 class가 있을 때 그 중에 어느 class인지를 알아내는 Softmax classification을 공부해보겠다!


이전 시간에 배웠던 Binary classification도 Linear regression에서 시작을 했다. 하지만 H(x)가 0~1 사이의 값이 아니기 때문에 어떤 함수 g(z)를 통해서 0~1 사이의 값을 만들어주었고, 그 함수가 sigmoid 함수였다 오늘은 거기서 더 응용을 해서 여러개의 class를 분류할 수 있도록 해보겠다.

앞으로 수식에서 y는 실제데이터를 의미하고 은 예측값을 의미한다! 위에는.. 모자.. y의 햇이라고 부른다. 귀엽다...


Multinomial classification 

Binary가 아닌 여러개의 클래스로 분류를 하는 것! 만약에 몇시간을 공부했고, 출석시간을 몇번 했을때 A, B, C와 같은 학점을 주자고 하면 binary를 이용해서 3개로 Classification을 할 수 있다. A인지 아닌지, B인지 아닌지, C인지 아닌지!

행렬을 통해서 이 3개의 독립된 classification을 한번에 계산할 수 있지만 마치 독립된 classification 으로 나타낼 수 있다. 이 과정에서 3개는 모두 각각 sigmoid 모듈로 처리를 해서 결과값이 0, 1로 나타나게 해주어야 한다! 이제는 그러면 값이 0 or 1이 아닌 vector로 나타날 것이다!


Logistic classifier를 통해서 sigmoid함수로 원하는 값은 0~1사이의 값이 vector로 나오고, 나온 값들의 합이 모두 1이 되면 좋겠다!

-> 이것이 softmax라는 함수이다. 

3개의 값을 softmax함수에 넣으면 나오는 값들이 0~1사이 값이고, 그 전체 sum이 1이 된당(그렇다면 각각은 확률로 볼 수 있다.)

그 값이 만약 0.7, 0.2, 0.1 이라면 확률로 보고, one-hot encoding을 통해서그 중에 가장 큰 값을 1.0으로 아닌 걸 0.0으로 해준당!



Cost function

S(y)=, L(=y)=실제값 -> 실제값과 예측값의 차이를 보자!

D(S, L) = -시그마(L[i] * log(s[i])) -> log함수를 보면 값이 0일경우 무한대로 커지고 값이 1일경우 0이 됨!


다음과 같이 예측할 경우를 보자! 다음의 L, Y는 행렬이당

L(실제값) = [0 , 1] 이라고 했을 때 다음 예측값들에 대한 cost를 계산할 수 있다.

Y = [0, 1] -> class B로 예측한 것이다. 실제값과 맞은 예측! D(S, L)을 구해보면 [0, 1]⊙-log[0, 1] =[0, 1]⊙[무한대, 0]=0

Y = [1, 0] -> class A로 예측한 것이다. D(S, L) = [0, 1]⊙-log[1, 0] = [0,1]⊙[0, 무한대] = 무한대, 예측이 틀렸을 때 차이를 무한대로 준다!


D의 총합을 개수로 나눠주는 것이 cost function이고 이것도 마찬가지고 Gradient Descent 알고리즘으로 벡터 W를 찾는다!


Comments