我知道如何通过添加元素-max _i x_i来使softmax稳定。这可以避免溢出和下溢。现在,记录这个可能会导致下溢。 log softmax(x)可以评估为零,导致-infinity。
我不知道如何解决它。我知道这是一个常见的问题。我读了几个答案,我不明白。但我仍然对如何解决这个问题感到困惑。
PS:如果你提供一个简单的例子,它会很棒。
为了稳定Logsoftmax
功能,大多数实现如Tensorflow和Thenao你可以查看由Ian Goodfellow打开的this线程,使用Nemo推荐的相同技巧。这个想法和你提到的Softmax
完全一样,它可以形式化如下:
在从提名者和分母中取消exp(b)
并知道log(exp(x))=x
之后,这个等式变为:
如果我们设置,这个新方程同时具有上溢和下溢稳定性条件。
您还可以查看this链接以获取更多描述。
logsoftmax = logits - log(reduce_sum(exp(logits), dim))
参考:https://www.tensorflow.org/api_docs/python/tf/nn/log_softmax