VAE의 reparameterization 트릭, 어떻게해야합니까?
재 매개 변수화 트릭이 어떻게 작동하는지 혼란 스럽습니다. 에서 이 문서 쇼 그것은 매우 간단합니다. 두 벡터를 배웁니다. $\sigma$ 과 $\mu$, 샘플 $\epsilon$ ...에서 $N(0, 1)$ 그리고 잠재 벡터 $Z$ (어디서 $\odot$ 요소 별 제품입니다.) : $$ Z = \mu + \sigma\odot\epsilon $$ 하지만 VAE 용 TensorFlow 튜토리얼 코드를 살펴보면 단순한$\odot$. 코드는 다음과 같습니다.
def reparameterize(self, mean, logvar):
eps = tf.random.normal(shape=mean.shape)
return eps * tf.exp(logvar * .5) + mean
다음과 같이 표시됩니다. $$ Z = \mu + \epsilon\times e^{0.5\times\log{}var} $$
이 둘은 같지 않아서 혼란 스럽습니다.
- 먼저 왜 그것은 단지 분산을 배우는 대신 (변수의 이름에서 알 수 있듯이) 분산의 로그를 배우는 것입니다.
- 둘째, 왜 0.5를 곱합니까?
- 마지막으로 올바른 매개 변수화 트릭은 무엇입니까 (다른 경우)?
답변
랜덤 변수의 분산이 양수로 제한되기 때문에 간단하게이 작업을 수행합니다 (예 : $\sigma^2 \in \mathbb{R}^+$) 따라서 분산을 학습하려면 신경망의 출력을 양수로 제한해야합니다. 이를 해결하는 간단한 방법은 대신 로그를 배우는 것입니다.$\log(\sigma^2) \in \mathbb{R}$ 보장합니다 $\exp(\log(\sigma^2)) \in \mathbb{R}^+$.
그만큼 $\sigma$첫 번째 방정식에서 표준 편차는 알다시피 분산의 제곱근입니다. 그러면 로그 밖에서 0.5의 곱셈이 로그 내부의 분산을 0.5의 거듭 제곱으로 올리는 것과 같다는 것을 알 수 있습니다.
$$ e^{0.5\log(var)} = e^{\log(var^{0.5})} = var^{0.5} = \sigma $$
- (2)에 대한 답이 주어지면 동일하다는 것이 분명해야합니다.