在对数线性模型中,我们可以使用IIS找到最大熵解。 我们通过找到一个参数来更新参数,这些参数使得对特征和经验期望匹配的模型期望。 但是,等式中有exp(所有特征的总和)。 我的问题是,当特征的数量很大(比如10000)时,对所有特征的求和将很容易。我们如何通过数值方法解决这个问题?对我来说似乎是不可能的,因为即使计算exp(50)也会破灭。
答案 0 :(得分:3)
在日志空间中进行计算,并使用logsumexp
操作(从scikit-learn借用):
// Pseudocode for 1-d version of logsumexp:
// computes log(sum(exp(x) for x in a)) in a numerically stable way.
def logsumexp(a : array of float):
amax = maximum(a)
sum = 0.
for x in a:
sum += exp(x - amax)
return log(sum) + amax
这个求和可以在主循环开始之前完成一次,因为在优化时特征值不会改变。
旁注:IIS非常老套。 Since some 10 years,几乎每个人都在使用L-BFGS-B,OWL-QN或(A)SGD来拟合对数线性模型。