Processing math: 100%

Variational AutoEncoder(VAE)

|

참고1 참고2 pytorch 코드

Variational autoencoder

  • p(x,z)=p(x|z)p(z)
    • x: data
    • z: latent variable

Generation process

  • 각 datapoint i에 대해
    1. zip(z)를 draw한다.
    2. xip(x|z)를 draw한다.

위 과정을 graphical model로 표시하면 다음 그림과 같다.

IMAGE

Goal of objective

우리가 원하는 것은 데이터가 주어졌을 때, 이를 가장 잘 표현하는 z를 찾고싶은 것!

p(z|x)=p(x|z)p(z)p(x)
  • 여기서 p(x)=p(xz)p(z)dz 인데 이를 구하기 힘듬!
  • 그래서 posterior를 근사시킬 필요가 있으며,
  • Variational inference는 posterior를 어떤 distribution family들 qλ(z|x)로 근사시킨다.
    • qλ(z|x)p(z|x)와 유사하도록 λ 값을 찾아나간다.
    • 3.png
  • 유사한 값을 찾기위해 KL-divergence를 쓰고, 정리해보면 다음처럼 나온다.
    • KL(qλ(z|x)||p(z|x))=logp(x)(Eq[logp(x|z)]KL(qλ(z|x)||p(z)))(1)
    • 그래서 KL(qλ(z|x)||p(z|x))를 minimize하는 것은
    • Eqλ(z|x)[log(p(x|z))]KL(qλ(z|x)||p(z)) 를 maximize하는 것!
      • p(x|z)가 decoder
      • qλ(z|x)를 encoder
      • 로 만들어버린 뒤 위 식을 maximize, 즉 위 식에 -를 곱한 값을 loss function으로 하고 학습시키면 VAE 완성

(1) 식 유도.. 증명의 맨 첫줄의 x,z는 X,Z이다. (전체 셋을 의미함) 1.png 2.png