为了解决这个问题,在计算机科学中,我们经常要计算以下几种概率的乘积:
P(A,B,C) = P(A) * P(B) * P(C)
最简单的方法就是将这些数字相乘,这就是我要做的。但是,老板说最好添加概率的日志:
log(P(A,B,C)) = log(P(A)) + log(P(B)) + log(P(C))
这给出了对数概率,但是如果需要,我们可以在以后获得概率:
P(A,B,C) = e^log(P(A,B,C))
日志添加被认为更好,原因有两个:
- 它防止“下溢”,因为下溢的概率乘积如此之小,以至于四舍五入为零。由于概率通常很小,因此这通常是一种风险。
- 它之所以快,是因为许多计算机体系结构执行加法的速度比乘法快。
我的问题是关于第二点。这就是我所看到的描述方式,但是没有考虑获取日志的额外费用!我们应该将“原木成本+加成成本”与“乘法成本”进行比较。考虑到这一点,它还会变小吗?
同样,Wikipedia页面(对数概率)在这方面令人困惑,指出“转换为对数格式很昂贵,但是只发生一次。” 我不明白这一点,因为我认为您需要在添加之前独立记录每个术语的日志。我想念什么?
最后,“计算机执行加法的速度比乘法快”的说法有点含糊。这是特定于x86指令集的,还是处理器体系结构的一些更基本的特征?