目次

対数尤度の計算

確率のかけ算が繰り返されるとアンダーフローが起きる。 これを防ぐために確率の対数の足し算を行う。

フォワードアルゴリズムなどを実装すると、 例えば 0.1+0.5=0.6 のような確率の足し算を log の領域で行う必要が出てくる。

このときに exp() で戻すと、せっかく log にした意味がなくなるので、 logadd() と呼ばれる計算を行うのが一般的。

logAdd に関する情報源

Julius では addlog.c にてテーブルルックアップで実装。

HTK では HTKLib/HMath.c に LAdd() として実装されている。

Matlab言語で実装してみた

動作確認は octave で行っている。

%% logadd.m
%% logadd(logX, logY)
%% based on http://nlp.cs.byu.edu/mediawiki/index.php/Log_Domain_Computations
%% Author: nishimotz atmark gmail.com
%% Created: 2010-04-24
function [ ret ] = logadd (logX, logY)
if logY > logX
  temp = logX; logX = logY; logY = temp;
end
if isinf(logX)
  ret = logX; return
end
negDiff = logY - logX;
if negDiff < -20
  ret = logX; return
end
ret = logX + log(1.0 + exp(negDiff));
endfunction

計算例 1

## A = 0.1 ; logA = -2.3026
## B = 0.5 ; logB = -0.69315
## A+B = 0.6 ; log(A+B) = -0.51083

> logadd(-2.3026,-0.69315)
ans = -0.51083

計算例 2

## A = 0.0 ; logA = -Inf
## B = 0.9 ; logB = -0.10536
## A+B = 0.9 ; log(A+B) = -0.10536

> logadd(-Inf,-0.10536)
ans = -0.10536

<html> <div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274067750/r4wh-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/412Ufa2CI%2BL._SL160_.jpg" alt="プログラミングのための確率統計" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274067750/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">プログラミングのための確率統計</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4274067750/r4wh-22/ref=nosim/" title="プログラミングのための確率統計" target="_blank">amazlet</a> at 10.12.05</div></div><div class="amazlet-detail">平岡 和幸 堀 玄 <br />オーム社 <br />売り上げランキング: 66729<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274067750/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div> </html>