続・わかりやすいパターン認識 ひとり読書会 2
前回に引き続きディリクレ過程混合モデルの考察です。今回は具体的にアルゴリズムをどのように組めばよいのかを考えます。テキストの続パタにも十分詳細にアルゴリズムが載っていますがやはり細かい部分では行間が空いていますので、その部分を埋めることが一つの目的です。
続パタ読書会 1:ディリクレ過程混合モデル
続パタ読書会 2:ディリクレ過程混合モデルのアルゴリズム
続パタ読書会 3:実験
続パタ読書会 4:実装
続パタ読書会 5:事前確率P(s)の妥当性 1
続パタ読書会 6:事前確率P(s)の妥当性 2
続パタ読書会 7:ベル数 1
続パタ読書会 8:ベル数 2
続パタ読書会 9:P(s_k|x_k, s_-k, θ)の導出
続パタ読書会 10:演習問題12.5の計算
続パタ読書会 11:演習問題12.6の計算 1
続パタ読書会 12:演習問題12.6の計算 2
ディリクレ過程混合モデルのアルゴリズム
概要
ディリクレ過程混合モデルの実装として必要な処理は大まかに
1. 初期化
(1.) ハイパーパラメータの設定
(2.) パターンの入力
(3.) その他のパラメータの設定
(4.) クラスタ構造の変更に対して不変である式の計算
(5.) 対数事後確率の初期値の計算
2. 学習
(1.) の更新
(2.) の更新
(3.) 対数事後確率の計算
3. 結果取得
という感じです。では各々の処理を具体的にどのようにするかを考えていきます。
初期化
1. ハイパーパラメータの設定
学習を開始するために必要なパラメータを事前に設定します。具体的に事前に設定が必要なパラメータは
- :集中度
- :正規ウィシャート分布のパラメータ
- :自由度
- :正定値対象行列
の四つです。
2. パターンの入力
続いてパターン集合を入力します。パターンが入力されることによって同時にパターン総数と特徴空間の次元数も判明しますのでそれらも設定します。つまり
- :パターン集合
- :パターン総数
- :特徴空間の次元数
の3つを設定します。
3. その他のパラメータの設定
パターン集合を得たことで設定が可能となる残ったパラメータをすべて初期化します。1.で設定したパラメータはパターンの入力なしに設定が可能なもの、2.で設定したパラメータはパターンが入力されれば同時に確定するパラメータですが、ここで設定するパラメータは事前にどのように設定するかを決めておく必要があるもののうちパターン集合が入力されなければ設定できないパラメータです。ここでもテキストに倣い初期状態では全パターンが同一のクラスタに所属する、つまりクラスタ数は1から始めるものとし、は全パターンの標本平均とします。具体的には下記のように設定します。
- はすべて
全パターンが同一クラスタのため所属クラスタはすべてとします。実装では言語(python)上のインデックスがから始まるためにすべてとしていますが、意味的には全パターンがクラスタに所属することを表していることに変わりはありません。
番目のクラスタ(つまり)に所属しているパターン数をで表します。ここではクラスタ数が一つしかなく、全パターンがその一つのクラスタに所属しているため、のみが存在し、所属パターン数はパターン総数であるとなります。
テキストに倣いハイパーパラメータは全パターンの標本平均で初期化します。
全パターン同一クラスタのためはと同じく全パターンの標本平均で初期化します。また、精度行列は全パターンより算出した分散共分散行列の逆行列で初期化します。つまりです。
4. クラスタ構造の変更に対して不変である式の計算
学習を進めていくとクラスタ構造は変更されますが、クラスタ構造の変更に対して不変なパラメータのみを持つ式の計算内容は変わりません。ですのでここではそれらを事前に計算しておきます。具体的には対数事後確率の項の一つであるイーウェンスの抽出公式
における最初の項と最後の項を計算しておきます。最初の項のの部分は集中度のみに依存しておりクラスタ構造に対し不変です。また最後の項のは集中度とパターン総数のみに依存するためやはりクラスタ構造に対し不変です。後者のは実際の計算を書き下ろせば
となりますのでこれを計算しておきます。
5. 対数事後確率の初期値の計算
最後に対数事後確率の初期値を計算します。具体的に書き下ろせば
となります。とは4.で事前に計算済みですのでその値を利用できます。この対数事後確率の初期値を計算したらログ用に対数事後確率の最大値と最大値を取った試行回のインデックスを初期化します。つまり
と初期化します。
学習
概要
学習を行う関数では総学習回数と打ち切り回数を引数として取ることとします。打ち切り回数で指定した回数だけ更新が滞れば収束したものとみなし学習を終了します。また打ち切り回数だけ滞ることがなくとも総学習回数で指定した回数だけ学習を繰り返した場合も学習を終了することとします。ほかに現在の学習回数を表すと現在の停滞回数を表すの二つを変数として用いることとします。具体的には
のように学習を行います。テキストでは毎回の学習の後にがを上回っていた場合のみに更新を反映させていますが、このやり方だと学習のたびにギブスサンプリングのバーンイン期間の結果を捨てる必要があり計算量が大きくなります。また、もしバーンイン期間を考慮せずにテキスト通りの実装をしてしまうと正しくに従った生成が出来ません。何を初期値に用いるとしても初期値は分布において確率の低い値でしょう。この状態からただギブスサンプリングを行ってもバーンイン期間がないために生成されるは初期値に依存した確率の低い(対数事後確率が小さい)ものになります。こうなるとなかなかが更新されず、更新が起こらないために次のギブスサンプリングでもやはり初期値に依存した確率の低い値が生成され続けるという羽目になります。それを避けるためにバーンイン期間を設けない代わりにを無条件で更新し続け、対数事後確率が最も大きかった試行回を解として出力する形に変更しています。このやり方であれば試行回が進むほどは初期値ではなくに従って生成されるようになります。
1. の更新
の更新では各をギブスサンプリングで順次更新していき一通りすべてのを更新し終えたところでの更新を一度やり終えたものとします。具体的には各について以下のような処理を繰り返します。
- ・クラスタ数をする
- ・のうちインデックスがよりも大きいものをすべてする
- ・のうち番目のものを削除する
- に新しいクラスタを割り当てます。つまり以下を計算して割り当てます。
- ここで上下ともに第一項の分母は最終的に正規化をすることを考えれば無視できます。上の式について各について計算した結果をそれぞれ、下の式について計算した結果をとあらわすならばは
- の比でどのクラスタに割り当てられるかが決まります。
3. 対数事後確率の計算
計算の内容は初期化の「5. 対数事後確率の初期値の計算」と同じです。つまり
を計算します。
結果取得
最後に結果の取得です。学習が終了したのちに必要な結果を取り出せればよいので、学習過程を記録するリストを用意しておきます。
ログのリスト
具体的には下記のようなリストを用意し学習毎に記録を取ります。
- のリスト
- のリスト
- のリスト
- のリスト
- のリスト
- のリスト
今回はここまでにして次回は実際に実験をしていきます。
続パタ読書会 1:ディリクレ過程混合モデル
続パタ読書会 2:ディリクレ過程混合モデルのアルゴリズム
続パタ読書会 3:実験
続パタ読書会 4:実装
続パタ読書会 5:事前確率P(s)の妥当性 1
続パタ読書会 6:事前確率P(s)の妥当性 2
続パタ読書会 7:ベル数 1
続パタ読書会 8:ベル数 2
続パタ読書会 9:P(s_k|x_k, s_-k, θ)の導出
続パタ読書会 10:演習問題12.5の計算
続パタ読書会 11:演習問題12.6の計算 1
続パタ読書会 12:演習問題12.6の計算 2