nykergoto’s blog

機械学習とpythonをメインに

EMアルゴリズムについての殴り書き

EMアルゴリズムって何?

隠れ変数が存在するモデルに対して、モデル変数を変化させた時に尤度関数を最大化させる方法の事.

隠れ変数って何?

実際に観測されないけれど、観測される値がどういう分布に従うのかを決定する変数のこと.
具体例で言うと、

  • 回帰問題の重み変数だったり、
  • クラス分け問題の時にその変数がどのクラスに入るのかを表したりする変数だったり.

ざっくりいうと別になくてもいいんだけどあったほうが観測値を説明しやすくするための変数

結局何が起こるの

argmax p(X|θ).

ここでXは観測データの値で、θはモデルが持っている変数
(例:線形回帰問題の観測データ各点に乗っかるノイズの大きさβとか、重みwの事前分布の分散の大きさαとかそんなの)

じゃあ具体的には何をするの?

EステップとMステップと呼ばれている計算を交互にします.

Eステップって何

現在持っているモデル変数θ(old)を用いて、隠れ変数wの事後分布を計算します.

どういうことかというと、モデル変数がθ(old)で、それがわかっている時にdata:Xが得られる可能性を計算します.数式にするとp(Z|X,θ(old))になります.

(注:ここでoldとしているのはあとのMステップでこのθを更新するので、それと違いを表すために添字としておいています)

Mステップって何

Eステップで計算した事後分布p(Z|X,θ(old))を用いて、ある関数Q(θ,θ(old))を最大化します.

Qって何

完全データ対数尤度と呼ばれる関数を、先ほどのEステップで計算した事後分布で期待値を取った関数です.いみわからないと思うので数式を書いたほうが分かり良いと思います.

 Q(\theta,\theta_{old})=E_z[p(X,Z|\theta)]=\int p(X,Z|\theta)\times p(Z|X,\theta_{old})dZ