생성 모델 2장


서론

이번장은 1장의 마지막 질문인 \(Z_\theta=\int f_\theta(x)dx\) 라는 적분을 실제로 어떻게 다룰 것인가?에 대해서 이여서 다뤄본다. 이를 해결하기 위한 방법

  • ① 이미 풀린 꼴을 이용하는 방법(가우시안)
  • ② 표본 평균으로 적분을 근사하는 방법(몬테카를로)

를 다뤄본다.

본론

1장에서 어디서 막혔는가?

1장에서 신경망은 복잡한 데이터 분포의 모양을 표현할 수 있다는 것을 보았다. 하지만 신경망의 출력 \(f_\theta(x)\)는 모양일 뿐 확률이 아니다. 확률밀도가 되려면 전체 넓이가 1이어야 하므로

\[q_\theta(x)=\frac{f_\theta(x)}{Z_\theta},\qquad Z_\theta=\int f_\theta(x)\,dx\]

처럼 전체 넓이 \(Z_\theta\)로 나누어야 한다. 문제는 고차원에서 이 적분을 직접 계산할 수 없다는 것이었다. 칸을 하나씩 세는 방법밖에 없는데, 차원이 오르면 칸의 수가 지수적으로 늘어나기 때문이다.

그러니 막힌 곳은 결국 하나다. 적분을 어떻게 계산할 것인가. 적분을 다루는 길은 크게 둘이다.

  • 적분의 답을 정확히 알고 있는 구조를 쓴다 → 가우시안
  • 표본을 여러 개 뽑아 그 평균으로 적분값을 근사한다 → 몬테카를로

첫 번째 길: 적분이 이미 풀려 있는 구조를 사용한다

가우시안이 유용한 이유는 한 번 적분을 풀어 놓으면 이후 무슨 연산을 해도(늘리고, 곱하고, 더해도) 다시 가우시안이 나오기 때문이다.

가우시안의 확률밀도함수는

\[p(x)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)\]

이다. 여기서 . \(t=\dfrac{x-\mu}{\sigma}\)로 치환하면 \(dx=\sigma\,dt\)이고

\[ \int_{-\infty}^{\infty}\exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)dx =\sigma\int_{-\infty}^{\infty}e^{-t^2/2}\,dt \]

가 된다. 중심 \(\mu\)는 평행이동이라 넓이를 바꾸지 않고, 폭 \(\sigma\)는 가로로 늘리는 것이라 넓이에 \(\sigma\)배만 한다. 그래서 모든 가우시안의 넓이는 결국 딱 하나의 적분

\[I=\int_{-\infty}^{\infty}e^{-x^2/2}\,dx\]

에 \(\sigma\)를 곱한 것으로 귀결된다. 이 \(I\) 하나만 구하면 어떤 \(\mu,\sigma\)에 대해서도 넓이가 \(\sigma I\)로 나온다.

그리고 \(I=\sqrt{2\pi}\)라는 것을 보이면 \(\sigma I=\sqrt{2\pi}\,\sigma=\sqrt{2\pi\sigma^2}\)이 되어 밀도함수 앞의 계수가 정확히 설명된다. 그래서 이 적분이 핵심이다.

이제 적분의 값을 계산하는 핵심적인 부분인 \(I\)에 대해서 알아보자.

\[I = \int_{-\infty}^{\infty} e^{-x^2/2}\,dx\]

이고, 이 값은 \(I=\sqrt{2\pi}\) 라는 것을 알아내면 된다.

이 적분은 1차원에서는 풀리지 않는다. \(e^{-x^2/2}\)의 원시함수를 우리가 아는 함수(다항식, 지수, 로그, 삼각함수)의 조합으로 쓸 수 없기 때문이다. 그래서 차원을 하나 올린다.

\[I^2=\left(\int_{-\infty}^{\infty}e^{-x^2/2}dx\right)^2\]

\(I\)는 숫자 하나이므로 적분변수 이름은 상관없다. 두 적분을 구분하기 위해 하나는 \(x\), 다른 하나는 \(y\)로 쓰면

\[I^2=\left(\int_{-\infty}^{\infty}e^{-x^2/2}dx\right)\left(\int_{-\infty}^{\infty}e^{-y^2/2}dy\right)\]

첫 번째 적분은 \(y\)와 무관하고 두 번째는 \(x\)와 무관하므로 하나의 이중적분으로 합칠 수 있다.

\[I^2=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}e^{-x^2/2}\,e^{-y^2/2}\,dx\,dy\]

지수의 곱은 지수의 합이므로

\[I^2=\iint e^{-(x^2+y^2)/2}\,dx\,dy\]

이제 이것은 \(xy\)평면 전체 위에서 곡면 \(z=e^{-(x^2+y^2)/2}\) 아래에 쌓인 부피를 구하는 문제가 됐다.

\(x^2+y^2\)은 점 \((x,y)\)에서 원점까지 거리 \(r\)의 제곱이다. 따라서

\[e^{-(x^2+y^2)/2}=e^{-r^2/2}\]

함수값은 \(x,y\)가 각각 얼마인지와 무관하고 원점에서의 거리 \(r\)만으로 정해진다. 예를 들어 \((3,4)\), \((5,0)\), \((0,-5)\), \((-3,4)\)는 전부 거리 5이므로 함수값이 모두 \(e^{-25/2}\)로 같다. 같은 원 위의 점들은 함수값이 전부 동일하다. 이것이 회전대칭이다. 원점에서 \(r=0\)이라 높이 \(e^0=1\)로 최대이고, 멀어질수록 높이가 0으로 떨어지는 종 모양 곡면이다.

이런 성질을 회전대칭이라고 하고, 3차원으로 그려보면 원점 위에 종(bell) 모양 언덕이 있는데 어느 방향에서 봐도 똑같은 모양이다.

함수가 \(r\)에만 의존한다면, \(x, y\)좌표로 계산하는 것보다 극좌표 \((r, \theta)\) 로 계산하는 게 단순하다. 따라서 극좌표로 바꾸면 넓이 요소가 \(dx\,dy = r\,dr\,d\theta\) 가 된다.

\[I^2=\int_0^{2\pi}\int_0^{\infty}e^{-r^2/2}\,r\,dr\,d\theta\]

두 적분의 순서는 바꿔도 되므로(피적분함수가 양수이고 전체 적분값이 유한하다는 조건 아래에서 성립한다), \(\theta\) 적분을 안쪽으로 가져와 먼저 처리하는 편이 쉽다.

\[I^2=\int_0^{\infty}\left(\int_0^{2\pi}e^{-r^2/2}\,r\,d\theta\right)dr\]

안쪽 괄호를 보자. \(\theta\)에 대해 적분하는 동안 \(r\)은 고정된 상수다. 그런데 피적분함수 \(e^{-r^2/2}\,r\)에는 \(\theta\)가 아예 들어 있지 않다. 즉 \(\theta\) 입장에서는 그냥 상수를 \(0\)부터 \(2\pi\)까지 적분하는 것이다. 상수 \(c\)를 구간 길이 \(L\)만큼 적분하면 \(cL\)이므로

\[\int_0^{2\pi}e^{-r^2/2}\,r\,d\theta =e^{-r^2/2}\,r\int_0^{2\pi}d\theta =e^{-r^2/2}\,r\cdot\Big[\theta\Big]_0^{2\pi} =2\pi\,e^{-r^2/2}\,r\]

이제 남은 것은 \(r\)에 대한 적분 하나다.

\[I^2=2\pi\int_0^{\infty}e^{-r^2/2}\,r\,dr\]

원래 \(e^{-x^2/2}\)는 원시함수가 없어서 못 풀었다. 그런데 지금 피적분함수는 \(e^{-r^2/2}\)가 아니라 \(e^{-r^2/2}\cdot r\)이다. 극좌표 넓이 요소 \(r\,dr\,d\theta\)에서 딸려 나온 \(r\)이 하나 더 붙어 있다. 이 \(r\)이 있으면 풀린다.

\(e^{-r^2/2}\)를 \(r\)로 미분하면 연쇄법칙에 의해

\[\frac{d}{dr}e^{-r^2/2}=e^{-r^2/2}\cdot\frac{d}{dr}\!\left(-\frac{r^2}{2}\right)=e^{-r^2/2}\cdot(-r)\]

이므로, \(r\,e^{-r^2/2}\)는 \(-e^{-r^2/2}\)의 도함수다.

\(u=\dfrac{r^2}{2}\)로 둔다. 양변을 \(r\)로 미분하면 \(\dfrac{du}{dr}=r\), 즉

\[du=r\,dr\]

이다. 피적분함수의 \(r\,dr\)이 통째로 \(du\)로 바뀐다. 적분 구간도 바꾼다. \(r=0\)이면 \(u=0\), \(r\to\infty\)이면 \(u\to\infty\).

\[\int_0^{\infty}e^{-r^2/2}\,r\,dr =\int_0^{\infty}e^{-u}\,du\]

\(e^{-u}\)의 원시함수는 \(-e^{-u}\)이므로

\[\int_0^{\infty}e^{-u}\,du =\Big[-e^{-u}\Big]_0^{\infty} =\lim_{u\to\infty}(-e^{-u})-(-e^{0}) =0-(-1)=1\]

\(u\to\infty\)에서 \(e^{-u}\to0\)이고, \(u=0\)에서 \(e^0=1\)이다. 따라서

\[I^2=2\pi\cdot1=2\pi\]
\[I=\sqrt{2\pi}\]

앞에서 본 대로 일반 가우시안의 넓이는 \(\sigma I\)였으므로

\[\int_{-\infty}^{\infty}\exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)dx=\sigma\sqrt{2\pi}=\sqrt{2\pi\sigma^2}\]

이고, 밀도함수 앞의 계수 \(\dfrac{1}{\sqrt{2\pi\sigma^2}}\)는 정확히 이 넓이로 나눈 것이다.

차원이 올라가도 공식은 그대로다

지금까지 \(\sqrt{2\pi}\)를 구할 때의 \(x\)는 숫자 하나였다. 그런데 1장에서 우리가 다루려던 데이터는 숫자 하나가 아니다. \(28\times28\) 흑백 이미지 한 장은 픽셀 값 784개다. 그러니 데이터 하나는

\[\mathbf{x}=(x_1,x_2,\dots,x_{784})\]

라는 숫자 784개의 묶음, 곧 784차원 벡터다. 이미지의 확률을 말하려면 밀도 \(p(\mathbf{x})\)는 이 784개 숫자 전체를 입력으로 받아야 한다.

먼저 각 축이 서로 독립이라고 가정해보자.

\(d\)차원 벡터를 \(\mathbf{x}=(x_1,x_2,\dots,x_d)\)\(i\)번째 성분 \(x_i\)를 \(i\)번째 축의 값이다.

예를들어 이미지라면 \(x_1\)은 첫 번째 픽셀의 밝기, \(x_2\)는 두 번째 픽셀의 밝기다.

\(d\)개 축이 전부 서로 독립이면 결합확률밀도는 각 축의 밀도를 곱한 것과 같다.

\[p(x_1,\dots,x_d)=p(x_1)\,p(x_2)\cdots p(x_d)=\prod_{i=1}^{d}p(x_i)\]

그리고 각 \(x_i\)가 평균 \(\mu_i\) 분산 \(\sigma_i^2\)를 가진 가우시안이라면

\[p(x_i)=\frac{1}{\sqrt{2\pi\sigma_i^2}}\exp\!\left(-\frac{(x_i-\mu_i)^2}{2\sigma_i^2}\right)\]

이다. 따라서 전체 \(d\)차원 밀도는

\[p(\mathbf{x})=\prod_{i=1}^{d}\frac{1}{\sqrt{2\pi\sigma_i^2}}\exp\!\left(-\frac{(x_i-\mu_i)^2}{2\sigma_i^2}\right)\]

가 된다.

예를들어 \(d=2\)라면

\[p(x_1,x_2)=\frac{1}{\sqrt{2\pi\sigma_1^2}}\exp\!\left(-\frac{(x_1-\mu_1)^2}{2\sigma_1^2}\right)\cdot\frac{1}{\sqrt{2\pi\sigma_2^2}}\exp\!\left(-\frac{(x_2-\mu_2)^2}{2\sigma_2^2}\right)\]

여기서 앞의 정규화 상수끼리 모으고, 지수함수끼리 모으면 된다.

\[p(x_1,x_2)=\frac{1}{\sqrt{2\pi\sigma_1^2}\sqrt{2\pi\sigma_2^2}}\exp\!\left(-\frac{(x_1-\mu_1)^2}{2\sigma_1^2}-\frac{(x_2-\mu_2)^2}{2\sigma_2^2}\right)\]
\[p(\mathbf{x})=\frac{1}{\prod_i\sqrt{2\pi\sigma_i^2}}\exp\!\left(-\sum_{i=1}^{d}\frac{(x_i-\mu_i)^2}{2\sigma_i^2}\right)\]

지수 안이 각 축의 "중심에서 떨어진 거리의 제곱"을 폭으로 나눠 더한 것 하나로 묶였다.

앞부분은 전체 밀도의 크기를 1로 맞춰주는 정규화 부분이다: \( \prod_i\sqrt{2\pi\sigma_i^2}\)

이제 식을 행렬과 벡터 형태로 이뤄지도록 바꿔보자.

먼저 평균들을 모아서 \(\boldsymbol{\mu} = (\mu_1,\mu_2,\dots,\mu_d)\) 라고 하자.

그러면 \(\mathbf{x}-\boldsymbol{\mu}\) 는 각 축에서 평균으로부터 얼마나 떨어졌는지를 모은 벡터이다.

현재는 축들이 서로 독립이라고 가정했으므로 공분산 행렬은

\[\Sigma = \begin{pmatrix} \sigma_1^2 & 0 & \cdots & 0\\ 0 & \sigma_2^2 & \cdots & 0\\ \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & \cdots & \sigma_d^2 \end{pmatrix}\]

처럼 대각선에 각 축의 분산만 들어간다.

가우시안 식에서는 분산이 분모에 있었으므로 역행렬을 사용하면

\[\Sigma^{-1} = \begin{pmatrix} 1/\sigma_1^2 & 0 & \cdots & 0\\ 0 & 1/\sigma_2^2 & \cdots & 0\\ \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & \cdots & 1/\sigma_d^2 \end{pmatrix}\]

가 된다.

지수부분은 \(-\sum_i\dfrac{(x_i-\mu_i)^2}{2\sigma_i^2}\)이므로 분모의 2를 밖으로 빼면

\[\frac{1}{2}\sum_{i=1}^{d}\frac{(x_i-\mu_i)^2}{\sigma_i^2} =-\frac{1}{2}(\mathbf{x}-\boldsymbol\mu)^{\top}\Sigma^{-1}(\mathbf{x}-\boldsymbol\mu)\]

정규화 상수 부분은 \(\prod_i\sqrt{2\pi\sigma_i^2}\) 에서 \(\sqrt{2\pi\sigma_i^2}=\sqrt{2\pi}\cdot\sigma_i\) 이므로

\[\prod_{i=1}^{d}\sqrt{2\pi\sigma_i^2} =\underbrace{\sqrt{2\pi}\cdot\sqrt{2\pi}\cdots\sqrt{2\pi}}_{d\text{번}}\cdot\sigma_1\sigma_2\cdots\sigma_d =(2\pi)^{d/2}\prod_{i=1}^{d}\sigma_i\]

제 \(\prod_i\sigma_i\)를 \(\Sigma\)로 쓴다. 대각행렬의 행렬식은 대각선 원소의 곱이므로

\[|\Sigma|=\sigma_1^2\,\sigma_2^2\cdots\sigma_d^2 \quad\Longrightarrow\quad |\Sigma|^{1/2}=\sigma_1\sigma_2\cdots\sigma_d\]

따라서

\[\prod_{i=1}^{d}\sqrt{2\pi\sigma_i^2}=(2\pi)^{d/2}|\Sigma|^{1/2}\]

두 부분을 합치면

\[p(\mathbf{x})=\frac{1}{(2\pi)^{d/2}|\Sigma|^{1/2}}\exp\!\left(-\frac{1}{2}(\mathbf{x}-\boldsymbol\mu)^{\top}\Sigma^{-1}(\mathbf{x}-\boldsymbol\mu)\right)\]

이것이 \(d\)차원 가우시안의 일반적인 꼴이다.

지금은 \(\Sigma\)가 대각행렬인 경우에서 유도했지만, 이 식은 독립인 경우에 대해서 \(\Sigma\)가 있는 경우(축끼리 관계가 있는 경우)에도 그대로 정의로 쓴다. 그 경우가 왜 여전히 가우시안인지는 2.2절에서 확인한다.

그러면 \(\sum_{i=1}^{d} \frac{(x_i-\mu_i)^2}{\sigma_i^2}\) 를 행렬로 한 번에 \(\boxed{ (\mathbf{x}-\boldsymbol{\mu})^\top \Sigma^{-1} (\mathbf{x}-\boldsymbol{\mu}) }\) 라고 쓸 수 있다.

이 식을 실제로 전개하면 정확히

\[\frac{(x_1-\mu_1)^2}{\sigma_1^2} +\cdots+ \frac{(x_d-\mu_d)^2}{\sigma_d^2}\]

가 나온다.

이걸 어떻게하고 저렇게하면 최종적으로

\[p(\mathbf{x})=\frac{1}{(2\pi)^{d/2}|\Sigma|^{1/2}}\exp\!\left(-\frac{1}{2}(\mathbf{x}-\boldsymbol\mu)^{\top}\Sigma^{-1}(\mathbf{x}-\boldsymbol\mu)\right)\]

으로 나온다.