対数線形モデルメモ

対数線形モデルとは?

  • P(y|d)を直接モデル化する(y:ラベル、d:事例)
    • P(d), P(d|y), P(d,y)などは求めることができない

素性関数

  • ラベルと事例の組(y, d)を素性として扱う
    • そうでない場合としては、事例の各要素を素性として使うが、それにラベルも追加
  • 素性関数\phi_k(d, y)を各要素に持つ素性ベクトル\phi(d, y)を定義する
    • 要は、ラベルごとに事例の要素を別の素性として扱う
    • 事例の要素数*ラベル数だけの素性ができる
    • これによって線形分類器などで、クラスごとに重みベクトルを考えなくても良くなる
    • ラベルにはA,Bがあり、事例の要素にはa,bがある場合、
    • (ラベルがAならaの値, ラベルがAならbの値, ラベルがBならaの値, ラベルがBならbの値)と定義すると、
    • ( ラベルA, 事例(a=1, b=2) )というものは、(1, 2, 0, 0)
    • ( ラベルB, 事例(a=2, b=5) )というものは、(0, 0, 2, 5)

対数線形モデル

  • 条件付き確率P(y|d)を次のようにモデル化する
    • P(y|d)=\frac{1}{Z_{d,w}}{exp(w \cdot \phi(d,y) )}
    • Z_{d,w}=\sum_y{exp(w \cdot \phi(d,y) )} : 正規化のための係数
  • 分類
    • y^* = argmax_y \frac{1}{Z_{d,w}} exp( w\cdot \phi(d,y) )
      • ラベルだけを求めたい場合は正規化係数Zはいらないので、指数部分だけを計算すればいい
  • 学習
    • 正則化項をつけた以下の目的関数を最大化
    • L(w)=\sum_{D} log P(y^{(i)}|d^{(i)}) - \frac{C}{2}|w|^2
      • ただし、この問題は解析的には求められない
    • 最急勾配法では、以下の更新を繰り返す
    • w_{(t+1)}=w_{t} + \epsilon \nabla_w L(w_{t})
      • ε : 学習率
    • 対数線形モデルでは、勾配の部分が以下のように変形できる
    • \sout{\nabla_w L(w_{t}) = \sum_{D} (\phi(d^{(i)}, y^{(i)}-\sum_y P(y|d^{(i)})\phi(d^{(i)},y))-Cw}
    • (2016/9/1修正)
    • \nabla_w L(w_{t}) = \sum_{D} (\phi(d^{(i)}, y^{(i)})-\sum_y P(y|d^{(i)})\phi(d^{(i)},y))-Cw

参考文献