Link

수식: MLE

이번에는 수식과 함께 심층신경망의 출력이 어떻게 MLE에 활용되는지 살펴보도록 하겠습니다. 먼저 다음의 그림과 같이 신경망의 분류 문제를 풀기 위해 구성되어 있고, 마지막 계층은 소프트맥스softmax 계층으로 되어 있다고 생각해보도록 하겠습니다.

그럼 소프트맥스 계층으로부터 출력된 벡터 $\hat{y}_i$ 의 각 차원들은 미리 지정된 클래스에 대한 확률 값을 담고 있을 것입니다. 다음과 같이 수집된 데이터 쌍이 N개가 있다고 할 때,

\[\begin{gathered} \mathcal{D}=\{(x_i,y_i)\}_{i=1}^N \end{gathered}\]

우리가 찾고자하는 파라미터는 다음과 같이 NLL 함수를 최소화하는 파라미터가 될 것입니다.

\[\begin{gathered} \hat{\theta}=\underset{\theta\in\Theta}{\argmin}{ -\sum_{i=1}^N{ \log{P(y_i|x_i;\theta)} } } \end{gathered}\]

그럼 여기서 심층신경망의 출력 벡터 $\hat{y}i=f\theta(x_i)$ 는 소프트맥스 함수의 출력값이므로, 벡터의 각 차원은 클래스에 대한 확률 값을 담고 있고, 이것은 이산 확률 분포로 생각할 수 있습니다. 그럼 로그 가능도 $\log{P(y_i|x_i;\theta)}$ 는 다음과 같이 구할 수 있습니다.

\[\begin{gathered} \log{P(y_i|x_i;\theta)}=\hat{y}_i^\intercal\cdot\log{y_i} \end{gathered}\]

이것을 실제 벡터 수준에서 예제를 들어 살펴보면 다음과 같이 진행될 것입니다. 예를 들어 다음과 같이 정답 벡터 $y_i$ 와 출력 벡터 $\hat{y}_i$ 가 있다고 할 때,

\[\begin{gathered} y_i=\begin{bmatrix} 0 \\ 0 \\ 1 \\ 0 \end{bmatrix} \text{ and } P_\theta(\cdot|x_i)=\hat{y}_i=\begin{bmatrix} .2 \\ .1 \\ .65 \\ .05 \end{bmatrix}. \end{gathered}\]

앞에서의 수식에 따라 내적을 취하면 다음과 같이 로그 가능도를 계산할 수 있습니다.

\[\begin{aligned} y_i^\intercal\cdot\log{\hat{y}_i}&=[0,0,1,0]\times\log{\begin{bmatrix} .2 \\ .1 \\ .65 \\ .05 \end{bmatrix}} \\ &=0\times\log{0.2}+0\times\log{0.1}+1\times\log{0.65}+0\times\log{0.05} \\ &=\log{0.65} \\ &=\log{P(\text{y}=2|x_i;\theta)} \end{aligned}\]

교차 엔트로피와 NLL

앞서 우리는 분류 문제에 대해서 배울 때, 교차 엔트로피cross entropy에 대해서 이야기하였습니다. 교차 엔트로피의 수식은 다음과 같습니다.

\[\begin{gathered} \text{CE}(y_{1:N},\hat{y}_{1:N})=-\frac{1}{N}\sum_{i=1}^N{ y_i^\intercal\cdot\log{\hat{y}_i} } \end{gathered}\]

교차 엔트로피를 통해 심층신경망을 학습하기 위해 파라미터 $\theta$ 에 대한 손실 함수로 구성하면 다음과 같을 것입니다.

\[\begin{gathered} \mathcal{L}_\text{CE}(\theta)=-\frac{1}{N}\sum_{i=1}^N{ y_i^\intercal\cdot\log{f_\theta(x_i)} } \end{gathered}\]

위에서 살펴본 NLL 손실 함수와 굉장히 유사한 형태가 나오지 않았나요? 사실 $\frac{1}{N}$ 의 경우에는 상수이므로 존재 유무가 거의 아무런 상관이 없습니다. 이처럼 교차 엔트로피 손실 함수를 통해 심층신경망을 학습하는 것은 NLL 손실 함수 및 MLE를 통해 심층신경망을 학습하는 것과 같습니다.