为什么二进制交叉熵可以用作自编码器中的损失函数?

机器算法验证 机器学习 损失函数 自动编码器 交叉熵
2022-03-19 07:41:33

我想知道为什么二进制交叉熵可以用作在(标准化)图像上训练的自动编码器中的损失函数,例如这里本文我知道二元交叉熵可用于二元分类问题,其中地面实况标签(即)为 0 或 1,因此当预测(即)正确时,在这两种情况下,损失值都为零:yp

BCE(y,p)=y.log(p)(1y).log(1p)

BCE(0,0)=0,BCE(1,1)=0

然而,当二元交叉熵的参数都不是零或一时,二元交叉熵的值不为零,对于具有范围的真实标签的自动编码器就是这种情况(即假设输入数据已被归一化)在这个范围内)。我认为必须使用回归损失函数,例如均方误差或平均绝对误差,当标签和预测相同时,它们的值为零。我在这里想念什么?[0,1]

2个回答

我认为必须使用回归损失函数,例如均方误差或平均绝对误差, 当标签和预测相同时,它们的值为零。

这正是你的误解。您认为,为了在自动编码器等模型中使用损失函数,当预测等于真实标签时,它的值必须为零。这是完全错误的,因为在大多数机器学习模型(包括自动编码器)中,我们都试图最小化损失/成本函数。我们这样做的假设是,当我们使用的损失函数达到其最小值时,意味着预测和真实标签是相同的. 这就是在基于最小化损失函数训练的模型中使用函数作为损失函数的条件。请注意,在这个最小点的损失函数的值可能根本不为零,但是我们并不关心这一点,只要它暗示该点的预测和真实标签是相同的。

现在让我们验证二元交叉熵的情况:我们需要证明,当我们达到二元交叉熵的最小值时,它意味着,即预测等于真实标签。为了找到最小点,我们对求导并将其设置为零(请注意,在以下计算中,我假设是自然对数函数以使计算更容易一些):y=pplog

BCE(y,p)p=0y.1p(1y).11p=0y.(1p)+(1y).p=0y+y.p+py.p=0py=0y=p

正如@today 指出的那样,当解决方案最佳时,损失值不必为 0,只要它最小就足够了。

我想补充的一件事是为什么人们更喜欢二元交叉熵而不是 MSE通常,最后一层的激活函数是sigmoid,这会导致损失饱和(“高原”)。这种饱和可能会阻止基于梯度的学习算法取得进展。为了避免它,最好log在目标函数中有一个来撤销expin sigmoid,这就是为什么首选二元交叉熵的原因(因为它使用log,与 MSE 不同)。我在Deep Learning Book中读过这个,但我现在找不到确切的位置(我认为是第 8 章)。