Pointer network
- 2015年発表
- https://github.com/jojonki/arXivNotes/issues/19
- 元論文はたぶん読んでも理解できなさそう
- https://github.com/jojonki/arXivNotes/issues/19
- ブログ
- Pointer Networks 参考にさせてもらいました
- インド人のYouTube解説動画
- Pointer Networks 例がわかりやすかった
論文の概要
問題設定
例えば凸包(Convex Hull)を求める。
有限集合の凸包は輪ゴムを掛けるようなものである
とあるように、問題自体は簡単で全部の点を囲める、点の集合を求めることだ。
このとき入力が10個の点なので、集合Pとして与えられたら
P = \left\{ P_1, ..., P_{10} \right\}
出力は6個の点なので、各出力は入力の集合上のインデックスとすると
C^P = \left\{ 2, 3, 5, 6, 7, 8 \right\}
みたいな感じになる(インデックス値は適当です)
- これをsoftmax(やほかの活性関数)で出力しようと思うのだがsoftmaxは固定長の次元しか持てないのでできない
- これが概要で書いていた出力の辞書が入力の長さに依存しているという問題
既存の手法(seq2seq)
seq2seqの式の説明
- 論文やYouTubeではseq2seqを数式で説明している(というのはこれがパラメトリックモデルだから)
- パラメトリックモデルは3つのステップでゴールとなるモデル(=数式)を決定する(そしてパラメトリックモデルは確率分布を用いたモデルになる)
- パラメーターを含むモデル(数式)を設定する
- パラメーターを評価する基準を定める
- 最良の評価を与えるパラメーターを決定する
トレーニングデータのペア (\mathcal P, \mathcal C^{\mathcal P}) が与えられたとき次の条件付き確率をRNN (LSTM)によるパラメトリックモデルで推定するというもの。
パラメーターを含むモデル(数式)は以下になる
p(\mathcal C^{\mathcal P} | \mathcal P ; \theta) = \prod_{i=1}^{m(\mathcal P)} p_{\theta} (C_i | C_1, ..., C_{i-1}, \mathcal P; \theta)
- 凸包問題なら、全体の座標の集合Pと、答えになる座標の集合C^Pをデータセットとして与えまくって学習させるというわけか
数式が若干わかりにくい
- p(\mathcal C^{\mathcal P} | \mathcal P ; \theta) は
条件付き確率 P(A|B) はしばしば「B が起こったときの A の(条件付き)確率」「条件 B の下での A の確率」などと表現される
なので
- 条件「全体の座標の集合P」の下での「答えになる座標の集合C^P」ぐらいの意味で
- θは最良の評価を与えるパラメーターであり、学習によって最適化される
- \prod_{i=1}^{m(\mathcal P)} p_{\theta} (C_i | C_1, ..., C_{i-1}, \mathcal P; \theta) は
- Пが総乗記号
- m(P) は出力対象の個数です、忖度してください
- i=1~m(P)までpθ(A|B)の条件付き確率を掛け算して合計する
と、ここまで読んで思ったが総乗記号で全部の積を求めてしまうと左辺がスカラー値になって実用的じゃないと思った。元のseq2seqの論文では左辺も条件付き確率の配列になっているのでそれが正しいんじゃないかなあ…( ^ω^)。左辺は暗黙的に行列だと言われてしまえばおしまいだが、プログラムならコンパイルエラーになりそうな数式だ。しかしこれは既存手法を紹介しているだけなのでほっとく。
gtexのコマンドで式が出なくなってしまったので最良の評価を与えるパラメーターは省略、参照しているブログや元の論文を参照ねがう。
既存の手法(Content Based Input Attention)
Pointer Networks より引用
attentionというものを考えて、seq2seqでは固定的であったdecoderのステートに対してより多くの情報を付加する.
(e_1, ..., e_n) LSTM encoderの隠れ状態
(d_1, ..., d_{m(\mathcal P)}) LSTM decoderの隠れ状態
としたとき、attentionを以下のように定義する.
- u_j^i = v^T \tanh(W_1e_j + W_2d_i) j \in (1, ..., n)
- a_j^i = {\rm softmax}(u_j^i) j \in (1, ..., n)
- d_i^{'} = \sum_{j=1}^n a_j^i e_j
- {\rm hidden \ states} = {\rm concat}(d_i^{'}, d_i)
この手法も出力が固定長という問題がある。動画ではさらっと流されているのでここまで。
Ptr-Net
やっとPtr-Netの登場、先ほどの式のSoftmaxの左辺が条件付き確率になった
- パラメーターを含むモデル(数式)
パラメータはこれでわかったのだけどどのように最適化すればいいのだろう?
- seq2seqが入力要素すべてに対して予測値を出しているのに対して、Ptr-Netは入力値へのポインタを示している