为什么在非二进制数据的自动编码器中使用二进制交叉熵(或对数损失)

机器算法验证 损失函数 张量流 自动编码器 交叉熵 对数损失
2022-03-24 21:33:09

我正在研究用于非二进制数据的自动编码器,在[0,1]探索现有解决方案时,我注意到很多人(例如,关于自动编码器的keras 教程这个人)在这种情况下使用二进制交叉熵作为损失函数。虽然自动编码器工作,但它会产生略微模糊的重建,其中有很多原因可能是因为非二进制数据的二进制交叉熵对 0 和 1 的误差比对 0.5 的误差更惩罚(正如这里很好解释的那样)。

例如,给定真值为 0.2,自动编码器 A 预测为 0.1,而自动编码器 2 预测为 0.3。A 的损失为

−(0.2 * log(0.1) + (1−0.2) * log(1−0.2)) = .27752801

而 B 的损失为

−(0.2 * log(0.3) + (1−0.2) * log(1−0.3)) = .228497317

因此,B 被认为是比 A 更好的重建;如果我一切都正确。但这对我来说并不完全有意义,因为我不确定为什么非对称比其他对称损失函数(如 MSE)更受欢迎。

这段视频中,Hugo Larochelle 认为最小值仍将处于完美重建点,但损失永远不会为零(这是有道理的)。这在这个优秀的答案中得到了进一步的解释,这证明了为什么[0,1]当预测等于真实值时给出了非二进制值的二进制交叉熵的最小值。

所以,我的问题是:为什么二进制交叉熵用于非二进制值[0,1],为什么与其他对称损失函数(如 MSE、MAE 等)相比,非对称损失是可以接受的?它是否有更好的损失情况,即它是凸的而其他不是,还是有其他原因?

4个回答

你的问题启发了我从数学分析的角度来看待损失函数。这是一个免责声明——我的背景是物理学,而不是统计学。

让我们将重写为 NN 输出的函数并求其导数:lossx

f(x)=alnx+(1a)ln(1x)

f(x)=axx(1x)

其中是目标值。现在我们放并假设很小,为了清楚起见,我们可以忽略项:ax=a+δδδ2

f(δ)=δa(a1)+δ(2a1)

这个等式让我们直观地了解损失的行为方式。当目标值为(接近)零或一时,导数为常数对于中是线性的a1+1aδ

换句话说,在反向传播过程中,这种损失更关心非常亮和非常暗的像素,但在优化中间色调上投入的精力较少。

关于不对称性 - 当 NN 远非最佳时,这可能并不重要,因为您会更快或更慢地收敛。当 NN 接近最佳值(很小)时,不对称性消失。δ

如果您认为当 true 为 0.2 时 0.1 和 0.3 的损失应该相等,则没有理由使用交叉熵。损失函数应该反映您或您所在领域的常识。

但是,如果真值对应于均值为之间的交叉熵损失等于之间的 KL 散度,这是最自然的和某种意义上的最优损失。 pppqBer(p)Ber(q)

通常,每个强凸损失的行为都类似于真实值附近的因此,随着您的预测在任何损失中变得准确,损失选择的敏感性将消失。l2

在任一方向上变化 0.1 会引入对称的加法效应,但会引入不对称的乘法效应。

这意味着虽然 A 和 B 与真实均值的偏移相同,但真实值是 A 的两倍,但为 B 的 2/3。反之,如果 A 是真实值的一半,B 是它的 1.5 倍。IE 它们的乘法距离不同。

在评估预期是对称的事物时,人们会使用对称函数,而在不对称情况下使用不对称函数。请注意,使用日志是因为它们允许我们以更加法的方式处理乘法过程。

在由say参数化的伯努利分布下p=0.3通过自动编码器的输出,绘制的概率x=0.2为零(并且对所有人都为零0<x<1)。这确实使伯努利分布成为非二进制数据的糟糕选择。

但是,输入的稍微不同的视图可以恢复伯努利分布。让我们假设x=0.2是来自某个测量设备的样本,而这x=0.2最好将读数描述为它本身是概率分布的参数,例如正态分布或伯努利分布。让我们和后者一起说吧x=0.2表示带参数的伯努利过程p=x=0.2. 因此,有一些潜在的二进制传感器或事件是0有概率0.21有概率0.8. 我们的自动编码器的输出是一个伯努利分布,比如p=0.3. 问一下确实有意义:绘图的预期结果是什么0或者1真实伯努利过程的读数(带参数p=0.2),然后根据自编码器的伯努利分布计算其似然值(带参数p=0.3)。这个预期的可能性是pp+(1p)(1p)=(0.2)(0.3)+(0.8)(0.7). 我们也可以问期望的对数似然是什么,那就是plog(p)+(1p)log(1p). 当我们替换符号时p用通常的符号,y, 我们得到通常的表达式ylog(p)+(1y)log(1p).

通过以不同的方式解释输入(作为分布参数),交叉熵损失作为预期对数似然的负数确实有意义,其中预期超过“输入”分布,并且根据我们的“输出”计算似然性分配。