ELBO (Evidence of Lower BOund)에 대해 알아보겠습니다. ELBO를 이용해서 loss를 만들고 최적화하곤 하지요. ELBO는 자주 쓰이지만 ELBO가 어떻게 나왔는지는 자주 까먹곤 합니다. 나중에 ELBO에 대해 까먹으면 다시 찾아오기 위하여 이 글을 작성합니다.
ELBO (Evidence of Lower BOund)에 대해 알아보자
어떤 space $X$가 있다고 합시다. 여기서 $x\in X$를 꺼내 봅시다. 이제 이 $x$를 변형시켜서 어느 공간 $Z$으로 숨길려고 합니다. 잘 숨겼다면 나중에 다시 불러 올수도 있겠죠.
Encoder와 Latent Space
앞서 말씀 드렸듯 $x \in X$를 어떤 공간 $Z$로 보낼려고 합시다. 여기서 $Z$는 확률밀도함수 $p(z)$를 따르는 공간으로 가정하고 latent space라고 부릅니다. $x \in X$를 $Z$라는 latent space공간에 보내기 위해서는 여러방법이 있습니다. 그런데 $x$를 옮기는 것도 있지만 $X$를 $p(z)$를 확률밀도함수로 갖는 $Z$공간으로 변형시키기 위해서 어떤 transition probability density function $q(z|x)$를 이용합니다. 이 $q(z|x)$를 encoder라고 부릅니다.
Decoder는?
$z \in Z$를 뽑았다고 합시다. 이 $z \in Z$는 어떤 $x \in X$로 부터 왔다고 볼 수 있습니다. 어떻게 하면 $z$의 본 모습인(?) $x$로 변형시킬 수 있을까요? 어떤 transition probability density function $p(x|z)$을 이용해서 $z$를 본모습인 $x$로 변형시킬 수 있다고 믿을 수 있는데요. 이러한 $p(x|z)$를 decoder라고 부릅니다. 이때 $p(x|z)$를 모르는 경우가 대부분입니다. 그래서 $p(x|z)$를 근사하기 위한 $p_\theta (x |z)$를 도입합니다. 여러 후보군이 있겠지만 일단은 $p_\theta(z) = p(z)$이 되도록 선택합니다. 여기서 $p_\theta(x|z)$에 대해서는 어떤 규칙으로 돌아가는지는 알지만 $p_\theta (x|z)$가 $p(x|z)$와 얼마나 가까운지 보장을 못합니다. 즉 얼마나 적합한 근사인지는 모른다는 얘기이죠. 어떻게 해야 $p_\theta(x|z)$가 적합한지 알 수 있을 까요?
log likelihood 를 이용한 추정
간단히 생각해보면 loglikelihood $\log p_\theta (x)$가 커야 할것 같습니다. $p_\theta(x|z)$는 $z\in Z$를 $x \in X$로 보내는데요. 잘 보냈다면 $\log p_\theta(x|z)$가 크겠고 이것의 평균이 $\log p_\theta (x)$또한 크겠죠. 그런데 $\log p_\theta (x)$를 알기 어려우니까 아래와 같은 과정을 거쳐서 수식을 유도합니다.
$$ \log p_\theta (x) = \int q(z|x) \log p_\theta(x) dz = \int q(z|x) \log \frac{p_\theta(x|z)}{p_\theta (z|x)} \frac{q(z|x)}{q(z|x)} p_\theta (z) dz$$
간단한 수식이니까 한번 해보시고요. 여기서 $p_\theta(z) = p(z)$이므로 아래와 같이 수식이 변형됩니다.
$$ \log p_\theta (x) =\int q(z|x) \log p_\theta (x|z) dz + \int q(z|x) \log \frac{p(z)}{q(z|x)} dz + \int q(z|x) \log \frac{q(z|x)}{p(z|x)}$$
KL divergence의 정의등을 쓰면 아래와 같은 모양이 나옵니다.
$$ \log p_\theta (x) =\int q(z|x) \log p_\theta (x|z) dz - KL\left[q(Z|x) || p(Z)\right] + KL \left[ q(Z|x) || p_\theta (Z|x)\right]$$
여기서 마지막 term $ KL \left[ q(Z|x) || p_\theta (Z|x)\right]$에서 $p_\theta (Z|x)$는 알수없지만 $KL \left[ q(Z|x) || p_\theta (Z|x)\right]$ 자체가 0보다 큰것은 알고 있으므로 아래와 같은 식이 성립니다.
$$ \log p_\theta (x) \geq \int q(z|x) \log p_\theta (x|z) dz - KL\left[q(Z|x) || p(Z)\right] $$
ELBO
위에서 유도한 식에서 부등호의 오른쪽에 있는 term을 ELBO (Evidence of Lower BOund)라고 부릅니다. $\log p_\theta (x)$의 lower bound이고 ELBO가 클수록 $\log p_\theta (x)$가 크니까 선택한 $p_\theta (z|x) $가 그럴듯하다는 얘기입니다.
$$ ELBO = \int q(z|x) \log p_\theta (x|z) dz - KL \left[q(Z|x) || p(Z) \right]$$
ELBO를 이용한 학습
위에서 구한 ELBO를 최대화 시키면 $\log p_\theta (x)$가 최대화됩니다. 이점을 이용해서 $p_\theta (x|z)$를 학습할 수 있습니다. loss를 아래와 같이 ELBO에 -1 을 곱한 형태로 잡습니다.
$$Loss = - ELBO = -\int q(z|x) \log p_\theta (x|z) dz +KL \left[q(Z|x) || p(Z) \right]$$
여기서 Loss의 첫번째 term은 reconstruction loss 라고 부릅니다. 그리고 두번째 term을 regularization loss 라고 부릅니다. 왜 reconstruction loss냐고 부를까요? $\log p_\theta (x|z) = \log p_\theta (z|x) +\log p_\theta (x) - \log p(z)$이므로 첫번째 term을 최적화한다는 것은 $q(z|x),p_\theta (z|x)$간의 cross entropy 를 줄인다라는 뜻입니다. 그렇게 되면 $q(z|x) \approx p_\theta (z|x)$이므로 $x$를 잘 reconstruction 한다는 의미에서 쓴것 같습니다.