Long Short-term Memory
Transcript of Long Short-term Memory
Grid Long Short-term Memory
面白そうな論文 ”Grid Long Short-term Memory”
[Kalchbrenner+ 2015]
Long Short-term Memory(LSTM)を縦横につなげてやるとWikipediaの文字予測タスクでNN界最強
中国語英語翻訳でもphrase-based reference
systemよりはるかに性能がいい
これを理解するために遡っていく…
3
http://arxiv.org/abs/1507.01526
LONG SHORT-TERM MEMORY
今回解説するのはこれ、LSTM元祖の論文
“LONG SHORT-TERM MEMORY”
[Hochreiter&Schmidhuber 1997]
Recurrent Neural Networkの問題点を指摘し、LSTMを考案した
4
http://deeplearning.cs.cmu.edu/pdfs/Hochreiter97_lstm.pdf
Recurrent Neural Network
「不定長の入力を受け付けたい」
「ならばNNの中にループを作ろう」
直前の自分の活性を入力として受け取ることによって「記憶」のあるNNを実現、時系列入力として与えることで不定長入力を可能にする
5
Backpropagation Through Time
ループのあるNNをどうやって学習するか?
時間軸方向に展開して仮想の多層ネットワークの学習として扱う
[Williams&Zipser 1992]
6
Constant Error Carrousel(CEC)
1つのニューロンが自分の出力を受け取ることを考える、エラー情報が一定であるためには
・ニューロンの活性化関数が線形・他の入力がないとき活性は一定
が必要。この論文では以下の設定を用いる:
・活性化関数は f(x) = x
・リカレント結合の重みは1.0
8
[Hochreiter&Schmidhuber 1997]
問題: Input Weight Conflict
(著者曰く勾配ベースの手法すべてにある問題)
ある情報を、必要になるまで覚えておきたい
つまり、その情報が来たときにニューロンの活性は変わってほしい
しかし、他の情報が来たときにニューロンの活性は変わってほしくない
変わるか変わらないかが重みの値で表現されている仕組みでは、この衝突が学習の妨げになる
9
解決策
書くのか書かないのか、読むのか読まないのか、「記憶」に対する読み書きオペレーションが重みという一つのスカラー値で決まるのではなく入力に基づいてコントロールされるメカニズムが必要である
そこで…
11
Abuse Problem
学習序盤は、メモリセルを使わなくても誤差が減少する
なのでメモリセルを記憶以外のこと(定数オフセットなど)に使ってしまう問題が起きる
一度そういう変な学習をすると、解放されるまでに時間がかかる
14
解決策
(1)ネットワークの学習が止まった時にちょっとずつメモリーセルを足す
(2)出力ゲートをマイナスのオフセットで初期化出力ゲートが「出力OK」のシグナルを出せるようになるまで学習ステップが余計に必要になることで序盤にメモリセルが使われることを防ぐ
16
Internal state drift
メモリセルへの入力が正ばかり(または負)だと、メモリセルの値が一方的に大きくなり勾配が消滅する(活性化関数がシグモイドとかだと問題ないんだけど今回線形なんで)
序盤の間、入力ゲートの出力が0に近づくようにバイアスする
(学習がしばらく進むと他のニューロンがドリフトを吸収するので、それまでの間耐え忍ぶ)
17
Forget Gate
[Gers+ 1999] “Learning to Forget: Continual
Prediction with”
従来のLSTMは手動で記憶をリセットしていたがそれを自動でリセットできるようにしたよ、という論文
http://citeseerx.ist.psu.edu/viewdoc/download?do
i=10.1.1.55.5709&rep=rep1&type=pdf
18
実装
[Hochreiter&Schmidhuber 1997]のp.23から
ALGORITHM DETAILS
Tomonari MASADA先生による数式と実装*
実装はCで966行
Chainerでの実装** 228行
RNNLIBっていうC++実装もあるらしい。単に使うだけならこれがよい??
20
* http://diversity-mining.jp/wp/?p=407
** https://github.com/pfnet/chainer/blob/master/chainer/functions/lstm.py
数式読解
Wは重み、下の添え字xιなどが「入力xから入力ゲートιへの重み」をあらわしており、上の添え字nが「n層目の重み」をあらわしている
𝑊ℎ− ιのハイフンはマイナスではなく「前の隠れ層h-から入力ゲートιへの重み」という意味
22
数式読解
ωと小文字のwは別物。CECの出力ηを使う際に、同じ層の他のLSTMのηは使わないので重み行列が対角行列になり、その対角成分だけ取ってベクトルになってるのでWが小文字になっている。
要素積してるのもベクトル形で書いたから。対角行列なら普通の行列積になる。
24