2018년 2월 24일 토요일

Minimizing the Negative Log-Likelihood, in Korean (3)

* 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)에 들어왔다. 그는 소매 한 짝이 없어진 축구 저지를 입고 있다. 눈에는 멍이 들었고 바지에는 피가 묻어있었다. 이 사람은 오늘 어떤 하루를 보냈을까?
  1. 집에서 책을 읽었을 것이다.
  2. 자전거 경주를 연습 중이었을 것이다.
  3. 축구 경기에서 (타 팀을 경멸하며 모두 종합격투기 선수인) 그의 친구들과 맥주를 마시며 놀았을 것이다.
우리는 현재 우리가 갖고 있는 데이터가 가장 나옴직한 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.

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)를 최소화 하는 것과 동치입니다.

> 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하러 떠나봅시다.
drink and towel

다음 읽을거리





댓글 8개:

  1. 한국어로번역해주셔서감사합니다 대충감은잡히는데 몇번읽어보면서 왜 이런방식을택하는지에대해서 확실히 짚고넘어가야겠습니다

    답글삭제
    답글
    1. 네 저도 글 정리하면서 스스로 공부가 많이 되고 있습니다. 언제나 쉽다고 생각하는 부분에 큰 점프가 있더라구요.

      삭제
  2. 이야 깔끔하네요. 머신러닝 수업 때 베이지안 들으며 머리 터질뻔한게 생각나네요 ㅎㅎ 좋은 글 감사합니다.

    답글삭제
    답글
    1. Unknown님 안녕하세요. 베이지안이 그 기조도 그렇고 참 마음에 드는데 어렵게 설명하는 특징이 있는거 같습니다 ㅎㅎ

      삭제
  3. 안녕하세요. 처음으로 글을 남깁니다.
    좋은 글 잘 보고 있습니다. 제가 일하는데 큰 도움이 되어 요새 특히 자주 들르는 곳이 되었네요. :) 특히 인싸이트를 간파하는 글들이 큰 도움이 됩니다. 아무쪼록 그런 글들을 종종 올려주세요.

    교수님의 글을 보다가 Bayesian이란 말을 보고, Bayesian Belief Networks이란 말을 찾아보게 되었고, 다시 Belief란 말의 의미가 뭘까 찾아보았는데, 잘 모르겠습니다.

    여기에 보면
    https://machinelearningmastery.com/introduction-to-bayesian-belief-networks/
    Bayesian probability is the study of subjective probabilities or belief in an outcome, compared to the frequentist approach where probabilities are based purely on the past occurrence of the event.
    와 같은 부분이 나오는데 "subjective probabilities or belief in an outcome"라는 말이 여전히 감이 닿지 않습니다.

    혹시 belief라는 말은 어떤 의미에서 나온 단어인가요? 무슨 특별한 뜻이 있는 것인지요? 조언에 미리 감사합니다.

    답글삭제
  4. 좋은 글 감사합니다. 머신러닝 공부 중인 대학원생 입니다.
    가우시안 분포를 가정하고, log-likelihood를 최대화화기 위해서 식을 정리하는 과정에서 (linear regression 부분)
    \mu 는 parameterize 되어서 \theta^transpose x_var 가 되는데
    standard deviation은 상수처리되는 이유가 궁금합니다.

    혹시 블로그에 다른 자료에 나와있다면, 참고하겠습니다.

    감사합니다.

    답글삭제