理论上,VAE 中的编码器(假设变分族是高斯的)生成和(或)。但是,在实践中,我看到人们假设输出是。为什么这是必要的或有用的?
为什么在变分自动编码器(高斯变分族)中我们建模日志σ2logσ2而不是(或)本身?σ2σ2σσ
机器算法验证
神经网络
变分贝叶斯
生成模型
2022-03-23 03:18:05
1个回答
它带来了稳定性和易于训练。根据定义,sigma 必须是正实数。强制执行此操作的一种方法是使用 ReLU 函数来获取其值,但梯度在零附近没有很好地定义。此外,标准差值通常非常小 1>>sigma>0。优化必须使用非常小的数字,其中浮点算法和定义不明确的梯度会带来数值不稳定性。
如果您使用对数变换,则将 [1,0] 区间中的数值不稳定的非常小的数字映射到 [log(1), -inf],您有更多的空间可以使用。计算 log 和 exp 在数值上稳定且容易,因此您基本上可以获得优化变量可以在其中移动的空间。
请不要混淆:人们不会使用 log(sigma) 值作为 sigma 值,而是始终将其转换回原始空间。同样在 VAE 中,您需要 Kullback-Leibler 散度项中的 log(sigma) 值,因此无论如何您都需要计算它...