CRFの更新式の導出 (訂正版)

昨日,CRFの更新式の導出を行ったけれど,@nokunoさんのご指摘で,僕が算数が出来ないことが世に広まったわけだけれど (誰も見てないから広まってないか),普通の人が計算すれば昨晩の展開はもっとシンプルにできる.というわけで訂正版をアップすることにした.

元々僕の勘違いは,log(A+B) = logA + logBと展開していたミスによるものであり,log(A/B)=logA - logBは正しい.

スタート地点からやり直す.

 L(D; \mathbf{w}) = \sum_{\mathbf{x}_i, \mathbf{y}_i \in D} \log \frac{\exp\{\mathbf{w}^T \Phi(\mathbf{x}_i,\mathbf{y}_i\}}{\sum_{\mathbf{y}_j \in \mathbf{Y}} \exp\{\mathbf{w}^T \Phi(\mathbf{x}_i,\mathbf{y}_j)\}

は,log(分子) - log(分母)の形にできるので,

 L(D; \mathbf{w}) = \sum_{\mathbf{x}_i, \mathbf{y}_i \in D} \left{ \mathbf{w}^T \Phi(\mathbf{x}_i,\mathbf{y}_i) - \log \sum_{\mathbf{y}_j \in \mathbf{Y}} \exp\{\mathbf{w}^T \Phi(\mathbf{x}_i,\mathbf{y}_j)\} \right}

となる.自分はここでlogをΣの中に入れてハマっていた.
さて,こっからの微分は以前よりもっと簡単.

一項目は,そのままwが外れるだけだし,後ろの部分は対数の微分と合成関数の微分がわかっていれば一瞬で解ける.

 \frac{\partial}{\partial \mathbf{w}} L(D; \mathbf{w}) = \sum_{\mathbf{x}_i, \mathbf{y}_i \in D} \left{ \Phi(\mathbf{x}_i,\mathbf{y}_i) - \frac{1}{ \sum_{\mathbf{y}_j \in \mathbf{Y}} \exp\{\mathbf{w}^T \Phi(\mathbf{x}_i,\mathbf{y}_j)\} } \cdot \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)\} \right}

よって,

 \frac{\partial}{\partial \mathbf{w}} L(D; \mathbf{w}) = \sum_{\mathbf{x}_i, \mathbf{y}_i \in D} \left{\Phi(\mathbf{x}_i,\mathbf{y}_j) - \sum_{\mathbf{y}_j \in \mathbf{Y}} \Phi(\mathbf{x}_i,\mathbf{y}_j) P(\mathbf{y}_j | \mathbf{x}_i) \right}

はい終了.

昨日の式展開がどれだけ遠回りだったかということが一瞬でばれてしまう.べっ,べつに,ただtexソースをタイプしたかっただけなんだからねっ!!

というわけで大した恥をかいてしまったけれど,まぁ,いいや.