logit, sigmoid, softmax의 관계

구국원·2020년 6월 6일
0

왜 NN의 출력층에 sigmoid, softmax 함수를 사용할까요? 이는 출력층의 값을 '확률'로서 표현하기 위한 필연적 결과입니다. 본 글에서는 logit, sigmoid, softmax의 관계에 대해서 정리해보았습니다.

1. Basic

앞으로 내용을 전개할 때 중요하게 사용되는 bayes theorem(베이즈 정리) 및 law of total probability(전확률 법칙)에 대해 간단히 정리하고 넘어가겠습니다.

Bayes Theorem

불확실성 하에서 의사결정문제를 수학적으로 다룰 때 사용하는 것으로 두 확률 변수의 사전 확률과 사후 확률 사이의 관계를 나타내는 수식입니다. 공식은 아래와 같습니다.

P(YX)=P(XY)P(X)P(XY)=P(YX)P(Y)P(YX)=P(XY)=P(XY)P(Y)=P(YX)P(X)P(YX)=P(XY)P(Y)P(X)\begin{aligned} P(Y|X) &= {\cfrac {P(X \cap Y)} {P(X)}} \\ P(X|Y) &= {\cfrac {P(Y \cap X)} {P(Y)}} \\ P(Y \cap X) &= P(X \cap Y) = P(X|Y)P(Y) = P(Y|X)P(X)\\ \therefore P(Y|X) &= {\cfrac {P(X \vert Y)P(Y)} {P(X)}} \end{aligned}
  • P(YX)P(Y|X): 사후확률(posterior probability)
  • P(XY)P(X|Y): 가능도(likelihood)
  • P(Y)P(Y): 확률변수 Y의 사전확률(prior probability)
  • P(X)P(X): 확률변수 X의 사전확률(prior probability)

Law of total probability

표본 공간 SSnn개의 영역으로 나누었을 때, 표본 공간 SS의 사건 AA의 확률은 다음과 같이 구할 수 있습니다.

P(A)=P(AB1)+P(AB2)+...+P(ABn)P(A) = P(A \cap B_{1}) + P(A \cap B_{2})+ ... + P(A \cap B_{n})

2. Logit & Sigmoid

logit은 log odds를 뜻합니다. 이를 이해하기 위해서는 odds에 대한 개념 학습이 선행되어야 하겠습니다. odds란 도박에서 얻을(pay off) 확률과 잃을 확률(stake)의 비율을 뜻합니다. 다시 말해 두 확률의 비를 뜻한다고 생각하면 되겠습니다. 도박이 아니라 NN task에서 흔히 다루는 이진 분류 문제에서 생각해봅시다.

  • Classes:C1,C2Classes: C_{1}, C_{2}
  • Probabiliy of C1 given X:y=P(C1X)Probabiliy \space of \space C_{1} \space given\space X: y=P(C_{1}|X)
  • Probabiliy of C2 given X:1y=P(C2X)Probabiliy \space of \space C_{2} \space given\space X: 1-y=P(C_{2}|X)

우리는 하고자 하는 것은 XX가 어떤 클래스일지 맞추는 간단한 문제를 해결하는 것입니다. 이 경우 우리는 간단하게 P(C1X)=yP(C_{1}|X) = yP(C2X)=1yP(C_{2}|X) = 1-y 중 큰 값을 XX의 클래스로 예측하면 됩니다.

그런데, 앞서 언급한 두 가지 수식을 하나의 수식으로 합쳐서 이와 같은 결정 문제를 표현 할 수 없을까요? 확률의 비인 odds를 통해 해결할수 있습니다. 아래와 같이 말이죠.

odds=y1y=P(C1X)1P(C1X)Choose={C1if y1y>1C2if y1y<1\begin{aligned} odds &= \cfrac{y}{1-y} = \cfrac{P(C_{1}|X)}{1-P(C_{1}|X)} \\\\ Choose &= \begin{cases} C_{1} &\text{if } \cfrac{y}{1-y}>1 \\ C_{2} &\text{if } \cfrac{y}{1-y}<1 \end{cases} \end{aligned}

한편 NN의 출력층의 값의 범위를 살펴봅시다. 출력층의 값을 zz라고 하고, 단순화 시켜서 표현한다면 아래와 같습니다.

z=θ0+θ1x1+...z = \theta_{0}+\theta_{1}x_{1} + ... \\\\

이때 zz 값의 범위는,

<z<-\infty < z < \infty

NN 학습에서 주로 사용되는 손실함수는 크로스 엔트로피입니다. PdataP_{data}는 데이터의 분포이며, PmodelP_{model}은 모델의 예측 분포라고 할 때, 크로스 엔트로피는 다음과 같이 나타낼 수 있습니다.

H(P,Q)=xPdata(x)logPmodel(x)H(P,Q)=−\sum_{x}P_{data}(x)logP_{model}(x)

여기서 중요한 점은 Pdata(x)P_{data}(x)Pmodel(x)P_{model}(x)확률이라는 것입니다. 그렇다면 zz를 어떻게 확률로 개념으로 변환시킬 수 있을까요? 결론적으로 말하면, sigmoidsigmoid 함수를 통해 -\infty ~ ++\infty의 값을 00~11 범위로 변환 할 수 있습니다. sigmoidsigmoid 함수는 logitlogit 함수에서 도출할 수 있습니다.

logits=log(odds)=log(y1y)=log(P(C1X)1P(C1X))\begin{aligned} logits &= log(odds)\\ &= log\bigg(\cfrac{y}{1-y}\bigg) \\ &= log \bigg(\cfrac{P(C_{1}|X)}{1-P(C_{1}|X)} \bigg) \\ \end{aligned}
<logits<+\therefore -\infty < logits < +\infty

logitslogitszz의 범위가 같으니, 두 값을 동치로 놓고, 식을 전개해봅시다.

z=log(y1y), ez=(y1y)\begin{aligned} z &= log \bigg( \cfrac {y} {1-y} \bigg) ,\space e^{z} = \bigg( \cfrac {y} {1-y} \bigg) \\ \end{aligned}
y=ez1+ez=(ez)/ez(1+ez)/ez=11+ez\begin{aligned} y &= \cfrac {e^z} {1+e^z} \\ &= \cfrac {(e^z)/e^z} {(1+e^z)/e^z} \\ &= \cfrac {1} {1+e^{-z}} \end{aligned}

위 식을 볼때, logitsigmoid는 역함수 관계임을 알 수 있으며, 2가지 중요한 사실을 도출할 수 있습니다.

  • logits00~11의 범위를 -\infty ~ ++\infty로 변환
  • sigmoid-\infty ~ ++\infty00~11로 변환

두 함수가 다음과 같은 관계가 있을 때, 두 함수 ffgg를 역함수 관계라고 합니다.

f(x)=yg(y)=xf(x) = y \\ g(y) = x

3. Softmax

softmax는 sigmoid 함수를 클래스가 3개 이상일 때로 일반화 하면 유도할 수 있습니다. simoid를 일반화하면 softmax이며, softmax의 특수한 경우가 simoid 함수입니다. 유도 과정에 간단한 산수적인 테크닉이 필요합니다.

이진 분류일 때, odds는 아래와 같이 정의됩니다.

P(C1X)P(C2X)=ez\cfrac{P(C_{1}|X)}{P(C_{2}|X)} = e^{z}

클래스의 개수가 KK일때로 일반화 하면 위 식은 아래의 형태로 새로 정의할 수 있습니다.

P(CiX)P(CkX)=ezi(1)\tag{1}\cfrac{P(C_{i}|X)}{P(C_{k}|X)} = e^{z_{i}}

양변을 i=1i=1 부터 K1K-1까지 더해보겠습니다.

i=1K1P(CiX)P(CkX)=i=1K1ezi\sum_{i=1}^{K-1} \cfrac{P(C_{i}|X)}{P(C_{k}|X)} = \sum_{i=1}^{K-1} e^{z_{i}}

위 식의 좌항의 분모는 \sum 연산과 관련이 없기 때문에, 아래처럼 도출됩니다.

P(C1X)+P(C2X)+...+P(CK1X)P(CkX)=i=1K1ezi\cfrac{P(C_{1}|X)+P(C_{2}|X)+...+P(C_{K-1}|X)}{P(C_{k}|X)} = \sum_{i=1}^{K-1} e^{z_{i}}

확률의 합은 1이므로, 좌항의 분자를 변형하여 식을 아래와 같이 표현할 수 있습니다.

1P(CKX)P(CkX)=i=1K1ezi\cfrac{1-P(C_{K}|X)}{P(C_{k}|X)} = \sum_{i=1}^{K-1} e^{z_{i}}

P(CKX)P(C_{K}|X)에 대해서 정리하면,

P(CKX)=11+i=1K1ezi(2)\tag{2}P(C_{K}|X)= \cfrac {1} {1+\sum_{i=1}^{K-1} e^{z_{i}}}

(1)(1) 식은 아래와 같이 쓸수 있습니다.

P(CiX)=eziP(CkX)(3)\tag{3} P(C_{i}|X) = e^{z_{i}}P(C_{k}|X)

(2)(2)식을 (3)(3)식에 대입 합니다.

P(CiX)=ezi1+i=1K1eziP(C_{i}|X) = \cfrac {e^{z_{i}}} {1+\sum_{i=1}^{K-1} e^{z_{i}}}

(1)(1)ii대신 kk를 대입하면, ezk=1e^{z_{k}} = 1 이므로, 최종적으로 우리가 익히 아는 softmax 함수를 도출 할 수 있습니다.

P(CiX)=eziezi+i=1K1ezi=ezii=1Kezi\begin{aligned} P(C_{i}|X) &= \cfrac {e^{z_{i}}} {e^{z_{i}}+\sum_{i=1}^{K-1} e^{z_{i}}} \\ &= \cfrac {e^{z_{i}}} {\sum_{i=1}^{K} e^{z_{i}}} \end{aligned}

참고자료

profile
All About Data Science

0개의 댓글