質問を組み立てるために、コンピューターサイエンスでは、いくつかの確率の積を計算することがよくあります。
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))
ログの追加は、次の2つの理由により優れていると考えられます。
- 確率の積が非常に小さいためゼロに丸められる「アンダーフロー」を防ぎます。多くの場合、確率は非常に小さいため、これはリスクとなります。
- 多くのコンピューターアーキテクチャが乗算よりも速く加算を実行できるため、高速です。
私の質問は2番目のポイントについてです。これは私がそれを説明したのを見た方法ですが、ログを取得するための追加コストを考慮していません!「ログのコスト+加算のコスト」を「乗算のコスト」と比較する必要があります。それを考慮に入れた後、それはまだ小さいですか?
また、ウィキペディアのページ(Log potential)はこの点で混乱を招いており、「ログ形式への変換は高価ですが、一度しか発生しません」と述べています。追加する前にすべての用語のログを個別に取得する必要があると思うため、これは理解できません。私は何が欠けていますか?
最後に、「コンピューターは乗算よりも加算を高速に実行する」という正当性は曖昧です。それはx86命令セットに固有のものですか、それともプロセッサアーキテクチャのより基本的な特性ですか?