LSTM
- LSTMの実際的な仕組みについてまとめる
- 概要説明は Seq2seqを理解するまでの事前知識 で
- LSTM(長・短期記憶)
- 回帰型ニューラルネットワーク(RNN)のアーキテクチャの1つ
LSTMを数式ベースで理解する
- 参考
まずRNNの数式の意味を把握する
- 入力:\( x^{(0)},x^{(1)},...,x^{(T)} \)
- 系列データは上記のような式で表せる
- 実例を自然言語で示す
- 実際のxの中身は例えば x = {'これ', 'は', '寒冷', '渦', 'と', '呼ば', 'れ', '悪天候', 'の', '原因', 'と', 'なる', 'と', 'いう'} のような感じ
- x[0] = 'これ'、x[3] = '渦'
- 系列データは上記のような式で表せる
RNNのキモとなる式が以下
- \( (y^{(t)}, h^{(t)}) = f(x^{(t)}, y^{(t-1)}, h^{(t-1)}) \)
- 出力:\( y^{(0)},y^{(1)},...,y^{(T)} \)
- 人間の翻訳タスクを機械学習のモデル化するとこうなるよという話、わかりやすい
- 要は、系列データを扱う際人間はデータごとに考えることを遷移していっているということ
- 左下の図のように、矢印が上から出てまた下に戻る図を初期によく見かけていたがあれはわかりにくかった
- 具体的にRNNの回路にx(t)を渡して処理してy(t)とh(t)を出力、次に進むという流れがわかりやすい
- 上記の説明を実際的な処理フロー図に落としたのが以下の図
- 「データごとに考えることを遷移する」というところを数式化したのが
- \( (y^{(t)}, h^{(t)}) = f(x^{(t)}, y^{(t-1)}, h^{(t-1)}) \)
- (今の単語について)=(今の単語x(t), 一個前の考え --> y(t-1), h(t-1) )
- t と t-1 の考えがわかればOKだと思う(英語だとt=timestepとか書かれているがそれではわけわからん)
- 出力:\( y^{(0)},y^{(1)},...,y^{(T)} \)
- \( (y^{(t)}, h^{(t)}) = f(x^{(t)}, y^{(t-1)}, h^{(t-1)}) \)
LSTMについても上記の図と同じようなものと考えていいと思います
RNNの系列変換を分類する
この板書も非常にわかりやすかった、特にこれ以上コメントすることもないがseq2seqとは2回の系列変換であるとよくわかる。
- seq2vec, vec2seq, seq2seq ← キーワード
LSTMで出てくる数式
紹介する順番は異なる
- \( f^{(t)} = f^{\sigma}_{f} (x^{(t)}, h^{(t-1)}) \)
- \( i^{(t)} = f^{\sigma}_{i} (x^{(t)}, h^{(t-1)}) \)
- \( o^{(t)} = f^{\sigma}_{i} (x^{(t)}, h^{(t-1)}) \)
- \( \tilde{C}^{(t)} = f^{\sigma}_{i} (x^{(t)}, h^{(t-1)}) \)
- \( C^{(t)} = f^{(t)} \circ C^{(t-1)} + i^{(t)} \circ \tilde{C}^{(t)} \)
- \( y^{(t)} = h^{(t)} = o^{(t)} \circ C^{(t)} \)
- 演算子 ∘ はアダマール積(要素ごとの積)を示す。
RNNではyやhを出す式は1つしかなかったが、それが6つに増えただけだと考えるとわかりやすい。
- 覚えること
- C: 長期記憶担当
- h: 短期記憶担当
- \( C^{(t)} = f^{(t)} \circ C^{(t-1)} + i^{(t)} \circ \tilde{C}^{(t)} \)
- 第1項:forget gate vector: fの値に応じて1つ前の記憶を忘れる
- 第2項:記憶に追加している
-
: Input Gate Vector, 入力ゲートの活性化ベクトル
-
: Context Vector, 文脈ベクトル
-
- \( y^{(t)} = h^{(t)} = o^{(t)} \circ C^{(t)} \)
- 長期記憶Cから必要な短期記憶を抜き出す
-
: Output Gate Vector, 出力ゲートの活性化ベクトル
-
- 長期記憶Cから必要な短期記憶を抜き出す
aicia-lstm-1.png
aicia-rnn-1.png
aicia-rnn-2.png
aicia-rnn-3.png
aicia-rnn-4.png