变分自动编码器:为什么重建项与平方损失相同?

机器算法验证 可能性 深度学习 推理 自动编码器 变分贝叶斯
2022-03-24 18:12:54

在变分自动编码器(见论文)第 5 页中,神经网络的损失函数定义为:

L(θ;ϕ;xi)0.5j=1J(1+2logσji(μi)2)(σi)2)+1Ll=1Llogpθ(xi|zi,l)

而在代码中,第二项1Ll=1Llogpθ(xi|zi,l)实际上是通过: 实现的 binary_crossentropy(x, x_output),其中x分别x_output是自编码器的输入和输出。

我的问题是为什么输入和输出的损失等于1Ll=1Llogpθ(xi|zi,l)

3个回答

对于常规自动编码器,您从输入x开始并对其进行编码以获得潜在变量(或代码)z,使用满足以下条件的函数:z=f(x)获得潜在变量后,您的目标是使用其他函数x^=g(f(x))重建输入。重建损失是另一个 用于反向传播和更新fg的函数L(x,\hat{x})L(x,x^)fg

对于变分自动编码器,您仍将潜在变量z解释为您的代码。因此,p(x|z)用作概率解码器,因为给定代码z ,它会在xz的可能值上产生分布因此,术语\log p_{\theta}(x|z)以某种方式与重构误差相关联是“有道理的” 。xlogpθ(x|z)

编码器和解码器都是确定性函数。由于映射的函数,因此您可以将此表达式视为当您假设(如果我理解正确,他们在论文中假设)此分布具有高斯形式: p(x|z)zx^p(x|x^)

logP(x|x^)loge|xx^|2(xx^)2

最后一个表达式与常规自动编码器中的重建误差成正比。

p(x|z)=p(x|xout)=xlogxout+(1x)log(1xout)因为和模型参数的确定性函数。xoutz

要回答这个问题,需要查看第 4 页 eq。其中 7 条及其下方的文字:

在我们的实验中,我们发现每个数据点的样本数 L 可以设置为 1,只要 minibatch 大小 M 足够大,例如 M = 100。

因此,从标准正态分布(从个样本)的蒙特卡罗抽样的随机性可以忽略足够的小批量大小。因此,求和变成了单个样本。所以剩下的只是网络输出,即伯努利分布的确定性函数)。因此:Lz(i,l)μ(i)σ(i)lLpout(i)z(i)

logP(x(i)|z(i))=logP(x|pout)=logPpout(X=x)=log(poutx(1pout)1x)=xlogpout+(1x)log(1pout),

其中假设来自伯努利分布(),第三个方程正是伯努利分布的概率质量函数x(i){0,1}

至于为什么当 x 不是来自伯努利而是来自有界连续(如)时这有效,我不知道,但可能与此处提到的“黑暗知识”有关。[0,1]