-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_LSTM
- 戻る(ニューラルネットワーク、言語処理(AI))
- 一般的なフツーのニューラルネットワーク
- 順伝播型ニューラルネットワーク(FNN)(ニューラルネットワークの該当節を参照)
- ディープニューラルネットワーク(DNN)(ニューラルネットワークの該当節を参照)
- 畳み込みニューラルネットワーク(CNN)
-
再帰型ニューラルネットワーク(RNN)
- 長短期記憶ニューラルネットワーク(LSTM)
- RNN Encoder-Decoder(Sequence-to-Sequence)
- 生成モデル(機械学習の理論の該当節を参照)系の
ニューラルネットワーク
- 一般的なフツーのニューラルネットワーク
- (Long short-term memory: LSTM)
- memoryと言うがハード的なメモリが実装されているということではない。
- ゲートという仕組みを使用して長期的特徴と短期的特徴を学習できる。
-
シンプルなRNNのhtはコロコロ変わるので記憶力が弱いと言える。
(長文を読んで要約をするというようなタスクには記憶力が足りない) -
LSTMでは、ゲートという仕組みを使用してコレを補い、
長期的特徴と短期的特徴を学習することができる。 -
欠点は計算量が多いこと。
-
LSTMには回路中にゲートというモノが含まれる。
-
コレはRNN系の回路上で次にどの程度前の情報を渡すか?を制御する。
-
この制御に使うベクトルをXゲート・ベクトルと呼ぶ。
-
-
このXゲート・ベクトルの
-
計算方法は、どれも、RNNの順伝播の式と、だいたい同じ様に計算される。
(ただし、学習結果で、Wr, Wz, Wf, Wi, Woのゲート毎の重みは其々、異なる)- x と Wx、ht-1 と Wh との全結合(線形変換)の結果を足す(xWx+ht-1Wh)。
- 活性化関数はtanhではなくsigmoid(σ)で、値は0~1の値になる。
-
値は、出力に、どの程度、前情報(前出力)を渡すか?を、
情報ベクトルとXゲート・ベクトルのアダマール積(要素毎の積)で制御。
-
-
ゲート付き回帰型ユニット
-
LSTMの簡略版で、
- 長期的特徴と短期的特徴を学習するための2つのゲートを採用
- 前情報を忘れる程度を制御して長期記憶を実現する。
-
リセット・ゲートと更新ゲート
- リセット・ゲート:前情報を減衰する程度を決定する。
- 更新ゲート:前情報と現情報の配合比率を決定する。
-
長短期記憶ニューラルネットワーク
-
長・短期記憶
-
長期的特徴と短期的特徴を学習できるゲートを使用し、
ht(出力)に加え、Ct(出力コンテキスト)を引き継ぐ(ht-1、Ct-1)。 -
長期的特徴と短期的特徴を学習するための3つのゲートを採用
-
同様に、前情報を忘れる程度を制御して長期記憶を実現する。
-
-
3つのゲートを追加
- 忘却ゲート:入力コンテキストを含める程度を決定する。
- 入力ゲート:現コンテキストを含める程度を決定する。
- (入力&現コンテキストから出力コンテキストを計算)
- 出力ゲート:出力コンテキストから短期記憶を抜き出す。
≒ RNNでできること(再帰型ニューラルネットワーク(RNN)の該当節を参照)
| 数式 | GRUセルの構造 |
|---|---|
![]() |
![]() |
| ※ 「*」はアダマール積と言う要素ごとの積。 | 〃 |
| リセット・ゲート | 更新ゲート |
![]() |
![]() |
出典:https://axa.biopapyrus.jp/deep-learning/rnn/gru.html
-
ゲート
-
リセット・ゲート:~ht(現情報)の計算をする際に、
ht-1(前情報、前出力)をどれだけ減衰するかを決定する。- 入力と重みを使ってrt(リセット・ゲート・ベクトル)を計算する。
- ~ht(現情報)の計算の回路にrt(リセット・ゲート・ベクトル)を流す。
-
更新ゲート:ht(出力)の計算をする際に、
ht-1(前情報、前出力)と~ht(現情報)の配合比率を決定する。- 入力と重みを使ってzt(更新ゲート・ベクトル)を計算する。
- ht(出力)の計算の回路にzt(更新ゲート・ベクトル)を流す。
-
-
Xゲート・ベクトル
-
rtは、リセット・ゲート・ベクトルと呼ばれる。
- 式は、Xゲート・ベクトルの計算方法で
- ~ht(現情報)を算出する式での使われ方の観点からは、
ht-1(前情報、前出力)を、どの程度減衰させるかを決定する。
-
ztは、更新ゲート・ベクトルと呼ばれる。
- 式は、Xゲート・ベクトルの計算方法で
- ht(出力)の式での使われ方の観点からは、
ht-1(前情報、前出力)と~ht(現情報)の配合比率を決定する。
-
-
情報ベクトル
-
~ht(現情報)ベクトルは、
-
式の意味としては、
・活性化関数含め、ほとんどRNNの順伝播の式(値のスケールは-1 ~ +1)。
・rtによってht-1(前情報、前出力)が減衰される点が異なる。 -
ht(出力)の式での使われ方の観点からは、
ht-1(前情報、前出力)、~ht(現情報)と、ht(出力)に配合される情報の一つ。
-
-
ht(出力)は、
計算済みのht-1(前情報、前出力)と、~ht(現情報)を、ztの割合で配合したもの。- ztが0に近いと、ht-1(前情報、前出力)が強調される(文脈に変化がない場合)。
- ztが1に近いと、~ht(現情報)が強調される(文脈に変化がある場合)。
-
htだけでなくCt(コンテキスト)も次の再帰的な入力に引き継ぐ。
| 数式 | セルの構造 |
|---|---|
![]() |
![]() |
| ※ 「*」はアダマール積と言う要素ごとの積。 | 〃 |
| 忘却ゲート | 入力ゲート |
|---|---|
![]() |
![]() |
| コンテキスト計算 | 出力ゲート |
|---|---|
![]() |
![]() |
-
ゲート
-
忘却ゲート:Ct(出力コンテキスト)の計算をする際に、
Ct-1(入力コンテキスト)をどの程度含めるか?を決定する。- 入力と重みを使ってft(忘却ゲート・ベクトル)を計算する。
- Ct(出力コンテキスト)の計算の回路にft(忘却ゲート・ベクトル)を流す。
-
入力ゲート:Ct(出力コンテキスト)の計算をする際に、
~Ct(現コンテキスト)をどの程度含めるか?を決定する。- 入力と重みを使ってit(入力ゲート・ベクトル)を計算する。
- Ct(出力コンテキスト)の計算の回路にit(入力ゲート・ベクトル)を流す。
-
出力ゲート:ht(出力)の計算をする際に、
Ct(出力コンテキスト)中から短期記憶を抜き出す。- 入力と重みを使ってot(出力ゲート・ベクトル)を計算する。
- ht(出力)の計算の回路にot(出力ゲート・ベクトル)を流す。
-
-
Xゲート・ベクトル
-
ftは、忘却ゲート・ベクトルと呼ばれる。
-
式は、Xゲート・ベクトルの計算方法で
-
Ct(コンテキスト)の式での使われ方の観点からは、
Ct(コンテキスト)に、Ct-1(入力コンテキスト)を、どの程度含めるか?を決める。
-
-
itは、入力ゲート・ベクトルと呼ばれる。
-
式は、Xゲート・ベクトルの計算方法で
-
Ct(コンテキスト)の式での使われ方の観点からは、
Ct(コンテキスト)に、~Ct(現コンテキスト)を、どの程度含めるか?を決める。
-
-
otは、出力ゲート・ベクトルと呼ばれる。
-
式は、Xゲート・ベクトルの計算方法で
-
ht(出力の短期記憶)の式での使われ方の観点からは、
Ct(コンテキスト)中の短期記憶を抜き出す。
-
-
-
情報ベクトル
-
~Ctは、新コンテキストで、
-
式の意味としては、活性化関数含め、ほとんどRNNの順伝播の式。
-
Ct(コンテキスト)の式での使われ方の観点からは、
Ct(コンテキスト)を算出する際にCt-1(旧コンテキスト)にブレンドする
~Ct(新コンテキスト)を、どの程度含めるか?を決める。
-
-
Ctは、長期記憶(コンテキスト)で以下の2つの計算結果を足して計算する。
- ft(忘却ゲート・ベクトル)とCt-1(旧コンテキスト)のアダマール積
- it(入力ゲート・ベクトル)と~Ct(新コンテキスト)のアダマール積
-
ht(出力の短期記憶)は、
- Ct(コンテキスト)中の短期記憶を抜き出したもの
- Ct(コンテキスト)とot(出力ゲート・ベクトル)のアダマール積
-
-
双方向LSTM
-
前後の文脈を加味する。
- 通常のLSTMは前の文脈しか加味しない。
- 例えば、修飾された主語が(後ろの)動詞を見れば人名だと予想し易い等。
-
構成
-
forward LSTM
普通のLSTM -
backward LSTM
後ろから読むLSTM
-
-
出力
以下2つの出力を利用すれば前後のコンテキストを考慮することになる。
→ ← ┌ → ┐
hi= concat(hi, hi) = │ hi │
│ ← │
└ hi ┘
-
forward LSTMの出力
→ → ht ≒ yt -
backward LSTMの出力
← ← ht ≒ yt -
用例
- Attention(RNN search)
(RNN Encoder-Decoder(Sequence-to-Sequence)の該当節を参照)
- Attention(RNN search)
- 多層双方向LSTM
- 深層学習についてのレポート(RNN編)
https://www.osscons.jp/joho108j0-537/#_537
言語処理(AI)の該当節を参照。
再帰型ニューラルネットワーク(RNN)の該当節を参照。
移行メモ
「そもそもゲートとはなにか?」の 「x と ht-1 の Wx との全結合(線形変換)の結果を足す(xWx+ht-1Wx)」は、 RNN の順伝播式(xWx + ht-1Wh)と重みが食い違っていたため 「x と Wx、ht-1 と Wh との全結合(線形変換)の結果を足す(xWx+ht-1Wh)」に正した。
GRU・LSTM の「数式と構造」の表は、元の PukiWiki で セルの縦結合(
|~|)とセル背景色(BGCOLOR)を使っていたため、 縦結合は 〃、背景色付きの見出しセルは太字に置き換えた。 GRU の表の最下行にあった出典 URL(横結合)は表の下に書き出した。チルダ付きの記号(~ht、~Ct)は Markdown の取り消し線記法と 衝突するため、
\~とエスケープして記述している。
Tags: 移行, 人工知能, 深層学習, ニューラルネットワーク, LSTM, GRU, RNN, ゲート
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。









