【问题标题】:Which output activation and loss should I use if I want to predict continuous outcome on 0-1 interval?如果我想预测 0-1 间隔的连续结果,我应该使用哪个输出激活和损失?
【发布时间】:2020-02-16 04:54:50
【问题描述】:

我想预测连续变量(自动编码器)。由于我已将输入按 min-max 缩放到 0-1 区间,因此在输出层中使用 sigmoid 激活是否有意义? Sigmoid 不对应于 MSE 损失。有任何想法吗?

【问题讨论】:

  • 具有二元交叉熵的 Sigmoid 通常是一个不错的选择。您也可以随时使用 MSE,没问题。
  • 二进制交叉熵用于二进制结果,它有它的含义。但是,我想预测连续变量,而不是二进制。
  • 我明白了....当然,尽管在神经网络中,一切都是连续的。使用二元交叉熵不会是“错误的”。它可能确实以不同的方式表现(参见 OverLord 的回答),但最小损失点将是您想要的输出,就像其他损失一样。

标签: keras autoencoder loss-function continuous activation-function


【解决方案1】:

总结:如果不确定,请使用binary_crossentropy + sigmoid。如果您的大多数标签是 0 或 1,或者非常接近,请尝试 mae + hard_sigmoid


解释

损失函数定义了模型的优先级;对于回归,目标是最小化预测与基本事实(标签)的偏差。如果激活值介于 0 和 1 之间,则 MSE 将起作用。

然而;它可能不是最好的 - 特别是对于标准化数据。下面是 [0, 1] 区间的 MSE 与 MAE 的关系图。主要区别:

  • MSE 对细微差异的惩罚比 MAE 小得多
  • MSE 惩罚较大的差异,w.r.t. 它自己的惩罚小值,远远超过 MAE

以上结果:

  • MSE --> 模型更擅长“非常错误”,但更擅长“非常正确”
  • MAE --> 模型更擅长平均预测所有值,但不介意“非常错误”的预测

就激活而言 - hard sigmoid 可能效果更好,尤其是当您的许多值等于或非常接近 0 或 1 时,因为它可以等于 0 或 1(或接近它们) 比 sigmoid 快很多,它应该作为 regularization 的一种形式,因为它 linearization 的一种形式 (--> weight衰变)。


二元交叉熵:通常应该是最好的(w/ sigmoid

从某种意义上说,它是两全其美的:它更“均匀分布”(在非渐近区间上),并强烈惩罚“非常错误”的预测。事实上,BCE 对此类预测的要求比 MSE 严格得多——所以你应该很少看到在“1”标签上预测的“0”(验证除外)。出于不言而喻的原因,请确保使用硬 sigmoid。


自动编码器:努力重建他们的输入。根据应用程序,您可以:

  1. 需要确保没有一个预测具有太大意义Ex:信号数据。一个极其错误的时间步可能会超过其他出色的整体重建

  2. 拥有嘈杂的数据,并且更喜欢比噪音更稳健的模型

根据上述两种情况,尤其是 (1),BCE 可能是不可取的。通过更“平等”地对待所有标签,MAE 可能更适用于 (2)。


MSE 与 MAE

Sigmoid 与硬 Sigmoid


二元交叉熵 vs. MSE vs. MAEy == 0 案例显示为 BCE)

【讨论】:

  • 不,不能盲目推荐二元交叉熵,它是分类损失,这里的问题显然是回归问题(连续输出)。
  • @MatiasValdenegro 它适用于“0-1 区间”的回归,直接引用标题。
【解决方案2】:

使用sigmoid 激活和回归损失,例如mean_squared_errormean_absolute_error

【讨论】:

    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 2021-03-23
    • 2017-01-16
    • 2020-09-18
    • 2020-02-23
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多