「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-戻る([[ニューラルネットワーク]]、[[言語処理(AI)]])
--一般的なフツーの[[ニューラルネットワーク]]
---[[順伝播型ニューラルネットワーク(FNN)>ニューラルネットワーク#mcd402f7]]
---[[ディープニューラルネットワーク(DNN)>ニューラルネットワーク#ge448516]]
---[[畳み込みニューラルネットワーク(CNN)]]
--[[再帰型ニューラルネットワーク(RNN)]]
---長短期記憶ニューラルネットワーク(LSTM)
---[[RNN Encoder-Decoder(Sequence-to-Sequence)]]
--[[生成モデル>機械学習の理論#p3f4e303]]系の[[ニューラルネットワーク]]
---[[自己符号化器(AE:オートエンコーダ)]]
---[[テキスト生成系(Transformer系)]]
---[[敵対的生成ネットワーク(GAN)]]
*目次 [#acc27eb6]
#contents
*概要 [#pd1c328c]
-(Long short-term memory: LSTM)
-memoryと言うがハード的なメモリが実装されているということではない。
-ゲートという仕組みを使用して長期的特徴と短期的特徴を学習できる。
**特徴 [#t49e2d07]
-シンプルな[[RNN>再帰型ニューラルネットワーク(RNN)]]のhtはコロコロ変わるので記憶力が弱いと言える。~
(長文を読んで要約をするというようなタスクには記憶力が足りない)
-LSTMでは、ゲートという仕組みを使用してコレを補い、~
長期的特徴と短期的特徴を学習することができる。
-欠点は計算量が多いこと。
**構造 [#i7fae4ca]
***そもそもゲートとはなにか? [#se7a0be3]
-LSTMには回路中にゲートというモノが含まれる。
--コレは[[RNN>再帰型ニューラルネットワーク(RNN)]]系の回路上で次にどの程度前の情報を渡すか?を制御する。
--この制御に使うベクトルをXゲート・ベクトルと呼ぶ。
-このXゲート・ベクトルの
--計算方法は、どれも、[[RNN>再帰型ニューラルネットワーク(RNN)#a889091d]]の式と、だいたい同じ様に計算される。~
(ただし、学習結果で、Wr, Wz, Wf, Wi, Woのゲート毎の重みは其々、異なる)
---x と ht-1 の Wx との全結合(線形変換)の結果を足す(xWx+ht-1Wx)。
---活性化関数はtanhではなくsigmoid(σ)で、値は0~1の値になる。
--値は、出力に、どの程度、前情報(前出力)を渡すか?を、~
情報ベクトルとXゲート・ベクトルのアダマール積(要素毎の積)で制御。
***GRU (Gated Recurrent Unit) [#la831b6b]
-ゲート付き回帰型ユニット
-LSTMの簡略版で、
--長期的特徴と短期的特徴を学習するための2つのゲートを採用
--前情報を忘れる程度を制御して長期記憶を実現する。
-リセット・ゲートと更新ゲート
--リセット・ゲート:前情報を減衰する程度を決定する。
--更新ゲート:前情報と現情報の配合比率を決定する。
***LSTM (Long short-term memory) [#o3c8be39]
-長短期記憶ニューラルネットワーク
-長・短期記憶
--長期的特徴と短期的特徴を学習できるゲートを使用し、~
ht(出力)に加え、Ct(出力コンテキスト)を引き継ぐ(ht-1、Ct-1)。
--長期的特徴と短期的特徴を学習するための3つのゲートを採用
--同様に、前情報を忘れる程度を制御して長期記憶を実現する。
-3つのゲートを追加
--忘却ゲート:入力コンテキストを含める程度を決定する。
--入力ゲート:現コンテキストを含める程度を決定する。
--(入力&現コンテキストから出力コンテキストを計算)
--出力ゲート:出力コンテキストから短期記憶を抜き出す。
**LSTMでできること [#g9857ef4]
≒ [[RNNでできること>再帰型ニューラルネットワーク(RNN)#n7a4f037]]
*詳細 [#s0a94de2]
**GRUの仕組みと構造の説明 [#reea7d9e]
***数式と構造 [#jbdaf0a6]
|数式|GRUセルの構造|h
|#ref(gru-overview-0.png,left,nowrap,0,30%)|#ref(gru-overview-1.png,left,nowrap,1,30%)|
|※ 「*」はアダマール積と言う要素ごとの積。|~|
|BGCOLOR(#cccccc):リセット・ゲート|BGCOLOR(#cccccc):更新ゲート|
|#ref(gru-overview-2.png,left,nowrap,2,30%)|#ref(gru-overview-3.png,left,nowrap,3,30%)|
|>|https://axa.biopapyrus.jp/deep-learning/rnn/gru.html|
***要素の説明 [#h67928fa]
-ゲート
--リセット・ゲート:~ht(現情報)の計算をする際に、~
ht-1(前情報、前出力)をどれだけ減衰するかを決定する。
---入力と重みを使ってrt(リセット・ゲート・ベクトル)を計算する。
---\~ht(現情報)の計算の回路にrt(リセット・ゲート・ベクトル)を流す。
--更新ゲート:ht(出力)の計算をする際に、~
ht-1(前情報、前出力)と~ht(現情報)の配合比率を決定する。
---入力と重みを使ってzt(更新ゲート・ベクトル)を計算する。
---ht(出力)の計算の回路にzt(更新ゲート・ベクトル)を流す。
-Xゲート・ベクトル
--rtは、リセット・ゲート・ベクトルと呼ばれる。
---式は、[[Xゲート・ベクトルの計算方法>#se7a0be3]]で
---\~ht(現情報)を算出する式での使われ方の観点からは、~
ht-1(前情報、前出力)を、どの程度減衰させるかを決定する。
--ztは、更新ゲート・ベクトルと呼ばれる。
---式は、[[Xゲート・ベクトルの計算方法>#se7a0be3]]で
---ht(出力)の式での使われ方の観点からは、~
ht-1(前情報、前出力)と~ht(現情報)の配合比率を決定する。
-情報ベクトル
--\~ht(現情報)ベクトルは、
---式の意味としては、~
・活性化関数含め、ほとんど[[RNN>再帰型ニューラルネットワーク(RNN)#a889091d]]の式(値のスケールは-1 ~ +1)。~
・rtによってht-1(前情報、前出力)が減衰される点が異なる。
---ht(出力)の式での使われ方の観点からは、~
ht-1(前情報、前出力)、~ht(現情報)と、ht(出力)に配合される情報の一つ。
--ht(出力)は、~
計算済みのht-1(前情報、前出力)と、~ht(現情報)を、ztの割合で配合したもの。
---ztが0に近いと、ht-1(前情報、前出力)が強調される(文脈に変化がない場合)。
---ztが1に近いと、~ht(現情報)が強調される(文脈に変化がある場合)。
**LSTMの仕組みと構造の説明 [#u3c58af4]
***数式と構造 [#h390b88e]
htだけでなくCt(コンテキスト)も次の再帰的な入力に引き継ぐ。
|数式|セルの構造|h
|#ref(lstm-overview-0.png,left,nowrap,0,80%)|#ref(lstm-overview-1.png,left,nowrap,1,80%)|
|※ 「*」はアダマール積と言う要素ごとの積。|~|
|忘却ゲート|入力ゲート|h
|#ref(lstm-overview-2.png,left,nowrap,2,80%)|#ref(lstm-overview-3.png,left,nowrap,3,80%)|
|コンテキスト計算|出力ゲート|h
|#ref(lstm-overview-4.png,left,nowrap,4,80%)|#ref(lstm-overview-5.png,left,nowrap,5,80%)|
***要素の説明 [#rcdd3f80]
-ゲート
--忘却ゲート: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>再帰型ニューラルネットワーク(RNN)#a889091d]]の式。~
---Ct(コンテキスト)の式での使われ方の観点からは、~
Ct(コンテキスト)を算出する際にCt-1(旧コンテキスト)にブレンドする~
\~Ct(新コンテキスト)を、どの程度含めるか?を決める。
--Ctは、長期記憶(コンテキスト)で以下の2つの計算結果を足して計算する。
---ft(忘却ゲート・ベクトル)とCt-1(旧コンテキスト)のアダマール積
---it(入力ゲート・ベクトル)と~Ct(新コンテキスト)のアダマール積
--ht(出力の短期記憶)は、
---Ct(コンテキスト)中の短期記憶を抜き出したもの
---Ct(コンテキスト)とot(出力ゲート・ベクトル)のアダマール積
**拡張形式 [#q6dc4563]
***Bidirectional LSTM [#xbfd6b86]
-双方向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)#oc99a385]]
***Deep Bidirectional LSTM [#z69315b2]
-多層双方向LSTM
*参考 [#k9e4c67e]
-深層学習についてのレポート(RNN編)~
https://www.osscons.jp/joho108j0-537/#_537
**[[ゼロつく2>言語処理(AI)#s380107d]] [#s0a205b4]
**YouTube [#j8a7799c]
***[[AIcia Solid Project>再帰型ニューラルネットワーク(RNN)#u8f2a523]] [#r5eddee7]