Dual Decompositionチュートリアル

M1のryo-ko君がDual Decomposition(双対分解)のチュートリアルをやってくれた。DMLAメンバーで適当に持ち回って不定期に開催している。

Dual Decompositionとは

Theoremの証明とか細かいところはいくつか分からなかったが、例えばCFGとHMMのdecodeを一緒にやるということを考えたときに

  • それぞれのモデルは個別にtrainingされている
  • decodeのときに両方の出力を同時に考慮しながらdecodeしたい

というような状況のときに使えるようだ。あるいは例えば2つのモデルに限らず品詞タグ付けで「この単語は名詞にも動詞にもなる得るけど、あるコンテキストで見た場合には名詞になることがほとんどだ」というような状況はよくありそうだが、そういうglobalな制約をdecode時に入れられるというのが特徴らしい(制約の部分はMRFみたいなので組み込んであげる)。

Joint Learningとの違い

話を聞いてるとJoint Learningのこととかを思い出していたが、例えばPOS taggingとNERを同時にやるというのをjoint learningでやろうとする場合、学習もdecodeも一つのモデルでやってしまうので、モデル作るときにも結構数学やらcodingが得意な人がゴリゴリやらないといけないイメージ(うちの研究室だとai-aさんとか)。しかし、Dual Decompositionだとそれぞれのモデルは個別に学習していいので単体が簡単なモデルなら簡単に学習でき、Doal Decompositionのdecodeのアルゴリズムは劣勾配を下っていくだけなので、実装も結構簡単にできそう(要するにJoint Learning的な職人芸がなくても割と多くの人が実線できそう、ということ)。もちろん、Joint Learningのほうが真面目に考えているのでそっちのほうが精度はいいと思うが、問題はそれら2つの精度が実際にはどこまで違ってくるのかということ。実際にはタスク依存だったりすると思うのでなんとも言えないが、Dual Decompositionした結果が負けているならやはり学習のときからJointでやるべきだということになるし、あんまり変わらないのならより簡単なDual Decompositionのほうが筋がよさそう、という結論になりそう。あとは、NLPの上位レイヤーのアプリケーションだとJoint Learningするのが大変そうだが、Dual Decompositionだとそういうのも割と扱えそうかな、と思えるsimpleさがいいところ、なのかな。そういえばAAAIのHalの構造学習のときにはDual Decompositionの話は出てこなかったな。なんでだろう。

まとめ

まとめると、Dual Decompositionは

  • これからのNLPで必要になってくると思われる複雑でグローバルな制約などを割と簡単に導入できる
  • Joint Learningで必要とされるようなゴリゴリの職人芸はそこまで必要とされない

という感じだろうか。とにもかくにもryo-ko君お疲れ様でした。

参考