Variational Auto Encoder 정리

Plato·2024년 3월 4일

딥러닝

목록 보기
19/21

용어 정의

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

VAE가 무엇인가?

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

왜 inference를 수행하나?

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

왜 VAE를 사용하나?

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

학습 방법

  • 아래에 나올 로그 우도의 lower bound를 최대화한다.
    • 로그 우도를 최대화하지 않고 lower bound를 최대화하는 이유는 추후에 설명하고 우선 왜 lower bound를 최대화했을 때 로그 우도를 최대화하는 것과 비슷한 결과를 얻을 수 있는지 생각해보자.
      • 로그 우도는 lower bound보다 항상 크거나 같기 때문에, lower bound가 커지면 로그 우도도 커질 것이라 기대할 수 있다. 다만 lower bound와 로그 우도의 차이가 충분히 작지 않으면, 로그 우도가 커지지 않을 수도 있다. 그렇기에 lower bound를 잘 선택하는 것이 중요하다.
  • log(pθ(x))=log(∫pθ(z∣x)∗pθ(x))=log(∫pθ(z∣x)∗pθ(x)∗qϕ(z∣x)qϕ(z∣x))=log(Eqϕ(z∣x)[pθ(z∣x)∗pθ(x)qϕ(z∣x)])≥Eqϕ(z∣x)[log(pθ(z∣x)∗pθ(x)qϕ(z∣x))]=Eqϕ(z∣x)[log(pθ(x))−log(qϕ(z∣x)pθ(z∣x))]=Eqϕ(z∣x)[log(pθ(x))]−DKL(qϕ(z∣x)∣∣pθ(z∣x))=log(pθ(x))−DKL(qϕ(z∣x)∣∣pθ(z∣x))=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ϕ(z∣x)∣∣pθ(z∣x))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ϕ(z∣x)∣∣pθ(z∣x))D_{KL}(q_\phi(z|x) || p_\theta(z|x))가 작아질 것에 주목하자. 이는 우리가 원하던 바이다. pθ(z∣x)p_\theta(z|x)의 계산이 어렵기 때문에, 더 계산이 쉬운 qϕ(z∣x)q_\phi(z|x)를 사용하는데, 위의 lower bound를 최대화하면 pθ(z∣x)p_\theta(z|x)와 qϕ(z∣x)q_\phi(z|x)의 차이가 작아진다. 즉 우리는 pθ(z∣x)p_\theta(z|x)를 더 잘 추론할 수 있게 된다.
  • ELBO를 계산이 가능한 형태로 다시 정리해보자
    • Eqϕ(z∣x)[log(pθ(z∣x)∗pθ(x)qϕ(z∣x))]=Eqϕ(z∣x)[log(pθ(x∣z)∗p(z)qϕ(z∣x))]=Eqϕ(z∣x)[log(pθ(x∣z))−log(qϕ(z∣x)p(z))]=Eqϕ(z∣x)[log(pθ(x∣z))]−DKL(qϕ(z∣x)∣∣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ϕ(z∣x)∣∣p(z))D_{KL}(q_\phi(z|x) || p(z)) 계산 방법
        • 일반적으로 VAE를 사용할 때 p(z)p(z)와 qϕ(z∣x)q_\phi(z|x) 둘 다 가우시안 분포를 갖는다고 가정한다. 두 가우시안 분포의 KL divergence는 닫힌 형태의 결과를 갖기 때문에 계산할 수 있다. 이는 구글링하면 찾을 수 있다.
      • Eqϕ(z∣x)[log(pθ(x∣z))]E_{q_\phi(z|x)}[log(p_\theta(x|z))] 계산 방법
        • 몬테 카를로 방법을 사용하여 추정할 수 있다.
  • ELBO 경사 계산
    • ∇θLELBO=∇θEqϕ(z∣x)[log(pθ(x∣z))]−∇θDKL(qϕ(z∣x)∣∣p(z))=∇θEqϕ(z∣x)[log(pθ(x∣z))]=Eqϕ(z∣x)[∇θlog(pθ(x∣z))]\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ϕ(z∣x)[log(pθ(x∣z))]−∇ϕDKL(qϕ(z∣x)∣∣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ϕ(z∣x)∣∣p(z))D_{KL}(q_\phi(z|x) || p(z))는 닫힌 형태로 표현 가능하다.
      • 그러나 첫 번째 항의 계산은 어렵운데 심지어는 ∇ϕEqϕ(z∣x)[log(pθ(x∣z))]≠Eqϕ(z∣x)[∇ϕlog(pθ(x∣z))]\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ϕ(z∣x)q_\phi(z|x)가 가우시안 분포이기 때문에 확률 변수 zz의 확률적인 부분을 표준 정규 분포를 갖는 확률 변수 ϵ\epsilon으로 옮길 수 있다. z∣xz|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ϕ(z∣x)[log(pθ(x∣z))]=∇ϕEϵ[log(pθ(x∣g(ϵ,x,ϕ)))]=Eϵ[∇glog(pθ(x∣g(ϵ,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개의 댓글