目标函数和输出层激活函数之间的联系有多灵活?

数据挖掘 神经网络 梯度下降
2021-10-02 07:46:51

在许多神经网络包中,将要最小化的目标函数与输出层中的激活函数配对似乎是标准的。

例如,对于用于回归的线性输出层,具有平方误差目标函数是标准的(并且通常是唯一的选择)。另一个常见的配对是逻辑输出和对数损失(或交叉熵)。还有一个是 softmax 和多对数损失。

使用符号, z 对于预激活值(权重总和乘以前一层的激活), a 用于激活, y 对于用于训练的ground truth, i 用于输出神经元的索引。

  • 线性激活 ai=zi 有平方误差 12i(yiai)2

  • 乙状结肠激活 ai=11+ezi 与 logloss/cross-entropy 目标一起使用 i(yilog(ai)+(1yi)log(1ai))

  • Softmax 激活 一个一世=ez一世jezj 与多类对数损失目标一起使用 -一世(是的一世*lG(一个一世))

这些是我知道的,我希望还有很多我还没有听说过。

似乎只有当输出和目标在 [0,1] 范围内时,对数损失才会起作用并且数值稳定。因此,尝试使用 logloss 目标函数的线性输出层可能没有意义。除非有一个更通用的 logloss 函数可以处理是的 超出范围?

但是,尝试使用平方误差目标的 sigmoid 输出似乎并没有那么糟糕。它应该是稳定的并且至少会收敛。

我知道这些配对背后的一些设计是它为 δδz - 在哪里 是目标函数的值 - 易于反向传播。但是应该仍然可以使用其他配对找到该导数。此外,还有许多其他激活函数在输出层中不常见,但可能是可行的,例如tanh,并且不清楚可以应用什么目标函数。

在设计神经网络的架构时是否存在任何情况,您会或应该使用输出激活和目标函数的“非标准”配对?

1个回答

与其说你使用哪个激活函数来决定你应该使用哪个损失函数,不如说你对输出的解释是什么。

如果输出应该是概率,那么 log-loss 就是要走的路。

如果输出是通用值,则均方误差是默认方法。例如,如果您的输出是一个灰度像素,其灰度由 0 到 1 的数字标记,则使用具有均方误差目标函数的 sigmoid 激活函数可能是有意义的。