[머신러닝] Variational Inference (1) - 분포를 왜 추정하는걸까?

안 형준·2021년 12월 30일
8
post-thumbnail

코크리 1기 회원으로 작성한 글입니다.
코크리란?

들어가며

이 시리즈는 분포를 근사 추정하는 기법인 Variational Inference를 소개, 실습하고 더 나아가 VAE로 손글씨를 생성해보는 과정을 거칠 예정입니다.

이 포스트에서는 분포 추정이 Machine Learning에서 자주 사용되는 점 추정(MLE, MAP)에 비해 어떤 이점이 있는지 설명하고, 생성모델의 목표와 연관하여 Variational Inference를 다루겠습니다.

-출처가 표기되지 않은 모든 그림은 original content 입니다.
-GitHub Link

분포를 왜 추정하는걸까?

그림 1. Beta 분포의 확률밀도함수
출처: https://upload.wikimedia.org/wikipedia/commons/f/f3/Beta_distribution_pdf.svg

warm-up

대표적인 점 추정 방식으로 MLEMLE(Maximum Likelihood Estimation)와 MAPMAP(Maximum A Posterior)가 있습니다. 최적의 parameter를 추정할 수 있다면 parameter의 분포에 대해 꼭 알아야 할까요? MLE,MAPMLE, MAP를 먼저 알아보고, 점 추정만으로 해결할 수 없는 예시를 살펴보겠습니다.

1. MLE

MLEMLE는 관측치 X={x1,x2,...,xn}X=\{x_1, x_2, ..., x_n\} 이 주어졌을 때, 관측치 xix_i가 등장할 확률의 곱인 likelihood p(Xθ)=ip(xiθ)p(X|\theta)=\prod_i p(x_i|\theta) 를 사용합니다. Likelihood를 parameter θ\theta 에 대해 최대화하면 얻은 관측치나 데이터 포인트를 가장 잘 설명하는 parameter θMLE\theta_{MLE} 를 구할 수 있습니다.

예시: 주사위의 눈 등장 확률

주사위를 여섯 번 굴려 1, 3, 6, 5, 2, 1의 눈을 얻었을 때, 각 눈이 등장할 확률 θi\theta_iMLEMLE 방식으로 추정하겠습니다. 주사위를 던질 때, 각 면이 등장할 확률을 θi\theta_i라고 한다면 그 확률 분포는 다음과 같습니다.

p(x;θ1,θ2,...,θ6)=i=16θiIi(x)p(x;\theta_1, \theta_2, ..., \theta_6)=\prod_{i=1}^6 \theta_i^{\textbf{I}_i(x)}

Ii\textbf{I}_i는 indicator function으로, xxii와 같다면 11, 이외의 경우에는 00의 값을 갖습니다. 예를 들어 xx11이 나올 확률을 구하려면, xx11을 대입합니다.

p(x=1)=θ1I1(1)θ2I2(1)θ3I3(1)θ4I4(1)θ5I5(1)θ6I6(1)=θ11θ20θ30θ40θ50θ60=θ1p(x=i)=p(i)=θi\begin{aligned} p(x=1)&= \theta_1^{\textbf{I}_1(1)}\theta_2^{\textbf{I}_2(1)}\theta_3^{\textbf{I}_3(1)}\theta_4^{\textbf{I}_4(1)}\theta_5^{\textbf{I}_5(1)}\theta_6^{\textbf{I}_6(1)} \\&= \theta_1^{1}\theta_2^{0}\theta_3^{0}\theta_4^{0}\theta_5^{0}\theta_6^{0} \\&= \theta_1 \\ \\ \therefore p(x=i) &=p(i) = \theta_i \end{aligned}

위 식에 따르면, 관측치 X=[1,3,6,5,2,1]X=[1,3,6,5,2,1] 에 대한 likelihood는 p(1)2p(3)p(6)p(5)p(2)p(1)^2p(3)p(6)p(5)p(2)으로, θ12θ3θ6θ5θ2\theta_1^2\theta_3\theta_6\theta_5\theta_2가 됩니다. XX에서 4의 눈은 등장하지 않았는데, θi=1\sum \theta_i =1 라는 조건을 만족하도록 Lagrange multiplier를 사용해 likelihood를 최대화해보겠습니다.

θ12θ3θ6θ5θ2=λ(θ1+θ2+θ3+θ4+θ5+θ6)2θ1θ3θ6θ5θ2=λ(1)(θ1으로  미분)θ12θ3θ6θ5=λ(2)(θ2으로  미분)θ12θ6θ5θ2=λ(3)(θ3으로  미분)θ12θ3θ6θ2=λ(4)(θ5으로  미분)θ12θ3θ5θ2=λ(5)(θ6으로  미분)θ1+θ2+θ3+θ4+θ5+θ6=1(6)(제한조건)\begin{aligned} \nabla \theta_1^2\theta_3\theta_6\theta_5\theta_2 &= \lambda\nabla(\theta_1+\theta_2+\theta_3+\theta_4+\theta_5+\theta_6) \\2\theta_1\theta_3\theta_6\theta_5\theta_2&= \lambda\quad(1) - (\theta_1으로\; 미분) \\\theta_1^2\theta_3\theta_6\theta_5 &= \lambda\quad(2) - (\theta_2으로\; 미분) \\\theta_1^2\theta_6\theta_5\theta_2 &= \lambda\quad(3) -(\theta_3으로\; 미분) \\\theta_1^2\theta_3\theta_6\theta_2 &= \lambda\quad(4) - (\theta_5으로\; 미분) \\\theta_1^2\theta_3\theta_5\theta_2 &= \lambda\quad(5) - (\theta_6으로\; 미분) \\\theta_1+\theta_2+\theta_3+\theta_4+\theta_5+\theta_6 &= 1\quad(6) - (제한조건) \end{aligned}

(1)(1)으로 (2)(2)를 나누는 등의 방식으로 정리하면, α=θ12=θ2=θ3=θ5=θ6\alpha = \frac{\theta_1}{2}=\theta_2=\theta_3=\theta_5=\theta_6을 얻을 수 있고, α\alpha가 최대일 때, likelihood도 최대가 됩니다. 제한조건 (6)(6)이 존재하므로, 2α+α+α+θ4+α+α=12\alpha + \alpha+\alpha+\theta_4+\alpha+\alpha = 1을 만족하도록 α\alpha를 최대화한다면, α=16,  θ4=0\alpha=\frac{1}{6},\; \theta_4 =0을 얻습니다.

θ1=13,  θ2=θ3=θ5=θ6=16,  θ4=0\therefore \theta_1 = \frac{1}{3},\; \theta_2 =\theta_3 =\theta_5=\theta_6 = \frac{1}{6},\;\theta_4 = 0

MLEMLE 방식의 문제점은 일반화 성능에서 나타납니다. 여섯 번 중 두 번 등장한 1의 눈이 등장할 확률이 13\frac{1}{3}이고, 한번도 등장하지 않은 4의 눈이 등장할 확률이 0이라는 결론은 주어진 데이터를 잘 설명하지만, 주사위를 6번 던지고 4의 눈이 나오지 않았다고 그런 일은 일어나지 않는다고 단언할 수 없습니다. 한 번도 보지 않은 데이터에 0을 부여하는 MLEMLE 방식에는 문제가 있어 보입니다.

결론적으로, MLE는 주어진 데이터를 잘 설명하지만, 데이터 분포에 대한 가설을 활용하지 않습니다.

2. MAP

MLEMLE가 주어진 데이터만을 이용하여 추론한다면, MAPMAP는 데이터 분포에 대한 가설을 활용합니다. 가설은 "데이터는 이러한 분포일거야." 혹은 "데이터는 BetaBeta 분포를 따르고 parameter는 α=5,β=4\alpha=5, \beta=4 일거야."등의 주장이나 믿음입니다. 이미 알고 있는 정보나 가설을 표현하는 분포가 prior p(θ)p(\theta) 입니다. MAPMAP 방식을 사용하려면 prior를 꼭 설정해야 합니다. Posterior p(θX)p(\theta|X)은 관측치 XX를 고려하여 업데이트한 θ\theta의 분포로, Bayes 정리에 의해 다음과 같이 주어집니다.

p(θX)=p(Xθ)p(θ)p(X)p(\theta|X) = \frac{p(X|\theta)p(\theta)}{p(X)}

Posterior에는 MLE에서 살펴본 확률의 곱 p(Xθ)p(X|\theta)p(θ)p(\theta) 가 곱해져 있습니다. 즉, prior가 likelihood의 가중치로 사용됩니다. Posterior를 θ\theta에 대해 최대화한다면 θMAP\theta_{MAP} 를 얻을 수 있습니다.

θMAP=arg maxip(xiθ)p(θ)\theta_{MAP} = \argmax{\prod_i p(x_i|\theta)p(\theta)}

예시: 동전이 앞면이 나올 확률

동전을 10번 던져서 앞면이 총 7번 나온 상황을 가정하겠습니다. MLEMLE 방식을 사용하면 동전의 앞면이 나올 확률 θ\theta를 0.7로 추정할 수 있습니다. MAPMAP 방식을 사용한다면 어떤 결과를 얻는지 살펴보겠습니다.
MAPMAP 방식을 사용하려면 prior를 설정해야 합니다. Prior 설정이 결과에 큰 영향을 미치므로, 명확히 하기 위해 다소 극단적인 예시를 들어보겠습니다. 앞면이 나올 확률 θ\theta0.50.5 이거나 0.60.6이고, 그 이외의 경우는 없다는 설정입니다. 이때, p(θ=0.5)=0.8,  p(θ=0.6)=0.2p(\theta=0.5) = 0.8,\; p(\theta=0.6) = 0.2인 상황을 생각해 보겠습니다.

실생활에 적용한다면, 앞면이 나올 확률이 0.60.6인 사기 동전과 앞면이 나올 확률이 0.50.5인 정정당당 동전이 1:41:4의 비율로 섞여있는 상황과 같습니다. 동전 하나를 임의로 골라 연달아 10번 던졌을 때 앞면이 7번 나왔습니다. 이 정보를 바탕으로 고른 동전이 사기 동전인지 정정당당 동전인지 추론해 보겠습니다.

Prior를 설정했으니 likelihood를 계산해야 합니다. 10번 중 총 7번이 앞면이 나오는 경우의 수는 10C7_{10}C_7이고, 각 상황의 확률은 θ7(1θ)3\theta^7(1-\theta)^3으로 주어지므로, likelihood는 10C7θ7(1θ)3_{10}C_7\theta^7(1-\theta)^3입니다.

이 동전은 ~prior(사전 정보)likelihood(데이터의 영향)
정정당당(θ=0.5)(\theta=0.5)0.80.810C7(0.5)7(10.5)3_{10}C_7(0.5)^7(1-0.5)^3 = 0.11720.1172
사기(θ=0.6)(\theta=0.6)0.20.210C7(0.6)7(10.6)3_{10}C_7(0.6)^7(1-0.6)^3 = 0.21500.2150

posterior는 prior와 likelihood의 곱에 비례하므로, 그 값을 최대로 만드는 parameter가 θMAP\theta_{MAP}입니다.

이 동전은 ~prior(사전 정보)likelihood(데이터의 영향)prior * likelihood(업데이트 된 정보)
정정당당(θ=0.5)(\theta=0.5)0.80.80.11720.11720.093760.09376
사기(θ=0.6)(\theta=0.6)0.20.20.21500.21500.0430.043

따라서 θMAP=0.5\theta_{MAP}=0.5 이고, 정정당당한 동전이라고 추정할 수 있습니다. 또한 θMAPθMLE\theta_{MAP}\neq\theta_{MLE}를 확인했습니다. MLE와는 다르게, MAP는 사전 가설(prior)과 데이터의 영향(likelihood)을 고려하여 parameter를 추정합니다.

결론적으로, MAP는 데이터 분포에 대한 가설을 활용합니다.

3. MLE와 MAP의 관계

위의 예시에서 MAP를 사용하기 위해 갑자기 prior를 설정했습니다. Prior 없이 MAP를 사용할 수 있을까요?

θMAP=argmaxip(xiθ)p(θ)\theta_{MAP} = \arg\max{\prod_i p(x_i|\theta)p(\theta)}

MAP에서 사용한 식에서, p(θ)p(\theta) 가 상수, 즉 uniform 분포라면 MLE에서 사용한 식 θMLE=argmaxip(xiθ)\theta_{MLE} = \arg\max\prod_i p(x_i|\theta) 과 같아지게 됩니다. 따라서 MLE는 uniform prior를 갖는 MAP의 특수한 경우입니다.

처음으로 돌아가서...

지금까지 MLE와 MAP로 parameter를 추정해 보았습니다. 이제 처음의 질문 "분포 추정은 왜 하는걸까?"로 돌아가겠습니다. 이 질문은 "분포 추정이 꼭 필요할까?" 와도 연결되어 있는데요. 먼저 MLE와 MAP만으로 해결할 수 없는 문제를 살펴보겠습니다.

문제: 럭키 슬롯 머신은 어느 쪽?

출처: https://towardsdatascience.com/mle-map-and-bayesian-inference-3407b2d6d4d9

카지노에 승률 50%로 설정된 슬롯 머신이 잔뜩 있습니다. 들리는 말에 의하면 이 카지노에 승률 67%인 럭키 슬롯 머신이 한 대 있다는데, 럭키 슬롯 머신을 찾아서 잭팟을 터트리고 싶습니다. 눈여겨 볼 만한 머신은 딱 두 대 A, B인데, 지켜본 결과 머신 A에서는 4번 중 3번을 이겼고, 머신 B에서는 121번 중 81번 이겼습니다. 과연 A와 B 중 어느 쪽이 럭키 슬롯 머신일까요?

1. MAP로 추정하기

MAP 방법을 사용하려면, 적절한 prior를 정해야 합니다. 이항 분포와 관련되고(conjugate prior) 0.5에서 최댓값을 갖는 Beta(2,2)Beta(2,2)를 prior로 설정하겠습니다. 이 prior는 "나는 저 머신의 승률이 0.5일 확률이 가장 크다고 생각해"라는 가설을 표현합니다.
머신의 승률 prior를 BetaBeta 분포로 설정하면 분포의 최빈값(mode)을 parameter에 대한 식으로 나타낼 수 있고, BetaBeta 분포에 이항 분포를 곱한 분포 또한 BetaBeta 분포의 형태가 되기 때문에, parameter 업데이트 규칙을 안다면 쉽게 MAP를 적용할 수 있습니다.

그림 2. 승률 P의 Prior, Beta(2,2)
승률이 0.5 근처에 있다는 사전 믿음을 반영한다.

Prior로 쓰인 Beta(α,β)Beta(\alpha, \beta)의 최빈값(mode)은 α1α+β2\frac{\alpha-1}{\alpha+\beta-2}로 주어지고, 관측치에 승리가 kk번, 패배가 (nk)(n-k)번 이라면 posterior는 Beta(α+k,β+nk)Beta(\alpha+k, \beta+n-k)가 된다고 알려져 있습니다. 따라서 posterior를 최대로 하는 승률 PMAPP_{MAP}는 posterior의 mode입니다.

PMAP=α+k1α+β+n2P_{MAP} = \frac{\alpha+k-1}{\alpha+\beta+n-2}

머신 A와 B의 승률을 MAP로 계산해 보겠습니다. A에서 4번 중 3번 승리, B에서 121번 중 81번 승리를 관찰했습니다.

PA,MAP=2+312+2+42=23P_{A, MAP} = \frac{2+3-1}{2+2+4-2} = \frac{2}{3} \\

PB,MAP=2+8112+2+1212=23P_{B, MAP} = \frac{2+81-1}{2+2+121-2} = \frac{2}{3} \\

PA,MAP=PB,MAP\therefore P_{A, MAP} = P_{B, MAP}

A의 관찰 횟수보다 B의 관찰 횟수가 많은데 MAP로 추정된 승률은 A와 B가 같습니다. 그렇다면 A가 럭키 슬롯머신이라는 주장과 B가 럭키 슬롯머신이라는 주장을 동등하게 확신할 수 있을까요?
그렇지 않습니다. MAP로는 posterior의 최빈값(mode)만 알 수 있을 뿐, 그 추정이 어느 정도의 확신도를 갖는지 알 수 없습니다.

2. Posterior 확인하기

이제 머신 A, B의 승률 posterior Beta(5,3),Beta(83,42)Beta(5, 3), Beta(83, 42)를 살펴보겠습니다.

그림 2. 승률 P의 Posterior p(P|X), Beta(5,3), Beta(83, 42)
승률이 0.67인 쪽은 B라고 더 확신있게 말할 수 있다.

머신 A, B의 posterior를 시각화하면, 위의 그림과 같습니다. (A: 빨강, B: 파랑)
두 분포의 최빈값은 0.66으로 같지만 머신 B의 승률 분포가 최빈값 근처에 몰려 있습니다. 머신 B의 신뢰 구간이 머신 A보다 좁기 때문에 머신 B를 럭키 슬롯 머신으로 추정하는 것이 타당합니다. 또한 이 선택은 승률이 0.5일 때 4번 중 3번 승리는 충분히 일어날 수 있지만, 121번 중 81번 승리는 잘 일어나지 않는다는 직관과 부합합니다.
이처럼 MLE(uniform prior를 갖는 posterior의 최빈값), MAP(posterior의 최빈값) 뿐만 아니라 posterior를 알아야 해결할 수 있는 문제가 존재합니다. 사실, 분포 추정은 Machine Learning의 핵심 사항으로 분포를 완벽히 알게 된다면 다른 많은 문제도 해결됩니다.

분포 추정의 이유

Machine Learning에서 추정하고 싶은 분포 p(xi)p(x_i) 는 test set의 데이터 분포로, test set에서 데이터 xix_i를 보게 될 확률을 표현합니다. 분포 p(xi)p(x_i) 를 알게 된다면 다음과 같은 작업을 할 수 있습니다.

  • 이상치 탐지: p(xi)p(x_i) 가 작은 값을 갖는 xix_i 를 이상치로 골라 낼 수 있습니다.
  • 결측치 채우기: 결측치는 p(xi)p(x_i) 를 기반으로 채울 수 있습니다.
  • 벡터 양자화: p(xi)p(x_i) 가 큰 값을 갖는 xix_i 로 test set을 군집화할 수 있습니다.

분포 p(xi,yi)p(x_i, y_i) 마저 알게 된다면 추가 작업이 가능합니다.

  • 지도 학습: p(yixi)=p(xi,yi)p(xi)p(y_i|x_i) = \frac{p(x_i, y_i)}{p(x_i)} 이므로, 데이터 xix_i의 label을 arg maxyp(yixi)\argmax_y p(y_i|x_i) 로 구할 수 있습니다.

결론적으로 분포를 정확하게 추정하면 Machine Learning의 많은 문제를 해결할 수 있어 빠르고 정확한 추정을 위한 많은 기법이 발달했습니다.

다음 포스트 예고

다음 포스트에서는 분포를 추정하는 기법 중 Variational Inference에 대해 본격적으로 소개하겠습니다.

Reference

Beta distribution-Wikipedia
MLE, MAP and Bayesian Inference
CPSP 540 - Machine Learning: UBC graduate lecture

profile
물리학과 졸업/ 인공지능 개발자로의 한 걸음

0개의 댓글