NIPS2017論文読みメモ: Tensorized LSTM(その3)

以下の論文を読みます。

Zhen He, Shaobing Gao, Liang Xiao, Daxue Liu, Hangen He and David Barber. Wider and Deeper, Cheaper and Faster: Tensorized LSTMs for Sequence Learning. arXiv: 1711.01577, 2017. https://arxiv.org/abs/1711.01577
※ 以下、キャラクターが会話します。それぞれの原作とは関係ありません。内容の誤りは本ブログ筆者に帰属します。
前回:その2 / 次回:まだ
f:id:cookie-box:20180108144114p:plain:w60

RNN は、ステップ毎に「前回の特徴 + 今回の入力」を「今回の特徴」に変換することによって、ある系列の特徴を得ることを目指す。RNN層をスタックすれば特徴の特徴を得ることもできる。でも、層をスタックするほど実行時間も勾配消失(爆発)の危険も増大する。層を積み重ねずに深く特徴を抽出したいなら、ある層が抽出した特徴を次の層に渡すとき、次の時間ステップに渡すように歪めてしまう。つまり、「前回の浅い特徴 + 前回の深い特徴」を「今回の深い特徴」にする。これによって、前回の浅い特徴から今回の深い特徴まで架け橋ができる。時間ステップが経過する度、特徴は深くなる。さらに、後ろの層の特徴を参照してもいい。表現力も増す。

f:id:cookie-box:20180108144126p:plain:w60

前回はその Tensorized RNN まで用意できたよね。各層の隠れ状態を積み重ねたものを隠れテンソルとする。この隠れテンソルの更新をカーネルでの畳込みにより行うことでパラメータも節約できる。ただ、LSTM の機能をまだ実装できていない。LSTM は RNN に記憶セルとゲートを増設したものだから、記憶セルを設置して、各ゲート用のカーネルを用意するのじゃ駄目なのかな?

f:id:cookie-box:20180108144114p:plain:w60

歪みのない Stacked RNN だったらそれでも大丈夫…。記憶セルは、時が流れても拡大も縮小もされない特徴を確保するための仕組み。時を遡っても誤差が拡大も縮小もされないことを保証する。でも、Tensorized RNN 上の誤差逆伝播では前のステップの同じ層にだけじゃない、前の層にも後ろの層にも誤差を伝播さなければならない…。

f:id:cookie-box:20180108144126p:plain:w60

それはそうだけど…記憶セルのお陰で勾配消失(爆発)の懸念は払拭されたんじゃ…あ、伝播に支障をきたすのはもしかして重み係数のコンフリクトの方?

f:id:cookie-box:20180108144114p:plain:w60

うん。再帰構造を含むニューラルネットには、時間ステップ毎に受け取りたい入力がきたり受け取りたくない入力がくるから、重み係数のコンフリクトの心配が付きまとう。だから受け取りたいときだけ受け取れるように Input Gate で制御する。でも、Input Gate が制御しているのは「記憶にどのように加算するか」…加算だけでは制御できているとはいえない。次の時間ステップにかけて層をクロスした斜め方向にも情報は流れる。この斜めのフローも、ゲート開閉を制御したい?

f:id:cookie-box:20180108144126p:plain:w60

何となくわかった…でも、記憶セルの更新時に斜め方向への情報は移動しないよね。それこそ、テンソル更新時の畳込みにつかうカーネルを、時間ステップ毎に変えちゃうような対応が必要じゃない?

f:id:cookie-box:20180108144114p:plain:w60

うん。「変える」。ただし、変えるのはテンソル更新時のカーネルじゃない。斜め方向のフローを制御するために、記憶セルは同じカーネルサイズで「かき混ぜる(=畳込む)」。そしてこのかき混ぜるためのカーネルは、時間ステップ毎に  H_{t-1}^{cat} からつくる。「記憶セルをかき混ぜるためのカーネル」をつくるためのカーネルをも学習するのが Tensorized LSTM の完成形。

f:id:cookie-box:20180205234353p:plain:w390

(その4があれば)つづく