なぜ確率を掛けるよりもログの確率を速く加えるのですか?


21

質問を組み立てるために、コンピューターサイエンスでは、いくつかの確率の積を計算することがよくあります。

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つの理由により優れていると考えられます。

  1. 確率の積が非常に小さいためゼロに丸められる「アンダーフロー」を防ぎます。多くの場合、確率は非常に小さいため、これはリスクとなります。
  2. 多くのコンピューターアーキテクチャが乗算よりも速く加算を実行できるため、高速です。

私の質問は2番目のポイントについてです。これは私がそれを説明したのを見た方法ですが、ログを取得するための追加コストを考慮していません!「ログのコスト+加算のコスト」を「乗算のコスト」と比較する必要があります。それを考慮に入れた後、それはまだ小さいですか?

また、ウィキペディアのページ(Log potential)はこの点で混乱を招いており、「ログ形式への変換は高価ですが、一度しか発生しません」と述べています。追加する前にすべての用語のログを個別に取得する必要があると思うため、これは理解できません。私は何が欠けていますか?

最後に、「コンピューターは乗算よりも加算を高速に実行する」という正当性は曖昧です。それはx86命令セットに固有のものですか、それともプロセッサアーキテクチャのより基本的な特性ですか?


18
最初の利点(アンダーフローを回避する)は、パフォーマンスの向上よりもはるかに重要であることが多いため、それが速くなくてもログ確率を使用します。
DW

@DWの発言を拡張するために、パフォーマンスに関係なくアンダーフローに対処するために特に使用される同様の「log-sum-expトリック」があります。実際、対数を取ることをパフォーマンス改善手法とみなす人を見たのはこれが初めてでした!
Mehrdad

回答:


14

また、ウィキペディアのページ(https://en.wikipedia.org/wiki/Log_probability)は、この点で混乱しています。「ログ形式への変換は高価ですが、一度しか発生しません」と述べています。追加する前にすべての用語のログを個別に取得する必要があると思うため、これは理解できません。私は何が欠けていますか?

P(A1)P(An)nn1n1

ただし、次の形式のクエリに応答することは非常に一般的です。

iIP(Ai)I{1,n}

logP(Ai)|I|

最後に、「コンピューターは乗算よりも加算を高速に実行する」という正当性は曖昧です。それはx86命令セットに固有のものですか、それともプロセッサアーキテクチャのより基本的な特性ですか?

a+baba×b

2

それにもかかわらず、これはすべての一般的なコンピューターアーキテクチャに関する合理的なステートメントです。浮動小数点数の乗算は加算よりも遅くなります。


1
P(Ai)

最終的なexp()はどうですか?遅くないですか?
-Mehrdad

Θ(M(n)logn)M(n)Θ(nM(n)logn+nqQ|Iq|)Qクエリのセットです)。
md5

2
expn(0,1)log10

1
IEEE浮動小数点を使用する場合、乗算よりも加算の方が高速ですか?フロート加算には同時に実行できないいくつかのステップがあります-仮数を揃えて(減算の結果に基づいて左にシフトします)、実際にそれらを加算してから正規化します(アンダーフローとオーバーフロー、いや)。回路では、非常に多くのダイであり、マイクロコードでは、各ステップのコストは1サイクルまたはわずかです。
ジョンドヴォルザーク

4

Np1,...pNpi

N

O(n)nO(n2)

ちなみに、この考え方はモンゴメリのモジュラー乗算に似ています。モンゴメリの乗算は、通常の乗算​​とその後の乗算よりもかなり高速なモンゴメリー形式で実行されます。



1
@Mehrdad、私はあなたが2つの数字の学校乗算を学んだことを望みます。そのアルゴリズムはまだコンピューターチップで広く使用されています。こちらをご覧ください。これらの乗算アルゴリズムは、乗算回路で広く使用されていますか?
fade2black


1
答えの精神はまだ正しいですよね?乗算アルゴリズムのいずれも加算の線形時間と一致しない場合は?
スティーブン

1
@Stephen、実際、問題は乗算アルゴリズムの正確な最良の複雑さについてではありませんでした。コメントが必要な場合は、このテーマに関する追加情報を提供できます。ここでの長い議論はトピックから外れると思います。)))
fade2black
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.