稳定的 Softmax 函数 returns 错误输出
Stable Softmax function returns wrong output
我实现了 Softmax 函数,后来发现它必须稳定才能在数值上稳定(duh)。现在,它再次不稳定,因为即使从我的向量中减去 max(x),给定的向量值仍然太大,无法成为 e 的幂。这是我用来查明错误的代码图片,这里的向量是前向传播的样本输出向量:
我们可以清楚地看到这些值太大了,我得到的不是概率,而是这些非常小的数字,这会导致很小的错误,从而导致梯度消失,最终使网络无法学习。
你完全正确,只是翻译softmax的数学定义可能会使它不稳定,这就是为什么你必须在进行任何计算之前减去x的最大值。
你的实现是正确的,vanishing/exploding梯度是一个独立的问题,你可能会遇到这取决于你打算使用哪种神经网络。
我实现了 Softmax 函数,后来发现它必须稳定才能在数值上稳定(duh)。现在,它再次不稳定,因为即使从我的向量中减去 max(x),给定的向量值仍然太大,无法成为 e 的幂。这是我用来查明错误的代码图片,这里的向量是前向传播的样本输出向量:
我们可以清楚地看到这些值太大了,我得到的不是概率,而是这些非常小的数字,这会导致很小的错误,从而导致梯度消失,最终使网络无法学习。
你完全正确,只是翻译softmax的数学定义可能会使它不稳定,这就是为什么你必须在进行任何计算之前减去x的最大值。
你的实现是正确的,vanishing/exploding梯度是一个独立的问题,你可能会遇到这取决于你打算使用哪种神经网络。