我需要执行 softmax 操作。也就是说,给定一系列n
从 -inf 到 +inf 的实数值,我通过对每个值取幂并除以指数之和将它们转化为概率:
for (i = 0; i < n; i++)
p_x[i] = exp(x[i]) / sum_exp(x, n)
(不要从字面上理解代码,我不是在总结所有exp
的每次迭代!)
在某些极端情况下(使用 8 字节双精度),当值超过 700 时,我会遇到溢出问题。我知道我可以使用另一个基础而不是 e,但是,我担心调用pow
会慢得多exp
(速度对我来说至关重要)。
解决这个问题的最快方法是什么?