바나나인간 2019. 1. 8. 10:36

출처: https://tensorflow.blog/%ED%95%B4%EC%BB%A4%EC%97%90%EA%B2%8C-%EC%A0%84%ED%95%B4%EB%93%A4%EC%9D%80-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-3/


소프트맥스는 뉴런의 출력 값에 지수함수를 적용하되 모든 뉴런에서 나온 값으로 정규화하는 형태를 가집니다. 예를 들어 강아지에 대한 소프트맥스 출력은 아래와 같습니다.

p_{dog} \,=\, \dfrac{e^z_{dog}}{e^z_{dog}+e^z_{cat}+e^z_{rabbit}} \,=\, \dfrac{e^z_{dog}}{\sum_{i=1}^ne^{z_i}} \;\;,\;\; z = w \times x + b

시그모이드 함수를 적용한 (강아지, 고양이, 토끼) 의 확률이 (0.9, 0.8, 0.7) 인 경우 이를 이용해 z 를 구하면

z = -ln \left( \dfrac{1}{p} - 1 \right) 이므로

(z_{dog}, z_{cat}, z_{rabbit}) = \left( -ln\left(\dfrac{1}{0.9}-1\right) ,-ln\left(\dfrac{1}{0.8}-1\right) ,-ln\left(\dfrac{1}{0.7}-1\right) \right) = (2.2, 1.39, 0.85)

입니다. 여기서 구한 z 값으로 소프트맥스를 적용해 보겠습니다.

\left( \dfrac{e^{2.2}}{e^{2.2}+e^{1.39}+e^{0.85}}, \dfrac{e^{1.39}}{e^{2.2}+e^{1.39}+e^{0.85}}, \dfrac{e^{0.85}}{e^{2.2}+e^{1.39}+e^{0.85}} \right) = (0.59, 0.26, 0.15)

이 됩니다. 같은 방식으로 (0.5, 0.2, 0.1) 인 경우도 구해 보겠습니다.

(z_{dog}, z_{cat}, z_{rabbit}) = \left( -ln\left(\dfrac{1}{0.5}-1\right) ,-ln\left(\dfrac{1}{0.2}-1\right) ,-ln\left(\dfrac{1}{0.1}-1\right) \right) = (0, -1.39, -2.2)

이므로 소프트맥스 함수 값은

\left( \dfrac{e^{0}}{e^{0}+e^{-1.39}+e^{-2.2}}, \dfrac{e^{-1.39}}{e^{0}+e^{-1.39}+e^{-2.2}}, \dfrac{e^{-2.2}}{e^{0}+e^{-1.39}+e^{-2.2}} \right) = (0.74, 0.18, 0.08)

우리가 예상했던 대로 시그모이드 함수로 구한 확률이 (0.9, 0.8, 0.7) 인 것은 소프트맥스로 바꾸었을 때 (59%, 26%, 15%) 정도로 강아지일 가능성을 높게 나타내고 있습니다. 하지만 (0.5, 0.2, 0.1) 인 데이터는 전체적으로 시그모이드 값이 낮음에도 불구하고 소프트맥스로 바꾸었을 때 (74%, 18%, 8%) 로 매우 강하게 이 데이터는 강아지임을 나타내고 있습니다. 이런 이유로 멀티 클래스(multi-class) 분류인 경우 소프트맥스 함수를 자주 사용하고 있습니다.