Recurrent Neural Networks 
2014/10/30 PFIセミナー 
Seiya Tokui, Preferred Networks
⾃自⼰己紹介 
l 得居 誠也 (Seiya Tokui) 
l アカウント:beam2d (Twitter, GitHub, etc.) 
l 東⼤大情報理理⼯工で修⼠士を取ってから PFI ⼊入社 
– 最初は⾃自然⾔言語処理理やってた(潜在変数を⼊入れた系列列ラベリング学習) 
– 次に画像・⾔言語対象に近傍探索索やった(ハッシュ関数の学習) 
– ⼊入社後は Jubatus のアルゴリズム開発 
– 今は PFN で Deep Learning とか映像解析とかとか 
l 前回スキップしたせいで PFI セミナーは 16 ヶ⽉月ぶり 
l 今⽇日話す RNN は⾳音声認識識でもよくやられていて⾼高い精度度も出てますが 
僕が⾳音声に不不慣れなので今⽇日は話しません(すみません) 
2
もくじ 
l 問題設定 
l Recurrent Neural Networks 
l Backpropagation through Time 
l Long Short-‐‑‒Term Memory 
l Deep RNN 
l 応⽤用:機械翻訳 
l 応⽤用:⾔言語処理理系の学習 
l 応⽤用:アルゴリズムの学習 
l 応⽤用:Visual Attention 
3
問題設定 
⼊入⼒力力データ and/or 予測対象が可変⻑⾧長の系列列 
課題⼊入⼒力力予測 
⾳音声認識識周波数空間の 
ベクトル列列 
4 
⾳音素列列、単語列列 
など 
機械翻訳翻訳元⾔言語の⽂文 
(単語/⽂文字列列) 
翻訳先⾔言語の⽂文 
(単語/⽂文字列列)
Feedforward Neural Networks 
l 固定⻑⾧長⼊入⼒力力・出⼒力力の場合に⼀一般的に使われるニューラルネット 
l 可変⻑⾧長の場合には使いにくい 
– 何かしらの⽅方法で⼊入⼒力力を固定⻑⾧長に直さないといけない (e.g. BoW, 
N-‐‑‒gram) 
– 多くの場合、固定⻑⾧長への変換で順序の情報が失われるか、順序の情 
報をすべて保存しようとすると次元が⾼高くなりすぎる 
5
Recurrent Neural Networks(Elman 型) 
l 状態を持ったニューラルネット 
 
 
l ⼊入⼒力力→隠れ、隠れ→隠れ、隠れ→出⼒力力 
の3種類の結合を持つ 
6 
⼊入⼒力力 
隠れユニット 
出⼒力力
RNNを時間⽅方向に展開すると静的に⾒見見ることができる 
t = 1 t = 2 t = 3 t = T 
7
勾配計算:Backpropagation through Time (BPTT) 
l 時間⽅方向に展開した計算グラフ上で、単純に誤差逆伝播する 
l これで勾配を計算して、勾配ベースの⼿手法を使ってパラメータを最適化する 
l 系列列全体でBPTTを実⾏行行する以外に、系列列を適当な⻑⾧長さでぶった切切ってBPTTす 
ることもある(最適化の効率率率を上げるため、実装を簡単にするため etc.) 
– ぶった切切った場合でも初期状態は正しく計算する必要がある 
8
BPTTは勾配が消えたり爆発したりする 
l エラーが⻑⾧長い系列列をたどる場合、重みがたくさん掛け算される 
l 重みが何度度も掛けられることで、勾配が系列列⻑⾧長に対して指数的に消失したり爆 
発したりする 
l 爆発に対しては、max-‐‑‒normや勾配の正規化などで対処 
l 消失する場合、これは⻑⾧長期依存 (long-‐‑‒term dependency) を学習できなくなる 
(短いパスの勾配だけが効いてしまうので) 
9
⻑⾧長期依存を学習する Long Short-‐‑‒Term Memory 
l エラーが重みをかけずに伝搬するようにする 
10
⻑⾧長期依存を学習する Long Short-‐‑‒Term Memory 
l エラーが重みをかけずに伝搬するようにする 
Constant Error Carousel (CEC) 
ct = ct1 + int 
@ct = @ct1 + @int 
エラーが減衰せずにとどまり続ける 
11 
tanh
⻑⾧長期依存を学習する Long Short-‐‑‒Term Memory 
l ⼊入⼒力力を選択的に記憶する 
ct = ct1 + int 
CEC は過去の⼊入⼒力力を溜溜め込む、 
揮発性の記憶素⼦子のようなもの。 
でもこれだけだと記憶対照を選べず、 
ノイズを溜溜め込んでしまう。 
12 
tanh
⻑⾧長期依存を学習する Long Short-‐‑‒Term Memory 
l ⼊入⼒力力を選択的に記憶する 
Input gate が 1 のときは⼊入⼒力力をすべて 
CECに溜溜め込み、0 のときは無視する 
(実際はその間の値が連続的に現れる) 
13 
Input gate 
sigmoid 
tanh 
掛け算
⻑⾧長期依存を学習する Long Short-‐‑‒Term Memory 
l エラーを選択的に取り込む 
14 
Input gate 
sigmoid 
tanh 
どのタイミングでもエラーが流流れ込むよ 
うになっている。ある CEC が記憶して 
いる事柄が今の予測と関係ないとき、こ 
れはノイズになってしまう。
⻑⾧長期依存を学習する Long Short-‐‑‒Term Memory 
l エラーを選択的に取り込む 
15 
Input gate 
sigmoid 
tanh 
Output gate 
sigmoid 
CEC の出⼒力力を使うタイミングを制御す 
ることで、必要ないときにはエラーが流流 
れ込まないようにする
⻑⾧長期依存を学習する Long Short-‐‑‒Term Memory 
l ここまでが [HochreiterSchmidhuber, ʻ‘97] で提案された 
Long Short-‐‑‒Term Memory ユニット 
sigmoid 
※ もともとは CEC の後ろにもう⼀一回 sigmoid 等をかませていたが、最近 
は省省くことが多い 
16 
Input gate 
tanh 
Output gate 
sigmoid
⻑⾧長期依存を学習する Long Short-‐‑‒Term Memory 
l 記憶の明⽰示的な消去 
ct = ct1 + int 
17 
Input gate 
sigmoid 
tanh 
Output gate 
sigmoid 
今の定義だと、CEC を上書きするには 
⼤大きな⼊入⼒力力を繰り返し与えるしかない。 
短期間に⼤大きく記憶を更更新したい場合に 
対処できない。
⻑⾧長期依存を学習する Long Short-‐‑‒Term Memory 
l 記憶の明⽰示的な消去 
18 
Input gate 
sigmoid 
tanh 
Output gate 
sigmoid 
Forget gate 
sigmoid 
Forget gate が 0 に近い値を取ると 
CEC は直前の状態を忘れて、新しい⼊入 
⼒力力で置き換わる。
⻑⾧長期依存を学習する Long Short-‐‑‒Term Memory 
l CEC の記憶(つまり隠れ状態)そのものを gate の制御に使う 
19 
Input gate 
sigmoid 
tanh 
Output gate 
sigmoid 
Forget gate 
sigmoid 
各 gate への⼊入⼒力力は⼊入⼒力力系列列の今の値と、 
直前の時刻における各 LSTM ユニットの出⼒力力。 
後者は output gate で制御されてしまい、 
本当の隠れ状態が⾒見見えない。
⻑⾧長期依存を学習する Long Short-‐‑‒Term Memory 
l CEC の記憶(つまり隠れ状態)そのものを gate の制御に使う 
20 
Input gate 
sigmoid 
tanh 
Output gate 
sigmoid 
Forget gate 
sigmoid 
Peephole Connection
⻑⾧長期依存を学習する Long Short-‐‑‒Term Memory 
l これが [Gers, ʻ‘01] などでまとめられている拡張された LSTM ユニッ 
ト 
 
sigmoid 
Forget gate 
l 現在よく⽤用いられているものは、このバージョンや peephole 
connection を省省いたもの 
l 学習は BPTT で⾏行行うのが主流流 
21 
Input gate 
tanh 
Output gate 
sigmoid 
sigmoid
RNN を Deep にする⽅方法 
l 現在よく使われているのは Stacked RNN 
l 各層ごとに異異なる時間スケール・抽象度度でのダイナミクスを捉えられる 
l ただ、課題によっては次スライドで述べる別の⽅方法を使った⽅方が良良いこ 
ともある 
22
RNN を Deep にする⽅方法 [Pascanu+, ICLR ʻ‘14] 
l RNN ⾃自体を stack する以外に、RNN の遷移層、出⼒力力層をそれぞれ 
deep にすることもできる(下図の⽩白い層は何段あってもよい) 
l 上の (b*) のように、遷移層を deep にする場合は backprop のパスが 
さらに⻑⾧長くなってしまうので、ショートカットを⼊入れると良良い 
– 短い時間で予測に⾮非線形な影響をあたえるような⼊入⼒力力をとらえるのに deep な接続を 
使い、⻑⾧長期のラグを経て予測に影響を与えるような現象をとらえるのにショートカッ 
トを使う 
23
応⽤用:機械翻訳 [Sutskever+, NIPS ʻ‘14] 
l “Sequence to Sequence Learning with Neural Networks” 
– RNN を機械翻訳に使う研究は最近とても多いが、この論論⽂文は RNN のみで機械翻訳を 
⾏行行うところが特徴 
l 英語の単語列列を⼊入⼒力力として、フランス語の単語列列を出⼒力力する 
l まず英語の⽂文章 ABC を⼊入れて、EOS(⽂文末)に到達したらフランス語 
の⽂文章 WXYZ を出⼒力力する 
24
応⽤用:機械翻訳 [Sutskever+, NIPS ʻ‘14] 
⼯工夫 
l 英語を読むときとフランス語を出⼒力力するときで異異なるパラメータを使う 
l 英語(⼊入⼒力力)は前後を反転させて読ませる 
– 英語とフランス語は語順が近いため、対応する単語ペアで近い位置 
にあるものが多い⽅方が学習の初期時に⾜足がかりにしやすい 
– このテクニックはおそらく、出⼒力力の最初の⽅方を予測するのに⼊入⼒力力の 
最初の⽅方が強く効くような問題で有効 
25
応⽤用:機械翻訳 [Sutskever+, NIPS ʻ‘14] 
26
応⽤用:⾔言語処理理系の学習 [ZarembaSutskever, ʻ‘14] 
l “Learning to Execute” 
l 簡単な Python コードが⼊入⼒力力 
l print 結果を出⼒力力させる 
– 結果は必ずドットで終わる 
l データはランダムに⽣生成。 
以下のパラメータを持つ: 
– 現れる数値の桁数 
– 構⽂文⽊木の深さ 
27
応⽤用:⾔言語処理理系の学習 [ZarembaSutskever, ʻ‘14] 
l (Peepholeのない)Stacked LSTM RNN で学習 
l ⼯工夫:Curriculum Learning [Bengio+, ICMLʼ’09] 
– 簡単な問題を先に解かせることで難しい問題の最適化を容易易にする 
(去年年のPFIセミナー後半を参照 
http://www.slideshare.net/beam2d/deep-‐‑‒learning-‐‑‒22544096) 
– ここではデータを⽣生成するときのパラメータ(桁数、構⽂文⽊木の深 
さ)について、⼩小さな値を⽤用いて⽣生成したデータからまず学習させ、 
段々⽣生成パラメータを⼤大きくしていく 
– ただし、ナイーブにやるとダメ 
u ⼩小さなパラメータのデータに特化した RNN が学習されてしまう 
u 序盤から少量量の難しい問題を混ぜておくことでこれを回避 
28
応⽤用:⾔言語処理理系の学習 [ZarembaSutskever, ʻ‘14] 
l 出⼒力力例例 
29
応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] 
l “Neural Turing Machines” 
l メモリのくっついた (R)NN を考案している(下は模式図) 
コントローラ 
⼊入⼒力力出⼒力力 
30 
読み取り 
ヘッド 
書き込み 
ヘッド 
書き込み 
内容 
メモリ⾏行行列列
応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] 
l メモリ⾏行行列列から読んだり書いたりできる 
l 読み書きにはヘッドを使う 
l ヘッドは確率率率ベクトル 
メモリ⾏行行列列 
ヘッド:確率率率ベクトル 
(⾮非負値で和が1) 
– One-‐‑‒hot だとチューリ 
ングマシンのように⼀一 
箇所だけから読むことに 
なる 
– これを backprop できるように 
連続値に拡張している 
l 書く時は書き込む内容(⾏行行ベクトル)も⼀一緒に 
出⼒力力して、⾏行行ごとに書き込む強度度をヘッドで指定する 
31 
× 
wt 
Mt
応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] 
l ヘッドの指定は2つのアドレッシング⽅方法を組合せる 
l まずはコンテンツベースのアドレッシング 
– コントローラが出⼒力力した⾏行行ベクトル とのコサイン距離離 の 
softmax で確率率率を割当てる 
wc 
t (i) / exp(tK(kt,Mt(i)) 
– これを前回のヘッドと混ぜたものを次のロケーションベースのアド 
レッシングへの⼊入⼒力力にする(混合係数 はコントローラが指定す 
る) 
– 混合係数が 0 ならコンテンツベースアドレッシングは無視される 
32 
kt K 
gt
応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] 
l 次にロケーションベースのアドレッシング 
– 指定した数だけヘッドを右か左にシフトさせたい 
– だが同時に backprop もできるようにしたいので、代わりにコント 
ローラが指定したベクトルとの畳み込み演算で補う(添字が端を越 
えるところでは循環させる) 
– このときベクトル が one-‐‑‒hot なら完全なシフトになる 
– Softmax などで指定する場合、なだらかな値を取り値がボケてしま 
うので、シャープにする( もコントローラが指定) 
 
33 
st 
t  1 
wt(i) / ˜ wt(i)t
応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] 
l ⼊入⼒力力系列列を読んだあとに出⼒力力系列列を予測する課題(機械翻訳と同じ) 
l 処理理の順序 
– コントローラが読み取りヘッドを出⼒力力 
– 読み取りヘッド(⾏行行ベクトル)とメモリ⾏行行列列の積によってメモリ内容を読み出す 
– ⼊入⼒力力、メモリの読み出し結果、コントローラの直前の状態(コントローラが RNN の 
場合)をもとにコントローラの状態を更更新 
– コントローラが書き込みヘッドと書き込み内容を出⼒力力 
u 書き込みは「消してから⾜足す」というやりかたをしている(詳細は論論⽂文参照) 
– 書き込みヘッド(⾏行行ベクトル)と書き込み内容(列列ベクトル)の outer product を 
取ってメモリ⾏行行列列を更更新 
– コントローラが予測を出⼒力力 
l すべての処理理は微分可能なので、ヘッドの位置(確率率率ベクトル)や書き 
込み内容を含めてシステム全体を BPTT で学習できる 
34
応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] 
l コピー課題(上) 
– ⼊入⼒力力と同じものを出⼒力力する 
l 繰り返しコピー課題(下) 
– ⼊入⼒力力はコピー対象系列列の末尾に 
コピー回数を書いたもの。これを 
読んで、コピー回数だけ対象系列列 
を繰り返し出⼒力力する課題 
– つまり For ループができるかを 
確かめる実験 
l どちらも LSTM RNN より速く 
学習している 
– 下のほうが LSTM でも良良いのは 
上の実験より系列列を短くしてるから 
35
応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] 
l 繰り返しコピー課題でのヘッドの内容 
 
l 毎コピー後に繰り返し回数をチェックしに⾏行行ってるのがわかる 
36
応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] 
l Neural Turing Machines でコントローラに LSTM を使う場合、LSTM 
はレジスタのように使われる 
– 先ほどのコピー課題ではおそらく、現在の繰り返し回数が LSTM の 
中に保持されていると予想される 
u 繰り返し中にはメモリへの書き込みがないため 
l コピー回数やコピー内容のように、⻑⾧長期にわたって覚えておく必要があ 
る内容をメモリに書いている 
l 論論⽂文ではもっと複雑なタスクも解かせているので、実験のところだけで 
も読むと⾯面⽩白いです 
– 系列列を任意の場所から思い出す、N-‐‑‒gram モデルの学習アルゴリズム⾃自体を 
学習する、インデックス順に並び替えるタスク(Priority Sort) 
37
応⽤用:Visual Attention [Mnih+, ICML ʻ‘14] 
l “Recurrent Models of Visual Attention” 
l 画像認識識(分類や検出)において、画像全体を⾒見見たくない 
l ⼩小さな矩形を⼊入⼒力力として⾒見見て、次に⾒見見る位置を出⼒力力。これを繰り返しな 
がら予測やアクションを改善していく 
38
応⽤用:Visual Attention [Mnih+, ICML ʻ‘14] 
l ⼿手法の名前は Recurrent Attention Model (RAM) 
l ⼊入⼒力力は静⽌止画でも動画(系列列)でも良良い 
– 論論⽂文では静⽌止画(MNIST をランダムに平⾏行行移動したもの)と簡単なゲームで実験 
– 動画(ゲーム)の場合には LSTM を使うと良良い 
l ⾒見見る位置から画像を取ってくる部分は微分できない 
l そこで強化学習を⾏行行う 
– 分類の場合、毎フレーム予測が当たったら報酬がもらえる 
– 学習には REINFORCE 法 [Williams, ʻ‘92] と呼ばれる勾配のサンプリング法を使って 
いる(NNの強化学習で昔からある⼿手法) 
l 強化学習なので分類以外の⽬目的にも使える 
– 論論⽂文では簡単なゲームプレイを試している 
39
応⽤用:Visual Attention [Mnih+, NIPS ʻ‘14] 
l RAM が視線をどう動かすかの可視化 
 
l 論論⽂文にもっといろいろ載ってます 
l ゲームプレイの動画: 
http://www.cs.toronto.edu/~∼vmnih/docs/attention.mov  
l Attention に関する研究(特に NN と絡めた話)はここ最近増えている 
ように思う 
40
まとめ 
l 今どきの Recurrent Neural Networks は 
– LSTM を使う(もう 17 年年前だけど……) 
– BPTT で勾配計算する 
– いろんな⽅方法で Deep にする 
– ⼊入⼒力力系列列は反転したりする 
– Curriculum Learning が効く 
– メモリをくっつけると複雑な課題が解けるようになる 
l ところで後半で紹介した応⽤用例例はすべて Google(後半2つは 
DeepMind) 
41
References 
Bengio, Y., Louradour, J., Collobert, R. and Weston, J. Curriculum Learning. ICML 2009. 
Gers, F. Long Short-Term Memory in Recurrent Neural Networks. Ph.D thesis, 2001. 
Graves, A., Wayne, G. and Danihelka, I. Neural Turing Machines. arXiv:1410.5401v1, 2014. 
Hochreiter, S. and Schmidhuber, J. LONG SHORT-TERM MEMORY. Neural Computation, 9(8): 
1735-1780, 1997. 
Mnih, V., Heess, N., Graves, A. and Kavukcuglu, K. Recurrent Models of Visual Attention. ICML, 2014. 
Pascanu, R., Gulcehre, C., Cho, K. and Bengio, Y. How to Construct Deep Recurrent Neural Networks. 
ICLR, 2014. 
Sutskever, I., Vinyals, O. and Le, Q. V. Sequence to Sequence Learning with Neural Networks. NIPS 
2014. 
Williams, R. J. Simple statistical gradient-following algorithms for connectionist reinforcement learning. 
Machine Learning, 8(e):229-256, 1992. 
Zaremba, W. and Sutskever, I. Learning to Execute. arXiv:1410.4615v1, 2014. 
 
42

Recurrent Neural Networks

  • 1.
    Recurrent Neural Networks 2014/10/30 PFIセミナー Seiya Tokui, Preferred Networks
  • 2.
    ⾃自⼰己紹介 l 得居誠也 (Seiya Tokui) l アカウント:beam2d (Twitter, GitHub, etc.) l 東⼤大情報理理⼯工で修⼠士を取ってから PFI ⼊入社 – 最初は⾃自然⾔言語処理理やってた(潜在変数を⼊入れた系列列ラベリング学習) – 次に画像・⾔言語対象に近傍探索索やった(ハッシュ関数の学習) – ⼊入社後は Jubatus のアルゴリズム開発 – 今は PFN で Deep Learning とか映像解析とかとか l 前回スキップしたせいで PFI セミナーは 16 ヶ⽉月ぶり l 今⽇日話す RNN は⾳音声認識識でもよくやられていて⾼高い精度度も出てますが 僕が⾳音声に不不慣れなので今⽇日は話しません(すみません) 2
  • 3.
    もくじ l 問題設定 l Recurrent Neural Networks l Backpropagation through Time l Long Short-‐‑‒Term Memory l Deep RNN l 応⽤用:機械翻訳 l 応⽤用:⾔言語処理理系の学習 l 応⽤用:アルゴリズムの学習 l 応⽤用:Visual Attention 3
  • 4.
    問題設定 ⼊入⼒力力データ and/or予測対象が可変⻑⾧長の系列列 課題⼊入⼒力力予測 ⾳音声認識識周波数空間の ベクトル列列 4 ⾳音素列列、単語列列 など 機械翻訳翻訳元⾔言語の⽂文 (単語/⽂文字列列) 翻訳先⾔言語の⽂文 (単語/⽂文字列列)
  • 5.
    Feedforward Neural Networks l 固定⻑⾧長⼊入⼒力力・出⼒力力の場合に⼀一般的に使われるニューラルネット l 可変⻑⾧長の場合には使いにくい – 何かしらの⽅方法で⼊入⼒力力を固定⻑⾧長に直さないといけない (e.g. BoW, N-‐‑‒gram) – 多くの場合、固定⻑⾧長への変換で順序の情報が失われるか、順序の情 報をすべて保存しようとすると次元が⾼高くなりすぎる 5
  • 6.
    Recurrent Neural Networks(Elman型) l 状態を持ったニューラルネット l ⼊入⼒力力→隠れ、隠れ→隠れ、隠れ→出⼒力力 の3種類の結合を持つ 6 ⼊入⼒力力 隠れユニット 出⼒力力
  • 7.
  • 8.
    勾配計算:Backpropagation through Time(BPTT) l 時間⽅方向に展開した計算グラフ上で、単純に誤差逆伝播する l これで勾配を計算して、勾配ベースの⼿手法を使ってパラメータを最適化する l 系列列全体でBPTTを実⾏行行する以外に、系列列を適当な⻑⾧長さでぶった切切ってBPTTす ることもある(最適化の効率率率を上げるため、実装を簡単にするため etc.) – ぶった切切った場合でも初期状態は正しく計算する必要がある 8
  • 9.
    BPTTは勾配が消えたり爆発したりする l エラーが⻑⾧長い系列列をたどる場合、重みがたくさん掛け算される l 重みが何度度も掛けられることで、勾配が系列列⻑⾧長に対して指数的に消失したり爆 発したりする l 爆発に対しては、max-‐‑‒normや勾配の正規化などで対処 l 消失する場合、これは⻑⾧長期依存 (long-‐‑‒term dependency) を学習できなくなる (短いパスの勾配だけが効いてしまうので) 9
  • 10.
    ⻑⾧長期依存を学習する Long Short-‐‑‒TermMemory l エラーが重みをかけずに伝搬するようにする 10
  • 11.
    ⻑⾧長期依存を学習する Long Short-‐‑‒TermMemory l エラーが重みをかけずに伝搬するようにする Constant Error Carousel (CEC) ct = ct1 + int @ct = @ct1 + @int エラーが減衰せずにとどまり続ける 11 tanh
  • 12.
    ⻑⾧長期依存を学習する Long Short-‐‑‒TermMemory l ⼊入⼒力力を選択的に記憶する ct = ct1 + int CEC は過去の⼊入⼒力力を溜溜め込む、 揮発性の記憶素⼦子のようなもの。 でもこれだけだと記憶対照を選べず、 ノイズを溜溜め込んでしまう。 12 tanh
  • 13.
    ⻑⾧長期依存を学習する Long Short-‐‑‒TermMemory l ⼊入⼒力力を選択的に記憶する Input gate が 1 のときは⼊入⼒力力をすべて CECに溜溜め込み、0 のときは無視する (実際はその間の値が連続的に現れる) 13 Input gate sigmoid tanh 掛け算
  • 14.
    ⻑⾧長期依存を学習する Long Short-‐‑‒TermMemory l エラーを選択的に取り込む 14 Input gate sigmoid tanh どのタイミングでもエラーが流流れ込むよ うになっている。ある CEC が記憶して いる事柄が今の予測と関係ないとき、こ れはノイズになってしまう。
  • 15.
    ⻑⾧長期依存を学習する Long Short-‐‑‒TermMemory l エラーを選択的に取り込む 15 Input gate sigmoid tanh Output gate sigmoid CEC の出⼒力力を使うタイミングを制御す ることで、必要ないときにはエラーが流流 れ込まないようにする
  • 16.
    ⻑⾧長期依存を学習する Long Short-‐‑‒TermMemory l ここまでが [HochreiterSchmidhuber, ʻ‘97] で提案された Long Short-‐‑‒Term Memory ユニット sigmoid ※ もともとは CEC の後ろにもう⼀一回 sigmoid 等をかませていたが、最近 は省省くことが多い 16 Input gate tanh Output gate sigmoid
  • 17.
    ⻑⾧長期依存を学習する Long Short-‐‑‒TermMemory l 記憶の明⽰示的な消去 ct = ct1 + int 17 Input gate sigmoid tanh Output gate sigmoid 今の定義だと、CEC を上書きするには ⼤大きな⼊入⼒力力を繰り返し与えるしかない。 短期間に⼤大きく記憶を更更新したい場合に 対処できない。
  • 18.
    ⻑⾧長期依存を学習する Long Short-‐‑‒TermMemory l 記憶の明⽰示的な消去 18 Input gate sigmoid tanh Output gate sigmoid Forget gate sigmoid Forget gate が 0 に近い値を取ると CEC は直前の状態を忘れて、新しい⼊入 ⼒力力で置き換わる。
  • 19.
    ⻑⾧長期依存を学習する Long Short-‐‑‒TermMemory l CEC の記憶(つまり隠れ状態)そのものを gate の制御に使う 19 Input gate sigmoid tanh Output gate sigmoid Forget gate sigmoid 各 gate への⼊入⼒力力は⼊入⼒力力系列列の今の値と、 直前の時刻における各 LSTM ユニットの出⼒力力。 後者は output gate で制御されてしまい、 本当の隠れ状態が⾒見見えない。
  • 20.
    ⻑⾧長期依存を学習する Long Short-‐‑‒TermMemory l CEC の記憶(つまり隠れ状態)そのものを gate の制御に使う 20 Input gate sigmoid tanh Output gate sigmoid Forget gate sigmoid Peephole Connection
  • 21.
    ⻑⾧長期依存を学習する Long Short-‐‑‒TermMemory l これが [Gers, ʻ‘01] などでまとめられている拡張された LSTM ユニッ ト sigmoid Forget gate l 現在よく⽤用いられているものは、このバージョンや peephole connection を省省いたもの l 学習は BPTT で⾏行行うのが主流流 21 Input gate tanh Output gate sigmoid sigmoid
  • 22.
    RNN を Deepにする⽅方法 l 現在よく使われているのは Stacked RNN l 各層ごとに異異なる時間スケール・抽象度度でのダイナミクスを捉えられる l ただ、課題によっては次スライドで述べる別の⽅方法を使った⽅方が良良いこ ともある 22
  • 23.
    RNN を Deepにする⽅方法 [Pascanu+, ICLR ʻ‘14] l RNN ⾃自体を stack する以外に、RNN の遷移層、出⼒力力層をそれぞれ deep にすることもできる(下図の⽩白い層は何段あってもよい) l 上の (b*) のように、遷移層を deep にする場合は backprop のパスが さらに⻑⾧長くなってしまうので、ショートカットを⼊入れると良良い – 短い時間で予測に⾮非線形な影響をあたえるような⼊入⼒力力をとらえるのに deep な接続を 使い、⻑⾧長期のラグを経て予測に影響を与えるような現象をとらえるのにショートカッ トを使う 23
  • 24.
    応⽤用:機械翻訳 [Sutskever+, NIPSʻ‘14] l “Sequence to Sequence Learning with Neural Networks” – RNN を機械翻訳に使う研究は最近とても多いが、この論論⽂文は RNN のみで機械翻訳を ⾏行行うところが特徴 l 英語の単語列列を⼊入⼒力力として、フランス語の単語列列を出⼒力力する l まず英語の⽂文章 ABC を⼊入れて、EOS(⽂文末)に到達したらフランス語 の⽂文章 WXYZ を出⼒力力する 24
  • 25.
    応⽤用:機械翻訳 [Sutskever+, NIPSʻ‘14] ⼯工夫 l 英語を読むときとフランス語を出⼒力力するときで異異なるパラメータを使う l 英語(⼊入⼒力力)は前後を反転させて読ませる – 英語とフランス語は語順が近いため、対応する単語ペアで近い位置 にあるものが多い⽅方が学習の初期時に⾜足がかりにしやすい – このテクニックはおそらく、出⼒力力の最初の⽅方を予測するのに⼊入⼒力力の 最初の⽅方が強く効くような問題で有効 25
  • 26.
  • 27.
    応⽤用:⾔言語処理理系の学習 [ZarembaSutskever, ʻ‘14] l “Learning to Execute” l 簡単な Python コードが⼊入⼒力力 l print 結果を出⼒力力させる – 結果は必ずドットで終わる l データはランダムに⽣生成。 以下のパラメータを持つ: – 現れる数値の桁数 – 構⽂文⽊木の深さ 27
  • 28.
    応⽤用:⾔言語処理理系の学習 [ZarembaSutskever, ʻ‘14] l (Peepholeのない)Stacked LSTM RNN で学習 l ⼯工夫:Curriculum Learning [Bengio+, ICMLʼ’09] – 簡単な問題を先に解かせることで難しい問題の最適化を容易易にする (去年年のPFIセミナー後半を参照 http://www.slideshare.net/beam2d/deep-‐‑‒learning-‐‑‒22544096) – ここではデータを⽣生成するときのパラメータ(桁数、構⽂文⽊木の深 さ)について、⼩小さな値を⽤用いて⽣生成したデータからまず学習させ、 段々⽣生成パラメータを⼤大きくしていく – ただし、ナイーブにやるとダメ u ⼩小さなパラメータのデータに特化した RNN が学習されてしまう u 序盤から少量量の難しい問題を混ぜておくことでこれを回避 28
  • 29.
  • 30.
    応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] l “Neural Turing Machines” l メモリのくっついた (R)NN を考案している(下は模式図) コントローラ ⼊入⼒力力出⼒力力 30 読み取り ヘッド 書き込み ヘッド 書き込み 内容 メモリ⾏行行列列
  • 31.
    応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] l メモリ⾏行行列列から読んだり書いたりできる l 読み書きにはヘッドを使う l ヘッドは確率率率ベクトル メモリ⾏行行列列 ヘッド:確率率率ベクトル (⾮非負値で和が1) – One-‐‑‒hot だとチューリ ングマシンのように⼀一 箇所だけから読むことに なる – これを backprop できるように 連続値に拡張している l 書く時は書き込む内容(⾏行行ベクトル)も⼀一緒に 出⼒力力して、⾏行行ごとに書き込む強度度をヘッドで指定する 31 × wt Mt
  • 32.
    応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] l ヘッドの指定は2つのアドレッシング⽅方法を組合せる l まずはコンテンツベースのアドレッシング – コントローラが出⼒力力した⾏行行ベクトル とのコサイン距離離 の softmax で確率率率を割当てる wc t (i) / exp(tK(kt,Mt(i)) – これを前回のヘッドと混ぜたものを次のロケーションベースのアド レッシングへの⼊入⼒力力にする(混合係数 はコントローラが指定す る) – 混合係数が 0 ならコンテンツベースアドレッシングは無視される 32 kt K gt
  • 33.
    応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] l 次にロケーションベースのアドレッシング – 指定した数だけヘッドを右か左にシフトさせたい – だが同時に backprop もできるようにしたいので、代わりにコント ローラが指定したベクトルとの畳み込み演算で補う(添字が端を越 えるところでは循環させる) – このときベクトル が one-‐‑‒hot なら完全なシフトになる – Softmax などで指定する場合、なだらかな値を取り値がボケてしま うので、シャープにする( もコントローラが指定) 33 st t 1 wt(i) / ˜ wt(i)t
  • 34.
    応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] l ⼊入⼒力力系列列を読んだあとに出⼒力力系列列を予測する課題(機械翻訳と同じ) l 処理理の順序 – コントローラが読み取りヘッドを出⼒力力 – 読み取りヘッド(⾏行行ベクトル)とメモリ⾏行行列列の積によってメモリ内容を読み出す – ⼊入⼒力力、メモリの読み出し結果、コントローラの直前の状態(コントローラが RNN の 場合)をもとにコントローラの状態を更更新 – コントローラが書き込みヘッドと書き込み内容を出⼒力力 u 書き込みは「消してから⾜足す」というやりかたをしている(詳細は論論⽂文参照) – 書き込みヘッド(⾏行行ベクトル)と書き込み内容(列列ベクトル)の outer product を 取ってメモリ⾏行行列列を更更新 – コントローラが予測を出⼒力力 l すべての処理理は微分可能なので、ヘッドの位置(確率率率ベクトル)や書き 込み内容を含めてシステム全体を BPTT で学習できる 34
  • 35.
    応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] l コピー課題(上) – ⼊入⼒力力と同じものを出⼒力力する l 繰り返しコピー課題(下) – ⼊入⼒力力はコピー対象系列列の末尾に コピー回数を書いたもの。これを 読んで、コピー回数だけ対象系列列 を繰り返し出⼒力力する課題 – つまり For ループができるかを 確かめる実験 l どちらも LSTM RNN より速く 学習している – 下のほうが LSTM でも良良いのは 上の実験より系列列を短くしてるから 35
  • 36.
    応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] l 繰り返しコピー課題でのヘッドの内容 l 毎コピー後に繰り返し回数をチェックしに⾏行行ってるのがわかる 36
  • 37.
    応⽤用:アルゴリズムの学習 [Graves+, ʻ‘14] l Neural Turing Machines でコントローラに LSTM を使う場合、LSTM はレジスタのように使われる – 先ほどのコピー課題ではおそらく、現在の繰り返し回数が LSTM の 中に保持されていると予想される u 繰り返し中にはメモリへの書き込みがないため l コピー回数やコピー内容のように、⻑⾧長期にわたって覚えておく必要があ る内容をメモリに書いている l 論論⽂文ではもっと複雑なタスクも解かせているので、実験のところだけで も読むと⾯面⽩白いです – 系列列を任意の場所から思い出す、N-‐‑‒gram モデルの学習アルゴリズム⾃自体を 学習する、インデックス順に並び替えるタスク(Priority Sort) 37
  • 38.
    応⽤用:Visual Attention [Mnih+,ICML ʻ‘14] l “Recurrent Models of Visual Attention” l 画像認識識(分類や検出)において、画像全体を⾒見見たくない l ⼩小さな矩形を⼊入⼒力力として⾒見見て、次に⾒見見る位置を出⼒力力。これを繰り返しな がら予測やアクションを改善していく 38
  • 39.
    応⽤用:Visual Attention [Mnih+,ICML ʻ‘14] l ⼿手法の名前は Recurrent Attention Model (RAM) l ⼊入⼒力力は静⽌止画でも動画(系列列)でも良良い – 論論⽂文では静⽌止画(MNIST をランダムに平⾏行行移動したもの)と簡単なゲームで実験 – 動画(ゲーム)の場合には LSTM を使うと良良い l ⾒見見る位置から画像を取ってくる部分は微分できない l そこで強化学習を⾏行行う – 分類の場合、毎フレーム予測が当たったら報酬がもらえる – 学習には REINFORCE 法 [Williams, ʻ‘92] と呼ばれる勾配のサンプリング法を使って いる(NNの強化学習で昔からある⼿手法) l 強化学習なので分類以外の⽬目的にも使える – 論論⽂文では簡単なゲームプレイを試している 39
  • 40.
    応⽤用:Visual Attention [Mnih+,NIPS ʻ‘14] l RAM が視線をどう動かすかの可視化 l 論論⽂文にもっといろいろ載ってます l ゲームプレイの動画: http://www.cs.toronto.edu/~∼vmnih/docs/attention.mov l Attention に関する研究(特に NN と絡めた話)はここ最近増えている ように思う 40
  • 41.
    まとめ l 今どきのRecurrent Neural Networks は – LSTM を使う(もう 17 年年前だけど……) – BPTT で勾配計算する – いろんな⽅方法で Deep にする – ⼊入⼒力力系列列は反転したりする – Curriculum Learning が効く – メモリをくっつけると複雑な課題が解けるようになる l ところで後半で紹介した応⽤用例例はすべて Google(後半2つは DeepMind) 41
  • 42.
    References Bengio, Y.,Louradour, J., Collobert, R. and Weston, J. Curriculum Learning. ICML 2009. Gers, F. Long Short-Term Memory in Recurrent Neural Networks. Ph.D thesis, 2001. Graves, A., Wayne, G. and Danihelka, I. Neural Turing Machines. arXiv:1410.5401v1, 2014. Hochreiter, S. and Schmidhuber, J. LONG SHORT-TERM MEMORY. Neural Computation, 9(8): 1735-1780, 1997. Mnih, V., Heess, N., Graves, A. and Kavukcuglu, K. Recurrent Models of Visual Attention. ICML, 2014. Pascanu, R., Gulcehre, C., Cho, K. and Bengio, Y. How to Construct Deep Recurrent Neural Networks. ICLR, 2014. Sutskever, I., Vinyals, O. and Le, Q. V. Sequence to Sequence Learning with Neural Networks. NIPS 2014. Williams, R. J. Simple statistical gradient-following algorithms for connectionist reinforcement learning. Machine Learning, 8(e):229-256, 1992. Zaremba, W. and Sutskever, I. Learning to Execute. arXiv:1410.4615v1, 2014. 42