티스토리 뷰

머신러닝

Softmax & cross entropy

sh9404 2020. 2. 24. 19:52

로지스틱 회귀와 연결되는 내용이라 할 수 있는 Softmax에 대해 정리해보려 합니다. :)

기존 로지스틱 분류가 이진 분류 (0과 1, 참 거짓) 라면 소프트맥스는 여러개를 분류하는 함수 입니다.

만약 세가지 경우의 수를 비교한다고 했을때, 로지스틱 회귀로도 세가지의 경우를 예측가능 합니다. 만약 각각     A라는 경우, B라는 경우, C라는 경우가 있다고 했을 때, 이진분류로 분별한다 하면 다음과 같이 나타내면 됩니다.

  1. A인 경우와 A가 아닌 경우 
  2. B인 경우와 B가 아닌 경우
  3. C인 경우와 C가 아닌 경우

감이 잘 안오신다면, 그래프로 한번 그려봅시다!

이를 식으로 나타내면, 다음과 같이 행렬곱으로 나타낼 수 있고 각각의 경우에 대한 예측값을 시그모이드함수를 거쳐 1 혹은 0으로 나타내면 여러개의 경우의수도 분류할 수 있습니다. 이를 Multinomial classification이라 합니다. 

출처: 모두의 딥러닝 시즌 1 강좌 Softmax

하지만, 다항분류에서 이런 Multinomial classification은 사용되지 않고, Softmax가 사용되는데요. 이 Softmax함수는 이렇게 생겼습니다. 

이 소프트맥스함수를 사용하게 되면, 각각의 경우의 수가 0~1사이의 숫자로 그 경우의 수 총 합이 1이 되도록 결과값이 나오게 됩니다. 다음과 같이 모든 경우의 수 합이 1이면서, 각각의 경우의 수가 0~1사이인 수로 나오게 되는것이죠! 

이렇게 소프트맥스함수를 거친 결과를 One -Hot Encoding이라는 기법을 통해 나타내면,  [1 0 0]으로 나타낼 수 있습니다. 가장 큰 경우의 수를 1로 두고 나머지는 0으로 처리해버리는 것을 One -Hot Encoding이라고 합니다. 만약 위의 경우가 A B C인 경우의 수라 하면, 각각 [1 0 0] = A, [0 1 0] = B, [0 0 1] = C 가 됩니다.

그럼 이 Softmax함수의 Cost function을 알아볼까요? 이 Cost function을 Cross Entrophy라고 부르는데 다음과 같이 생겼습니다. 

 

f(s)는 아까 봤던 소프트맥스 함수이고, 우측이 비용함수 즉, 크로스 앤트로피 함수인데요.

여기서, t는 정답이고 f(s)는 Softmax를 통해 나온 우리의 예측값 입니다. 우리가 학습시킬때 비용함수가 작아지도록 학습시키기 때문에, 만약 우리의 예측값이 정답과 같다면 저 크로스앤트로피 함수는 작게 나와야 할겁니다. 그렇죠? 선형회귀부터 쭉 이어져오는 개념은 똑같습니다. 정답에 가까워 질수록 비용함수가 작아지는 것! 

한번 진짜 그렇게 되나 볼까요. 저 sum을 빼고 생각해보면, -tlog(H(x))인데, -log(H(x))의 그래프는 앞서 로지스틱 회귀에서도 봤겠지만 이렇습니다. 

단순화 하기 위해 정답이 B = [0 1] 일 때, 각각 우리가 A =[1 0] 이라 예측했을때와 B = [0 1]로 예측했을때 코스트함수는 어떻게 나오나 봅시다!

출처: 모두의 딥러닝 시즌1 강좌

예측값이 정답과 같을때는 0으로 수렴하므로, 비용이 낮아지고 예측값과 정답이 다를경우 무한대로 수렴하는 것 을 볼 수 있습니다.

그럼 이제 코드를 짜서 직접 돌려 봅시다~

hypothesis = tf.nn.softmax(tf.matmul(x, W) + b) 에서 tf.matmul(x, W) + b는 logit이라고 하고  밑에 주석처리 한것 처럼, hypothesis와 cost를 다음과 같이 표현 가능합니다.

logit = tf.matmul(x, W) 

cost_i = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=Y_one_hot)
cost = tf.reduce_mean(cost_i)

19번 행에서 axis = 1 은 행을 의미합니다. 

출력 결과를 살펴보면 

2000번째 출력 때 [2 2 2 1 1 1 0 0]으로 y_data와 같은 것을 알 수 있습니다.

댓글
링크
최근에 올라온 글
최근에 달린 댓글