处理 softmax 交叉熵中的极值?

数据挖掘 神经网络 张量流 多标签分类
2021-09-20 14:53:35

我正在使用 softmax 和交叉熵函数处理数值溢出和下溢,以使用神经网络进行多类分类。给定 logit,我们可以减去处理溢出的最大 logit,但如果 logit 的值相差很大,那么一个 logit 将为零,其他大的负数导致单个类的概率为 100%,其他类的概率为 0% . 当损失计算为交叉熵时,如果我们的 NN 预测该类的概率为 0%,那么损失为 NaN() 这在理论上是正确的,因为使网络适应所需的惊喜和调整在理论上是无限的。

我知道这可以通过标准化数据并从标准正态分布中选择权重和偏差来处理,但这是一种假设情况,其中数据是经过平均预处理而不是标准偏差处理的,我相信即使在预处理后也会发生这种情况。和标准开发。

1个回答

这些下溢在计算中究竟体现在哪里?有关softmax 极端情况的简要说明,请参见此处

快速修复可能是提高模型的精度(使用 64 位浮点数而不是大概 32 位浮点数),或者只是引入一个限制值的函数,因此任何低于零或正好为零的值都被设为足够接近于零,计算机不会崩溃。例如,X = np.log(np.max(x, 1e-9))在进入 softmax 之前使用。

在任何情况下,softmax 的输入都不应该有问题,因为最终的激活是指数化的:

σ(z)j=ezjk=1Kezk

这意味着所有值现在都在范围内[0, 1]

交叉熵方程也应该能够处理这个的输出。

如果这些都对您的具体问题没有帮助,您能否分享一个具体的问题示例?