我正在对向量进行归一化以使其总和为1,以便将向量用作多项式分布中的参数。
这是一个玩具示例。假设x
是具有正值的向量,并且sigma
是非常小的正数。当我运行此R代码时,y
由于下溢而全为零,其总和也是如此。
x <- rep(1, 10)
sigma <- 1e-3
y <- exp(-x/sigma) # 0's
prob <- y / sum(y) # NaNs
您有什么想法要解决吗?
谢谢。
答案 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”。