단층 퍼셉트론(SLP) - 이진 판단
이진 판단 문제의 신경망 처리
이진 판단 문제는 예/아니오 혹은 0/1 같은 두 가지 값 중 하나로 답하는 문제다. 가중치와 편향을 이용하는 퍼셉트론의 연산은 두 가지 값으로 결과를 제한하기 힘들다.
이 때문에 선형 연산에서 범위에 제한이 없는 실숫값을 생산하고, 이를 확률값의 성질에 맞게 변환해주는 비선형함수인 시그모이드 함수를 사용한다.
이제 시그모이드 함수에 맞는 손실함수를 정의하여야한다. 즉 값이 0 이상이면서 추정이 정확해질수록 작아지는 성질이 있는 손실 함수를 정의해야한다.
시그모이드 함수에서는 손실함수를 교차 엔트로피로 사용한다. 교차 엔트로피란 두 가지 확률 분포가 얼마나 다른지를 숫자 하나로 표현해주는 것으로, 이진 판단 문제를 다룰 수 있게 되었다.
왜 시그모이드 함수에 MSE를 사용하면 안되는지는 시그모이드 함수를 살펴보고 정리하자.
시그모이드 함수
시그모이드 함수는 범위에 제한이 없는 임의의 실숫값을 입력으로 받아 확률값의 범위에 해당하는 0과 1 사이의 값을 출력하는 함수이다. $\sigma (x)$ 로 표현한다. 여기서 입력x를 확률값의 logit 표현이라고 한다.
로짓값은 상대적이다. A 확률의 로짓값이 5, B확률의 로짓값이 2라면 A확률은 B확률보다 $e^{5-2} = e^3$ 배 정도 크다.
시그모이드 함수는 입력값을 답이 참일 가능성을 로짓으로 표시한 값으로 간주한다. 이때 답이 거짓일 경우의 로짓값을 0으로 간주한다.
예를 들어 A일 가능성의 로짓값이 0.5일 경우 A가 아닐 가능성의 로짓값은 0이고 두 확률의 합은 1이어야되므로, $e^{0.5}$ 와 $e^0$ 의 합 대비 $e^{0.5}$ 와 $e^0$ 의 비율을 보면된다. 따라서 A일 확률은 $\frac{e^{0.5}}{e^{0.5} + 1}$ 이고, A가 아닐 확률은 $\frac{1}{e^{0.5} + 1}$ 이다.
이를 일반화하면 답이 참일 가능성의 로짓값 x, 답이 거짓일 가능성의 로짓값을 0이라 할때 답이 참일 확률은 $\frac{e^x}{e^x + 1}$ 이고 분모와 분자를 $e^x$ 로 나누면 $\frac{1}{1+e^{-x}}$ 이다. 따라서 시그모이드 함수는 다음과 같이 정의된다.
\[\sigma (x) = \frac{1}{1+e^{-x}}\]또한 시그모이드 함수의 그래프는 아래와 같다.
(사진1 : 시그모이드 함수의 그래프: Powered by desmos)
또한 0.51의 확률로 참을 선택하는 것과 0.99의 확률로 참을 선택하는 것은 의미가 다르다. 0.51의 확률로 참을 선택했을 때보다, 0.99의 확률로 참을 선택했는데 거짓일 경우 더 많은 파라미터 수정이 이루어져야한다. 그러나 시그모이드 함수에 MSE를 적용하면 그것이 불가능하다.
(사진2: 시그모이드 함수에 MSE를 적용한 그래프, 실제 확률이 1이라고 가정, 입력 데이터의 로짓값이 3이라고 하였을 때 w에 따른 손실함수)
(사진3: 시그모이드 함수에 MSE를 적용한 그래프, 실제 확률이 0.5이라고 가정, 입력 데이터의 로짓값이 3이라고 하였을 때 w에 따른 손실함수)
위 두 그래프는 시그모이드 함수에 MSE를 적용한 그래프( $ y=(\frac{1}{1+e^{-wx_i}}-y_i)^2 $ )로, w에 따른 손실함수를 나타내고있다. 위 두 그래프에서 알 수 있듯, 손실함수가 클수록 파라미터가 대폭 수정될려면 손실함수가 클때 기울기가 커야하지만, 기울기가 작다. 따라서 손실함수가 클때, 학습속도가 대단히 느려지거나 기울기를 0으로 인식하여 학습을 멈출 수도 있다. 따라서 시그모이드 함수에 MSE를 적용하는 것은 하지 않는 것이 좋다.
시그모이드 함수의 미분
시그모이드 함수의 미분은 다음과 같이 구할 수 있다. $y=\frac{1}{g(x)}$ 일때
\[y'=\frac{-g'(x)}{g(x)^2}\]이므로
\[\sigma ' (x) = \frac{-(1+e^{-x})'}{(1+e^{-x})^2} = \frac{e^{-x}}{(1+e^{-x})^2} = \frac{(1+e^{-x})-1}{(1+e^{-x})^2} = \frac{1}{1+e^{-x}} (1- \frac{1}{1+e^{-x}}) = \sigma (x) (1-\sigma (x))\]따라서 시그모이드 함수의 미분은
\[\sigma ' (x) = \sigma (x) (1-\sigma (x))\]이다.
확률 분포와 정보 엔트로피
정보 엔트로피란 확률 분포의 무질서도나 불확실성 또는 정보 표현의 부담정도를 나타내는 것이다.
확률에 따라 무작위적으로 일어나는 사건의 결과를 효율적으로 표현해야한다고 할 때 예를 들어 사건 A와 사건 B가 동일한 확률 $\frac{1}{2}$의 확률로 일어난다면 A를 0으로, B를 1로 표현하면 된다. 또한 사건 A,B,C,D가 동일한 확률 $\frac{1}{4}$ 의 확률로 일어난다면 각각 00,01,10,11로 표현하면 된다.
그러나 사건 A,B,C가 동등한 확률로 일어날 때는 각각 00,01,10으로 표현하면 낭비가 발생한다. 왜냐하면 사건 3개를 표현하는 최소한의 비트 수는 $\log _2 3$ 이기 때문이다.
일반적으로 어떤 사건이 각각 $\frac{1}{a_1}, \frac{1}{a_2},…,\frac{1}{a_m}$ 확률로 일어날때 다음과 같이 정보량을 구할 수 있다.
\[\frac{1}{a_1} \log _2 a_1 + \frac{1}{a_2} \log _2 a_2 + ... + \frac{1}{a_m} \log _2 a_m = \sum \frac{1}{a_i} \log _2 a_i\]으로 구할 수 있다.
예를 들어 세 가지 결과가 각각 0.5, 0.25, 0.25 의 확률로 일어난다면 사건의 정보량을 위의 공식에 대입하면 1.5가 나온다. 이 정보량 1.5는 이 사건을 표현하기 위한 최소한의 정보량이며, 아래 허프만 코드를 보면서 더 논의한다.
허프만코드는 표현하려는 대상의 분포비율을 조사해 자주 나타나는 대상에는 짧은 이진 코드를, 덜 나타나는 대상에는 긴 이진 코드를 할당해 전체 비트수를 줄여주는 것이다. 세 가지 사건 A,B,C가 각각 0.5,0.25,0.25의 확률로 일어날때 각각 0, 10, 11을 할당해주면, 0.5의 확률로 자주 일어나는 사건은 1비트로 표현되면서 정보량이 줄어든다. 즉 1비트 * 0.5 + 2비트 + 0.25 + 2비트 * 0.25 = 1.5비트이므로, 이는 위에서 구한 정보량과 동일하다.
(비트를 0 1 10으로 할당할 수는 없는데, ‘10’이 사건A와B를 나타내는 것인지, 아니면 사건 C만 나타내는 것이 알 수 없기 때문이다.)
허프만 코드를 구하는 방법은 다음 링크를 참고하면 된다. https://lipcoder.tistory.com/187
이제 어떤 사건의 확률 $p_i = \frac{1}{a_i}$ 임을 이용해 다음과 같이 정보 엔트로피 H를 표현할 수 있다.
\[H = \sum p_i \log _2 \frac{1}{p_i}\]로그의 성질을 이용하여 다음과 같이 바꿀 수 있다. 또한 로그의 밑이 바뀌어도 대소관계는 유지되므로, 상용로그나 자연로그를 이용하여 다음과 같이 표현할 수 있다.
\[H =- \sum p_i \log p_i\]확률 분포의 추정과 교차 엔트로피
교차 엔트로피는 두 가지 확률 분포가 얼마나 비슷한지를 숫자 하나로 나타내는 개념이다. 앞서 정보 엔트로피에서 $-\log p_i$ 는 정보량이라고 볼 수 있다. 여기에 각각의 확률을 곱하여 더하면(가중평균하면) 정보량의 기댓값이다. 따라서 정보 엔트로피는 정보량의 기댓값으로 볼 수 있다.
교차 엔트로피는 정보량을 제공하는 확률 분포와 가중 평균 계산에 사용하는 확률 분포를 다르게 한 것이다. 확률 분포 Q의 정보량과 확률 분포 P의 가중평균 $H(P,Q) = -\sum p_i \log q_i$ 를 P에 대한 Q의 교차 엔트로피이다.
언제나 $H(P,Q)\geq H(P,P)$ 이고 P와 Q의 확률 분포가 닯아갈 수록 작아지기 때문에, 두 확률 분포가 서로 얼마나 다른지를 나타내준다.
(사진4 : 실제 확률분포가 (0.6,0.4)일때 예측확률분포 Q(x,1-x)에 따른 교차엔트로피의 값)
사진4는 실제 확률분포가 (0.6,0.4)일때 예측확률분포 Q(x,1-x)에 따른 교차엔트로피의 값으로, 실제 확률분포에 가까워질수록 값이 작아지며, 실제 확률분포에서 멀어질수록 값이 커지고 기울기도 커지는 것을 알 수 있다.
딥러닝 학습에서의 교차 엔트로피
딥러닝의 추정확률분포 Q와 실제 확률 분포 P가 있다고 할 때, H(P,Q)를 계산하거나 추정을 할 수 있다면 교차 엔트로피값이 작아지는 쪽으로 P를 수정함으로써 확률 분포 P를 확률 분포 Q에 가깝게 접근시켜 갈 수 있다.
그러나 실제 학습에서는 2가지 어려움이 있는데, 첫번쨰는 확률 분포 Q를 정확히 알지못한다는 것과, Q를 구한다고 해도 전체 데이터의 확률 분포를 보여주지 않는다는 점이다.
두번쨰 어려움은 Q는 고정된 확률 분포가 아니라 입력에 따라 달라지는 확률분포라는 점이다.
이를 해결하기 위해딥러닝에서는 주어지는 레이블 정보를 입력에 따른 확률 분포 P로 재해석하고 이를 이용해 교차 엔트로피를 계산한다. 에를 들어 동전 앞면이 나오면 확률 분포를 (1,0), 동전 뒷면이 나오면 확률 분포를 (0,1)로 보는 것이다(따라서 정답 확률 분포는 P로 배치해야한다. Q로 배치하게 되면, $log q_i$ 에서 0이나 무한대가 출력되어 계산에 오류가 생기기 때문이다.).
이진 판단 딥러닝에서는 출력의 확률 분포를 추정하게 된다. 교차 엔트로피를 줄이는 학습을 통해 입력에 알맞은 조건부 확률 분포를 만들어 낸다.
시그모이드 교차 엔트로피와 편미분
이진 판단 문제에 대한 학습 데이터의 정답으로 z(보통 0또는 1값만 제공)가 주어지는데, 정답이 나타내는 확률 분포와 신경망이 추정하는 확률 분포 사이의 교차 엔트로피는 다음과 같다(데이터의 결과가 참일 확률을 z, 거짓일 확률을 1-z, 신경망 회로의 출력이 로짓값 x일때 참일 확률 $\sigma (x)$, 거짓일 확률을 $1- \sigma(x)$ 로 한 것이다. 여기서 참 거짓은, 예를 들어 이 별이 펄서일 확률과 펄서가 아닐 확률 등을 의미하는 것이다.).
\[H= x-xz+\log (1+e^{-x})\]이는 다음 식을 정리한 것이다.
\[H = -z \log (\frac{1}{1+e^{-x}}) - (1-z) \log (1- \frac{1}{1+e^{-x}})\]또한 시그모이드 함수에 대한 교차 엔트로피의 편미분은 아래와 같다.
\[\frac{\partial H}{\partial x} = -z + \sigma (x)\]이는 다음 식을 정리한 것이다.
\[\frac{\partial H}{\partial x} = \frac{\partial}{\partial x} (x-xz+\log (1+e^{-x}))\]계산값 폭주 문제와 시그모이드 관련 함수의 안전한 계산법
시그모이드 함수는 앞서 다음과 같이 정의된다고 하였다.
\[\sigma (x) = \frac{1}{1+e^{-x}}\]파이썬에서 로짓값 x가 양수일 때는 괜찮지만, 음수일 때는 예를 들어 -1000일때 $e^{1000}$ 는 파이썬에서 처리할 수 없는 큰 값이여서 inf로 표시하고, 결과적으로 시그모이드함수의 결과값이 0이 나오게 된다. 따라서 $e^{-x}$ 가 $e^x$ 가 되도록 식을 변형시켜야 한다. 아래와 같이 변형시킬 수 있다.
\[\sigma (x) = \frac{e^x}{1+e^x}\] \[H = x-xz+ \log (1+e^{-x}) = -xz + log e^x(1+e^{-x}) = -xz + \log (e^x + 1)\]즉 x가 양수일 때는 원래식을, x가 음수일 때는 위 식으로 처리하면 된다. 위 두 식을 하나로 합치면 다음과 같이 된다.
\[\sigma (x) = \frac{e^{-max(x,0)}}{1+e^{-|x|}}\] \[H = max(x,0) - xz + \log (1+e^{-|x|})\]Reference
- 윤덕호 저, [파이썬 날코딩으로 알고 짜는 딥러닝], 한빛미디어, 2019
댓글남기기