【问题标题】:Understanding choice of loss and activation in deep autoencoder?了解深度自动编码器中损失和激活的选择?
【发布时间】:2020-04-22 12:47:28
【问题描述】:

我正在按照这个 keras 教程使用 MNIST 数据集创建一个自动编码器。这是教程:https://blog.keras.io/building-autoencoders-in-keras.html

但是,对于简单的一层自动编码器(这是链接中的第一个示例),我对激活和损失的选择感到困惑。解码器部分使用sigmoid 激活而不是relu 之类的东西是否有特定原因?我试图了解这是否是我可以尝试的选择,或者它是否确实应该是sigmoid,如果是,为什么?同样,我理解损失是通过逐个像素级别比较每个原始数字和预测数字来获得的,但我不确定为什么损失是binary_crossentropy,而不是诸如均方误差之类的东西。

我希望对此进行澄清以帮助我继续前进!谢谢!

【问题讨论】:

  • This 是使用图像自动编码器的 mse 损失的示例。其余的,请参阅this 完整答案。

标签: keras deep-learning autoencoder loss-function activation-function


【解决方案1】:

MNIST 图像通常在[0, 1] 范围内进行归一化,因此自动编码器应输出相同范围内的图像,以便于学习。这就是为什么在输出中使用sigmoid 激活。

均方误差损失具有非线性惩罚,大误差比小误差具有更大的惩罚,这通常会导致收敛到解决方案的均值,而不是更准确的解决方案。二元交叉熵不存在这个问题,因此是优选的。它之所以有效,是因为模型和标签的输出在[0, 1] 范围内,并且损失应用于所有像素。

【讨论】: