Saturday, August 19, 2017

Variational Autoencoder 개념

Variational Autoencoder

Paper

Original paper

Tutorial paper

    References and tutorials

    • Manifold hypothesis
      • Generative model 및 deep learning 자체가 기반하고 있는 개념; 즉, 고차원의 실제 데이터($X$)를 저차원의 표현(representation, $Z$)으로 나타낼 수 있음.
    • Auto Encoder
      • encode: Input -> Hidden
        • 입력 데이터가 적은 수의 뉴런으로 압축(encoding, dimensionality reduction)된다고 간주되며, 의미있는 특징을 뽑아내는 과정으로 이해됨.
        • (PCA가 선형적인 한계를 가지는 반면,) AE는 non-linearity 및 뛰어난 차원 축소 능력을 가진다.
      • decode: Hidden -> Output
      • label이 필요없이, 입력 데이터 만으로 파라미터 값을 결정하는 un-supervised learning.
      • hidden layer가 여러 계층 누적된 구조를 stacked autoencoder라고 부름.
        • 누적 계층을 인해 capacity가 늘어나면서, 훨씬 다양한 함수 표현이 가능하다고 함. 또한, 해당 구조를 학습하기 위해서, greedy layer-wise training(각 계층별로 단계적으로 탐욕스럽게 학습)을 수행함.
    • Variational Inference
      • 복잡한 densities를 단순하게 근사하는(approximating) 기법 
    • Kullback Leibler (KL) divergence
      • 두 개의 분포, P와 Q가 일치할 때가 zero이고, 일치하지 않으면 항상 양수(non-negative).
    $$D_{KL}(P||Q) = \int p(x)log\frac{p(x)}{q(x)}$$

    Concept

    • X에 대한 Z의 연산식에 확률 $P_{\theta}(X|Z)$을 추가 적용해 보자! 즉, X와 Z를 random variable로 다루자.
      • 즉, 종래의 Auto Encoder가 단순히 Linear Regression에 의해 X를 구했다면, VAE는 Probability를 함께 이용해보자는 것임.
        • 이러한 확률 모델을 기반으로, confidence bounds를 이용할 수 있음
    • 이제 MLE를 활용해서 각 Z에 대한 X를 잘 찾아내보려고 하는데(즉, $p_{\theta}(x)$를 극대화하기 위해), 다음 식에서처럼 intractable posterior를 구하기 어렵다.
    $$ \arg\max_\theta \left [ p_{\theta}(x) = \int_{z}p_{\theta}(x, z) = \int_{z}p_{\theta}(x|z)p_{\theta}(z) \right ] $$
    • 이제 variational inference를 이용하여 복잡한 확률분포를 단순한 확률분포로 근사치를 계산하자.
    $$q_{\phi}(z|x) \approx $ p_{\phi}(z|x)$$
    • log MLE에 대한 식을 풀어보면 다음과 같다(논문의 식1, 식2). 따라서, evidence $p_{\theta}(x)$의 lower bound를 구할 수 있으며, 이제는 ELBO를 최대화한다. 이 때, 제일 아래 식의 $q_{\phi}(z|x)$에 관한 monte carlo sampling에 의해 estimation을 구할 수 있다고 함. 한걸음 더 나아가면, 논문의 식3을 통해 ELBO에서 KL-divergence term을 한번 더 분리해 냄으로써, 보다 variance를 줄일 수 있다고 함.

    No comments:

    Post a Comment

    Windows 10 High DPI 에서 Java application의 Font 조절

    Reference:  How do I run Java apps upscaled on a high-DPI display?  @superuser.com Summarize 1) Find java.exe you installed.  2) Righ...