Softmax와 Cross entropy

컴퓨터공부/인공지능 2017. 8. 3. 20:36 Posted by 아는 개발자

학습시키는 데이터의 Feature가 3가지이고 이 데이터들을 총 3개의 분류로 나눈다고 해봅시다. 이때 우리는 하나의 feature에 대하여 총 3가지로 분류해줄 weight값이 필요합니다. 만약 데이터의 Feature들을 x1, x2, x3라고 표현하면 x1이 첫번째 분류, 두번째 분류 그리고 세번째 분류로 나눠 질 수 있도록 값을 조정하는 weight값이 필요하게됩니다. 그림으로 표현하면 더 알아보기 쉽습니다.



x1, x2, x3의 집합을 X, Wi,j값의 집합을 W, bi의 집합을 B로 표현하면 위 식은 S = Wx + B로 표현 할 수 있겠네요. 그리고 이 값이 가장 큰 것으로 분류되게 됩니다.


하지만 학습을 하려면 내가 낸 결과물이 얼마나 비슷한지도 알아야합니다. 내가 고른 값이 옳다 하더라도 50% 확률로 맞췄는지, 70% 확률로 맞췄는지에 따라서 얼만큼 잘 맞추고 있는지 확인 할 수 있으니까요. 이때 출력된 데이터 값(S라고 하겠습니다)을 0~1 사이의 값으로 표현해주는 방법이 softmax입니다. 식으로 표현하면 이렇습니다.


추측하는 분류의 S exponential 값에서 전체 S exponential 합을 나눠주는 방식입니다. 만약 S값이 2, 1, 0으로 나왔다면 softmax를 거친다면 0.7, 0.2, 0.1로 변형됩니다. 그래도 2가 가장 큰 것은 변함이 없죠? 단지 70%의 확률로 맞췄다고 보게 되는거지요. 학습데이터에 얼마나 가까워졌는지 정도를 보여주는 방법입니다. 이렇게 데이터를 보는 방식을 바꾸면 나중에 Weight값을 조정할 때 큰 도움이 됩니다.



이 값을 토대로 비용함수를 구하는 방식이 Cross entropy입니다. 위키 백과에 있는 세부 이론까지 세세히 들어가면 너무 복잡하니 간단히 식과 여기에 무엇을 대입해야 할지만 알아보겠습니다.


위 식을 보면 p(x)와 q(x)가 있는데요 여기서 우리는 p(x)에 실제 분류 값을 쓰고 q(x)는 softmax 결과값(Y)를 대입하게 됩니다. 요렇게요



좀더 정확하게 맞출 수록 H(p,q)의 값이 감소하게 됩니다. 즉 위 값, 비용 총합을 최소화하는 것이 위 작업의 목표지요. 이것도 Gradient Descent 방식으로 최적화가 이뤄집니다. 하지만 이건 생략하고 느낌만 가져가죠. 나머지는 tensorflow해서 해줄거니까요. 그냥 이렇게 작동하는구나 정도만 알고 갑시다.


tensorflow에서는 softmax_cross_entropy_with_logits 함수로 한방에 끝내버립니다.

 
 tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))


참고자료

  • https://www.tensorflow.org/get_started/mnist/beginners


'컴퓨터공부 > 인공지능' 카테고리의 다른 글

뉴럴네트워크(Neural Network)  (0) 2017.08.18
오버피팅(Overfitting)  (0) 2017.08.10
숫자인식 코드 분석해보기  (2) 2017.08.03
Softmax와 Cross entropy  (0) 2017.08.03
Logistic Regression (로지스틱 회귀)  (0) 2017.07.31
Linear Regression (선형회귀)  (0) 2017.07.28