Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

• 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

Slide 3

Slide 3 text

• 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

Slide 4

Slide 4 text

RNN • Reccurent Neural Network – 再帰ネットワークを持つNN(時系列データに強い) 入力 出力 教師データで学習によって作られる

Slide 5

Slide 5 text

RNN • Reccurent Neural Network – 再帰ネットワークを持つNN(時系列データに強い) 入力 出力 ←出力以外にもう一個出力を出して   それを次の時間(t+1)の入力に入れる t+1

Slide 6

Slide 6 text

時間方向に展開

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

LSTMの登場 Long/Short Term Memory 短期記憶も長期記憶もどっちもできるRNN

Slide 12

Slide 12 text

• RNN • RNN/LSTM

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

RNN/LSTM NeuralNetworkの単層 (行列+活性化関数) ベクトルの要素ごとの演算 ベクトルの結合 ベクトルのコピー 結合 コピー コピー コピー コピー コピー 要素ごとの掛け算 要素ごとの足し算 要素ごとに tanhを施す 行列がそれぞれの箱に 1つずつ入っている。 A,B,C,Dみたいな。

Slide 15

Slide 15 text

RNN/LSTMの肝のアイデア • ステート • ゲート – 3つのゲートでステートベクトルのデータをいじっていい感じにする ←このラインを流れる ベクトルがステートベクトルCt ゲート構造 忘却ゲート 入力ゲート 出力ゲート

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

でステートベクトルに情報付加! 入力ゲート • 入力ベクトルと前時刻の出力ベクトルをどれだけ        ステートベクトルに追加するか決定する • Wi , bi , Wc , bc を学習で求める ( ) 1 1 ~ − − ⊗ ⊕ t t t C i C

Slide 18

Slide 18 text

出力ゲート • ステートベクトルから必要な情報だけを取り出し        出力ベクトルとする • ステートベクトルは出力ベクトルに大分似ている ⊗

Slide 19

Slide 19 text

RNN/LSTM 動作まとめ • ステートベクトルから情報削除(忘却) • ステートベクトルに情報負荷(入力) • ステートベクトルから必要な情報だけ読み出し(出力) • なにを忘れるか、なにを入力するか、何を読み出すかは   学習データによって自動的に最適化される • この方法を使うと短期記憶、長期記憶どちらもうまくいく、   と言われている – 自然言語処理を代表として、時系列データでよく利用される手法

Slide 20

Slide 20 text

• しかし、DeepMindの中の人は多分こう思った

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

DNC編

Slide 24

Slide 24 text

DNC • Differentiable Neural Computers • 微分可能な(≒学習可能な) – 大したことじゃないので説明しません • ニューラルコンピューター – ニューラルネットワークじゃないの?

Slide 25

Slide 25 text

NNからNCへ • Neural Network はそもそも CPU みたいなもの – 論文ではControllerと呼んでいる • Neural Network(CPU) にメモリつけて      Neural Computerにしたよ – メモリに過去の入力データを上手に保持すれば、、、

Slide 26

Slide 26 text

DNCの構造 • RNN/LSTMにMemoryがくっついたものがDNC RNN/LSTM Matrix Memory

Slide 27

Slide 27 text

まずざっくり理解 RNN/LSTM Matrix Memory content weight allocation weight content weight forward weight backward weight write weight read weight interface vector

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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種類の出力

Slide 30

Slide 30 text

Memory M M M M メモリ R r r r r r r r r , , 1 ⋯ ξ ξ ξ ξ interface vector read vectors N W ・・・ W次元のベクトルが N個あるイメージ 内部の構造は…

Slide 31

Slide 31 text

メモリの動作 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の処理)

Slide 32

Slide 32 text

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と似ている 場所から読み込む 書き込み順が連続している 前後の場所から読み込む

Slide 33

Slide 33 text

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の処理)

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

インターフェースベクトルの分解 • メモリー内の各所で利用される [ ] 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

Slide 36

Slide 36 text

ハット^をとる • インターフェースベクトルに対する前処理 σはシグモイド関数 softmaxはソフトマックス関数

Slide 37

Slide 37 text

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の処理)

Slide 38

Slide 38 text

( ) 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

Slide 39

Slide 39 text

( ) 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 メモリ上のどのベクトル を優先的に読み出すか を決めるベクトル

Slide 40

Slide 40 text

メモリの更新 ( ) Τ Τ − + − ⊗ = 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

Slide 41

Slide 41 text

メモリの更新 ( ) Τ Τ − + − ⊗ = 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がならんだ行列

Slide 42

Slide 42 text

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の処理)

Slide 43

Slide 43 text

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 (強くメモリに書き込む)

Slide 44

Slide 44 text

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 (強くメモリから読み出す)

Slide 45

Slide 45 text

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の処理)

Slide 46

Slide 46 text

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 (すでに利用している場所を表すベクトル)

Slide 47

Slide 47 text

【手順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

Slide 48

Slide 48 text

• で 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

Slide 49

Slide 49 text

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の処理)

Slide 50

Slide 50 text

• 実際の導出 • 本質 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

Slide 51

Slide 51 text

• 前時刻の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

Slide 52

Slide 52 text

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と似ている 場所から読み込む 書き込み順が連続している 前後の場所から読み込む

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

備考 • メモリ内には学習用のパラメータは存在しない – 学習用のパラメータはメモリ外の行列7つ – メモリはインターフェースベクトルが入力すると、R個のRead Vectors を一意に出力する

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

END