* This is the Korean translation of the original post by will wolf under his permission. You can find the English version at his blog: here. 저자의 허락을 득하고 번역하여 옮깁니다.
저번 글까지 하여 우리는 이제 드디어 parameter의 좋고 나쁨을 정량화할 방법에 대해 얘기해볼 때가 되었습니다.
Loss function
지금까지는 response variable이 어떻게 생성되고 각각의 관찰값에 따라 각 분포에 대한 parameters를 어떻게 계산하는지에 대해 알아보았습니다. 자, 그럼 어떤 parameters가 좋은 것인지 어떻게 정량화할 수 있을까요?
시작하기에 앞서, 잠시 cat or dog를 예측하는 것을 상기해보겠습니다. 만약 우리가 고양이 그림을 모델에게 넣어준다면 다음의 binomial distribution가 주어졌을 때, $\phi\approx0$이도록 계산을 해야겠지요.
$$P(\text{outcome}) =
\begin{cases}
1 - \phi & \text{outcome = cat}\\
\phi & \text{outcome = dog}\\
\end{cases}$$
가장 완벽한 경우, $\phi=0$가 될 것입니다. 그리고 loss function이 우리가 얼마나 답에 가까이 갔는지 정량화해주겠지요.
Maximum likelihood estimation
앞서 글들에서 소개하였던 세 개의 분포들 각각은 $\mu,\phi,\pi$와 같은 parameter를 갖습니다. 임의의 $y$를 주면 각 분포가 현재 우리가 관찰한 값이 나올 확률을 알려주게 되지요. (예를 들어 continuous-valued random variables의 경우, 분포는 확률 밀도 함수가 되고 이 함수가 우리가 찾는 확률 값에 비례하는 어떤 값을 내뱉습니다.)
만약 $y$를 고정하고 parameter 값들이 바뀌도록 설정한다면 같은 함수가 이제는 likelihood function이 됩니다. 이 함수가 하는 일은 고정된 $y$ 값에 대해서 현재 parameter의 likelihood에 대해 알려주는 것이죠.
위에 설명히 명확하지 않다면 아래의 예시들을 생각해보시면 됩니다:
모로코 사람 한 명이 바(bar)에 들어왔다. 그는 소매 한 짝이 없어진 축구 저지를 입고 있다. 눈에는 멍이 들었고 바지에는 피가 묻어있었다. 이 사람은 오늘 어떤 하루를 보냈을까?우리는 현재 우리가 갖고 있는 데이터가 가장 나옴직한 parameter를 고르고 싶을 것이고, 바로 이게 maximum likelihood estimate 입니다. 수학적으로는 다음과 같이 정의할 수 있습니다:
- 집에서 책을 읽었을 것이다.
- 자전거 경주를 연습 중이었을 것이다.
- 축구 경기에서 (타 팀을 경멸하며 모두 종합격투기 선수인) 그의 친구들과 맥주를 마시며 놀았을 것이다.
$$\underset{\text{parameter}}{\arg\max}\ P(y\vert \text{parameter})$$
지금까지 지겹도록 얘기한 것과 같이 $y$는 분포가 받는 parameter에 따라 변합니다. 게다가 이 parameter는 $\eta$라는 항으로 정의가 되었지요. 이어 $\eta=\theta^T x$입니다. 따라서 $y$는 $\theta$와 관측된 데이터 $x$에 대한 함수이죠. 아마도 이것은 여러분이 Day 1부터 알고 있었을 기계 학습의 가장 기본적인 이치일 것입니다.
관측된 데이터는 고정되어있으므로, $\theta$만이 우리가 바꿀 수 있는 유일한 부분입니다. 이에 맞게 위의 argmax 식을 바꾸면 다음과 같습니다:
$$\underset{\theta}{\arg\max}\ P(y\vert x; \theta).$$
다만 $[0,1]$ 안의 값들을 여러 차례 곱하면 값이 매우 빠르게 작아지기 때문에 이런 현상을 방지하기 위해 log-likelihood를 사용하게 되는 것입니다. log의 성질 덕에 곱하기 연산이 더하기로 바뀌게 됩니다.
Linear regression
Gaussian 분포의 log-likelihood를 최대화 해보겠습니다. $x$와 $\theta$가 함께 $\mu$를 만든 다는 것을 기억하세요; $\theta^T x=\mu$.
\begin{align*} \log{P(y\vert x; \theta)} &= \log{\prod\limits_{i=1}^{m}P(y^{(i)}\vert x^{(i)}; \theta)}\\ &= \sum\limits_{i=1}^{m}\log{P(y^{(i)}\vert x^{(i)}; \theta)}\\ &= \sum\limits_{i=1}^{m}\log{\frac{1}{\sqrt{2\pi}\sigma}\exp{\bigg(-\frac{(y^{(i)} - \theta^Tx^{(i)})^2}{2\sigma^2}\bigg)}}\\ &= \sum\limits_{i=1}^{m}\log{\frac{1}{\sqrt{2\pi}\sigma}} + \sum\limits_{i=1}^{m}\log\Bigg(\exp{\bigg(-\frac{(y^{(i)} - \theta^Tx^{(i)})^2}{2\sigma^2}\bigg)}\Bigg)\\ &= m\log{\frac{1}{\sqrt{2\pi}\sigma}} - \frac{1}{2\sigma^2}\sum\limits_{i=1}^{m}(y^{(i)} - \theta^Tx^{(i)})^2\\ &= C_1 - C_2\sum\limits_{i=1}^{m}(y^{(i)} - \theta^Tx^{(i)})^2\\ \end{align*}
따라서 데이터와 $\theta$에 대해 log-likelihood를 최대화 하는 것은 관측된 $y$ 값과 우리가 예측한 값 사이의 negative mean squared error를 최대화 하는 것과 동치입니다.
다만 대다수의 최적화 루틴들이 최소화를 하는 방향으로 설계되어 있으므로 편의를 위해 최소화로 바꾸기만 할 뿐이죠.
> Minimizing the negative log-likelihood of our data with respect to θ is equivalent to minimizing the mean squared error between the observed y and our prediction thereof.
> Minimizing the negative log-likelihood of our data with respect to θ is equivalent to minimizing the mean squared error between the observed y and our prediction thereof.
Logistic regression
Bionomial distribution에 대해 위와 똑같은 방식으로 적용해봅시다.
Negative log-likelihood:
\begin{align*} -\log{P(y\vert x; \theta)} &= -\log{\prod\limits_{i = 1}^m(\phi^{(i)})^{y^{(i)}}(1 - \phi^{(i)})^{1 - y^{(i)}}}\\ &= -\sum\limits_{i = 1}^m\log{\bigg((\phi^{(i)})^{y^{(i)}}(1 - \phi^{(i)})^{1 - y^{(i)}}\bigg)}\\ &= -\sum\limits_{i = 1}^my^{(i)}\log{(\phi^{(i)})} + (1 - y^{(i)})\log{(1 - \phi^{(i)})}\\ \end{align*}
따라서 데이터와 $\theta$에 대해 negative log-likelihood를 최소화 하는 것은 관측된 $y$ 값과 우리가 예측한 값 사이의 binary cross-entropy (i.e. binary log loss)를 최소화 하는 것과 동치입니다.
따라서 데이터와 $\theta$에 대해 negative log-likelihood를 최소화 하는 것은 관측된 $y$ 값과 우리가 예측한 값 사이의 binary cross-entropy (i.e. binary log loss)를 최소화 하는 것과 동치입니다.
> Minimizing the negative log-likelihood of our data with respect to θ is equivalent to minimizing the binary cross-entropy (i.e. binary log loss) between the observed y and our prediction of the probability thereof.
Multinomial distribution
Negative log-likelihood:
\begin{align*} -\log{P(y\vert x; \theta)} &= -\log\prod\limits_{i=1}^{m}\prod\limits_{k=1}^{K}\pi_k^{y_k}\\ &= -\sum\limits_{i=1}^{m}\sum\limits_{k=1}^{K}y_k\log\pi_k\\ \end{align*}
따라서 데이터와 $\theta$에 대해 negative log-likelihood를 최소화 하는 것은 관측된 $y$ 값과 우리가 예측한 값 사이의 categorical cross-entropy (i.e. multi-class log loss)를 최소화 하는 것과 동치입니다.
> Minimizing the negative log-likelihood of our data with respect to θ is equivalent to minimizing the categorical cross-entropy (i.e. multi-class log loss) between the observed y and our prediction of the probability distribution thereof.
Cross-entropy
전에 확률 분포에 내재한 불확실성을 정량화하기 위해 entropy를 정의했던 것과 같이, 하나의 분포로부터 다른 분포의 사건을 예측할 때 내재한 불확실성을 정량화한 것이 바로 cross-entropy입니다.
p = {'red': .25, 'green': .45, 'blue':, .3} q = {'red': .35, 'green': .4, 'blue':, .25}
$$(p, q) = -\sum_i p_i\log(q_i)$$
KL-Divergence
비슷한 방식으로 Kullback-Leibler Divergence도 역시 $q$를 사용하여 $p$를 근사할 때 추가적으로 생기는 불확실성을 정량화합니다.
$$D_{KL}(p, q) = H(p, q) - H(p)$$
이를 기계학습 모델들에서 잘 사용하지 않는 이유는 실제 분포 $p$를 알아야지만 계산이 가능하기 때문이죠. 보통은 $p$를 모르고 있기 때문에 사용을 할 수 없습니다 (애시당초 true $p$를 알고 싶어서 모델을 세우는 것인데 이렇게 되면 주객전도지요 ㅎㅎ).
Maximum a posteriori estimation
$\theta$가 MLE를 바탕으로 estimate될 때는 별다른 제약을 걸지 않았었습니다. 좀 더 구체적으로 얘기하자면, $\theta$가 어떤 실수 값이 나오든 상관이 없었죠 ($0, 10, -20, 2.37\times10^{36}$).
실제로는 이런 가정은 좀 비현실적이기도 하고 군더더기인 부분이기도 합니다. 보통은 $\theta$ (weights)가 유한범위 안에서 값을 갖기를 바라죠. 따라서 이를 위해 $\theta$에 prior 를 두곤 합니다. MLE가 $\underset{\theta}{\arg\max}\ P(y|x;\theta)$일 때, maximum a posteriori estimate (MAP)는 $\underset{\theta}{\arg\max}\ P(y\vert x; \theta)P(\theta)$를 계산하게 됩니다.
앞서와 마찬가지로 log를 씌운 다음 prior와 함께 joint likelihood를 풀면:
\begin{align*}
\theta_{MAP}
&= \underset{\theta}{\arg\max}\ \log \prod\limits_{i=1}^{m} P(y^{(i)}\vert x^{(i)}; \theta)P(\theta)\\
&= \underset{\theta}{\arg\max}\ \sum\limits_{i=1}^{m} \log{P(y^{(i)}\vert x^{(i)}; \theta)} + \log{P(\theta)}\\
\end{align*}
왼쪽 항은 앞서 다뤘던 것과 같고 남은 log prior 부분만 살펴보면 되겠군요.
$\theta$의 모든 항이 continuous-valued 실수값이므로 평균 0과 분산 $V$를 갖는 Gaussian 분포를 할당해보겠습니다.
$$\theta \sim \mathcal{N}(0, V)$$
\begin{align*}
\log{P(\theta\vert 0, V)}
&= \log\Bigg(\frac{1}{\sqrt{2\pi}V}\exp{\bigg(-\frac{(\theta - 0)^2}{2V^2}\bigg)}\Bigg)\\
&= \log{C_1} -\frac{\theta^2}{2V^2}\\
&= \log{C_1} - C_2\theta^2\\
\end{align*}
우리의 목표는 log-likelihood와 함께 위의 항을 같이 $\theta$에 대하여 최대화하는 것입니다. $\theta$를 포함하지 않는 항을 정리하고 나면 다음과 같고:
\begin{align*}
\log{C_1} - C_2\theta^2
&\propto - C_2\theta^2\\
&\propto C\Vert \theta\Vert_{2}^{2}\\
\end{align*}
이것이 바로 L2 regularization라는 것을 아실 수 있습니다. 게다가 $\theta$에 대해 prior distribution을 바꾸면 또다른 regularization이 가능해집니다! 예를 들면 Laplace prior는 L1 regularization을 하는 것과 동치이지요.
따라서 정리해보면, 기계학습에서 weights를 regularize한다고 함은 "no weight becomes too large" 하겠다는 것입니다. 즉 $y$를 예측할 때 너무 큰 영향을 미치지 못하게 만드는 것이죠. 통계적인 관점에서도 똑같이 이런 prior 항이 주어진 범위 내에서 값이 나오도록 제한하는 역할을 한다고 말할 수 있습니다. 이 범위가 scaling constant $C$로 표현되고 prior distribution 자체를 매계변수화합니다. 예를 들어 L2 regularization에서는 이 scaling constant가 Gaussian의 분산을 정하게 됩니다.
Going fully Bayesian
예측 모델의 주요 목표는 다음 분포를 계산하는 것입니다:
$$P(y\vert x, D) = \int P(y\vert x, D, \theta)P(\theta\vert x, D)d\theta$$각 항을 설명해보자면:
- $P(y|x,D)$: 학습 데이터 $D=((x^{(i)},y^{(i)}),\cdots,(x^{(m)},y^{(m)}))$와 새로운 관측값 $x$가 주어졌을 때, response $y$의 값에 대한 분포를 계산하는 것을 뜻합니다.
- 기계학습에서는 보통 해당 분포의 expected 값을 고르게 됩니다 (i.e. a single value, or point estimate).
- $P(y|x,D,\theta)$: 학습 데이터 $D$, 새로운 관측값 $x$, 임의의 가능한 $\theta$ 값이 주어졌을때 (굳이 optimal이 아니더라도) $y$를 계산하는 것을 뜻합니다.
- 보통 주어진 모델에 대한 함수로 나타내지고 linear regression의 경우 $y=\theta^T x$와 같이 나타낼 수 있겠습니다.
- $P(\theta|x,D)$: 학습 데이터 $D$와 새로운 관측값 $x$가 주어졌을 때 우리의 데이터를 설명할 수 있는 $\theta$ 값에 대한 분포를 계산하는 것을 뜻합니다.
- 여기서 x는 아무런 역할을 하지 않습니다. 그저 적분을 할 때 수식적 표현이 맞도록 들어가 있을 뿐입니다.
- 기계학습에서는 MLE 혹은 MAP estimate을 고르게 됩니다 (i.e. a single value, or point estimate).
- $\theta$에 대한 full distribution 을 계산하고,
- 이 분포의 값들과 새로운 관측값 $x$를 가지고 $y$를 계산할 수 있습니다.
- NB: 여기서 $\theta$가 weights이므로 10-feature linear regression에서는 10개의 원소를 갖는 벡터가 됩니다. 신경망에서는 수백만이 되겠지요.
- 이로부터 가능한 모든 response $y$에 대한 full distribution을 얻을 수 있습니다.
아쉽지만 복잡한 시스템들에서는 함수 형태가 계산이 쉽지 않으며 weights의 원소 개수가 매우 많기 때문에 위와 같은 계산이 불가능해집니다. 따라서 fully Bayesian modeling에서는 이런 분포들을 보통 근사를 하여 사용하지요. 전통적인 기계학습에서는 a single value (point estimate)를 할당하구요. 솔직히 썩 마음에 차지는 않지요.
Summary
이번 시리즈물이 기계학습 모델들을 이해하는데 유용한 글이었길 바랍니다. 이런 알고리즘들에 대한 보다 깊은 이해는 사실상 완전히 새로운 것은 없다는 점과 이런 알고리즘들은 보다 나은 방향으로 발전시킬 수 있는 비전을 보여주지요.
긴 글 읽어주셔서 감사합니다. 이제 수영장에서 나와서 타월 하나 집고서 import sklearn하러 떠나봅시다.
다음 읽을거리
- Backpropagation 설명 예제와 함께 완전히 이해하기
- RNN 설명 예제와 함께 완전히 이해하기
- 초짜 대학원생의 입장에서 이해하는 VAE (1)
- 초짜 대학원생 입장에서 이해하는 GANs (1)
- 초짜 대학원생의 입장에서 이해하는 Domain-Adversarial Training of Neural Networks (DANN) (1)
- 초짜 대학원생의 입장에서 이해하는 DCGAN (1)
- 초짜 대학원생의 입장에서 이해하는 Unrolled GAN (1)
- 초짜 대학원생의 입장에서 이해하는 InfoGAN (1)
- 초짜 대학원생의 입장에서 이해하는 LSGAN (1)
- 초짜 대학원생의 입장에서 이해하는 BEGAN (1)
- 초짜 대학원생의 입장에서 이해하는 f-GAN (1)
- 초짜 대학원생의 입장에서 이해하는 EBGAN (1)
- 초짜 대학원생의 입장에서 이해하는 The Marginal Value of Adaptive Gradient Methods in Machine Learning (1)
- 초짜 대학원생의 입장에서 이해하는 SVM (1)