2018년 2월 5일 월요일

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

* 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. 저자의 허락을 득하고 번역하여 옮깁니다. 

저번 글에 이어서 output 함수들이 왜 그런 형태로 나오는지 알아보도록 하겠습니다. 잠시 복습을 하고 넘어가시죠!

Functional form


이 글에서 다루고 있는 세 모델들은 각각 서로 다른 함수를 바탕으로 예측을 하는데요:  각각 identity function (i.e. no-op), sigmoid function, and softmax function. Keras로 output layer를 만들어보면 명확합니다:
output = Dense(1)(input)
output = Dense(1, activation='sigmoid')(input)
output = Dense(3, activation='softmax')(input)
이 단락에서는,
  • Gaussian, binomial 그리고 multinomial distributions가 같은 functional form으로 나타낼 수 있다는 것을 보이겠습니다. 
  • 이 common functional form에서 세 모델들의 output function (identity, sigmoid, softmax)가 자연스럽게 유도된다는 것을 보이겠습니다. 

마치 다음 그림과 같이 생각할 수 있겠네요. 세 가지 분포가 들어가서 세 가지 output functions이 나오는 것이죠. (그림이 이상한데? -_-; 뭐 아무튼 하나의 functional form으로 설명이 가능해서 저렇게 표현할 수 있다고 생각하면 될 듯합니다.)


bottleneck

여기서 병목에 해당하는 개념은 확률 분포의 "exponential family"가 되겠습니다.

Exponential family distributions

In probability and statistics, an exponential family is a set of probability distributions of a certain form, specified below. This special form is chosen for mathematical convenience, on account of some useful algebraic properties, as well as for generality, as exponential families are in a sense very natural sets of distributions to consider.
- 위키피디아
저(글쓴이)는 위의 설명을 그리 좋아하지 않습니다. 매우 모호하다는 점에서 특히 더 그렇습니다. 여기서 진실은 exponential functions이 우리가 잘 알고 사용하기 좋아하는 고전적인 activation과 loss functions을 하나의 틀에서 유도하는데 매우 좋은 도구라는 점입니다. 저는 "mathematical convenience, on account of some useful algebraic properties, etc." 부분에 좀 더 집중해서 "certain form"이라는 것이 괴랄한 이유로 만들어진 것이 아니란 점을 얘기하고자 합니다.

Exponential family에 속하는 분포는 다음과 같은 형태로 나타낼 수 있습니다:
$$P(y; \eta) = b(y)\exp(\eta^T T(y) - a(\eta))$$ 여기서
  • $\eta$는 분포의 canonical parameter입니다 (We will hereby work with the single-canonical-parameter exponential family form).
  • $T(y)$는 sufficient statistic입니다. (많은 경우 $T(y)=y$입니다.)
  • $a(\eta)$는 log partition function으로써 분포를 정규화하는데 쓰입니다. (더 깊은 논의는 다음 포스팅에서 보실 수 있습니다: Deriving the Softmax from First Principles.)

따라서 $T,a,b$를 정하면 분포의 family (or set)가 정해지고 이는 $\eta$로 parameterized 됩니다. 우리가 $\eta$를 바꿀 때마다 해당 familiy 안의 다른 분포를 만들 수 있겠죠. 이는 $Pr(heads)=0.6$인 동전이 $Pr(heads)=0.7$인 동전과는 다른 분포를 갖는 것으로 설명할 수 있습니다.

어때요, 참 쉽죠?

그럼 하나씩 살펴볼까요?

Gaussian distribution


편의를 위해 여기서는 단일 매계변수 형태를 다루고 있기 때문에 $\sigma^2$가 $1$로 알려져있다고 가정해보겠습니다.
$$\begin{align*}
P(y\vert \mu, \sigma^2)
&= \frac{1}{\sqrt{2\pi\sigma^2}}\exp{\bigg(-\frac{(y - \mu)^2}{2\sigma^2}\bigg)}\\
&= \frac{1}{\sqrt{2\pi}}\exp{\bigg(-\frac{(y - \mu)^2}{2}\bigg)}\\
&= \frac{1}{\sqrt{2\pi}}\exp{\bigg(-\frac{1}{2}(y^2 - 2\mu y + \mu^2)\bigg)}\\
&= \frac{1}{\sqrt{2\pi}}\exp{\bigg(-\frac{1}{2}y^2\bigg)} \cdot \exp{\bigg(\mu y - \frac{1}{2}\mu^2\bigg)}\\
\end{align*}$$ 여기서,
  • $\eta=\mu$ 
  • $T(y)=y$
  • $a(\eta) = \frac{1}{2}\mu^2$
  • $b(y) = \frac{1}{\sqrt{2\pi}}\exp{(-\frac{1}{2}y^2)}$

라고 해보겠습니다.

마지막으로 $a(\eta)$는 다음과 같습니다:
\begin{align*}
a(\eta)
&= \frac{1}{2}\mu^2\\
&= \frac{1}{2}\eta^2
\end{align*}

Binomial distribution


이항 분포에 대해 앞서 글에서 정의한 적이 있었죠? 여기서는 좀 더 단순하게 나타내서 이항 분포가 실제로 exponential familiy에 속한다는 것을 보일 것입니다. 여기서 $\phi$는 true class를 관측할 활률입니다. 즉, $Pr(cat) = 0.7 \implies \phi = 0.3$
\begin{align*}
P(y\vert \phi)
&= \phi^y(1-\phi)^{1-y}\\
&= \exp\bigg(\log\bigg(\phi^y(1-\phi)^{1-y}\bigg)\bigg)\\
&= \exp\bigg(y\log{\phi} + \log(1-\phi) - y\log(1-\phi)\bigg)\\
&= \exp\bigg(\log\bigg(\frac{\phi}{1-\phi}\bigg)y + \log(1-\phi)\bigg) \\
\end{align*}
여기서,
  • $\eta = \log\bigg(\frac{\phi}{1-\phi}\bigg)$ 
  • $T(y)=y$
  • $a(\eta) = -\log(1-\phi)$
  • $b(y) = 1$

입니다. (어? 여기서 $\phi$가 $\eta$에 대한 sigmoid 함수라는 걸 눈치채신 분?)

마지막으로 분포의 매계변수 $\eta$에 대해 $a(\eta)$를 나타내면:
$$\eta = \log\bigg(\frac{\phi}{1-\phi}\bigg) \implies \phi = \frac{1}{1 + e^{-\eta}}$$
\begin{align*}
a(\eta)
&= -\log(1-\phi)\\
&= -\log\bigg(1-\frac{1}{1 + e^{-\eta}}\bigg)\\
&= -\log\bigg(\frac{1}{1 + e^{\eta}}\bigg)\\
&= \log(1 + e^{\eta}).\\
\end{align*}


Multinomial distribution


이항 분포처럼 다항 분포를 좀 더 단순한 형태로 표현해보겠습니다. $\pi$가 $K$ classes의 class 확률들의 벡터라 할 때, (여기서 $k$가 각 class들을 의미합니다.)
$$P(y\vert \pi) = \prod\limits_{k=1}^{K}\pi_k^{y_k}$$
복잡하게 보일 수 있지만 사실 저 수식이 의미하는 바는 $Pr(y=k)$가 class $k$에 대한 확률이라는 뜻입니다. 예를 들어,
p = {'rain': .14, 'snow': .37, 'sleet': .03, 'hail': .46}
일 때, 다음과 같이 계산하면 된다는 말이죠:
\begin{align*}
\Pr(y = \text{snow} = [0, 1, 0, 0])
&= (.14^0 * .37^1 * .03^0 * .46^0)\\
&= .37\\
\end{align*}
다시 exponential family 형태로 돌아가서 확장해보면:
\begin{align*}
P(y\vert \pi)
&= \prod\limits_{k=1}^{K}\pi_k^{y_k}\\
&= \exp\bigg(\sum\limits_{k=1}^{K}y_k\log{\pi_k}\bigg)\\
&= \exp\bigg(\sum\limits_{k=1}^{K-1}y_k\log{\pi_k} + \bigg(1 - \sum\limits_{k=1}^{K-1}y_k\bigg)\log\bigg(1 - \sum\limits_{k=1}^{K-1}\pi_k\bigg)\bigg)\\
&= \exp\bigg(\sum\limits_{k=1}^{K-1}y_k\log{\pi_k} - \bigg(\sum\limits_{k=1}^{K-1}y_k\bigg) \log(\pi_K) + \log(\pi_K)), \quad \text{where}\ \pi_K = 1 - \sum\limits_{k=1}^{K-1}\pi_k\\
&= \exp\bigg(\sum\limits_{k=1}^{K-1}\log\bigg(\frac{\pi_k}{\pi_K}\bigg) y_k + \log(\pi_K)\bigg)
\end{align*}
여기서,
  • $\eta = \log\bigg(\frac{\pi_k}{\pi_K}\bigg)$ 
  • $T(y)=y$
  • $a(\eta) = -\log(\pi_K)$
  • $b(y) = 1$

마지막으로,
\begin{align*}
\eta_k
  &= \log\bigg(\frac{\pi_k}{\pi_K}\bigg) \implies\\
\frac{\pi_k}{\pi_K}
  &= e^{\eta_k} \implies\\
\sum\limits_{k=1}^K \frac{\pi_k}{\pi_K}
  &= \sum\limits_{k=1}^K e^{\eta_k} \implies\\
\frac{1}{\pi_K}\sum\limits_{k=1}^K \pi_k
  &= \sum\limits_{k=1}^K e^{\eta_k} \implies\\
\frac{1}{\pi_K} \cdot 1
  &= \sum\limits_{k=1}^K e^{\eta_k} \implies\\
\pi_K
  &= \frac{1}{\sum\limits_{k=1}^K e^{\eta_k}}
\end{align*}
이고, 두 번째 줄에 마지막 결론을 껴넣어주면:
\begin{align*}
\frac{\pi_k}{\frac{1}{\sum\limits_{k=1}^K e^{\eta_k}}}
  &= e^{\eta_k}\ \implies\\
\pi_k
  &= \frac{e^{\eta_k}}{\sum\limits_{k=1}^K e^{\eta_k}}
\end{align*}
(짜잔! $\pi_k$가 $\eta_k$에 대한 softmax function이 나오네요!)

마지막으로 $a(\eta)$를 정리하면 아래와 같습니다:
\begin{align*}
\frac{\pi_k}{\frac{1}{\sum\limits_{k=1}^K e^{\eta_k}}}
  &= e^{\eta_k}\ \implies\\
\pi_k
  &= \frac{e^{\eta_k}}{\sum\limits_{k=1}^K e^{\eta_k}}
\end{align*}
\begin{align*}
a(\eta)
&= -\log(\pi_K)\\
&= \log(\pi_K^{-1})\\
&= \log\Bigg(\frac{\sum\limits_{k=1}^K e^{\eta_k}}{e^{\eta_K}}\Bigg)\\
&= \log\Bigg(\sum\limits_{k=1}^K e^{\eta_k}\Bigg).\\
\end{align*}

* (편집자 주) 수학을 따라 오다가 길을 잃은 분들을 위해 각 모델에서 우리가 관심있는 response variable들을 $\eta$에 대해 하나로 모아 정리해보면 아래와 같습니다: 
Linear regression (Gaussian distribution): $\mu = \eta$

Logistic regression (Binomial distribution): $\phi = \frac{1}{1 + e^{-\eta}}$

Softmax regression (Multinomial distribution): $\pi_k = \frac{e^{\eta_k}}{\sum\limits_{k=1}^K e^{\eta_k}}$

Generalized linear models


각 모델은 output으로 response variable을 뱉습니다. 이 response variable들이 어떤 (exponential family) 분포를 따라 퍼져있겠죠. 그러나 이 분포의 canonical parameter 즉 우리가 넣는 값은 관측마다 달라질 것입니다.

cat or dog를 예측하는 logistic regression 모델을 생각해보겠습니다. 우리가 고양이 그림을 넣으면 주어진 분포에 따라 "고양이"라는 값이 나올 것입니다.
$$P(\text{outcome}) =
\begin{cases}
1 - \phi & \text{outcome = cat}\\
\phi & \text{outcome = dog}\\
\end{cases}$$
우리가 개 그림을 넣으면 마찬가지로 같은 분포에 따라 "개"가 튀어나오겠죠.

당연하지만 $\phi$ 값은 각각의 경우마다 항상 달라야합니다. 앞선 경우에 대해서는  모델의 $\phi$ 값이 작아서 $1-\phi \approx 1$의 확률로 고양이를 뱉어내야겠지만 뒤의 경우에 대해서는 $\phi$ 값이 커서 "개"라는 출력이 $\phi \approx 1$의 확률로 나올 수 있도록 해야겠죠.

* (편집자 주) 이 부분이 헷갈리신다면 정상입니다. 뭐 이렇게 어렵게 써두었는지... 그냥 $\phi$가 canonical parameter $\eta$를 변수로 가지는 값이라고 생각하시면 됩니다. 예를 들어 신경망같은 parametric 개/고양이 판별기 모델에 고양이 혹은 개 그림을 (즉 다른 input들을) 넣으면 나올 output probability가 그때그때 다르죠? 이 얘기를 하려는 겁니다. 

그러면 각 input에 대해 다음을 생각해보겠습니다:

  • $y_i \sim \mathcal{N}(\mu_i, \sigma^2)$일 때, Linear regression에서 $\mu_i$란? 
  • $y_i \sim \text{Binomial}(\phi_i, 1)$일 때, logistic regression에서 $\phi_i$란?
  • $y_i \sim \text{Multinomial}(\pi_i, 1)$일 때, softmax regression에서 $\pi_i$란?

여기서 $i$라는 인덱스가 새로 붙은 것이 보이시죠. 이 $i$ 덕에 위에서 설명하고자 한 dynamic이 좀 더 명백해집니다. 즉, 주어진 모델에서 각 입력에 따라 해당하는 canonical parameter가 정해지고 이 녀석이 response variable의 분포에 영향을 미치게 됩니다. 예를 들면 logistic regression 모델에서 고양이 그림을 보게 되면 $\phi_i\approx0$이 되도록 해야겠다는 말을 좀 더 복잡하게 한 것입니다.

그럼 10-feature input $x$에서 이런 canonical parameter로 어떻게 보내면 될까요? 가장 간단하게 linear combination을 생각해볼 수 있습니다:
$$\eta = \theta^Tx$$ * (편집자 주) Keras code에 Dense layer 하나 붙은 모델인 것만 보셔도 짐작하실 수 있습니다. 


Linear regression


$\eta = \theta^Tx=\mu_i.$ 이것이 바로 우리가 정규 분포를 만들 때 필요한 변수입니다.
> The identity function (i.e a no-op) gives us the mean of the response variable. This mean is required by the normal distribution, which dictates the outcomes of the continuous-valued target $y$.

Logistic regression


$\eta = \theta^Tx = \log\bigg(\frac{\phi_i}{1-\phi_i}\bigg).$ $\phi_i$에 대해 문제를 풀어야 하겠습니다. $\phi_i = \frac{1}{1 + e^{-\eta}}$였던 것 기억하시죠?
> The sigmoid function gives us the probability that the response variable takes on the positive class. This probability is required by the binomial distribution, which dictates the outcomes of the binary target $y$.

결국 $\phi_i$라는 함수가 하는 녀석은 우리가 앞서 소개했던 내일의 날씨 예측하는 날씨 분포가 하는 일과 같습니다.
p = {'rain': .14, 'snow': .37, 'sleet': .03, 'hail': .46}
* (편집자 주) 그러니까 날씨 분포의 경우 마치 lookup table처럼 각 input $x$에 대해 딱 내뱉는 확률 값이 정해져있는 일대일 대응 함수인데, $\phi_i$의 경우는 canonical parameter $\eta=\theta^Tx$로 표현되는 함수라는 말입니다. 

Softmax regression


$\eta = \theta^Tx = \log\bigg(\frac{\pi_k}{\pi_K}\bigg).$ $\pi_i$는 벡터이기 때문에 $\pi_i$에 대해 풀기 위해서 각 $\pi_{k,i}$에 대해 문제를 풀어야합니다.
이 역시도 위에서 했었죠: $\pi_{k, i} = \frac{e^{\eta_k}}{\sum\limits_{k=1}^K e^{\eta_k}}.$ 바로 softmax function입니다.
> The softmax function gives us the probability that the response variable takes on each of the possible classes. This probability mass function is required by the multinomial distribution, which dictates the outcomes of the multi-class target $y$.

좋습니다 이제 다 살펴봤네요. 흠 그런데 왜 하필 linear model, $\eta = \theta^Tx$이어야 했을까요? 앤드류 응 교수님 말을 차용하자면 이것은 "모델 디자인" 혹은 "선택"의 문제입니다. 여기서 선형 조합이 자주 사용되는 이유를 굳이 꼽자면:
  • 아마도 선형 조합(linear combination)이 canonical parameter에 대한 각 feature에 영향을 줄 수 있는 가장 쉬운 방법일 것이기 때문이다. 
  • 선형 조합이 단순히 $x$뿐만 아니라 $x$에 대한 함수에 대해서도 $\eta$에 대해 선형으로 변화한다고 하면 좀 더 복잡한 형태를 만들 수 있다. 즉, 우리는 모델을 $\eta = \theta^T\Phi(x)$와 같이 쓸 수 있고, 여기서 $Phi$는 우리의 feature에 대한 복잡한 변형(transformation)을 주는 operator를 의미한다. 이 부분이 선형 조합의 단순함을 조금은 덜하게 만들어준다고 할 수 있다. 

Loss function


이제 지금까지 각 response variable이 어떤 식으로 만들어지는지 살펴봤습니다. 그리고 분포들의 parameters가 각 input에 대해 어떻게 계산되는지도 보았죠. 그러면 뭐가 남았을까요? 맞습니다. 이제 어떻게 하면 어떤 parameters가 좋은지 정량화할 수 있을지가 궁금하실겁니다? (음? ㅋㅋ)

자! 이 부분도 매우매우 재미있지만 이번에도 역시 글이 매우 길어졌고 제 글 체력도 다하였기에 다음 글에서 이어가도록 하겠습니다.

그러면! 다음 글에서 뵙겠습니다. (To be continued)

다음 읽을거리





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

* 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. 저자의 허락을 득하고 번역하여 옮깁니다. 

우리가 자주 쓰는 loss function들이 어떻게 나오게 되었는지, 예들 들자면 cross-entropy error와 Euclidean error는 어디서 유래한 것인지를 알려주는 좋은 글이 있어 공부할 겸 번역을 해보고자 합니다. 최대한 원 저자의 글에 가깝게 번역하려 했으며 번역을 할 때 필연적으로 생기는 어색한 표현을 피하기 위해 제가 먼저 내용을 다 소화한 이후 의역을 하였습니다. 이 외에 제가 좀 더 자세히 덧붙여 설명을 하고 싶은 부분들은 추가하되 (* 편집자 주, 빨간색)으로 명시해두겠습니다. (* 편집자 주) 2017년 6월에 시작한 글을 이제야 끝내다니... ㅎㅎ밀린 숙제하는 느낌이네요;; 졸업하니 정말 좋다!!!ㅋㅋㅋ

Minimizing the Negative Log-Likelihood, in Korean (:p)


저(글쓴이)는 Kaggle에서부터 기계학습에 대한 공부를 시작했습니다.
"Kaggle에는 데이터도 있고 모델 (즉, estimator) 그리고 loss function to optimize가 있어서 공부하기가 좋았고 여기(Kaggle)에서 많은 것을 배울 수 있었습니다."
그 중 몇 가지를 꼽아보자면, "regression model은 continuous-valued real numbers를 예측하는데 쓰이고, classification model들은 '빨강' '초록' '파랑' 등을 예측하는데 쓰인다는 것", "보통 regression에서는 mean absolute error를 쓰며 classification에서는 cross-entropy loss를 사용한다는 것", "loss 함수들을 줄이기 위해 stochastic gradient descent를 사용한다는 것" 등을 자연스래 배웠고, 마지막으로 이런 model들을 fit하고 싶다면 그저 sklearn 라이브러리를 사용하면 된다는 것도 알게 되었습니다. 

(최소한 기술적인 측면에서는) 이 정도만 잘 알아도 데이터 사이언티스트로써 혹은 취업을 위해서도 충분했습니다. 산업 현장에서는 이런 off-the-shelf algorithm만으로도 회사의 이익을 매우 쉽게 끌어올릴 수 있지요.
"그래 이 정도면 충분해, 자동차 경주에서 이기고 있는 선수가 굳이 자동차가 어떻게 만들어지는지까지 알 필요는 없잖아?"
"scikit-learn fit and predict," 하는 것이 익숙해졌을 무렵 저는 통계를 슬슬 공부하기 시작했습니다. 두 가지 분야가 서로 겹치는 것이 많다는 것을 알고는 있었지만, 여전히 뭔가를 분석할 때는 두 분야를 서로 다른 평행한 sub-fields로 적용하곤 했습니다. 그러니까 classification model을 만들 때는 scikit-learn을 사용하고 signup counts를 추측(infer)할 때는 Poisson distribution and MCMC를 사용하는 식으로 말이죠. 

하지만 교과서 공부, 논문 읽기, 소스 코드 읽기 및 쓰기, 블로그 작성 등 기계 학습에 대해 깊이 파고 들면서 내가 한 일들을 묘사하는데 사용되는 몇몇 용어들이 생각보다 이해하기 어렵다는 것을 알게 되었습니다. 예를 들자면 categorical cross-entropy loss가 무엇인지, 어떤 일을 하며 어떤 식으로 정의되는지는 이해했지만 도대체 "왜 이런 녀석들을 negative log-likelihood라 부르는 것인가?"와 같은 의문들이 생기기 시작했습니다.

시간이 지나 이제는 위 질문에 대해 적어도 두 가지 정도는 알게 되었습니다:

  1. 우리가 "기계 학습"이라 부르는 기술들(classification and regression models)은 거의 대부분 통계를 기반으로 하고 있다. 때문에 용어들이 두 분야에서 혼용되고 있다.
  2. 대부분의 용어가 새로 만들어진 것이 아니다. 

이 글에서는 제가 깨달은 사실을 바탕으로 우리가 잘 알고 있고, 자주 사용하며, 어떻게 사용하는지 알고 있는 세가지 모델들이 수학적으로 어떤 역할을 하는 것인지 설명하고자 합니다. 기본적으로 독자들이 기계학습과 통계학 분야의 개념들에 대해 익숙하다는 가정 하에 글을 쓸 것이며 두 분야 사이의 연관성에 대해 더욱 깊은 이해를 위해 서서히 파고들 생각입니다. 수학이 들어가긴 하지만 딱 필요한만큼만 사용할 것이고 유도의 대부분은 결과없이 건너 뛸 수도 있습니다.

어떤 predictive model을 제품화할 때는, import sklearn으로 다른 사람이 만들어 둔 모델을 사용하는 것이 최고의 방법이자 보통 우리가 알고 있는 방식입니다. 그렇기에 이 글은 여기서 시작해서 결국에는 다시 이 지점으로 돌아올 것입니다. 다만 이전과 다른 점은 그 밑바닥을 잘 알고 사용할 수 있겠습니다. (글쓴이는 이 과정을 마치 수영장에서 다이빙 하고, 밑바닥을 찍고, 다시 표면으로 올라오는 모습과 비슷하게 생각했는지 같은 은유를 수차례 사용합니다.) Lemma들은 굵은 글씨체로 작성되어 있습니다.

먼저 우리가 앞으로 다룰 세 개의 주요 모델들을 만나보시겠습니다. 편의를 위해 코드는 Keras로 통일합니다.

Linear regression with mean squared error

input = Input(shape=(10,))
output = Dense(1)(input)

model = Model(input, output)
model.compile(optimizer=_, loss='mean_squared_error')

Logistic regression with binary cross-entropy loss

input = Input(shape=(10,))
output = Dense(1, activation='sigmoid')(input)

model = Model(input, output)
model.compile(optimizer=_, loss='binary_crossentropy')

Softmax regression with categorical cross-entropy loss

input = Input(shape=(10,))
output = Dense(3, activation='softmax')(input)

model = Model(input, output)
model.compile(optimizer=_, loss='categorical_crossentropy')

다음으로 response variable, functional form, loss function, loss function + regularization term 이렇게 네 가지 주요 요소들이 있는데요 앞으로 세 가지 모델들에 대해 각 요소가 어떤 통계적인 의미를 지니는지 알아보도록 하겠습니다 (수영장 밑바닥에서 한 계단씩 올라가겠습니다).

잠깐! 완전히 잠수하기 전에 준비운동부터 해야겠죠? 몇 가지 중요한 개념들에 대해 정의하고 넘어가겠습니다.

Random variable


저(글쓴이)는 random variable을 "여러가지 다른 값들을 가질 수 있는 것"이라고 정의합니다.

  • "The tenure of despotic rulers in Central Africa" is a random variable. It could take on values of 25.73 years, 14.12 years, 8.99 years, ad infinitum; it could not take on values of 1.12 million years, nor -5 years.
  • "The height of the next person to leave the supermarket" is a random variable.
  • "The color of shirt I wear on Mondays" is a random variable. (Incidentally, this one only has ~3 distinct values.)


Probability distribution


확률 분포란 random variable이 갖는 값을 관측할 likelihood에 대한 일종의 lookup table이라 할 수 있습니다. 주어진 variable이 {비, 분, 진눈깨비, 우박} 중 하나의 값을 가진다고 할 때, 다음과 같이 probability distribution으로 나타낼 수 있습니다:
p = {'rain': .14, 'snow': .37, 'sleet': .03, 'hail': .46}
당연하지만, 모든 값의 합은 1이어야 하지요.

  • 확률 질량 함수는 이산 값을 갖는 random variable 확률 분포다. 
  • 확률 밀도 함수는 연속 값을 갖는 random variable의 확률 분포를 주는 함수다. 
  • 여기서 "주는"이라고 표현한 까닭은 이 함수 스스로는 lookup table이 아니기 때문이다. 즉 값이 [0,1] 범주 안에서 주어진 random variable에 대해 $Pr(X=0.01), Pr(X=0.001),Pr(X=0.0001),~etc.$를 정의할 수 없다. 
    • 대신 일정 범위  안에서 어떤 값을 관측할 확률을 알려줄 수 있는 함수를 하나 정의하여 사용할 수 있다: e.g. $Pr(0.01<X<0.4)$
    • 이 것이 확률 밀도 함수이며 $Pr(0\leq X \leq 1)=1$을 만족한다. 

Entropy


엔트로피는 주어진 결과에 도달할 수 있는 방법의 가짓수를 정량화 해줍니다. 8명의 친구들이 두 대의 택시를 나눠타고 브로드웨이 쇼를 보러 가는 것을 상상해보죠. 다음과 같이 두 가지의 시나리오를 생각해보겠습니다:
  • 네 명씩 택시를 탄다:
# fill the first, then the second
assignment_1 = [1, 1, 1, 1, 2, 2, 2, 2]

# alternate assignments
assignment_2 = [1, 2, 1, 2, 1, 2, 1, 2]

# alternate assignments in batches of two
assignment_3 = [1, 1, 2, 2, 1, 1, 2, 2]

# etc.
  • 모든 친구들이 하나의 택시에 어떻게든 우겨 탄다:
assignment_1 = [1, 1, 1, 1, 1, 1, 1, 1]
두 번째 경우보다 첫 번째 경우가 가능한 경우의 수가 많기 때문에 첫 번째 결과(outcome)가 더 높은 엔트로피 값을 갖게 됩니다.

More explicitly,


엔트로피를 확률 분포에 대해 계산을 해보면 다음과 같습니다:
$$H(p)=-\sum_{i=1}^n p_i \log p_i$$
이 때,
  • 총 서로 다른 n개의 이벤트가 존재한다. 
  • 각 이벤트 $i$는 $p_i$의 확률을 갖는다. 

엔트로피는 가능한 이벤트들에 대한 weighted-average log probability이고, (이는 수식에서 더 명백히 알 수 있는데) 분포에 내재한 불확실성을 측정하는 방법이라 할 수 있습니다. 즉, 어떤 이벤트에 대해 엔트로피가 높다는 것은 해당 결과값을 얻을 것이라는 믿음에 대한 확실성이 덜하다는 것을 뜻하죠.

위에서 언급한 확률 분포에 대해 엔트로피를 계산해보겠습니다.
p = {'rain': .14, 'snow': .37, 'sleet': .03, 'hail': .46}

def entropy(prob_dist):
    return -sum([ p*log(p) for p in prob_dist.values() ])

In [1]: entropy(p)
Out[1]: 1.1055291211185652
비교를 위해 두 개의 분포를 더 만들어서 각각의 엔트로피들을 계산해보겠습니다.
p_2 = {'rain': .01, 'snow': .37, 'sleet': .03, 'hail': .59}

p_3 = {'rain': .01, 'snow': .01, 'sleet': .03, 'hail': .95}

In [2]: entropy(p_2)
Out[2]: 0.8304250977453105

In [3]: entropy(p_3)
Out[3]: 0.2460287703075343
첫 번째 분포에서 우리는 내일 날씨가 어떨 지에 대해 가장 확신이 없습니다. 이에 맞게 엔트로피도 가장 높습니다. 세 번째 분포의 경우 내일의 날씨가 우박일 것이라는 것에 가장 확신을 가질 수 있을 것이고 엔트로피도 역시 작은 것을 볼 수 있습니다.

마지막으로 택시 예화에서도 마찬가지로 오직 한 가지 경우만 가능한 분포에 비해 여러 갈래로 이벤트가 생길 수 있는 분포에 대해 엔트로피 값이 낮다는 것을 알 수 있습니다.

이제 준비운동을 마쳤으니 수영장에 들어가야겠지요. 그럼 가장 바닥부터 찍고 다시 수면으로 올라가보겠습니다.

Response variable


크게 볼 때 우리가 다룰 모델은 다음과 같이 생겼다고 할 수 있습니다. 즉, 아래 그림에서 입력을 받아 출력을 하는 다이아몬드에 해당합니다:

simple input/output model

모델들은 예측해야 하는 response variable 즉 $y$의 종류에 따라 바뀌게 되는데요
  • Linear regression은 연속된 실수 값을 예측. temperature라고 하자. 
  • Logistic regression은 이진 값을 예측. cat or dog라고 하자. 
  • Softmax regression은 multi-class label을 예측. red or green or blue라고 하자. 
각 모델에서 response variable은 서로 다른 값들을 가질 수 있습니다. 이들이 바로 random variables입니다. 그렇다면 각각의 random variable은 어떤 확률 분포를 갖을까요?
  • temperature는 true mean $\mu\in(-\infty,\infty)$와 true variance $\sigma^2\in(-\infty,\infty)$를 갖는다. 
  • cat or dog는 고양이 혹은 강아지를 값으로 값는다. 공평한 동전 던지기가 언제나 $Pr(Head)=0.5$이듯이 각 결과에 대한 likelihood는 시간에 따라 변하지 않는다. 
  • red or green or blue는 빨강, 초록, 파랑 중 하나의 값을 갖는다. 마치 공평한 육면체 주사위가 그렇듯이 시간에 따라 likelihood는 바뀌지 않는다. 
이런 가정들은 사실 너무 당연해서 좀 너무 진부하기까지 하지만 앞으로 얘기할 때 중요하게 사용되니 기억해둡시다.

Maximum entropy distributions


"Uber의 연간 수익"이라는 연속 값 random variable을 생각해보겠습니다. 마치 temperature와 같이 이 random variable 역시 true mean $\mu\in(-\infty,\infty)$와 true variance $\sigma^2\in(-\infty,\infty)$를 갖습니다. 당연하지만 두 경우에 대한 평균과 분산은 서로 다르겠죠. 다음과 같이 가상으로 10개의 값들을 관측했다고 해보겠습니다:
ubertemperature
-100-50
-805
-2056
565
1562
-1063
2260
1278
70100
100-43
이를 그려보면 다음과 같습니다:
temperature random variable
uber random variable
우리는 각 random variable에 대해 실제 확률 분포가 어찌 생겼는지는 모릅니다. 전반적 "형태"도 모르고 그 형태를 제어하는 parameters도 모릅니다. 이럴 때는 어떻게 모델을 정해야할까요? 사실 통계학의 정수가 바로 여기에(미지의 값들을 추측하는 것) 있습니다.

자, 초기 모델을 정하기 위해 다음의 두 가지를 염두에 두어야합니다:

  • 최대한 보수적이어야 합니다. 우리는 "Uber의 연간 수익"에 대해 고작 10개의 값만을 보았을 뿐입니다. 아직 관측되지 않았다고 해서 다음 스무 개의 값들이 $[-60,-50]$ 사이의 범위에서 나올 수도 있다는 사실을 간과하고 싶지는 않겠죠.
  • 각각에 대하여 동일한 가정(continuous)을 했기 때문에 두 random variables 모두에 대하여 같은 확률 분포 "모양"을 가정해야합니다. 

이에 따라 매우 진부하지만 위에서 정의한 제약 조건들을 만족하는 가장 보수적인 분포를 사용하겠습니다. 이 것이 바로 maximum entropy distribution입니다.

* (편집자 주) 그냥 이렇게 넘어가면 사실 왜 maximum entropy distribution을 사용해야하는지 잘 와닿지 않을 수 있으니 제가 첨언을 좀 해보겠습니다. 

통계나 정보 이론에서 maximum entropy probability distribution은 이름이 의미하듯 분포가 갖는 엔트로피 값이 해당 class의 확률 분포들이 가질 수 있는 최대 엔트로피 값과 최소한 같거나 큽니다. 


무슨 말인고 하니, 만약 우리가 어떤 모델을 세울 때 해당 데이터에 대해 알고 있는 정보가 적다면 잘못된 선험적 정보를 부지불식간에 모델에 넣지 않도록 주의를 기울여야 한다는 것입니다. (maximum entropy의 원리에 따라) 모델을 정할 때 해당 데이터가 어떤 class에 속한다는 정보 외에 분포에 대한 어떠한 정보도 없을 때는 가장 기본적으로 최소한의 정보만을 사용하여(largest entropy) 분포를 정해야할 것입니다. 


바로 여기에 해당하는 분포가 maximum entropy distribution인 것이죠. 이 외에도 많은 physical systems이 시간이 지나면서 점차 maximal entropy configuration을 향하기 때문에서라도 maximum entropy distribution으로 초기 모델을 정하는 것이 여러 모로 장점이 있습니다.

temperature(continuous-valued distribution)에 대한 maximum entropy distribution은 Gaussian 분포입니다. 가우시안 분포의 확률 밀도 함수는 다음과 같죠:
$$P(y\vert \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}}\exp{\bigg(-\frac{(y - \mu)^2}{2\sigma^2}\bigg)}$$
cat or dog에 대한 maximum entropy distribution은 binomial 분포입니다. 이항 분포의 확률 밀도 함수는 (for a single observation) 다음과 같습니다:
$$P(\text{outcome}) =
$\begin{cases}
1 - \phi & \text{outcome = cat}\\
\phi & \text{outcome = dog}\\
\end{cases}$$ (여기서 positive event에 대한 확률을 $\phi$로 표기하였습니다.)

마지막으로 red or green or blue에 대한 maximum entropy distribution은 multinomial distribution입니다. 다항 분포의 확률 밀도 함수는 다음과 같습니다:
$$P(\text{outcome}) =
\begin{cases}
\phi_{\text{red}} & \text{outcome = red}\\
\phi_{\text{green}} & \text{outcome = green}\\
1 - \phi_{\text{red}} - \phi_{\text{green}} & \text{outcome = blue}\\
\end{cases}$$
이렇게 각 모델에 대한 "maximun entropy distribution"가 위와 같이 유도된다는 것을 은근슬쩍 구렁이 담넘어 가듯이 지나갔지만 사실 이 부분은 Lagrange multipliers로 매우 명료하게 설명하는 것이 가능합니다. 이 부분은 해당 글의 범위를 넘어서거니와 이 글의 목적을 명확히 하는데 오히려 방해가 될 소지가 있기에 글쓴이가 의도적으로 내용을 생략하였습니다.

* (편집자 주) 실제로도 매우 쉽습니다. 다음에 기회가 되면 포스팅을 하도록 하겠습니다. 예를 들어 가우시안 분포는 전체 실수 선 $x\in(-\infty, \infty)$를 모두 포괄하되 유한한 평균과 분산을 갖는 모든 확률 분포에 대한 maximum entropy distribution입니다. 이렇게 maximum entropy distribution을 유도하다보면 가우시안 분포의 적분식이 왜 그렇게 생겼는지 알 수 있습니다. 재밌겠죠!

마지막으로 "Uber의 연간 수입"과 temperature 값들의 실제 분포가 가우시안으로 표현될 수 있다는 가정을 사용하긴 하였으나 사실 각각에 대해 약간씩 다른 가우시안입니다. 이는 각 random variable이 서로 다른 true mean과 variance를 갖기 때문입니다. 이 값들은 각 가우시안 분포들이 더 키가 크거나 옆으로 퍼지거나 혹은 좌우로 shift되는 정도를 다르게 조정하게 됩니다.


Functional form


이 글에서 다루고 있는 세 모델들은 각각 서로 다른 함수를 바탕으로 예측을 하는데요:  각각 identity function (i.e. no-op), sigmoid function, and softmax function. Keras로 output layer를 만들어보면 명확합니다:
output = Dense(1)(input)
output = Dense(1, activation='sigmoid')(input)
output = Dense(3, activation='softmax')(input)
이 단락에서는,
  • Gaussian, binomial 그리고 multinomial distributions가 같은 functional form으로 나타낼 수 있다는 것을 보이겠습니다. 
  • 이 common functional form에서 세 모델들의 output function (identity, sigmoid, softmax)가 자연스럽게 유도된다는 것을 보이겠습니다. 

마치 다음 그림과 같이 생각할 수 있겠네요. 세 가지 분포가 들어가서 세 가지 output functions이 나오는 것이죠. (그림이 이상한데? -_-; 뭐 아무튼 하나의 functional form으로 설명이 가능해서 저렇게 표현할 수 있다고 생각하면 될 듯합니다.)


bottleneck

여기서 병목에 해당하는 개념은 확률 분포의 "exponential family"가 되겠습니다.

자! 이 부분이 사실 매우매우 재미있는 부분이지만 아쉽게도 글이 매우 길어지기도 했고 글을 하루에 쓸 수 있는 양이 있으니(..orz) 다음 글에서 이어가도록 하겠습니다. (드라마도 아니고....준비 운동하다 시간이 다 갔네요..ㅋㅋ 얼른 돌아오겠습니다. )

그러면! 다음 글에서 뵙겠습니다. (To be continued)

다음 읽을거리





2018년 2월 4일 일요일

[PR12-Video] 61. Understanding Deep Learning Requires Rethinking Generalization


TensorFlowKR facebook comunity에서 모인 12명의 paper readers (PR12)가 읽어주는 Deep learning paper awesome list 100선 by Terry Um.

#61. Understanding Deep Learning Requires Rethinking Generalization


이 리뷰에서는 최근 ICLR 2017 Best paper award를 수상했던 Generalization에 관한 논문을 소개해보았습니다. 이 논문 역시도 현재까지 존재하던 이론들이 제대로 신경망 모델의 성능을 설명하지 못하고 있다는 매우 대담한 주장을 하여 매우 화제가 되었습니다. 다만 제 생각과는 다른 점이 몇 있고 논리에 빈틈이 있어보여서 논문의 내용을 충실히 전달하되 비판적인 입장에서 리뷰를 진행해보았습니다. 즐겁게 들어주시면 감사하겠습니다.


슬라이드: https://www.slideshare.net/thinkingfactory/pr12-understanding-deep-learning-requires-rethinking-generalization

다음에 또 다른 주제로 뵈어요~!

다른 분들의 발표도 보고 싶다면: PR12 딥러닝 논문읽기 모임

다음 읽을거리






[PR12-Video] 56. Capsule Network


TensorFlowKR facebook comunity에서 모인 12명의 paper readers (PR12)가 읽어주는 Deep learning paper awesome list 100선 by Terry Um.

#56. Capsule Network


이 리뷰에서는 최근 NIPS 2017에서 발표된 힌튼 교수님의 Capsule Network에 대해 소개해보았습니다. Capsule network가 기존의 CNN의 문제점에 대해 지적하며 새로운 프레임의 학습 방식인 라우팅을 들고 왔지요. 처음 읽는 분들은 생각보다 논문이 친절하지 않아서 헷갈릴 수 있는 부분이 있고 이해가 직관적이지는 않아서 어려움을 겪을 수 있습니다. 제 소개를 통해 조금이나마 이해가 쉽게 될 수 있도록 준비해보았습니다. 짧지만 제 생각도 넣어보았네요. 즐겁게 들어주시면 감사하겠습니다.


슬라이드: https://www.slideshare.net/thinkingfactory/pr12-capsule-networks-jaejun-yoo

다음에 또 다른 주제로 뵈어요~!

다른 분들의 발표도 보고 싶다면: PR12 딥러닝 논문읽기 모임

다음 읽을거리






[PR12-Video] 34. Inception and Xception


TensorFlowKR facebook comunity에서 모인 12명의 paper readers (PR12)가 읽어주는 Deep learning paper awesome list 100선 by Terry Um.

#34. Inception and Xception


그동안 블로그 글은 뜸했어도 PR12 활동은 빠지지 않으려 노력했습니다. 유튜브에는 시간에 맞춰 꼬박꼬박 올렸습니다만 블로그에 중복으로 올리는 것이 조금 품이 들어서 그런지 여기에는 업데이트가 늦었네요. 조금 여유가 생겼기에 블로그에도 정리를 해서 올립니다.
여전히 매주 일요일마다 12명이 돌아가며 두 명씩 두 편의 논문을 40분 동안 발표하고 있습니다. 이 리뷰에서는 구글에서 발표한 모델인 Inception과 CVPR 2017에서 Keras의 저자 프랑수아 숄레가 발표한 Xception에 대해 살펴보았습니다. Inception 초기 모델부터 가장 최근의 extension인 Xception까지 한 영상으로 쭉 훑어보실 수 있도록 노력했습니다. 즐겁게 들어주시면 감사하겠습니다.


슬라이드: https://www.slideshare.net/thinkingfactory/pr12-inception-and-xception-jaejun-yoo

다음에 또 다른 주제로 뵈어요~!

다른 분들의 발표도 보고 싶다면: PR12 딥러닝 논문읽기 모임

다음 읽을거리






[PR12-Video] 24. Pixel Recurrent Neural Network


TensorFlowKR facebook comunity에서 모인 12명의 paper readers (PR12)가 읽어주는 Deep learning paper awesome list 100선 by Terry Um.

#24. Pixel Recurrent Neural Network


그동안 블로그 글은 뜸했어도 PR12 활동은 빠지지 않으려 노력했습니다. 유튜브에는 시간에 맞춰 꼬박꼬박 올렸습니다만 블로그에 중복으로 올리는 것이 조금 품이 들어서 그런지 여기에는 업데이트가 늦었네요. 조금 여유가 생겼기에 블로그에도 정리를 해서 올립니다.
여전히 매주 일요일마다 12명이 돌아가며 두 명씩 두 편의 논문을 40분 동안 발표하고 있습니다. 이 리뷰에서는 Generative Model 중 GAN과는 아예 다른 갈래에 속하는 Autoregressive Model를 소개하였습니다. 이후 DeepMind의 WaveNet의 전신이 되는 논문이지요. 즐겁게 들어주시면 감사하겠습니다.


슬라이드: https://www.slideshare.net/thinkingfactory/pr12-pixelrnn-jaejun-yoo

다음에 또 다른 주제로 뵈어요~!

다른 분들의 발표도 보고 싶다면: PR12 딥러닝 논문읽기 모임

다음 읽을거리






2018년 2월 3일 토요일

초짜 대학원생의 입장에서 이해하는 Energy-Based Generative Adversarial Networks (1)

* Energy-Based Generative Adversarial Networks J. Zhao ICLR 2017을 바탕으로 한 리뷰

오늘은 매우 오랜만에 GAN 논문을 포스팅하려 합니다. 2016년 9월에 올라왔고 ICLR 2017에서 발표된 EBGAN입니다. 우리의 연예인 Yann Lecun 교수님께서 저자로 있기에 매우 유명했던 논문이기도 하죠.

NIPS 2016 당시 keynote presentation에서 여러 차례 자신의 EBGAN을 홍보하시던 Lecun 교수님을 잊을 수가 없습니다. Keynote, panel discussion, GAN 워크샵에 내내 언급할 기회가 있을 때마다 "GAN은 내가 근 $x$년간 들어본 아이디어 중 최고이다"라 강조하시는데 $x$가 10년씩 추가되는 재미있는 모습을 볼 수 있었습니다. 그 특유의 프랑스 억양이 섞인 말투가 아직도 기억에 남네요.

이 바닥이 워낙 빠르게 발전하는지라 이미 유물이 되어 버린 느낌입니다만 GAN이 발전하는 과정에서 최소한 한 획을 그었다고 평할만한 논문이므로 EBGAN은 정리를 하고 넘어가는게 맞는 것 같습니다.

Energy-Based Model (EBM)


제가 EBGAN이 중요한 논문 중 하나라 꼽은 이유는 아직 대다수의 GAN 모델이 Discriminator가 0 아니면 1을 뱉도록 디자인 된 기존의 probabilistic GAN에서 벗어나지 못하고 있을 때, energy라는 개념을 도입하여 기존 구조를 깨는 모델을 제안했기 때문입니다.

이 energy 개념을 도입하면 GAN 구조를 좀 다른 각도로 살펴볼 수 있게 되는데요 처음 보았을 때 꽤나 신선한 접근이라고 생각했기에 여기에 같이 정리하여 소개해보겠습니다.
(아마도 이번 글은 또.... EBGAN 설명 이전에 Intro가 길어질 것 같네요...하... insight가 많은 논문은 읽기는 재미있는데 정리하기는 매우 귀찮다아...orz....이런 식으로 아직 엄두도 못내는 것들이 산더미. 말로 하면 편한데...)

Statistical learning이나 machine learning의 주요 목적을 한 문장으로 정리해보자면 여러 변수들간의 상관관계를 어떻게 하면 잘 인코딩해볼까로 얘기할 수 있습니다. 이렇게 변수들간의 상관관계를 데이터로부터 잘 학습하고 나면, 모르는 변수의 값이 들어왔을 때 이미 알고 있는 변수들의 값을 바탕으로 모델이 질문에 답할 수 있겠죠 (아래 예시).


위 그림에서 보실 수 있듯이 우리가 $Y_1$과 $Y_2$의 관계를 알고 나면 이미 관측한 데이터가 아닌 어떤 새로운 $Y_1$값 혹은 $Y_2$ 값이 들어오더라도 서로의 관계를 바탕으로 값을 새로운 데이터가 우리가 학습한 data manifold 위에 적합한 값인지 아닌지를 알 수 있습니다. 여기서 data manifold는 $Y_2= Y_1^2$로 표현되는 curve라 할 수 있겠군요.

이런 설명은 지도학습과 비지도학습을 가리지 않습니다. 다만 지도학습에서는 위 그림에서 점(데이터)들이 있을 때 그 점이 data manifold에 속하는지 속하지 않는지를 알려주는 정보가 있는 반면에 비지도학습에서는 학습 데이터셋에서조차도 어떤 점이 outlier인지 아닌지 알 정보가 주어지지 않는다는 차이가 있을뿐입니다.

따라서 학습을 energy의 관점에서 얘기해보면, 데이터를 바탕으로 어떤 energy surface를 만들어 나가되 데이터가 살고 있는 부분 혹은 공간에 대해서는 낮은 energy를 할당하고 다른 부분에는 높은 energy를 할당하도록 하는 그런 과정이라고 생각할 수 있습니다. 즉, 인코딩을 해줄 값 = energy가 되는 것이고 이를 인코딩하는 함수 = energy function이 되는 것입니다.



(여기서 왜 하필 데이터 근방에서 energy가 낮도록 설정하였는지 의아하실 수 있습니다. 이는 energy가 낮을 수록 안정된 구조를 가지는 물리적인 관점에서 개념을 가져온 것으로 보입니다.)

그래서 지도학습은 enegry 관점에서 $X$가 데이터 $Y$가 정답일 때, $(X,Y)$라는 쌍(pair)에서 $Y$가 제대로 된 정답이면 이 쌍의 energy에 낮은 값을 주고 반대의 경우 높은 에너지를 갖게 하는 어떤 방법론이라고 생각할 수 있습니다. 한편 비지도학습은 $X$만이 있기에 data manifold에는 작은 energy를 부여하도록 $X$를 잘 모델링 하는 것이라고 생각할 수 있습니다.

매우 그럴듯하죠. 그래서 두루뭉술 아 저렇게 하면 되는구나 하고 넘어갈 수 있지만 조금만 곰곰히 생각해보면 여기서 한 가지 의문점이 생깁니다.  위의 관점에서 비지도학습 문제를 푼다고 해보겠습니다. 그나마 $X$가 있는 부분의 값은 data manifold라 생각하여 값을 낮게 할당하면 되겠지만 정보조차 없는 data manifold 밖의 공간은 무엇을 기준으로 어떻게 값을 할당해야할까요? 사실 이는 지도학습에서도 학습 데이터셋이 전체 데이터 공간을 표현할만큼 충분하지 않은 경우 똑같이 발생할 수 있는 문제입니다. 데이터를 존재할 수 있는 모든 조합에 대해 구할 수 있을리가 없죠.

How do we make the energy higher outside the samples?


여기서 어떤 식으로 문제를 풀어나갈 것이냐에 따라 비지도학습에 속하는 알고리즘들의 갈래를 나누어 energy 관점으로 설명할 수 있습니다.

Seven Strategies to Shape the Energy Function


1. 모델을 만들되 낮은 energy를 가질 수 있는 공간을 한정짓는다. 
(Build the machine so that the volume of low energy stuff is constant)
> PCA, K-mean, GMM, square ICA

여기에 속하는 알고리즘들은 data manifold 밖의 공간의 energy를 explicit하게 올리지는 않습니다. 다만 디자인에 따라서 자연스럽게 그렇게 될 수 밖에 없도록 만들뿐입니다. 예를 들자면 PCA는 분산이 가장 많이 설명되는 방향을 찾고 각각 orthogonal한 basis로 표현되는 linear subspace로 data manifold를 한정짓습니다. 그렇기에 principal subspace로 설명할 수 없는 다른 공간에 해당하는 녀석들은 정보가 복원되지 않을 것이기 때문에 이 부분에서 들어온 데이터들은 모두 에너지가 높게 하는 모델이라 생각할 수 있습니다.
K-means는 샘플에서 energy가 0이고 멀어질수록 quadratic하게 energy가 증가하도록 하는 모델이라 생각할 수 있습니다. GMM이나 ICA도 결국 위에 설명한 것과 비슷한 분류라 생각할 수 있겠죠.



그래서 보시듯이 이런 Spiral data에 대해 PCA가 좋은 모델이 아닌 것을 금방 알 수 있습니다. K-means는 이런 경우에 좀 잘 하는 것처럼 보이지만 사실 고차원 공간으로 가면 제대로 동작하지 않을 것이 뻔히 보이죠.

2. Parametric 모델 사용하여 샘플에서의 energy는 낮추고 다른 모든 부분에서는 올린다. 
(Push down of the energy of data points, push up everywhere else)
> Maximum likelihood (needs tractable partition function)

우리가 흔히 아는 Maximum likelihood가 여기에 속합니다. 다만 이 경우 보통 probabilistic model을 만들기 위해 전체 domain, 모든 parameter에 대한 적분 함수를 계산해야하는데 이런 partition function이 보통 intractable한 경우가 많습니다. Tractable한 함수로 한정지어 계산하면 그만큼 모델에 한계가 생기겠죠. Variational bound를 적용해서 surrogate 함수를 만들어 사용하는 방법도 있지만 여전히 한계점들이 있습니다.

3. 2번과 달리 모든 부분에서 energy를 올리는 것이 아니라 선택된 일부에서만 올린다.
(Push down of the energy of data points, push up on chosen locations)
> Contrastive divergence, Ratio matching, Noise contrastive estimation, Minimum probability flow

이 경우 문제가 "선택된 일부"를 어떻게 찾을 것인가에 대한 것으로 변할뿐 본질적인 문제는 해결되지 않습니다. 기본적으로 이 분류에 속하는 알고리즘들은 현재 가지고 있는 energy 모델에 대해 샘플에 약간의 noise를 주어 근방을 탐색해서 값을 계산하고 energy 함수를 업데이트 하는 전략을 취합니다. 즉 어떤 샘플링을 하는 것으로 생각하실 수 있는데요 이 과정이 반복수가 많아지면 결국 MCMC를 하는 것과 같아집니다.

4. 샘플 근방의 curvature는 극대화시키고 gradient는 최소화시킨다.
(Minimize the gradient and maximize the curvature around data points)
> score matching

5. 어떤 dynamical system을 학습시켜서 결국에는 data manifold로 수렴하도록 한다.
(Train a dynamical system so that the dynamics go to the manifold)
> denoising auto-encoder

6. Regularizer를 사용해서 낮은 enegy를 가질 수 있는 공간을 한정짓는다.
(Use a regularizer that limits the volume of space that has low energy)
> Sparse coding, sparse auto-encoder, Predictive Sparse Decomposition

PCA나 K-means와는 다르게 loss function 혹은 energy function에 regularizer를 explicit하게 붙여서 공간을 제한하는 방식을 취합니다. Lecun 교수님은 Variational Auto-Encoder (VAE)도 이 관점으로 보면 중간 latent space에 noise를 넣어 code가 표현할 수 있는 정보의 양 혹은 공간을 제한하는 것으로 생각할 수 있다고 언급하고 넘어갑니다.

"sparse coding energy surface"


7. If $E(Y) = ||Y-G(Y)||^2$, make $G(Y)$ as "constant" as possible
> Contracting auto-encoder, saturating auto-encoder

So what is this all about? 


EBGAN을 설명한다면서 EBM에 대해 설명을 하다가 갑자기 비지도학습의 분류만 주구장창 설명하니 이게 무슨 뜬금포인가 할 수 있으실텐데요.

GAN은 사실 3번에서 "선택된 일부"를 찾아내는 과정을 매우 신박한 방식으로 해결한 모델이라 생각할 수 있습니다. MCMC는 이런 선택된 일부 = contrastive data를 생성하는 non-parametric model이라 할 때, GAN은 이를 parametric model을 바탕으로 contrastive data를 생성하는 방법인 것이죠. 즉, GAN 학습과정에서 generator가 하는 역할을 data manifold 밖에 속하는 데이터(contrastive data, e.g. 매우 이상한 사람 사진)를 생성하는 것으로, 그리고 discriminator가 샘플에 energy를 할당하는 energy function 역할을 하는 것으로 생각할 수 있습니다.

여기서 멋진 점은 학습이 진행됨에 따라 generator가 점차 data manifold에 가까운 샘플들을 생성하기 때문에 data manifold에서 멀리 있는 contrastive data들부터 생성해나가며 전체 energy surface를 구성할 수 있게 됩니다. 마찬가지로 discriminator 역시 data manifold에서 먼 곳의 data가 없어도 generator가 생성하는 sample로부터 이에 대한 정보를 자연스럽게 얻어내어 좋은 energy function을 학습할 수 있게 되구요.

따라서 GAN이 학습 데이터셋이 없거나 불충분한 경우에도 학습이 가능하도록 하는 일종의 매우 강력한 비지도학습 방법론이라 생각할 수 있습니다. 그렇기에 지도학습의 눈부신 성과에 비해 정체되어있던 비지도학습의 연구에 GAN이 매우 큰 breakthrough를 가져올 수 있는 Clue가 되지 않을까 하며 Lecun 교수님이 매번 강조하는 것이 아닌가 싶습니다.

다음 글에서는 위와 같은 관점에서 EBGAN을 분석해보도록 하겠습니다. 전반적인 구조를 설명하고 실험 결과와 Theoretical 증명에 대한 설명도 함께 넣을 예정입니다. 그럼 다음 글에서 뵙겠습니다.

다음 읽을거리



참고문헌: