我正在研究用于非二进制数据的自动编码器,在[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 等)相比,非对称损失是可以接受的?它是否有更好的损失情况,即它是凸的而其他不是,还是有其他原因?