「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- (Long short-term memory: LSTM)
- memoryと言うがハード的なメモリが実装されているということではない。
- ゲートという仕組みを使用して長期的特徴と短期的特徴を学習できる。
特徴 †
- シンプルなRNNのhtはコロコロ変わるので記憶力が弱いと言える。
(長文を読んで要約をするというようなタスクには記憶力が足りない)
- LSTMでは、ゲートという仕組みを使用してコレを補い、
長期的特徴と短期的特徴を学習することができる。
構造 †
そもそもゲートとはなにか? †
- コレはRNN系の回路上で次にどの程度前の情報を渡すか?を制御する。
- この制御に使うベクトルをXゲート・ベクトルと呼ぶ。
- 計算方法は、どれも、だいたい同じ様に計算される(学習結果で重みは異なる)。
具体的には、xとht-1の全結合を足して、最後にSigmoid関数(σ)にかける。
- 値は0-1の値になり、次にどの程度前の情報を渡すか?を制御する。
GRU (Gated Recurrent Unit) †
- LSTMの簡略版で、
- 長期的特徴と短期的特徴を学習する方法として、
- リセット・ゲートと更新ゲートを採用しており、
- どの程度を忘れるか制御して長期記憶を実現する。
- ゲートがリセット・ゲートと更新ゲートの2つ
- リセット・ゲート:前の情報をどれだけ捨てるかを決定する。
- 更新ゲート:今の情報をどれだけ取り込むかを決定する。
LSTM (Long short-term memory) †
- 長・短期記憶
- 長期的特徴と短期的特徴を学習する方法として、
- 入力ゲート、忘却ゲート、出力ゲートを採用しており、
- どの程度を忘れるか制御して長期記憶を実現する。
- 3つのゲートを追加(Attention機構に近い)。
LSTMでできること †
≒ RNNでできること
詳細 †
GRUの仕組みと構造の説明 †
数式と構造 †
数式 | GRUセルの構造 |
|
|
※ 「*」はアダマール積と言う。 |
要素の説明 †
- 式は、Xゲート・ベクトルの計算方法で
・RNNの式と同じだが活性化関数がSigmoid関数(σ)なので0-1の値
・更に、重みはWhとWxではなくWrと、同じものを使っているぽい。
- \~ht(今の情報)の式での使われ方の観点からは、
ht-1(前の情報)をどの程度減衰させるかを決める。
- 式は、Xゲート・ベクトルの計算方法で
・RNNの式と同じだが活性化関数がSigmoid関数(σ)なので0-1の値
・更に、重みはWhとWxではなくWzと、同じものを使っているぽい。
- ht(出力)の式での使われ方の観点からは、
ht(出力)をht-1(前の情報)から~ht(今の情報)に、どの程度変化させるか?を決める。
- 式の意味としては、
・活性化関数含め、ほとんどRNNの式。
・rt(リセット・ゲート・ベクトル)によってht-1(前の情報)が減衰される点が異なる。
- ht(出力)の式での使われ方の観点からは、
ht(出力)を算出する際にht-1(前の情報)にブレンドされる~ht(今の情報)。
- ht(出力)は、
計算済みのht-1(前の情報)と~ht(今の情報)を、
計算したzt(更新ゲート・ベクトル)の割合でブレンドしている。
- ztが0に近いと、ht-1(前の情報)が強調される(文脈に変化がない場合)。
- ztが1に近いと、~ht(今の情報)が強調される(文脈に変化がある場合)。
- リセット・ゲート:過去の情報をどれだけ捨てるかを決定する。
- 入力と重みを使ってrt(リセット・ゲート・ベクトル)を計算する。
- \~ht(今の情報)の計算の回路にrt(リセット・ゲート・ベクトル)を流す。
- 更新ゲート:過去の情報をどれだけ取り込むかを決定する。
- 入力と重みを使ってzt(更新ゲート・ベクトル)を計算する。
- (前の情報を減衰する)rt(リセット・ゲート・ベクトル)を使って~ht(今の情報)の計算を行う。
- ht(出力)にht-1(前の情報)と~ht(今の情報)を
どんな比率でブレンドするかをzt(更新ゲート・ベクトル)を使って計算する。
LSTMの仕組みと構造の説明 †
数式と構造 †
要素の説明 †
- 数式
Cは長期記憶(コンテキスト)、Hは短期記憶(...)
- Ct(コンテキスト)の式での使われ方の観点からは、Ct(コンテキスト)に、Ct-1(前コンテキスト)を、どの程度含めるか?を決める。
- Ct(コンテキスト)の式での使われ方の観点からは、~Ct(現コンテキスト)に、どの程度変化させるか?を決める。
- ht(出力の短期記憶)の式での使われ方の観点からは、Ct(コンテキスト)中の短期記憶を抜き出す。
- 式の意味としては、活性化関数含め、ほとんどRNNの式。
- Ct(コンテキスト)の式での使われ方の観点からは、
Ct(コンテキスト)を算出する際にCt-1(前コンテキスト)にブレンドする~Ct(現コンテキスト)を、どの程度含めるか?を決める。
- Ctは、長期記憶(コンテキスト)で以下のように計算する。
- ft(忘却ゲート・ベクトル)とCt-1(前コンテキスト)のアダマール積
- it(入力ゲート・ベクトル)と~Ct(...)のアダマール積
- ht(出力の短期記憶)は、
- 計算済みのCt(コンテキスト)と計算したot(出力ゲート・ベクトル)を使って
- Ct(コンテキスト)中の短期記憶を抜き出したもの。
拡張形式 †