Variational Auto Encoder 정리

Plato·2024년 3월 4일
0

딥러닝

목록 보기
19/21

용어 정의

  • 잠재 변수 모형: 직접적으로 관측할 수 있는 데이터 xx와 직접적으로 관측되지 않지만 xx의 분포에 영향을 미치는 잠재 변수 zz를 갖는 모형.
  • Inference: 파라미터 θ\theta를 갖는 잠재 변수 모형을 고려하자. 이 모형의 pθ(zx)p_\theta(z|x)를 계산하는 걸 inference라 한다.
  • variational inference: pθ(zx)p_\theta(z|x)를 계산하기 어려운 경우가 종종 생긴다. 이 때, pθ(zx)p_\theta(z|x)를 다른 parametric 모델 qϕ(zx)q_\phi(z|x)로 추정하는 것을 variational inference라 부른다.
  • amortized variational inference: 전통적으로 variational inference는 데이터 포인트 한 개에 대해 진행했다. 이렇게 하는 대신, 데이터 포인트 xx를 잠재 변수의 사후 분포에 매핑하는 함수 qϕ(zx)q_\phi(z|x)를 학습할 수 있다. 이를 amortized variational inference라 부른다.
  • 오토 인코더: 입력과 출력이 같아지도록 학습한 뉴럴 네트워크를 말한다. 일반적으로 데이터를 압축하기 위해 사용하기 때문에, 중간 층의 차원 수가 입력 벡터의 차원 수 보다 낮도록 설정한다.

VAE가 무엇인가?

  • Variational Auto Encoder의 약자로, amortized variational inference를 수행하는 오토 인코더다.
    • 인코더는 qϕ(zx)q_\phi(z|x)를 출력으로 갖고 디코더는 pθ(xz)p_\theta(x|z)를 출력으로 갖는다. 즉 잠재 벡터인 zz의 분포를 모델링하는 인코더와 잠재 벡터를 입력으로 받아 데이터 xx의 분포를 모델링하는 디코더로 나뉜다.

왜 inference를 수행하나?

  • 데이터를 잘 설명하는 z를 추정할 수 있다. 예시로 pθ(zx)p_\theta(z|x)를 최대화하는 z 값은, 데이터를 고려했을 때 타당한 z 값으로 볼 수 있다.
    • z를 추정하는 이유:
      • 차원 감소를 수행하기 위해 추정하기도 한다. 잠재 벡터 zz의 차원 수가 데이터 xx의 차원 수보다 작다면, pθ(zx)p_\theta(z|x)를 사용하여, 데이터 x를 잘 나타내면서 동시에 더 낮은 차원 수를 갖는 잠재 벡터 z를 얻을 수 있다.
      • 잠재 변수를 측정하기 위해 추정하기도 한다. 예시로 지능 검사지를 만드는 경우를 고려해보자. 지능을 직접적으로 관측할 수 없지만, 지능을 요구하는 다양한 문제를 풀어보게 함으로써 간접적으로 관측할 수 있다. 지능을 잠재 변수 zz로, 문제에 대한 답을 관측 가능한 변수 xx로 모형화한다. 그 후, 문제에 대한 답 xx를 고려했을 때 지능 zz의 값이 어떨지 추론하여 지능을 측정할 수 있다.

왜 VAE를 사용하나?

  • VAE는 잠재 변수 모형으로써 복잡한 분포를 모델링할 수 있다는 장점이 있다.
    • pθ(x)=pθ(xz)p(z)dzp_\theta(x) = \int p_\theta(x|z)p(z)dz
      • 여기에서 pθ(xz)p_\theta(x|z)와 사전분포 p(z)p(z)가 가우시안 분포와 같이 잘 알려져있는 분포를 갖더라도 pθ(x)p_\theta(x)는 복잡한 분포를 가질 수 있다.
  • Inference를 ‘빠르게’ 수행할 수 있다.
    • pθ(zx)p_\theta(z|x)를 계산이 쉬운 qϕ(zx)q_\phi(z|x)로 추정하기 때문에, inference 속도가 빠르다는 장점이 있다. 물론 qϕ(zx)q_\phi(z|x)를 계산하는 네트워크인 인코더의 크기가 커지면, inference의 속도가 느려진다.

학습 방법

  • 아래에 나올 로그 우도의 lower bound를 최대화한다.
    • 로그 우도를 최대화하지 않고 lower bound를 최대화하는 이유는 추후에 설명하고 우선 왜 lower bound를 최대화했을 때 로그 우도를 최대화하는 것과 비슷한 결과를 얻을 수 있는지 생각해보자.
      • 로그 우도는 lower bound보다 항상 크거나 같기 때문에, lower bound가 커지면 로그 우도도 커질 것이라 기대할 수 있다. 다만 lower bound와 로그 우도의 차이가 충분히 작지 않으면, 로그 우도가 커지지 않을 수도 있다. 그렇기에 lower bound를 잘 선택하는 것이 중요하다.
  • log(pθ(x))=log(pθ(zx)pθ(x))=log(pθ(zx)pθ(x)qϕ(zx)qϕ(zx))=log(Eqϕ(zx)[pθ(zx)pθ(x)qϕ(zx)])Eqϕ(zx)[log(pθ(zx)pθ(x)qϕ(zx))]=Eqϕ(zx)[log(pθ(x))log(qϕ(zx)pθ(zx))]=Eqϕ(zx)[log(pθ(x))]DKL(qϕ(zx)pθ(zx))=log(pθ(x))DKL(qϕ(zx)pθ(zx))=LELBOlog(p_\theta(x))\\ =log(\int p_\theta(z|x) * p_\theta(x))\\ = log(\int p_\theta(z|x) * p_\theta(x) * \frac{q_\phi(z|x)}{q_\phi(z|x)})\\ = log(E_{q_\phi(z|x)}[\frac{p_\theta(z|x) * p_\theta(x)}{q_\phi(z|x)}])\\ \geq E_{q_\phi(z|x)}[log(\frac{p_\theta(z|x) * p_\theta(x)}{q_\phi(z|x)})]\\ = E_{q_\phi(z|x)}[log(p_\theta(x)) - log(\frac{q_\phi(z|x)}{p_\theta(z|x)})]\\ = E_{q_\phi(z|x)}[log(p_\theta(x))] - D_{KL}(q_\phi(z|x) || p_\theta(z|x))\\ = log(p_\theta(x)) - D_{KL}(q_\phi(z|x) || p_\theta(z|x))\\ = L_{ELBO}
    • 이 lower bound를 Evidence Lower Bound(ELBO)라 부르기도 한다.
    • ELBO를 사용하는 이유
      • ELBO와 로그 우도의 차이가 "충분히" 작을 것이라 기대할 수 있기 때문. log(pθ(x))log(p_\theta(x))log(pθ(x))DKL(qϕ(zx)pθ(zx))log(p_\theta(x)) - D_{KL}(q_\phi(z|x) || p_\theta(z|x))의 차이는 정확히 p와 q의 KL divergence와 같다. 그런데 lower bound가 커지기 위해서, log(pθ(x))log(p_\theta(x))는 커져야 하고 KL divergence는 작아져야 함에 주목하자. 즉 lower bound를 최대화하는 과정에서 lower bound와 로그 우도의 차이가 작아질 것이라 추측할 수 있다.
      • 또한, 이 lower bound를 최대화하면 DKL(qϕ(zx)pθ(zx))D_{KL}(q_\phi(z|x) || p_\theta(z|x))가 작아질 것에 주목하자. 이는 우리가 원하던 바이다. pθ(zx)p_\theta(z|x)의 계산이 어렵기 때문에, 더 계산이 쉬운 qϕ(zx)q_\phi(z|x)를 사용하는데, 위의 lower bound를 최대화하면 pθ(zx)p_\theta(z|x)qϕ(zx)q_\phi(z|x)의 차이가 작아진다. 즉 우리는 pθ(zx)p_\theta(z|x)를 더 잘 추론할 수 있게 된다.
  • ELBO를 계산이 가능한 형태로 다시 정리해보자
    • Eqϕ(zx)[log(pθ(zx)pθ(x)qϕ(zx))]=Eqϕ(zx)[log(pθ(xz)p(z)qϕ(zx))]=Eqϕ(zx)[log(pθ(xz))log(qϕ(zx)p(z))]=Eqϕ(zx)[log(pθ(xz))]DKL(qϕ(zx)p(z))E_{q_\phi(z|x)}[log(\frac{p_\theta(z|x) * p_\theta(x)}{q_\phi(z|x)})]\\ = E_{q_\phi(z|x)}[log(\frac{p_\theta(x|z) * p(z)}{q_\phi(z|x)})]\\ = E_{q_\phi(z|x)}[log(p_\theta(x|z)) - log(\frac{q_\phi(z|x)}{p(z)})]\\ = E_{q_\phi(z|x)}[log(p_\theta(x|z))] - D_{KL}(q_\phi(z|x) || p(z))
      • DKL(qϕ(zx)p(z))D_{KL}(q_\phi(z|x) || p(z)) 계산 방법
        • 일반적으로 VAE를 사용할 때 p(z)p(z)qϕ(zx)q_\phi(z|x) 둘 다 가우시안 분포를 갖는다고 가정한다. 두 가우시안 분포의 KL divergence는 닫힌 형태의 결과를 갖기 때문에 계산할 수 있다. 이는 구글링하면 찾을 수 있다.
      • Eqϕ(zx)[log(pθ(xz))]E_{q_\phi(z|x)}[log(p_\theta(x|z))] 계산 방법
        • 몬테 카를로 방법을 사용하여 추정할 수 있다.
  • ELBO 경사 계산
    • θLELBO=θEqϕ(zx)[log(pθ(xz))]θDKL(qϕ(zx)p(z))=θEqϕ(zx)[log(pθ(xz))]=Eqϕ(zx)[θlog(pθ(xz))]\nabla_\theta L_{ELBO}\\ = \nabla_\theta E_{q_\phi(z|x)}[log(p_\theta(x|z))] - \nabla_\theta D_{KL}(q_\phi(z|x) || p(z))\\ = \nabla_\theta E_{q_\phi(z|x)}[log(p_\theta(x|z))]\\ = E_{q_\phi(z|x)}[\nabla_\theta log(p_\theta(x|z))]
      • 이는 몬테 카를로 방법을 사용하여 추정할 수 있다.
    • ϕLELBO=ϕEqϕ(zx)[log(pθ(xz))]ϕDKL(qϕ(zx)p(z))\nabla_\phi L_{ELBO}\\ = \nabla_\phi E_{q_\phi(z|x)}[log(p_\theta(x|z))] - \nabla_\phi D_{KL}(q_\phi(z|x) || p(z))
      • DKL(qϕ(zx)p(z))D_{KL}(q_\phi(z|x) || p(z))는 닫힌 형태로 표현 가능하다.
      • 그러나 첫 번째 항의 계산은 어렵운데 심지어는 ϕEqϕ(zx)[log(pθ(xz))]Eqϕ(zx)[ϕlog(pθ(xz))]\nabla_\phi E_{q_\phi(z|x)}[log(p_\theta(x|z))] \neq E_{q_\phi(z|x)}[\nabla_\phi log(p_\theta(x|z))]이기에 몬테 카를로 방법을 사용할 수도 없다.
      • 이런 경우에 REINFORCE를 사용하거나 reparameterization trick을 사용해서 추정할 수 있는데, 여기에서는 reparameterization trick을 사용해 추정하겠다.
      • qϕ(zx)q_\phi(z|x)가 가우시안 분포이기 때문에 확률 변수 zz의 확률적인 부분을 표준 정규 분포를 갖는 확률 변수 ϵ\epsilon으로 옮길 수 있다. zxz|x의 평균이 μx,ϕ\mu_{x, \phi}, 표준편차가 σx,ϕ\sigma_{x, \phi}일 때, z=μx,ϕ+ϵσx,ϕ=g(ϵ,x,ϕ)z=\mu_{x, \phi} + \epsilon\sigma_{x, \phi} = g(\epsilon, x, \phi). 그러면 ϕEqϕ(zx)[log(pθ(xz))]=ϕEϵ[log(pθ(xg(ϵ,x,ϕ)))]=Eϵ[glog(pθ(xg(ϵ,x,ϕ)))ϕg(ϵ,x,ϕ)]\nabla_\phi E_{q_\phi(z|x)}[log(p_\theta(x|z))] = \nabla_\phi E_{\epsilon}[log(p_\theta(x|g(\epsilon, x, \phi)))] = E_{\epsilon}[\nabla_glog(p_\theta(x|g(\epsilon, x, \phi))) * \nabla_\phi g(\epsilon, x, \phi)]
        • Grad 연산자가 기댓값 안에 위치하기 때문에, 이제 몬테 카를로 방법을 사용하여 추정할 수 있다.

0개의 댓글