Um die Frage zu formulieren, wollen wir in der Informatik häufig das Produkt mehrerer Wahrscheinlichkeiten berechnen:
P(A,B,C) = P(A) * P(B) * P(C)
Am einfachsten ist es, diese Zahlen einfach zu multiplizieren, und genau das wollte ich tun. Mein Chef sagte jedoch, es sei besser, das Protokoll der Wahrscheinlichkeiten hinzuzufügen:
log(P(A,B,C)) = log(P(A)) + log(P(B)) + log(P(C))
Dies gibt die Log-Wahrscheinlichkeit an, aber wir können die Wahrscheinlichkeit bei Bedarf nachträglich ermitteln:
P(A,B,C) = e^log(P(A,B,C))
Das Hinzufügen von Protokollen wird aus zwei Gründen als besser angesehen:
- Es verhindert "Unterlauf", wobei das Produkt der Wahrscheinlichkeiten so klein ist, dass es auf Null gerundet wird. Dies kann häufig ein Risiko darstellen, da die Wahrscheinlichkeiten häufig sehr gering sind.
- Es ist schneller, da viele Computerarchitekturen die Addition schneller ausführen können als die Multiplikation.
Meine Frage betrifft den zweiten Punkt. So habe ich es beschrieben gesehen, aber es berücksichtigt nicht die zusätzlichen Kosten für das Abrufen des Protokolls! Wir sollten "Kosten für Log + Kosten für Addition" mit "Kosten für Multiplikation" vergleichen. Ist es noch kleiner, wenn man das berücksichtigt?
Auch die Wikipedia-Seite ( Log-Wahrscheinlichkeit ) ist in dieser Hinsicht verwirrend und besagt: "Die Konvertierung in die Log-Form ist teuer, fällt aber nur einmal an." Ich verstehe das nicht, weil ich denke, dass Sie vor dem Hinzufügen das Protokoll jedes Begriffs unabhängig erstellen müssten. Was vermisse ich?
Schließlich ist die Rechtfertigung, dass "Computer Additionen schneller ausführen als Multiplikationen", etwas vage. Ist das spezifisch für den x86-Befehlssatz oder ist es eine grundlegendere Eigenschaft von Prozessorarchitekturen?