在许多神经网络包中,将要最小化的目标函数与输出层中的激活函数配对似乎是标准的。
例如,对于用于回归的线性输出层,具有平方误差目标函数是标准的(并且通常是唯一的选择)。另一个常见的配对是逻辑输出和对数损失(或交叉熵)。还有一个是 softmax 和多对数损失。
使用符号, 对于预激活值(权重总和乘以前一层的激活), 用于激活, 对于用于训练的ground truth, 用于输出神经元的索引。
线性激活 有平方误差
乙状结肠激活 与 logloss/cross-entropy 目标一起使用
Softmax 激活 与多类对数损失目标一起使用
这些是我知道的,我希望还有很多我还没有听说过。
似乎只有当输出和目标在 [0,1] 范围内时,对数损失才会起作用并且数值稳定。因此,尝试使用 logloss 目标函数的线性输出层可能没有意义。除非有一个更通用的 logloss 函数可以处理 超出范围?
但是,尝试使用平方误差目标的 sigmoid 输出似乎并没有那么糟糕。它应该是稳定的并且至少会收敛。
我知道这些配对背后的一些设计是它为 - 在哪里 是目标函数的值 - 易于反向传播。但是应该仍然可以使用其他配对找到该导数。此外,还有许多其他激活函数在输出层中不常见,但可能是可行的,例如tanh
,并且不清楚可以应用什么目标函数。
在设计神经网络的架构时是否存在任何情况,您会或应该使用输出激活和目标函数的“非标准”配对?