앞의 Method 부분에서 증명하고 정당화한 AEVB(Auto-Encoding Variational Bayes)를 사용한 Variational Auto-Encoder의 예시를 들어본다. 이 외에도 다양한 형태의 AEVB가 있을 수 있다.
분포 설정하기
prior에 대해 다음과 같이 isotropic multivariate gaussian으로 가정하자.
pθ(z)=N(z;0,I) 이렇게 단순한 형태의 단일 분포로 가정할 경우 파라미터가 너무 적으나, 디코더가 충분히 깊은 MLP이므로 파라미터 부족을 해결할 수 있다. 디코더 확률분포인 pθ(x∣z)는 z 로부터 x 를 생성할 수 있고, 출력 형태에 따라 multivariate gaussian, bernoulli 등의 분포를 가진다.
Intractable한 pθ(z∣x)와 달리, 근사시킨 인코더 qϕ(z∣x)는 자유롭게 정할 수 있다. qϕ(z∣x) 또한 정규분포로 가정한다. x가 조건부인 상태에서 계산한 분포여야 하므로 출력 평균과 분산은 입력 x에 대한 인코더의 출력 형태여야 한다.
계산의 간소화를 위해 True posterior의 각 변수간의 상관관계가 없을 것으로 가정하고, 공분산이 대각행렬인 정규분포를 출력하도록 설정한다. 즉,
qϕ(z∣x(i))=N(z;μ(x(i)),σ2(x(i))) 분포에서 z 샘플링하기
샘플링이라고 하면 어렵지만, NN에서는 간단히 해당 확률분포를 학습한 NN의 feed-forward이다.
z(i,l)∼qϕ(z∣x(i)) 처럼 샘플링하면 stochastic gradient로 최적화 불가능하므로, reparameterization trick을 사용한다. ϵ(l)∼N(0,I)로 미리 샘플링하고, z(i,l)=gϕ(x(i),ϵ(l))와 같이 deterministic하게 계산한다.
정규분포 qϕ(z∣x(i))에서 샘플링하므로, gϕ(⋅)를 다음과 같이 계산한다. ⊙은 element-wise product이다( xi=ai⋅bi ).
z(i,l)=gϕ(x(i),ϵ(l))=μ(x(i))+σ(x(i))⊙ϵ(l) z 를 하나 역전파 가능하도록 샘플링하는 데 성공했다.
SGVB로 최적화하기
구하려는 lower bound는 다음과 같다.
지금까지 qϕ(z∣x(i))와 pθ(z) 모두 정규분포로 가정했기 때문에 위 식의 KL Divergence 부분은 수식 정리를 통해 간단히 만들 수 있다. 이 과정은 수식 전개가 필요하기 때문에 과정을 Appendix에 정리해 놓았다.μ(x(i)),σ(x(i))를 각각 μ(i),σ(i) 로 간단하게 표시하자.
결론적으로 z의_ _차원 J 에 대해, lower bound는 다음과 같이 표현된다.
L~(θ,ϕ;x(i))=−DKL(qϕ(z∣x(i))∣∣pθ(z))+L1l=1∑Llogpθ(x(i)∣z(i,l)) L~(θ,ϕ;x(i))=21j=1∑J(1+log((σj(i))2)−(μj(i))2−(σj(i))2)+L1l=1∑Llogpθ(x(i)∣z(i,l)) 인코더에서 출력된 z의 평균과 분산 벡터, 출력된 z에 대해 디코더에서 올바른 데이터 x(i)가 나타날 가능도(cross entropy loss)를 이용하면 estimator를 계산할 수 있다. 이를 미분/역전파해 최적화하는 것이 Variational Auto-Encoder이다.
파라미터 학습 후에는 z 벡터를 입력해 샘플을 올바르게 생성할 수 있다. 이로써 디코더 pθ(x∣z)를 구하는 문제를 해결한다. 다음 챕터의 코드를 보면 더욱 직관적으로 VAE를 이해할 수 있다.