稳定的 Softmax 函数返回错误的输出

Posted

技术标签:

【中文标题】稳定的 Softmax 函数返回错误的输出【英文标题】:Stable Softmax function returns wrong output 【发布时间】:2020-08-09 00:46:49 【问题描述】:

我实现了 Softmax 函数,后来发现它必须稳定才能在数值上稳定(duh)。现在,它又不稳定了,因为即使从我的向量中减去 max(x),给定的向量值仍然太大而不能成为 e 的幂。这是我用来查明错误的代码图片,这里的向量是前向传播的示例输出向量:

我们可以清楚地看到值太大了,而不是概率,我得到了这些非常小的数字,这会导致小错误,从而导致梯度消失,最终导致网络无法学习。

【问题讨论】:

【参考方案1】:

你是完全正确的,只是翻译 softmax 的数学定义可能会使其不稳定,这就是为什么你必须在进行任何计算之前减去 x 的最大值。

您的实现是正确的,消失/爆炸梯度是您可能遇到的独立问题,具体取决于您打算使用哪种神经网络。

【讨论】:

当,我不知道该怎么办。我检查了我的公式和代码很多次,所以我认为它一定是实用的。您是否知道(根据经验)可能是什么?我正在使用 ReLU 顺便说一句 我认为您的代码没有任何问题。你的实现是正确的。您可能想阅读这个 SO 答案:***.com/questions/17187507/…。您没有在代码中的任何地方使用 ReLU,ReLU 是一个将 x 映射到 max(0, x) 的函数。

以上是关于稳定的 Softmax 函数返回错误的输出的主要内容,如果未能解决你的问题,请参考以下文章

softmax交叉熵

数值稳定的softmax

[深度概念]·Softmax优缺点解析

输出层的 softmax 和 sigmoid 函数

Softmax函数与交叉熵

tensorflow函数介绍