「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- (Long short-term memory: LSTM)
- memoryと言うがハード的なメモリが実装されているということではない。
- ゲートという仕組みを使用して長期的特徴と短期的特徴を学習できる。
特徴 †
- シンプルなRNNのhtはコロコロ変わるので記憶力が弱いと言える。
(長文を読んで要約をするというようなタスクには記憶力が足りない)
- LSTMでは、ゲートという仕組みを使用してコレを補い、
長期的特徴と短期的特徴を学習することができる。
構造 †
そもそもゲートとはなにか? †
- コレはRNN系の回路上で次にどの程度前の情報を渡すか?を制御する。
- この制御に使うベクトルをXゲート・ベクトルと呼ぶ。
- 計算方法は、どれも、RNNの式と、だいたい同じ様に計算される。
(ただし、学習結果で、Wr, Wz, Wf, Wi, Woのゲート毎の重みは其々、異なる)
- x と ht-1 の Wx との全結合(線形変換)の結果を足す(xWx+ht-1Wx)。
- 活性化関数はtanhではなくsigmoid(σ)で、値は0~1の値になる。
- 値は、出力に、どの程度、前情報(前出力)を渡すか?を、
情報ベクトルとXゲート・ベクトルのアダマール積(要素毎の積)で制御。
GRU (Gated Recurrent Unit) †
- LSTMの簡略版で、
- 長期的特徴と短期的特徴を学習するための2つのゲートを採用
- 前情報を忘れる程度を制御して長期記憶を実現する。
- リセット・ゲートと更新ゲート
- リセット・ゲート:前情報を減衰する程度を決定する。
- 更新ゲート:前情報と現情報の配合比率を決定する。
LSTM (Long short-term memory) †
- 長期的特徴と短期的特徴を学習できるゲートを使用し、
ht(出力)に加え、Ct(出力コンテキスト)を引き継ぐ(ht-1、Ct-1)。
- 長期的特徴と短期的特徴を学習するための3つのゲートを採用
- 同様に、前情報を忘れる程度を制御して長期記憶を実現する。
- 3つのゲートを追加
- 忘却ゲート:入力コンテキストを含める程度を決定する。
- 入力ゲート:現コンテキストを含める程度を決定する。
- (入力&現コンテキストから出力コンテキストを計算)
- 出力ゲート:出力コンテキストから短期記憶を抜き出す。
LSTMでできること †
≒ RNNでできること
詳細 †
GRUの仕組みと構造の説明 †
数式と構造 †
要素の説明 †
- リセット・ゲート:~ht(現情報)の計算をする際に、
ht-1(前情報、前出力)をどれだけ減衰するかを決定する。
- 入力と重みを使ってrt(リセット・ゲート・ベクトル)を計算する。
- \~ht(現情報)の計算の回路にrt(リセット・ゲート・ベクトル)を流す。
- 更新ゲート:ht(出力)の計算をする際に、
ht-1(前情報、前出力)と~ht(現情報)の配合比率を決定する。
- 入力と重みを使ってzt(更新ゲート・ベクトル)を計算する。
- ht(出力)の計算の回路にzt(更新ゲート・ベクトル)を流す。
- rtは、リセット・ゲート・ベクトルと呼ばれる。
- 式は、Xゲート・ベクトルの計算方法で
- \~ht(現情報)を算出する式での使われ方の観点からは、
ht-1(前情報、前出力)を、どの程度減衰させるかを決定する。
- ztは、更新ゲート・ベクトルと呼ばれる。
- 式は、Xゲート・ベクトルの計算方法で
- ht(出力)の式での使われ方の観点からは、
ht-1(前情報、前出力)と~ht(現情報)の配合比率を決定する。
- 式の意味としては、
・活性化関数含め、ほとんどRNNの式(値のスケールは-1 ~ +1)。
・rtによってht-1(前情報、前出力)が減衰される点が異なる。
- ht(出力)の式での使われ方の観点からは、
ht-1(前情報、前出力)、~ht(現情報)と、ht(出力)に配合される情報の一つ。
- ht(出力)は、
計算済みのht-1(前情報、前出力)と、~ht(現情報)を、ztの割合で配合したもの。
- ztが0に近いと、ht-1(前情報、前出力)が強調される(文脈に変化がない場合)。
- ztが1に近いと、~ht(現情報)が強調される(文脈に変化がある場合)。
LSTMの仕組みと構造の説明 †
数式と構造 †
htだけでなくCt(コンテキスト)も次の再帰的な入力に引き継ぐ。
数式 | セルの構造 |
|
|
※ 「*」はアダマール積と言う要素ごとの積。 |
要素の説明 †
- 忘却ゲート:Ct(出力コンテキスト)の計算をする際に、
Ct−1(入力コンテキスト)をどの程度含めるか?を決定する。
- 入力と重みを使ってft(忘却ゲート・ベクトル)を計算する。
- Ct(出力コンテキスト)の計算の回路にft(忘却ゲート・ベクトル)を流す。
- 出力ゲート:ht(出力)の計算をする際に、
Ct(出力コンテキスト)中から短期記憶を抜き出す。
- 入力と重みを使ってot(出力ゲート・ベクトル)を計算する。
- ht(出力)の計算の回路にot(出力ゲート・ベクトル)を流す。
- Ct(コンテキスト)の式での使われ方の観点からは、
Ct(コンテキスト)に、Ct-1(入力コンテキスト)を、どの程度含めるか?を決める。
- Ct(コンテキスト)の式での使われ方の観点からは、
Ct(コンテキスト)に、~Ct(現コンテキスト)を、どの程度含めるか?を決める。
- ht(出力の短期記憶)の式での使われ方の観点からは、
Ct(コンテキスト)中の短期記憶を抜き出す。
- 式の意味としては、活性化関数含め、ほとんどRNNの式。
- Ct(コンテキスト)の式での使われ方の観点からは、
Ct(コンテキスト)を算出する際にCt-1(旧コンテキスト)にブレンドする
\~Ct(新コンテキスト)を、どの程度含めるか?を決める。
- Ctは、長期記憶(コンテキスト)で以下の2つの計算結果を足して計算する。
- ft(忘却ゲート・ベクトル)とCt-1(旧コンテキスト)のアダマール積
- it(入力ゲート・ベクトル)と~Ct(新コンテキスト)のアダマール積
- ht(出力の短期記憶)は、
- Ct(コンテキスト)中の短期記憶を抜き出したもの
- Ct(コンテキスト)とot(出力ゲート・ベクトル)のアダマール積
拡張形式 †
Bidirectional LSTM †
- 前後の文脈を加味する。
- 通常のLSTMは前の文脈しか加味しない。
- 例えば、修飾された主語が(後ろの)動詞を見れば人名だと予想し易い等。
- forward LSTMの出力
→ →
ht ≒ yt
- backward LSTMの出力
← ←
ht ≒ yt
Deep Bidirectional LSTM †
参考 †
YouTube? †