Variational AutoEncoder
Variational AutoEncoder란?
-
AutoEncoderAE와 동일하게 입력 데이터를 재현(복원)한다.
-
하지만 AE는 입력 데이터를 Encoder를 통해 Latent vector로 만드는 압축 방식을 하였다면, Variational AutoEncoderVAE는 입력 데이터의 Encoder 결과로 평균과 분산을 얻어, 입력 데이터의 분포를 얻게 되는 차이점이 있다.
-
VAE는 Encoder를 통해 얻은 분포를 사용하여 latent vector $z$를 sampling하게 되는데, 이과정은 역전파가 불가능해 기울기 계산을 할 수 없다.
-
미분 가능하게 하기 위해 Reparameterization Trick을 사용해 미분 가능하게 하였다.
-
VAE는 Encoder를 위해 개발된 AE와 다르게 Decoder를 사용하기 위해 개발된 모델이다.
VAE 이론적 설명
VAE의 배경은 “latent variable 이하 $z$를 사용하여 이미지를 생성한다.” 에서 시작한다.
$z$의 확률 분포를 $p_{\theta}(z)$라고 할 때, 생성하려고 하는 이미지의 확률 분포 $p(x)$를 구하는 조건부 확률은 $p_{\theta}(x\vert{}z)$와 같다.
$p_{\theta}(x)$는 $\int{}p_{\theta}(x, z)dz$로 표현 가능Marginalization하고, $\int{}p_{\theta}(z)p_{\theta}(x\vert{} z) dz$와 같다.
두 확률분포 $p_{\theta}(x, z)$와 $p_{\theta}(z)p_{\theta}(x\vert{} z)$가 동일한 이유는 조건부 확률Conditional Probability로 식 변형이 가능하기 때문이다.
$\int{p_{\theta}(z)p_{\theta}(x\vert{} z) dz}$식에서 $p_{\theta}$는 정규분포Gaussian prior distribution임으로 우리가 가정할 수 있고, $p_{\theta}(x\vert{} z)$ 또한 신경망을 통해 추론할 수 있다.
하지만 모든 $z$에 대해서 적분하는 것은 불가능한데, 확률 분포 $p_{\theta}(z)$를 알고 있다고 하더라도, 연속 확률 분포의 경우 무한한 가능한 값의 범위를 가지기 때문에 $z$에 값을 정확히 아는것은 불가능Intractible하다.
그렇다면 $x$로 부터 $z$를 얻을 수는 없을까 생각을 한다면, $p_{\theta}(z \vert{} x)$과 같은 식이 된다.
그리고 $p_{\theta}(z \vert{} x)$는 $p_{\theta}(x \vert{} z)p_{\theta}(z) / p_{\theta}(x)$와 같이 변형할 수 있다.Bayes Rule
하지만 궁극적으로 얻고싶은 확률분포 $p_{\theta}(x)$의 값을 알 수 없기 때문에, $p_{\theta}(z \vert{} x)$ 또한 얻을 수 없다.Intractible
그렇다면 정규분포인 $z$의 값을 알 수 있다면 앞서 전개된 $p_{\theta}(x)$의 분포를 알 수 있을 것이다.
“어떻게 $z$의 값을 알 수 있을까?” 의 대답은 AutoEncoderAE의 Encoder를 생각한다면 해결할 수 있다.
AE Encoder의 경우 입력 데이터를 압축하여 잠재 변수latent variable $z$로 만들었다면, VAE는 입력 데이터를 정규분포인 잠재 변수latent variable $z$로 만들어주게 된다.
그렇다면 Encoder $q_{\phi}(.)$는 $x$가 주어졌을 때 $z$를 sampling 하게되는데 $q_{\phi}(z \vert{} x)$와 같이 표현할 수 있다.
$q_{\phi}(z \vert{} x)$의 결과인 $z$는 정규분포를 따라야하기 때문에, 두 분포($z$와 정규분포)간의 차이를 구할 수 있는 Kullback-LeiblerKL divergence의 결과를 최소하는 학습을 통해 $z$를 얻을 수 있다.
자세한 식은 아래 VAE Loss function을 통해 확인 할 수 있다.
VAE Loss function
가장 처음에 얻고자 $p_{\theta}(x)$의 기대값은 다음과 같이 전개할 수 있다.
\[p_{\theta}(x) = E_{z\sim{}q_{\phi}(z\vert{} x)}[p_{\theta}(x)]\]log를 적용하여 다시 전개한다.log를 사용하는 이유
\[\log{p_{\theta}(x)} = E_{z\sim{}q_{\phi}(z\vert{} x)}[\log{p_{\theta}(x)}]\]앞으로 가시성을 높이기 위해 $E_{z\sim{}q_{\phi}(z\vert{} x)}$는 $E_{z}$로 표기한다.
$E_{z}[\log{p_{\theta}(x)}]$는 다음과 같이 Bayes Rule을 적용하여 전개할 수 있다.
\[E_{z}[\log{p_{\theta}(x)}] = E_{z}[\log{\frac{p_{\theta}(x\vert{}z)p_{\theta}(z)}{p_{\theta}(z\vert{}x)}}]\]분모와 분자에 $q_{\phi}(z\vert{}x)$를 공통으로 곱해준다.
\[= E_{z}[\log{\frac{p_{\theta}(x\vert{}z)p_{\theta}(z)}{p_{\theta}(z\vert{}x)}} \cdot \frac{q_{\phi}(z\vert{}x)}{q_{\phi}(z\vert{}x)}]\]log함수를 활용하여 수식을 다음과 같이 전개한다.
\[E_{z}[\log{p_{\theta}(x\vert{}z)}]-E_{z}[\log{\frac{q_{\phi}(z\vert{}x)}{p_{\theta}(z)}}]+E_{z}[\log{\frac{q_{\phi}(z\vert{}x)}{p_{\theta}(z\vert{}x)}}]\]그리고 기대값의 합연속 랜덤변수 함수 기대값을 다음식과 같이 적분한 값으로 정리할 수 있다.
\[E_{z\sim{}q_{\phi}(z\vert{} x)}[\log{\frac{q_{\phi}(z\vert{}x)}{p_{\theta}(z)}}] = \int_{z} \log{\frac{q_{\phi}(z\vert{}x)}{p_{\theta}(z)}} q_{\phi}(z\vert{} x) dz\] \[E_{z\sim{}q_{\phi}(z\vert{} x)}[\log{\frac{q_{\phi}(z\vert{}x)}{p_{\theta}(z\vert{}x)}}] = \int_{z} \log{\frac{q_{\phi}(z\vert{}x)}{p_{\theta}(z\vert{}x)}} q_{\phi}(z\vert{} x) dz\] \[E_{z}[\log{p_{\theta}(x\vert{}z)}] - \int_{z} \log{\frac{q_{\phi}(z\vert{}x)}{p_{\theta}(z)}} q_{\phi}(z\vert{} x) dz + \int_{z} \log{\frac{q_{\phi}(z\vert{}x)}{p_{\theta}(z\vert{}x)}} q_{\phi}(z\vert{} x) dz\]따라서 처음 $ E_{z}[\log{\frac{q_{\phi}(z\vert{}x)}{p_{\theta}(z)}}]$과 $E_{z}[\log{\frac{q_{\phi}(z\vert{}x)}{p_{\theta}(z\vert{}x)}}]$로 정리한 이유는 기대값의 합연속 랜덤변수 함수 기대값으로 표현하기 위해서였고, 위 식들은 다음 식과 같이 Kullback-Leibler divergence로 변환할 수 있다.
\[E_{z}[\log{p_{\theta}(x\vert{}z)}]-D_{KL}(q_{\phi}(z\vert{}x)\vert{}\vert{}p_{\theta}(z)) + D_{KL}(q_{\phi}(z\vert{}x)\vert{}\vert{}p_{\theta}(z\vert{}x))\]최종적인 식은 다음과 같고 우리는 Maximum Likelihood Estimation를 수행할 수 있다.
그리고 위 식을 다음과 같이 표할 수 있는데, 그 이유는 아래에서 설명한다.
\[\underbrace{E_{z}[\log{p_{\theta}(x\vert{}z)}]-D_{KL}(q_{\phi}(z\vert{}x)\vert{}\vert{}p_{\theta}(z))}_{L(x, \theta, \phi)} + \underbrace{D_{KL}(q_{\phi}(z\vert{}x)\vert{}\vert{}p_{\theta}(z\vert{}x))}_{\geq{0}}\]우선 $ D_{KL}(q_{\phi}(z\vert{}x)\vert{}\vert{}p_{\theta}(z\vert{}x)) $ 이 식에서 $q_{\phi}(z\vert{}x)$는 계산 가능하지만, $p_{\theta}(z\vert{}x)$는 계산할 수 없다.
하지만 KL divergence의 값은 항상 0보다 크거나 같기 때문에 우리는 신경쓰지지 않고, 앞의 2개의 수식을 최대화 해주면 된다.
논문에서 자주나오는 식으로 다음과 같이 아래에 $\geq{0}$를 붙여 표현한다.
\[\underbrace{D_{KL}(q_{\phi}(z\vert{}x)\vert{}\vert{}p_{\theta}(z\vert{}x))}_{\geq{0}}\]이제 앞의 두 데 $E_{z}[\log{p_{\theta}(x\vert{}z)}]-D_{KL}(q_{\phi}(z\vert{}x)\vert{}\vert{}p_{\theta}(z))$을 최대화 할 수 있는 $L(x, \theta, \phi)$의 값을 찾으면 된다.
우리가 최대화 해야하는 변수는 $\theta$ 와 $\phi$임으로 다음과 같이 정리할 수 있다.
\[\theta^{*}, \phi^{*} = \arg\underset{\theta,\phi}{\max}\sum_{i=1}^{N}L(x^{(i)},\theta,\phi)\]또한 심층망은 일반적으로 기울기를 사용하여 훈련함으로, 식을 minimization할 수 있도록 다음과 같이 변환한다.
\[\arg\underset{\theta,\phi}{\min}\sum_{i=1}^{N} - E_{q_{\phi}(z\vert{}x_{i})}[\log{p(x_{i}\vert{}g_{\theta}(z))}] + D_{KL}(q_{\phi}(z\vert{}x_{i})\vert{}\vert{}p(z))\]이 식을 Evidence Lower BOundELBO라 한다.
ELBO에서 $- E_{q_{\phi}(z\vert{}x_{i})}[\log{p(x_{i}\vert{}g_{\theta}(z))}]$는 Reconstruction Error라 하고, $ D_{KL}(q_{\phi}(z\vert{}x_{i})\vert{}\vert{}p(z))$는 Regularization Error라고 칭한다.
Reconstruction Error
\[- E_{q_{\phi}(z\vert{}x_{i})}[\log{p(x_{i}\vert{}g_{\theta}(z))}]\]위 식에서 진짜 데이터 $x$를 Encoder를 사용하여 생성된 latent variable $z$를 Decoder에 입력했을 때 $x$가 생성될 확률이다.
위 식을 다음과 같이 연속 랜덤변수 함수 기대값정리를 적용한다.
\[E_{q_{\phi}(z\vert{}x_{i})}[\log({p(x_{i}\vert{}z)})] = \int\log({p_{\theta}(x_{i}\vert{}z))q_{\phi}(z\vert{}x_{i})dz}\]여기서 모든 $z$에 대해서 적분하기는 심층망의 연산량에 큰 부하를 가져올 수 있다.
따라서 $z$ sampling을 Monte-carlo technique을 적용하지만 VAE에서는 sampling 개수를 1번으로 제한한다.
식은 다음과 같게된다.
\[E_{q_{\phi}(z\vert{}x_{i})}[\log({p(x_{i}\vert{}z)})] = \int\log({p_{\theta}(x_{i}\vert{}z))q_{\phi}(z\vert{}x_{i})dz} \approx \frac{1}{L}\sum_{z^{i,j}}\log(p_{\theta}(x_{i}\vert{}z^{i,j})) \underset{L=1}{\approx} \log(p_{\theta}(x_{i}\vert{}z^{i}))\]$\log(p_{\theta}(x_{i}\vert{}z^{i}))$값을 정규분포로 가정하였을 때, 우리는 Cross entropy loss에 적용하여 해결할 수 있다. 따라서 최종적인 식은 다음과 같다.
\[\sum_{j=1}^{D}x_{i,j}\log{p_{i,j}} + (1-x_{i,k})\log{(1-p_{i,k})}\]Regularization Error
\[D_{KL}(q_{\phi}(z\vert{}x_{i})\vert{}\vert{}p(z))\]이 식은 Encoder를 통해 생성되는 $z$가 정규분포와 같게 만들어 주기 위한 식이다.
우리는 위 식을 위해 다음과 같이 가정한다.
-
$q_{\phi}(z\vert{}x_{i})\sim{}N(\mu_{i},\delta_{i}^{2}I)$, 생성되는 $z$가 정규분포를 따른다.
-
$p(z)\sim{}N(0,I)$, $z$는 표준정규분포를 따른다.
Reparameterization Trick
Encoder를 통해 생성한 평균과 분산으로 정규분포를 만들경우 미분이 불가능해진다.
따라서 표준정규분포 $\epsilon\sim{}N(0,I)$에서 sampling 하여 다음과 같이 계산한다.
\[z^{i,j} = \mu_{i} + \sigma \odot \epsilon\]다음과 같이 할 경우 정규분포를 가지는 $z$를 얻을 수 있고, 미분이 가능한 식이 된다.
Appendix
\[p(z\vert{} x) = \frac{p(x,z)}{p(x)},\;\;\; p(x\vert{} z) = \frac{p(x,z)}{p(z)}\]\[p_{\theta}(x) = \int{p_{\theta}(x,z) dz} = \int{p_{\theta}(z)p_{\theta}(x\vert{} z) dz}\]
\[p(x,z) = \frac{p(z\vert{} x)}{p(x)} = \frac{p(x \vert{} z)}{p(z)}\]
Probability function에 log를 사용하는 이유
-
수치적 안정성(Numerical stability): 확률은 0과 1 사이의 값이며, 작은 확률 값들을 계산할 때 수치적으로 불안정할 수 있다. 로그 변환은 0과 1 사이의 값에 대해 안정적인 계산을 가능하게 한다. 로그를 사용하면 작은 확률 값들이 표현 가능한 범위로 압축되며, 수치 계산이 더 안정적으로 이뤄진다.
-
로그 변환과 곱셈의 덧셈 변환: 로그 변환은 곱셈 연산을 덧셈 연산으로 변환할 수 있게 해줍니다. 확률 분포의 독립 사건에 대한 확률을 계산할 때, 확률의 곱셈 연산이 수행되어야 한다. 로그를 취하면 곱셈이 덧셈으로 변환되어 계산이 간편해진다.
-
정보 이론 및 최대 가능도 추정(Maximum Likelihood Estimation): 로그는 정보 이론에서 중요한 역할을 한다. 로그 용량은 정보의 양을 측정하는 데 사용되며, 로그 용량을 최대화하는 것은 정보를 가장 효율적으로 전달하는 것을 의미한다. 최대 가능도 추정(MLE)에서 로그 용량을 최대화하는 것은 로그 가능도를 최대화하는 것과 동일한 의미를 가진다.
-
확률의 합 대신 로그 확률의 합: 다양한 확률 분포들이 독립적으로 발생하는 경우, 확률의 곱셈을 수행하여 결합 확률을 계산해야 한다. 이때 로그를 사용하면 곱셈이 덧셈으로 변환되어 계산이 용이해진다. 또한, 로그 확률의 합을 사용하여 계산하면 수치적인 안정성을 높일 수 있다.
\[E[f(X)]=\int_{\infin}^{\infin}f(x)p_{X}(x)dx\]
위 식은 다음 식과 동일한 의미를 가진다.
\[E_{x\sim{p_{X}(x)}}[f(X)] =\int_{x}f(x)p_{X}(x)dx\]\[KL(P\vert{}\vert{}Q)=\sum_{x}P(x)\log{\frac{P(x)}{Q(x)}}\]
모든 $z$에 대해서 적분을 하지 않고, 매우 많이 sampling한 $z$의 결과값의 평균은 기대값과 비슷해질 것이다.
\[\int\log({p_{\theta}(x_{i}\vert{}z))q_{\phi}(z\vert{}x_{i})dz} \approx \frac{1}{L}\sum_{z^{i,j}}\log(p_{\theta}(x_{i}\vert{}z^{i,j}))\]Reference
1. [논문] VAE(Auto-Encoding Variational Bayes) 직관적 이해, 20. 12. 2018, taeu.github.io, https://taeu.github.io/paper/deeplearning-paper-vae/