RNNについて。
#RNNとは
RNNには
再帰型ニューラルネットワーク
回帰結合型ニューラルネットワーク
の2種類あります。RNNと表記されたときは主に後者でを指します。
##再帰型ニューラルネットワークとは
木構造のNNです。
英語ではRecursive neural networkといいます。
#教師強制・回帰結合型ニューラルネットワークとは
教師強制とは教師データを次の入力データに入れる手法です。
https://qiita.com/20731057hh/items/2427c237fd2871202ea0
で分かりやすい説明があります。
回帰結合型ニューラルネットワークとは、出力が入力に戻るループ構造のネットワークです。
英語ではRecurrent neural networkといい略称はRNNです。
下図でいう左側に当たります。
##Back Propagation Though Time(BPTT)
ではこの構造で誤差逆伝播法はできるのでしょうか、できます。
その手法をBack Propagation Though Time(BPTT)と呼びます。
先ほど用いた図の右側に該当します。時系列データ$x$を$x_{t-1}$,$x_{t}$,$x_{t+1}$のように分解すれば巨大なニューラルネットワークととらえられ、ループがなくなります。
なので正解データに対し出力がどれぐらい異なるか調べられ、学習ができます。
#双方向RNN
過去から未来へのRNN+未来から過去へのRNNの2つを用意して両方から出力を予測する手法です。
引用:https://towardsdatascience.com/understanding-bidirectional-rnn-in-pytorch-5bd25a5dd66
#長期依存性の課題
RNNにはいくつか問題点があります。
・ネットワークが大きくなりすぎる(対策;データをある程度の長さで打ち切る)
・最初の情報が消える
・勾配が消える、発散
##スキップ接続
そこで接続を隣より前の出力に接続し、より前の情報を保持します。
引用:https://www.slideshare.net/naotomoriyama/dilated-rnn
##接続の削除
接続の削除は短いリンクを削除し、パラメータを削って学習速度を上げた手法。
主に隣接するリンクを削除します。
##LSTM
情報を保持できない問題を忘却ゲート、入出力ゲート、メモリを搭載し、解決した手法。
それぞれ以下の役割を持っています。
ここE検定にとても出るらしいです。
##GRU
メモリセルをなくして忘却ゲートと入力ゲートを合体させたモデル。
##勾配クリッピング
LSTMは勾配消失問題に対応できましたが、爆発問題には対応できませんでした。そこで勾配に対して一定の制約値を以内に収まるよう調節し、勾配爆発に対応しました。
これを勾配クリッピングといいます。
#深層回帰結合型ニューラルネットワーク
引用:https://www.slideshare.net/hironokawashima/deeplearning-10
#Encorder-DecorderとSeq2Seq
入力系列と出力系列で別のRNNを構築する手法。
Encorder:入力を中間表現に変換
Decorder:中間表現から出力に変換
Seq2Seqは入力系列と出力系列が可変長でもよい手法です。
#Attention
時間方向にも重みを用意し、情報の取捨選択をやりやすくした手法です、これにより過去の情報も参照できるようになります。
参考文献
https://qiita.com/20731057hh/items/2427c237fd2871202ea0