[머신러닝] Variational Inference (2) - 분포를 근사해보자!

안 형준·2022년 1월 6일
2
post-thumbnail

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

들어가며

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

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

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

생성모델과 판별모델

Machine Learning에서 분류 모델을 문제 해결 방식에 따라 크게 두 가지, 생성모델과 판별모델로 나눌 수 있습니다. 샘플 데이터셋을 XsampleX_{sample}, 그에 따른 label set을 YsampleY_{sample}라고 할 때, 생성모델은 XsampleX_{sample}p(X)p(X)로부터 생성되었다고 가정하고 분포 p(X),p(X,Y)p(X), p(X,Y) 를 추정하여 posterior p(YX)p(Y|X) 를 얻는 반면, 판별모델은 p(YX)p(Y|X) 를 바로 추정합니다. 다르게 말한다면, 생성모델은 데이터의 분포를 학습하여 생성 규칙을 파악하고, 판별모델은 클래스 간 차이에 집중해 decision boundary를 학습합니다.

그림 1. 왼쪽 - 판별모델, 오른쪽 - 생성모델
출처: CS 229 - Stanford Lectures

판별모델의 예시부터 들어보겠습니다. 개와 고양이 데이터셋을 입력으로 CNN(LeNet)을 사용하여 개-고양이 분류 문제를 해결하는 냥멍 모델을 생각해 보겠습니다. 샘플 xix_i는 각 layer를 연달아 통과하고, 모델은 최종 결과와 label yiy_i의 binary cross entropy loss를 최소화하도록 weight를 학습합니다. 그 결과 분류를 잘하는 모델을 얻었습니다.

냥멍 모델은 판별모델입니다. 모든 이미지의 집합 SS 에 모델의 분류 결과 p(Y=catX=xboundary)p(Y=dogX=xboundary)p(Y=cat|X=x_{boundary}) \approx p(Y=dog|X=x_{boundary}) 가 되는 경계점 xboundaryx_{boundary} 이 존재하고, 경계점은 모여서 경계를 만듭니다. SS 에서 개와 고양이 데이터셋이 어떤 분포를 갖는지, 개 이미지는 어떻게 분포되어 있는지 관심을 두지 않고, 적절한 decision boundary를 얻었습니다. 냥멍 모델로 그럴듯한 개 이미지를 생성할 수 있을까요?

그렇지 않습니다. 냥멍 모델 기준으로 p(Y=dogX)p(Y=dog|X)가 1에 가까운 이미지를 모아 놓더라도 그 집합 안에는 실제 개와 전혀 관계없는 이미지도 섞여 있기 때문입니다.

그림 2. 펭귄-기타 이진 분류모델의 분류 결과.
출처: Explainable AI with Python(Leonida Gianfagna, Antonio Di Cecco) - Springer


생성모델은 분포 p(X),p(X,Y)p(X), p(X,Y) 를 추정하는 만큼 더 복잡한 작업을 처리할 수 있습니다.(참고: 왜 분포를 추정하는걸까?) 특히 주 관심사인 posterior p(YX)p(Y|X) 를 안다면 다음과 같은 posterior inference가 가능합니다.

  • 트위터 내용 (X)(X) 을 보고, 작성자가 우울한지(Y)(Y) 알아내기
  • 감시 카메라 내역(X)(X)을 보고, 범인이 현장에 돌아올지(Y)(Y) 알아내기

하지만 생성 모델은 판별 모델에 비해 계산이 복잡하다는 단점이 있습니다.
Bayes 정리에 의해 다음이 성립하고, posterior(좌변)을 얻기 위해 Y에 대한 적분(분모)이 필요하기 때문으로, 모델 구조가 복잡하고 Y가 고차원일수록 적분은 다루기 힘들어져(intractable) 그대로 계산할 수 없고 다른 방법이 필요하게 됩니다. 그 방법 중 하나인 variational inference를 살펴보겠습니다.

p(YX)=p(X,Y)p(X)=p(XY)p(Y)p(X)=p(XY)p(Y)p(XY)p(Y)dYp(Y|X) = \frac{p(X,Y)}{p(X)} = \frac{p(X|Y)p(Y)}{p(X)} = \frac{p(X|Y)p(Y)}{\int p(X|Y) p(Y)dY}

Variational Inference

Variational Inference라는 이름은 물리학의 variational method에서 유래했습니다. Variational method를 사용하면 실제의 경로는 action functional의 정류점에 존재한다는 원리(Stationary Action Principle)로부터 운동 방정식(Euler–Lagrange equation)을 유도할 수 있습니다.

Variational Inference는 복잡한 문제를 간단한 문제로 변화시켜 함수를 근사합니다. 이 과정에서 variational parameter라는 변수를 추가로 도입하고, 추정 문제를 최적화 문제로 변화시킵니다. 예시와 함께 살펴보겠습니다.

Variational paramter λ를 도입하여 log x 를 직선으로 근사하기

기울기 λ\lambda가 주어질 때, concave function g(x)=log(x)g(x) = \log(x)를 직선으로 근사한다면 직선은 f(x)=λxb(λ)f(x)=\lambda x - b(\lambda)의 꼴로 나타나고 최적의 bb를 구하는 문제가 됩니다. x를 변화시켜 가며 λx\lambda xlog(x)\log(x)의 차 λxlog(x)\lambda x - \log(x)를 최소화하면 그 값이 주어진 λ\lambda에 대한 최적의 bb가 됩니다. λ\lambda에 대해 최적의 bb를 반환하는 함수를 f(λ)f^*(\lambda)라고 한다면, 다음의 관계를 만족합니다.

f(λ)=minx{λxf(x)}f^*(\lambda) = \min_x \{\lambda x - f(x)\}

위 관계를 직선의 방정식에 대입하면 기울기가 λ\lambda이고 log(x)\log(x)에 접하는 직선의 모임을 얻습니다. 임의의 x,λx, \lambda에 대해 J(x,λ)J(x, \lambda)log(x)\log(x)보다 크거나 같습니다.

J(x,λ)=λxf(λ)g(x),  for  all  λ,xJ(x, \lambda) = \lambda x - f^*(\lambda) \ge g(x),\;for\;all\; \lambda, x

그림 3. log x와 접하는 직선. 각 직선은 J(x,λ)에 기울기 λ를 대입하여 얻을 수 있다.

x0x_0 근처에서 g(x)g(x)를 가장 잘 근사하는 직선 f(x)f(x)에 대해 f(x0)=g(x0)f(x_0) = g(x_0)이고, 등호를 만족하는 조건(JJ의 극소점)이 되므로, 임의의 x0x_0를 기준으로 g(x)g(x)를 잘 근사한 함수 f(x)f(x)를 다음과 같이 표현할 수 있습니다.

f(x)=J(x,λ0)(where  λ0=arg minλ{J(x0,λ)}=arg minλ{λx0f(λ)})f(x) = J(x, λ_0)\\ (where\;λ_0=\argmin_\lambda \{J(x_0, λ)\} = \argmin_\lambda \{\lambda x_0 - f^*(\lambda)\})

그림 4. x= 2/3에서 J(x,λ)를 λ에 대해 최소화하면 보라 직선을 얻는다.

Variational parameter λ\lambda를 도입하여, xx에 대해 비선형인 함수 log(x)\log(x)를 선형으로 근사하는 규칙을 얻었습니다. 이때 log(x)\log(x)의 복잡성은 f(λ)f^*(\lambda)로 흡수되었습니다. 정리하면, 주어진 x0x_{0}에 대해 J(x0,λ)J(x_{0}, \lambda)를 최소화하는 λ0\lambda_0를 찾는다면 복잡한 함수 logx\log xx0x_{0} 근처에서 간단한 함수 J(x,λ0)J(x , \lambda_{0})로 잘 근사할 수 있습니다.

분포로 확장하기

분포 p(X)p(X)에 대해서도 A(X,λ)p(X),  for  all  λ,XA(X, \lambda) \le p(X),\;for\;all\;\lambda,XAA를 찾을 수 있다면, 관측치 X0X_0 근처에서 p(X)p(X)를 근사한 함수 q(X)q(X)를 다음과 같이 정할 수 있습니다.

q(X)=A(X,λ0)(where  λ0=arg maxλ{A(X0,λ)})q(X) = A(X, λ_0)\\ (where\;λ_0=\argmax_\lambda \{A(X_0, λ)\})

하지만 p(X)p(X)를 알지 못하는 상황에서, 언제나 p(X)p(X)보다 작거나 같은 함수 A(X,λ)A(X, \lambda)를 구하려면 어떻게 해야 하는지 전혀 모르겠습니다. 어떻게 해야 할까요?

Variational Inference 의 수식 유도 (1)

수식의 자세한 유도보다는 그 의미를 따라가 보겠습니다. p(X)p(X)확률분포이고, q(Zλ)q(Z|\lambda)는 마음대로 정할 수 있고, 미지입니다. 하지만 분포를 근사하고 있으므로, q(Zλ)q(Z|\lambda)도 확률분포로 제한하겠습니다.

  • 은닉 변수 ZZ가 존재하는 모델에서 데이터의 분포 p(X)=Zp(X,Z)p(X) = \sum_Z p(X,Z)입니다.
  • 양변에 log\log를 씌우면 Jensen 부등식을 통해 lower bound를 표현할 수 있습니다.
  • q(Zλ)q(Z|\lambda)에서 λ\lambda는 variational parameter이고, λ\lambdaqq의 parameter로 작동한다는 표현입니다.
  • KL(pq)=Zp(Z)logp(Z)q(Z)KL(p||q) = \sum_Z p(Z) \log \frac{p(Z)}{q(Z)} 로 정의되고, 분포 간 "얼마나 떨어져 있는지" 표현하는 척도입니다.
logp(X)=log(Zp(X,Z))=log(Zp(X,Z)    q(Zλ)q(Zλ))=log(Z  q(Zλ)    p(X,Z)q(Zλ))Zq(Zλ)logp(X,Z)q(Zλ)Z[q(Zλ)logp(X,Z)    q(Zλ)logq(Zλ)]=Z[q(Zλ)log(p(XZ)p(Z))    q(Zλ)logq(Zλ)]=Z[q(Zλ)logp(XZ)    q(Zλ)logq(Zλ)p(Z)]=Eq(Zλ)[logp(XZ)]    KL(q(Zλ)p(Z))logp(X)Eq(Zλ)[logp(XZ)]    KL(q(Zλ)p(Z))ELBO=Zq(Zλ)logp(X,Z)q(Zλ)=Eq(Zλ)[logp(XZ)]    KL(q(Zλ)p(Z))\begin{aligned} \log p(X) &= \log(\sum_Z p(X,Z)) \\&= \log(\sum_Z p(X,Z)\;\; \frac{q(Z|\lambda)}{q(Z|\lambda)})\\&=\log(\sum_Z \;q(Z|\lambda) \;\; \frac{p(X,Z)}{q(Z|\lambda)})\\&\ge\sum_Z q(Z|\lambda) \log\frac{p(X,Z)}{q(Z|\lambda)} \\ \\\sum_Z [q(Z|\lambda)\log p(X,Z)\; -\;q(Z|\lambda)\log q(Z|\lambda)]&=\sum_Z [q(Z|\lambda)\log (p(X|Z) p(Z))\; -\;q(Z|\lambda)\log q(Z|\lambda)]\\&=\sum_Z [q(Z|\lambda)\log p(X|Z)\; -\;q(Z|\lambda)\log \frac{q(Z|\lambda)}{p(Z)}] \\&= \mathbb E_{q(Z|\lambda)}[\log p(X|Z)]\; - \; KL(q(Z|\lambda)||p(Z)) \\\\ \therefore \log p(X) &\ge \mathbb E_{q(Z|\lambda)}[\log p(X|Z)]\; - \; KL(q(Z|\lambda)||p(Z))\\\\ ELBO&= \sum_Z q(Z|\lambda) \log\frac{p(X,Z)}{q(Z|\lambda)}\\ &= \mathbb E_{q(Z|\lambda)}[\log p(X|Z)]\; - \; KL(q(Z|\lambda)||p(Z)) \end{aligned}

위 과정을 통해, logp(X)\log p(X)에 대해 lower bound를 얻어냈습니다. logp(X)\log p(X) 혹은 p(X)p(X) 를 evidence라고 부르므로, logp(X)\log p(X)의 lower bound를 ELBOELBO(Evidence Lower BOund)라고 부릅니다.

따라서 q(Zλ)q(Z|\lambda)의 모양과 λ\lambda를 조절하여 ELBOELBO를 최대화한다면 logp(X)\log p(X)를 잘 근사했다는 결론을 얻습니다. 하지만 q(Zλ)q(Z|\lambda)GaussianGaussian 분포로 제한했을때, p(X)p(X)GaussianGaussian 분포로 한정되지는 않으므로 주의해야 합니다. logp(X)\log p(X)ELBO=Eq(Zλ)[logp(XZ)]    KL(q(Zλ)p(Z))ELBO =\mathbb E_{q(Z|\lambda)}[\log p(X|Z) ]\; - \; KL(q(Z|\lambda)||p(Z)) 로 근사하므로 q(Zλ)q(Z|\lambda)의 모양에 직접적인 영향은 받지 않기 때문입니다.

Variational Inference 의 수식 유도 (2)

실제 상황에서 Variational Inference는 posterior p(ZX)p(Z|X)를 근사하기 위해 주로 사용됩니다. q(Zλ)q(Z|\lambda)p(ZX)p(Z|X)를 근사하는 상황을 살펴 보겠습니다. q(Zλ)q(Z|\lambda)를 최대한 p(ZX)p(Z|X)에 가깝게 만들어야 하는데요, 그 metric으로 KL(q(Zλ)p(ZX))KL(q(Z|\lambda)||p(Z|X))를 활용하겠습니다.

  • KLKL divergence는 두 분포가 같다면 0, 그 이외의 경우에는 0보다 큽니다.
  • KL(q(Zλ)p(ZX))KL(q(Z|\lambda)||p(Z|X))를 최소화할수록 두 분포가 가까워진다고 할 수 있습니다.
  • logp(X)\log p(X)ZZ와 무관하므로, ZZ에 대해 상수 취급할 수 있습니다.
KL(q(Zλ)p(ZX))=Zq(Zλ)logq(Zλ)p(ZX)=Zq(Zλ)logq(Zλ)p(X)p(Z,X)=Zq(Zλ)[logq(Zλ)p(Z,X)+logp(X)]=logp(X)Zq(Zλ)  +  Zq(Zλ)logq(Zλ)p(Z,X)=logp(X)1    Zq(Zλ)logp(Z,X)q(Zλ)=logp(X)    ELBO\begin{aligned} KL(q(Z|\lambda)||p(Z|X)) &= \sum_Z q(Z|\lambda) \log\frac{q(Z|\lambda)}{p(Z|X)}\\&= \sum_Z q(Z|\lambda) \log\frac{q(Z|\lambda)p(X)}{p(Z,X)}\\&=\sum_Z q(Z|\lambda)[\log\frac{q(Z|\lambda)}{p(Z,X)} + \log p(X) ]\\&=\log p(X)\sum_Zq(Z|\lambda)\; + \; \sum_Z q(Z|\lambda)\log\frac{q(Z|\lambda)}{p(Z,X)} \\&=\log p(X) * 1\; - \; \sum_Z q(Z|\lambda)\log\frac{p(Z,X)}{q(Z|\lambda)} \\&=\log p(X) \;-\; ELBO \end{aligned}

흥미로운 결과를 얻었습니다. 흐름을 정리해 보면,

  1. p(ZX)p(Z|X)를 구하려면 분모의 p(X)p(X)를 알아야 하는데, 복잡하여 바로 계산할 수 없습니다.
  1. p(X)p(X)를 근사하기 위해 lower bound(ELBOELBO)를 찾고, ELBOELBO를 최대화하려 합니다.

  2. 아직 ELBOELBO를 최적화하는 방법은 모르지만, q(Zλ)q(Z|\lambda)p(ZX)p(Z|X)를 근사해 봅니다. 이때 metric으로 KLKL divergence를 사용합니다.

  3. 3의 결과로 KL(q(Zλ)p(ZX)),  logp(X),  ELBOKL(q(Z|\lambda)||p(Z|X)),\; \log p(X),\;ELBO가 함께 존재하는 식을 얻었습니다. 이때 p(X)p(X)q(Zλ)q(Z|\lambda) 선택과 무관합니다. 따라서 KL(q(Zλ)p(ZX))+ELBOKL(q(Z|\lambda)||p(Z|X)) + ELBO 는 상수이고, KLKL을 어떤 값만큼 줄인다면, ELBOELBO는 같은 값만큼 증가합니다.

  4. p(X)p(X)를 더 잘 근사(ELBOELBO 최대화)하려고 하든, p(ZX)p(Z|X)를 더 잘 근사(KLKL 최소화)하려고 하든 같은 결과를 얻으므로, ELBOELBO 최대화와 KLKL 최소화 둘 중 가능한 태스크를 수행하면 됩니다.

  5. 분포 추정 문제가 최적화 문제로 바뀌었으므로 Variational Inference는 optimization을 통해 추정, 즉 inference를 실행한다고 볼 수 있습니다.

Variational Inference 예시 및 시각화

Variational Inference는 복잡한 모델을 추정하기 위한 방법이지만 간단한 예시에서도 배울 점이 있습니다. P(ZX)P(Z|X)BetaBeta 분포이고, Q(Zλ)Q(Z|\lambda)GaussianGaussian 분포로 제한한 상황을 가정하겠습니다. QQ의 parameter를 바꾸어 가며 얼마나 P(ZX)P(Z|X)를 잘 근사했는지에 따라 KLKLELBOELBO가 어떻게 변화하는지 살펴보겠습니다.

P(ZX=x)=Beta(10+30x,10)P(X)=Beta(2,3)Q(Zμ,σ)=N(μ,σ2)P(Z|X=x) = Beta(10 + 30x, 10)\\ P(X) = Beta(2,3)\\ Q(Z|\mu, \sigma) = N(\mu, \sigma^2)

(P(X),P(ZX)P(X), P(Z|X)를 모르는 상황이 일반적이나, 시각화를 위해 알고 있다고 가정했습니다.)

분포가 위와 같이 주어졌을 때, Q(Zμ,σ)Q(Z|\mu, \sigma)P(ZX=x)P(Z|X=x)에 가까울수록 KLKL은 작아지고, ELBOELBO는 커집니다. 이 관계를 살펴보기 위해 우리의 예시에선 x=0.4x=0.4로 고정한 뒤 QQ를 변화시키며 ELBOELBOKLKL의 변화를 관찰하겠습니다.

또한, 관측한 데이터가 바뀔 때의 영향을 살펴보기 위해 QQ를 고정한 채 x=0.15x=0.15로 관측이 바뀌었을 때의 결과를 다루겠습니다.

  • KL(QP)KL(Q||P)는 우하단 그래프의 x=0.4x=0.4에서의 자주색 선분의 길이로 표현됩니다.
    (Q(Zλ)Q(Z|\lambda)(파랑색 음영)가 P(ZX)P(Z|X)(초록색)과 먼 정도)

  • 청록색 선분은 ELBOELBO입니다. 이 값을 최대화하고 싶습니다.

  • ELBOELBOKLKL을 합치면 logP(X=0.4)\log P(X=0.4)와 동일함을 확인할 수 있습니다.


예시 1. KL(Q||P) = 0.786 > log P(X=0.4) 그림 5. P(Z|X)와 Q(Z|λ)의 KL이 커서 ELBO < 0 이고, ELBO를 최대화할 여지가 많이 남아있다.


예시 2. KL(Q||P) = 0.033 그림 6. P(Z|X)와 Q(Z|λ)의 KL이 작아 ELBO가 log P(X=0.4)를 잘 근사한다.


예시 3. 관측치 변화 X = 0.4 -> 0.15 그림 7. Q(Z|λ)는 예시 2와 동일, 관측치가 X=0.15 로 변화했다.
P(Z|X)역시 X의 영향을 받아 Q(Z|λ)와 멀어져 KL이 커졌다.


예시 1과 2를 통해 KLKL이 작을수록 더 좋은 근사가 됨을 알 수 있고,
예시 2와 3을 통해 p(ZX)p(Z|X)가 관측 데이터에 따라 변하므로, q(Zλ)q(Z|\lambda)가 얼마나 잘 근사하는지도 관측한 데이터에 영향을 받음을 알 수 있습니다.

정리하면, λ\lambda를 변화시켜 주어진 데이터셋 XX에 대해 ELBOELBO를 최대화하거나 KLKL을 최소화하면, 분포를 가장 잘 근사한 경우가 됩니다. 이 때 근사의 한계는 설정한 q(Zλ)q(Z|\lambda)의 모양에 따라 결정됩니다. 선형 근사에서 가장 잘 근사한 직선을 얻었듯이, q(Zλ)q(Z|\lambda)를 Gaussian으로 설정하고 KLKL을 최소화하면 q(Zλ)q(Z|\lambda)p(ZX)p(Z|X)를 잘 근사한 Gaussian이 됩니다. 동시에 ELBOELBO는 관측치 XsampleX_{sample} 근처에서 qq의 제한조건 내에서 p(X)p(X)를 가장 잘 근사한 값이라고 할 수 있습니다.

다음 포스트 예고

다음 포스트는 최적화는 어떤 방식으로 이루어지는지 설명하고 Variational Inference를 Gaussian Mixture Model에 적용해보겠습니다.

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

2개의 댓글

comment-user-thumbnail
2022년 1월 10일

파이팅입니닷 형준님!!!🔥

1개의 답글