Abh*_*tia 5 numerical underflow numerical-stability softmax
我知道如何通过添加到元素 -max _i x_i 来使 softmax 稳定。这避免了上溢和下溢。现在,记录此日志可能会导致下溢。log softmax(x) 可以计算为零,导致 -infinity。
我不知道如何解决它。我知道这是一个常见问题。我读了几个答案,我不明白。但是我仍然对如何解决这个问题感到困惑。
PS:如果你提供一个简单的例子,那就太棒了。
为了稳定Logsoftmax,大多数实现,如Tensorflow和Theao,使用一个技巧,取出最大的组件max(x_i)。这个技巧常用于稳定计算softmax。对于logsoftmax,我们开始:
在提取出exp(b)并使用 的事实之后log(exp(x)) = x,我们有:
如果我们设置 ,这个新方程同时具有上溢和下溢稳定条件。
在代码方面,如果x是一个向量:
def log_softmax(x):
x_off = x - np.max(x)
return x_off - np.log(np.sum(np.exp(x_off)))
Run Code Online (Sandbox Code Playgroud)
另见:https : //timvieira.github.io/blog/post/2014/02/11/exp-normalize-trick/
小智 1
logsoftmax = logits - log(reduce_sum(exp(logits), dim))
Run Code Online (Sandbox Code Playgroud)
参考: https: //www.tensorflow.org/api_docs/python/tf/nn/log_softmax
| 归档时间: |
|
| 查看次数: |
4148 次 |
| 最近记录: |