時代に翻弄されるエンジニアのブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら書きたいと思います。

最尤推定について読んでみた

昨日に引き続きコロナ社から出版されている自然言語シリーズの自然言語のための機械学習入門を読んでみました.

はじめに

 今日読んだのは最尤推定の章です.統計モデルでは嫌というほど出てきます.確率モデルは学習データが発生する確率を表しており,最尤推定とは発生確率を最大化するパラメータの探索となります.簡単なものでは偏微分を解いたりラグランジュ乗数を用いて計算できますが,複雑なモデルではEMアルゴリズムや勾配法などで解きます.今回の例では偏微分を行い解析的に解いています.

尤度

 
 尤度は確率モデルにおいて学習データ列を発生させる確率です.尤度を最大化する問題を最尤推定と言います.n個の学習データを

{ \displaystyle
{\bf D} = x_1,x_2,...,x_n
}

とすると,尤度は以下のように求められます,

{ \displaystyle
P({\bf D}) = \prod_{x_i \in {\bf D}} p(x_i)
}

ここで注意してほしいのは学習データが互いに独立であり同様の分布を取っていることです.これは,i.i.d(独立に同一の確率分布に従う)と言います.サイコロで例えると,別々の試行の結果であり,同様のサイコロを使っているか?ということです.

尤度はそのままでは,掛け算なので以下の用に対数を取ることで計算を容易にして使います.最大化の問題については対数をとっても変わりはありません.

{ \displaystyle
\log P({\bf D}) = \sum_{x_i \in {\bf D}} \log p(x_i)
}

最尤推定

 ここでは,ポアソン分布の最尤推定を例にしてみたいと思います.ポアソン分布は以下のような分布であり,求めるべきパラメータはλとなります.

{\displaystyle
P(x;λ) = \frac{λ^x}{x!}e^{-λ}
}

ここで,最尤推定の式に当てはめると

{ \displaystyle
\log P({\bf D}) = \sum_{x_i \in {\bf D}} \log \frac{λ^{x_i}}{{x_i}!}e^{-λ}
}

となります.これをλについて偏微分すると


{ \displaystyle
\frac{\partial \log P({\bf D})}{\partial λ} = \sum_{x_i \in {\bf D}} (x_i \frac{1}{λ}-1)
}

となり,これを0として,λについて解くと

{ 
λ = \frac{ \displaystyle \sum_{x_i \in {\bf D}} x_i }{ |{\bf D}| }
}

と求めることができます.

また,最尤推定はパラメータに寄らない分布の確率を最大化するような推定でもあります
例えばある人が発話のする単語の発生確率を求めるとします.つまり,"はい","いいえ","わかりません"の出現回数が分かっている場合にp("はい"),p("いいえ"),p("わかりません")を求めるということです.最大化する式は以下のようになります.

{
\log P({\bf D}) = \displaystyle \sum_w n_w \log p_w
}

単語の発生確率にはすべての確率を足すと1になる性質があるので,ラグランジュ乗数をλとして制約付き最適化問題を解くとするとラグランジュ関数Lは以下のようになります.

{
L({\bf p},λ) = \displaystyle \sum_w n_w \log p_w + λ( \displaystyle \sum_w p_w -1)
}

これを偏微分すると

{ \displaystyle
\frac{\partial L({\bf D},λ)}{\partial p_w} = \frac{n_w}{p_w} + λ
}

となり,これを0として,全ての単語に対してλの連立方程式ととくと単語の発生確率は以下のようになります.

{
p_w = \frac{n_w}{\displaystyle \sum_w n_w} = \frac{n_w}{N}
}

最大事後確率推定

 最尤推定では学習データDのみからモデルのパラメータの推定を行いました.しかし,複雑なモデルではパラメータ推定は難しくなります.もし事前に学習データの傾向が分かっていれば,例えばポアソン分布のλ=10付近でモデル化できることが分かっていればより高精度なパラメータ推定を行うことができます.これを最大事後確率推定という.

 具体的にはパラメータθが与えられた際の確率分布をP(θ)とすると,学習データDが与えられていた時,最大事後確率はP(θ|D)となる.最尤推定ではパラメータが確率変数を表している確率を最大化したが,最大事後確率推定では学習データがパラメータを表している確率を最大化します.最大事後確率推定は以下のように変換できます.

{ 
\begin{eqnarray}
\arg \displaystyle \max_θ P(θ|D) & = \arg \displaystyle \max_θ \frac{P(θ)・P(D|θ)}{P(D)} \\
& = \arg \displaystyle \max_θ P(θ)・P(D|θ)
\end{eqnarray}
}

このようにすると,パラメータθが与えられたときの分布P(θ)の最大化と,学習データの発生確率P(D|θ)の最大化の項に分けることができます.あとは,先ほどの最尤推定を行うだけです.

補足しておくと

  • パラメータθが与えられたときの分布P(θ)とは事前に別の学習データから作られた分布であると考えてもよい
  • P(D|θ) = P(D)

おわりに

 最尤推定は尤度を最大にするパラメータを求めるといったもので,自然言語処理だけではなく,認識関係では幅広く使われています.また,最大事後確率推定は私もいまだわからないこともありますが,局所解に陥ってしまうような推定には重要なのではと感じています.今回は導入で具体手行きな推定のアルゴリズムについては解説していませんでしたが,今後していこうと思います.