Differentiable Neural Computers 文献読み会

Differentiable Neural Computers 文献読み会

Differentiable Neural Computers 文献読み会の発表資料です。

オトナの Deep Learning の詳細はこちら
https://otona.connpass.com/event/47512/

4d8c732195d7beca7a2ea743e164245e?s=128

Takahiro Yano

January 06, 2017
Tweet

Transcript

  1. Differentiable Neural Computers 文献読み会 2017/01/04 矢野 高宏

  2. • RNN/LSTMの解説 • DNCの解説 NN NN NN + state vector

    + memory data1 data2 data3 : data1 data2 data3 : data1 data2 data3 : DNC RNN/LSTM 普通のNN output output output
  3. • RNN/LSTMの解説 • DNCの解説 NN NN NN + state vector

    + memory data1 data2 data3 : data1 data2 data3 : data1 data2 data3 : 過去のデータも把握する 入力されたデータ だけ把握する 過去のデータを もっともっと把握する DNC RNN/LSTM 普通のNN output output output
  4. RNN • Reccurent Neural Network – 再帰ネットワークを持つNN(時系列データに強い) 入力 出力 教師データで学習によって作られる

  5. RNN • Reccurent Neural Network – 再帰ネットワークを持つNN(時系列データに強い) 入力 出力 ←出力以外にもう一個出力を出して

      それを次の時間(t+1)の入力に入れる t+1
  6. 時間方向に展開

  7. 時間方向に展開 時間の隔たり

  8. 時間方向に展開 時間の隔たり ht の出力に x0 ,x1 ,...,xt-1 の情報が使える

  9. • 時間差が長いとデータの影響が薄くなる( ノД`) RNNの問題点 • 時間差が短かいならデータを利用できる(^◇^)

  10. • 時間差が長いとデータの影響が薄くなる( ノД`) RNNの問題点 • 時間差が短かいならデータを利用できる(^◇^) 例えば... x0,x1を入力したときに h3を正しく出力するような Aは学習で作れる!

    こっちはht+1 とx0 ,x1 が 時間的に遠すぎるので Aは正しく作れない!
  11. LSTMの登場 Long/Short Term Memory 短期記憶も長期記憶もどっちもできるRNN

  12. • RNN • RNN/LSTM

  13. RNN/LSTM NeuralNetworkの単層 (行列+活性化関数) ベクトルの要素ごとの演算 ベクトルの結合 ベクトルのコピー

  14. RNN/LSTM NeuralNetworkの単層 (行列+活性化関数) ベクトルの要素ごとの演算 ベクトルの結合 ベクトルのコピー 結合 コピー コピー コピー

    コピー コピー 要素ごとの掛け算 要素ごとの足し算 要素ごとに tanhを施す 行列がそれぞれの箱に 1つずつ入っている。 A,B,C,Dみたいな。
  15. RNN/LSTMの肝のアイデア • ステート • ゲート – 3つのゲートでステートベクトルのデータをいじっていい感じにする ←このラインを流れる ベクトルがステートベクトルCt ゲート構造

    忘却ゲート 入力ゲート 出力ゲート
  16. 忘却ゲート • 忘れ方は Wf と bf で決定される • Wf と

    bf は教師データを利用した学習で求める 上式で ft を出したら ft ⊗ Ct-1 で忘却! シグモイド関数 (0〜1の範囲の出力にする) • 前時刻のステートベクトルの内容をどれだけ消去するかを 決定する
  17. でステートベクトルに情報付加! 入力ゲート • 入力ベクトルと前時刻の出力ベクトルをどれだけ        ステートベクトルに追加するか決定する • Wi , bi ,

    Wc , bc を学習で求める ( ) 1 1 ~ − − ⊗ ⊕ t t t C i C
  18. 出力ゲート • ステートベクトルから必要な情報だけを取り出し        出力ベクトルとする • ステートベクトルは出力ベクトルに大分似ている ⊗

  19. RNN/LSTM 動作まとめ • ステートベクトルから情報削除(忘却) • ステートベクトルに情報負荷(入力) • ステートベクトルから必要な情報だけ読み出し(出力) • なにを忘れるか、なにを入力するか、何を読み出すかは  

    学習データによって自動的に最適化される • この方法を使うと短期記憶、長期記憶どちらもうまくいく、   と言われている – 自然言語処理を代表として、時系列データでよく利用される手法
  20. • しかし、DeepMindの中の人は多分こう思った

  21. • 「LSTMのステートベクトルって出力ベクトルと 同じ次元のベクトル一本じゃないですか?」 • 「そんなんでデータのコンテキストを十分に     表現できるんですか?」

  22. • 「はい!!」 • 「よし、じゃあDNC提案しよう」  という経緯でDNCは提案された。  (*フィクションです)

  23. DNC編

  24. DNC • Differentiable Neural Computers • 微分可能な(≒学習可能な) – 大したことじゃないので説明しません •

    ニューラルコンピューター – ニューラルネットワークじゃないの?
  25. NNからNCへ • Neural Network はそもそも CPU みたいなもの – 論文ではControllerと呼んでいる •

    Neural Network(CPU) にメモリつけて      Neural Computerにしたよ – メモリに過去の入力データを上手に保持すれば、、、
  26. DNCの構造 • RNN/LSTMにMemoryがくっついたものがDNC RNN/LSTM Matrix Memory

  27. まずざっくり理解 RNN/LSTM Matrix Memory content weight allocation weight content weight

    forward weight backward weight write weight read weight interface vector
  28. R r r r r r r r r ,

    , 1 ⋯ RNN/LSTM ⊕ Memory 1 − t h h h h ξ ξ ξ ξ [ ] R r r r r r r r r r W W W W , , 1 ⋯ v v v v x x x x y y y y output input interface vector read vectors 従来のRNN/LSTM r W W W W M M M M
  29. R r r r r r r r r ,

    , 1 ⋯ RNN/LSTM 1 − t h h h h ξ ξ ξ ξ v v v v x x x x input interface vector read vectors output 1 − t s t s 1 − t h t h [ ] R t r r x , , , 1 ⋯ t h y W ξ W t y h W v ⋅ = t h W ⋅ = ξ ξ ReadVectorsが入力に加わる 出力ベクトルと インターフェースベクトルの2種類の出力
  30. Memory M M M M メモリ R r r r

    r r r r r , , 1 ⋯ ξ ξ ξ ξ interface vector read vectors N W ・・・ W次元のベクトルが N個あるイメージ 内部の構造は…
  31. メモリの動作 RNN/LSTMからインターフェースベクトルが出力される インターフェースベクトルを分解、ハットをとる Write Weight(1個) Allocation Weight Content Weight (For

    Write) メモリの更新 Read Vectors(R個) Read Weights(R個) Content Weight (For Read) Temporal Link Matrix Read VectorsをRNN/LSTMに渡す Backward Weight Forward Weight (RNN/LSTMの処理) (RNN/LSTMの処理)
  32. RNN/LSTMからインターフェースベクトルが出力される インターフェースベクトルを分解、ハットをとる Write Weight(1個) Allocation Weight Content Weight (For Write)

    メモリの更新 Read Vectors(R個) Read Weights(R個) Content Weight (For Read) Temporal Link Matrix Read VectorsをRNN/LSTMに渡す Backward Weight Forward Weight (RNN/LSTMの処理) (RNN/LSTMの処理) メモリの動作 前時刻で読み出した場所に書き込む 利用していない場所に書き込む Write Keyと似ている 場所に書き込む Read Keyと似ている 場所から読み込む 書き込み順が連続している 前後の場所から読み込む
  33. RNN/LSTMからインターフェースベクトルが出力される インターフェースベクトルを分解、ハットをとる Write Weight(1個) Allocation Weight Content Weight (For Write)

    メモリの更新 Read Vectors(R個) Read Weights(R個) Content Weight (For Read) Temporal Link Matrix Read VectorsをRNN/LSTMに渡す Backward Weight Forward Weight (RNN/LSTMの処理) (RNN/LSTMの処理)
  34. Memory M M M M インターフェースベクトルの分解 R r r r

    r r r r r , , 1 ⋯ ξ ξ ξ ξ interface vector read vectors [ ] R w a R w w R r r R r r g g f f π π β β β ˆ , , ˆ , ˆ , ˆ , ˆ , , ˆ , ~ , ˆ , ˆ , , ˆ , , ˆ , , , 1 1 , 1 , , 1 , ⋯ ⋯ ⋯ ⋯ v v v v e e e e k k k k k k k k k k k k ξ ξ ξ ξ = R個の Read Key R個の Read Strength 1個の Write Key 1個の Write Strength 1個の Erase Vector 1個の Write Vector R個の Free Gate 1個の Allocation Gate 1個の Write Gate R個の Read Mode
  35. インターフェースベクトルの分解 • メモリー内の各所で利用される [ ] R w a R w

    w R r r R r r g g f f π π β β β ˆ , , ˆ , ˆ , ˆ , ˆ , , ˆ , ~ , ˆ , ˆ , , ˆ , , ˆ , , , 1 1 , 1 , , 1 , ⋯ ⋯ ⋯ ⋯ v v v v e e e e k k k k k k k k k k k k ξ ξ ξ ξ = R個の Read Key R個の Read Strength 1個の Write Key 1個の Write Strength 1個の Erase Vector 1個の Write Vector R個の Free Gate 1個の Allocation Gate 1個の Write Gate R個の Read Mode Content Weight (For Read) メモリの更新 Allocation Weight Content Weight (For Write) Read Weights Write Weights
  36. ハット^をとる • インターフェースベクトルに対する前処理 σはシグモイド関数 softmaxはソフトマックス関数

  37. RNN/LSTMからインターフェースベクトルが出力される インターフェースベクトルを分解、ハットをとる Write Weight(1個) Allocation Weight Content Weight (For Write)

    メモリの更新 Read Vectors(R個) Read Weights(R個) Content Weight (For Read) Temporal Link Matrix Read VectorsをRNN/LSTMに渡す Backward Weight Forward Weight (RNN/LSTMの処理) (RNN/LSTMの処理)
  38. ( ) R s s r s , , 1

    , ⋯ = = Τw w w w M M M M r r r r Read Vectors(R個) r w w w w N W ・・・ N Τ M M M M
  39. ( ) R s s r s , , 1

    , ⋯ = = Τw w w w M M M M r r r r Read Vectors(R個) r w w w w N W ・・・ N Τ M M M M read weights メモリ上のどのベクトル を優先的に読み出すか を決めるベクトル
  40. メモリの更新 ( ) Τ Τ − + − ⊗ =

    v v v v w w w w e e e e w w w w E E E E M M M M M M M M ~ 1 w w t t w w w w w N W [ ]W 1 , 0 ∈ Τ e e e e Τ e e e e w w w ww w w w w w N W Τ v v v v ~ Τ v v v v w w w w ~ w
  41. メモリの更新 ( ) Τ Τ − + − ⊗ =

    v v v v w w w w e e e e w w w w E E E E M M M M M M M M ~ 1 w w t t w w w w w N W [ ]W 1 , 0 ∈ Τ e e e e Τ e e e e w w w ww w w w w w N W Τ v v v v ~ Τ v v v v w w w w ~ w メモリ上のどのベクトルを優先的に 消し、書き込むかを決めるベクトル 消す内容 書く内容 write weight 1がならんだ行列
  42. RNN/LSTMからインターフェースベクトルが出力される インターフェースベクトルを分解、ハットをとる Write Weight(1個) Allocation Weight Content Weight (For Write)

    メモリの更新 Read Vectors(R個) Read Weights(R個) Content Weight (For Read) Temporal Link Matrix Read VectorsをRNN/LSTMに渡す Backward Weight Forward Weight (RNN/LSTMの処理) (RNN/LSTMの処理)
  43. Content Weight (For Write) • Write Key   と相関が高いメモリの行ほど重みを強くする [ ]

    [ ] [ ] [ ] [ ] ∑ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ ⋅ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ ⋅ = j w w w w w w w j j i i i β β : , : , exp : , : , exp M M M M k k k k M M M M k k k k M M M M k k k k M M M M k k k k c c c c w k k k k (強くメモリに書き込む)
  44. Content Weight (For Read) • Read Keys              と相関が高いメモリの行

    ほど重みを強くする [ ] [ ] [ ] [ ] [ ] ∑ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ ⋅ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ ⋅ = j s r s r s r s r s r s r s r j j i i i , , , , , , , : , : , exp : , : , exp β β M M M M k k k k M M M M k k k k M M M M k k k k M M M M k k k k c c c c ( ) R s s r , , 1 , ⋯ = k k k k (強くメモリから読み出す)
  45. RNN/LSTMからインターフェースベクトルが出力される インターフェースベクトルを分解、ハットをとる Write Weight(1個) Allocation Weight Content Weight (For Write)

    メモリの更新 Read Vectors(R個) Read Weights(R個) Content Weight (For Read) Temporal Link Matrix Read VectorsをRNN/LSTMに渡す Backward Weight Forward Weight (RNN/LSTMの処理) (RNN/LSTMの処理)
  46. Allocation Weight (1) 【手順1】 Memory Retention Vector (メモリ保持ベクトル) ( ) (

    ) ψ ψ ψ ψ w w w w u u u u u u u u u u u u ⊗ ⊗ − + = − − − w t t t t 1 1 1 1 (前時刻で読み出した情報は捨てていい) ( ) ∏ = − − = R s s r t s f 1 , 1 1 w w w w ψ ψ ψ ψ 前時刻で 使ってない (前時刻で使ってない かつ  前時刻で書き込んだ 場所は  Usage Vectorに追加する) 前時刻で 書き込んだ 前時刻で 読み出した 【手順2】 Usage Vector (すでに利用している場所を表すベクトル)
  47. 【手順4】 Allocation Vector Allocation Weight (2) 【手順3】 の計算 は  の値が小さい順(最も利用されていない順)にインデックスを並べたもの N

    t Ζ Ζ Ζ Ζ ∈ φ t φ t u u u u [ ] [ ] [ ] [ ] ( ) [ ] [ ] ∏ − = − = 1 1 1 j i t t t t t i j j φ φ φ u u u u u u u u a a a a
  48. • で allocation weight と content weight を線形補間 •  で最終的な

    Write Weight の大きさを調整 ( ) [ ] w a a w w g g g c c c c a a a a w w w w − + = 1 Write Weight a g w g
  49. RNN/LSTMからインターフェースベクトルが出力される インターフェースベクトルを分解、ハットをとる Write Weight(1個) Allocation Weight Content Weight (For Write)

    メモリの更新 Read Vectors(R個) Read Weights(R個) Content Weight (For Read) Temporal Link Matrix Read VectorsをRNN/LSTMに渡す Backward Weight Forward Weight (RNN/LSTMの処理) (RNN/LSTMの処理)
  50. • 実際の導出 • 本質 Temporal Link Matrix Τ − =

    w t w t t L 1 w w w w w w w w 重みが小さければ 再帰的に求めるという意味 w t w w w w N N Τ − w t w t 1 w w w w w w w w Τ − w t 1 w w w w
  51. • 前時刻のRead WeightにTemporal Link Matrixをかけて、時間的にすす んだRead Weight、時間的に戻ったRead Weightを求める Forground Weights

    Background Weights Read Weights s r t t s s r t t s L L , 1 , 1 − Τ − = = w w w w b b b b w w w w f f f f ( ) R s , , 1 ⋯ = [ ] [ ] [ ] s s s r s s s s r t f f f f c c c c b b b b w w w w 3 2 1 , , π π π + + = • とContentWeight の3つで重みづけ加算してRead Weightsを出す s s b b b b f f f f , s r, c c c c
  52. RNN/LSTMからインターフェースベクトルが出力される インターフェースベクトルを分解、ハットをとる Write Weight(1個) Allocation Weight Content Weight (For Write)

    メモリの更新 Read Vectors(R個) Read Weights(R個) Content Weight (For Read) Temporal Link Matrix Read VectorsをRNN/LSTMに渡す Backward Weight Forward Weight (RNN/LSTMの処理) (RNN/LSTMの処理) 前時刻で読み出した場所に書き込む 利用していない場所に書き込む Write Keyと似ている 場所に書き込む Read Keyと似ている 場所から読み込む 書き込み順が連続している 前後の場所から読み込む
  53. R r r r r r r r r ,

    , 1 ⋯ RNN/LSTM ⊕ Memory 1 − t h h h h ξ ξ ξ ξ [ ] R r r r r r r r r r W W W W , , 1 ⋯ v v v v x x x x y y y y output input interface vector read vectors 従来のRNN/LSTM r W W W W M M M M
  54. 備考 • メモリ内には学習用のパラメータは存在しない – 学習用のパラメータはメモリ外の行列7つ – メモリはインターフェースベクトルが入力すると、R個のRead Vectors を一意に出力する

  55. 最後に • colahさん – http://colah.github.io/posts/2015-08-Understanding-LSTMs/ • DeepMind – DNCのソースコードは半年以内に公開予定 –

    https://deepmind.com/
  56. END