在单纯形中获得向量时如何克服下溢?

时间:2018-06-25 19:09:51

标签: precision

我正在对向量进行归一化以使其总和为1,以便将向量用作多项式分布中的参数。

这是一个玩具示例。假设x是具有正值的向量,并且sigma是非常小的正数。当我运行此R代码时,y由于下溢而全为零,其总和也是如此。

x <- rep(1, 10)
sigma <- 1e-3
y <- exp(-x/sigma) # 0's
prob <- y / sum(y) # NaNs

您有什么想法要解决吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

将log_sum_exp函数定义为

log_sum_exp <- function(x) {
  m <- max(x)
  return(m + log(sum(exp(x - m))))
}

,然后prob <- exp(y - log_sum_exp(y))y的“ softmax”。