CRFの更新式の導出
- (2011-03-29追記) 訂正版を書きました.もっとシンプルに導出できます.
昨晩,Twitterで@tkngさんがCRFの更新式の導出の計算をしていたことを知る.実は僕も時を同じくして計算していた.しかし,なかなか答えが合わない.そうこうしているうちに@tkngさんはちゃんと答えが出せたことを知る.「やぁ,奇遇ですね.僕も今夜なんだかCRFの更新式を計算したくなって,ね.」なんてことをかっこよくつぶやきたかったのだけれど,その前に朝日がのぼりそうだったのであきらめて寝た.
さて今朝起きてから見直してみたら,ゆとりもびっくり! の計算間違いをしていたことを知って,あわてて再計算.ちゃんと導出できたのでうれしくなってブログに書くことにした.
ここまでtexソースが激しくなるとは思わず,途中でちょっと後悔したけれど,達成感でいっぱい.それにしても,はてなでtex記法記述するとキレイじゃないなぁ..
求めたい更新式は対数尤度の勾配.
CRFが訓練データが与えられた際の尤度は,
なので,対数尤度は,
.
CRFではを
としていた.これを代入すると,
が得られる.これの勾配を得るためにで偏微分する.自分はここでlog(A/B) = log(A)/log(B) = log(A) - log(B)log(A+B) = logA+logB (2011-03-29修正.@nokunoさんご指摘ありがとうございます.)という阿呆な勘違いをしていたため,ここで一晩ハマっていた...
頑張って微分をしてみる.使う道具は,
だけ.
まずは,合成関数の微分法を使って
後ろの部分は商の微分法で求める.
(画面に収まり切らない方はズームダウンしてください.)
ぎょっとするけれど,ここまで来れば後は簡単.分子分母で打消し合いまくるので,心行くまで斜線を入れる.
括弧の中の第二項について式変換する.ふたたび
が出現しているので,これを置き換えるだけ.
以上の結果を併せて,
できた!! 多分合ってるはず.
勾配が求まったので,後は最急降下法でも良いし,みんな大好きL-BFGS法とかで解きましょう.どうやら最近は共役勾配法を使う[2]のが玄人の間で流行っているとか...
ただ,実は第二項の の計算を工夫しなければいけないのだけれど,今日の目的は勾配の計算だったので,詳しくは高村本[1]などをご参照のこと.
一部コピペを使ったとはいえ,以下の数式を一発で書けたときにはめちゃくちゃ気持ちよかった...何やってるんだろ...
[tex: \frac{\partial}{\partial \mathbf{w}} L(D; \mathbf{w}) = \sum_{\mathbf{x}_i, \mathbf{y}_i \in D} \frac{\sum_{\mathbf{y}_j \in \mathbf{Y}} \exp\{\mathbf{w}^T \Phi(\mathbf{x}_i,\mathbf{y}_j)\}}{\exp\{\mathbf{w}^T \Phi(\mathbf{x}_i,\mathbf{y}_i\}} \cdot \left{ \frac{ \Phi(\mathbf{x}_i,\mathbf{y}_j) \exp \{\mathbf{w}^T \Phi(\mathbf{x}_i,\mathbf{y}_j)\} \sum_{\mathbf{y}_j \in \mathbf{Y}} \exp\{\mathbf{w}^T \Phi(\mathbf{x}_i,\mathbf{y}_j)\} - \exp\{\mathbf{w}^T \Phi(\mathbf{x}_i,\mathbf{y}_j)\} \sum_{\mathbf{y}_j \in \mathbf{Y}} \Phi(\mathbf{x}_i,\mathbf{y}_j) \exp\{\mathbf{w}^T \Phi(\mathbf{x}_i,\mathbf{y}_j)\} }{\left{ \sum_{\mathbf{y}_j \in \mathbf{Y}} \exp\{\mathbf{w}^T \Phi(\mathbf{x}_i,\mathbf{y}_j)\} \right}^2} \right}]
参考文献
- [1]
- 作者: 高村大也,奥村学
- 出版社/メーカー: コロナ社
- 発売日: 2010/07/01
- メディア: 単行本
- 購入: 13人 クリック: 235回
- この商品を含むブログ (42件) を見る
- [2] 坪井祐太, 海野裕也, 鹿島久嗣, 岡崎直観. "Newton-CG法による条件付き確率場のバッチ学習", 言語処理学会第17回年次大会(NLP2011), 2011.