uchiumiさんが最近"log sum exponential"という単語を連呼していた。 「ろぐ さむ えくすぽおねんしゃる?なにそれおいしいの?」 状態だったのだが、最近LDA(Latent Dirichlet Allocation)を実装した際に、この"log sum exponential"問題に遭遇したのでメモしておく。 例えばある変数集合{Ai}があったときに Pi = Ai / ΣAiとして最大1になるようにして確率化したいことがある。ここでPiやAiが非常に大きい、または小さい値を取る場合PiやAiをそのまま保持せずにlog(Pi)やlog(Ai)として持っておきたいことがある。 以下、lnPi = log(Pi)、lnAi = log(Ai)として扱う。 lnPi = lnAi - log(ΣAi) = lnAi - log(Σexp(lnAi)))とすればPiとaiを