[月別過去ログ] 2017年07月

« 2017年06月 | 最新のページに戻る | 2017年08月 »

2017年07月07日

EMアルゴリズムの勉強メモ

自由エネルギー原理を理解するためには機械学習での「変分ベイズ」を理解する必要があって、さらにその手前の段階に「EMアルゴリズム」がある。EMアルゴリズムにおいてもKL divergenceを最小化して下界Lを最大化する過程が出てくる(PRMLの9.4章の図9.11-14)。

この図と式を字面を追っていくことはできるけど、シンプルなモデルでじっさいにグラフを書いて理解できるようにしたい。いちばん簡単な例はなんだろうか? Nature BiotechnologyのPrimerの記事で混合二項分布を使ったいい感じにわかりやすいものを見つけた:Do, C. B., & Batzoglou, S. (2008). What is the expectation maximization algorithm? Nature Biotechnology, 26(8), 897–899.

ここにある事例を使ってmatlabでグラフ書きながら理解してみることにしよう。


潜在変数がない場合 (=>最尤推定)

コインの裏表のデータがある。データXはコインの表の数(列1)と裏の数(列2)を表していて、10回での裏表の数を計算して、それを5回繰り返しす。つまり、データ で、たとえば だと、10回中5回表が出たということ。

X = [...
    5 5;
    9 1;
    8 2;
    4 6;
    7 3];

じつはコインには二種類、コインAとコインBがあって、それぞれで表が出る確率が違う。この5回でどっちを使ったかのデータがわかっていて、それをZで示している。つまり、データ で、 (A or BでAを使った確率)

Z = [...
    0
    1
    1
    0
    1];

それではcoin Aおよびcoin Bそれぞれでの表の出る確率 はいくつか?

これは最尤推定で解ける。しかも二項分布の場合は最尤推定を使わなくても、coin Aでは thetaA = 24/30=0.80 , coin Bでは thetaB = 9/20=0.45 という計算だけで済む。


潜在変数がある場合 (=>EMアルゴリズム)

ではもし、いつcoin A, coin Bが出たか(Z)が不明の場合にもcoin Aとcoin Bの表が出る確率を推定することはできるだろうか? つまり入手できるデータはXだけで、Zのほうは入手できない潜在変数という場合でも可能か?というのが問い。

そうすると問題はこのときの尤度

を最大化するような を求めたい、ということになる。

そこで尤度 を最大化する代わりに、

における を最大化する。

これのlogを取ったものの最大化を考える。

(1) 推定する変数 および の初期化

, : コインA, Bそれぞれの表が出る確率

theta_Aest = 0.60;
theta_Best = 0.50;

および

pziAest = [...
    0.5;
    0.5;
    0.5;
    0.5;
    0.5];
pziBest = 1 - pziAest;

(2) E-step: を計算する

ベイズの公式より

これらが計算できればE-stepでの目的である として

右辺は(2)と(1)から計算できる。

実際にはこれを計算する:

のときの が起こる尤度だから

px1z1A = binopdf(X(1,1), X(1,1)+X(1,2), theta_Aest)
px1z1A =       0.20066

初期設定より、

よって は以下のように計算できる。

pz1Ax1 = px1z1A .* pziAest(1)
pz1Ax1 =       0.10033

同様にして、 のときの が起こる尤度だから

px1z1B = binopdf(X(1,2), X(1,1)+X(1,2), theta_Best)
px1z1B =       0.24609

初期設定より、

よって は以下のように計算できる。

pz1Bx1 = px1z1B .* pziBest(1)
pz1Bx1 =       0.12305

まとめると となる。

同様にして について計算すると

pziAxi = ([binopdf(X(:,1), X(:,1)+X(:,2), theta_Aest)]) .* pziAest;
pziBxi = ([binopdf(X(:,2), X(:,1)+X(:,2), theta_Best)]) .* pziBest;
[pziAxi pziBxi]
ans =
      0.10033      0.12305
     0.020155    0.0048828
     0.060466     0.021973
     0.055738      0.10254
       0.1075     0.058594

を計算するには上で計算した があればよい。

より

pxi = pziAxi + pziBxi
pxi =
      0.22338
     0.025038
     0.082439
      0.15828
      0.16609

これが の推定値

pziAest = pziAxi ./ pxi;
pziBest = pziBxi ./ pxi;
[pziAest pziBest]
ans =
      0.44915      0.55085
      0.80499      0.19501
      0.73347      0.26653
      0.35216      0.64784
      0.64722      0.35278

(3) M-step: の推定

coinAが出る期待値は

X_Aest = X .* pziAest;
X_Best = X .* pziBest;
sumX_Aest = sum(X_Aest,1);
sumX_Best = sum(X_Best,1);
theta_Aest = sumX_Aest(1) / (sumX_Aest(1) + sumX_Aest(2));
theta_Best = sumX_Best(1) / (sumX_Best(1) + sumX_Best(2));
[theta_Aest theta_Best]
ans =       0.71301      0.58134

(4) 収束条件を見てストップするか判断

thetaが収束したかどうかを確認して、E-Mの繰り返しを止めるか決める。

ではE-Mを20回繰り返して、thetaが収束するかどうか見てみることにしよう。

clear all
X = [...
    5 5;
    9 1;
    8 2;
    4 6;
    7 3];
theta_Aest = 0.60;
theta_Best = 0.50;
pziAest = [...
    0.5;
    0.5;
    0.5;
    0.5;
    0.5];
pziBest = 1 - pziAest;
theta_est =[theta_Aest theta_Best];
for ii=1:20
    pziAxi = ([binopdf(X(:,1), X(:,1)+X(:,2), theta_Aest)]) .* pziAest;
    pziBxi = ([binopdf(X(:,2), X(:,1)+X(:,2), theta_Best)]) .* pziBest;
    pxi = pziAxi + pziBxi;
    pziAest = pziAxi ./ pxi;
    pziBest = pziBxi ./ pxi;
    X_Aest = X .* pziAest;
    X_Best = X .* pziBest;
    sumX_Aest = sum(X_Aest,1);
    sumX_Best = sum(X_Best,1);
    theta_Aest = sumX_Aest(1) / (sumX_Aest(1) + sumX_Aest(2));
    theta_Best = sumX_Best(1) / (sumX_Best(1) + sumX_Best(2));
    theta_est = [theta_est; theta_Aest theta_Best];
end
figure;
hold on
plot(0:size(theta_est)-1, theta_est(:,1), 'ro-')
plot(0:size(theta_est)-1, theta_est(:,2), 'bo-')
plot.png

このように、Zが既知での最尤法のときに計算した値(thetaA = 0.80, thetaB = 0.45)と同じ値に収束していることが分かる。

ところでNature BiotechnologyのPrimerの記事では10回繰り返したところでthetaの推定値が thetaA = 0.80, thetaB = 0.52 となってる。たぶんPrimerの記事のほうがなんか間違えてると思う。


お勧めエントリ

  • 細胞外電極はなにを見ているか(1) 20080727 (2) リニューアル版 20081107
  • 総説 長期記憶の脳内メカニズム 20100909
  • 駒場講義2013 「意識の科学的研究 - 盲視を起点に」20130626
  • 駒場講義2012レジメ 意識と注意の脳内メカニズム(1) 注意 20121010 (2) 意識 20121011
  • 視覚、注意、言語で3*2の背側、腹側経路説 20140119
  • 脳科学辞典の項目書いた 「盲視」 20130407
  • 脳科学辞典の項目書いた 「気づき」 20130228
  • 脳科学辞典の項目書いた 「サリエンシー」 20121224
  • 脳科学辞典の項目書いた 「マイクロサッケード」 20121227
  • 盲視でおこる「なにかあるかんじ」 20110126
  • DKL色空間についてまとめ 20090113
  • 科学基礎論学会 秋の研究例会 ワークショップ「意識の神経科学と神経現象学」レジメ 20131102
  • ギャラガー&ザハヴィ『現象学的な心』合評会レジメ 20130628
  • Marrのrepresentationとprocessをベイトソン流に解釈する (1) 20100317 (2) 20100317
  • 半側空間無視と同名半盲とは区別できるか?(1) 20080220 (2) 半側空間無視の原因部位は? 20080221
  • MarrのVisionの最初と最後だけを読む 20071213

月別過去ログ


« 2017年06月 | 最新のページに戻る | 2017年08月 »