再帰型ニューラルネットワーク(RNN)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfras...
-戻る([[ニューラルネットワーク]]、[[言語処理(AI)]])
--一般的なフツーのニューラルネットワーク
---[[順伝播型ニューラルネットワーク(FNN)>ニューラルネッ...
---[[ディープニューラルネットワーク(DNN)>ニューラルネッ...
---[[畳み込みニューラルネットワーク(CNN)]]
--再帰型ニューラルネットワーク(RNN)
---[[長短期記憶ニューラルネットワーク(LSTM)]]
---[[RNN Encoder-Decoder(Sequence-to-Sequence)]]
--[[生成モデル>機械学習の理論#p3f4e303]]系の[[ニューラル...
---[[自己符号化器(AE:オートエンコーダ)]]
---[[テキスト生成系(Transformer系)]]
---[[敵対的生成ネットワーク(GAN)]]
*目次 [#ha203f82]
#contents
*概要 [#z103dfa9]
(Recurrent Neural Network: RNN)~
≠ Recursive Neural Network(木構造を処理するネットワーク)
-[[再帰構造>#j7d0a856]]を持ち、[[2つの表記法>#dd0c8bfa]]...
-[[1対多、多対1、多対多のトポロジー>#vca3fbb0]]毎に用途...
-以下の発展形に繋がる。
--[[長短期記憶ニューラルネットワーク(LSTM)]]
--[[RNN Encoder-Decoder(Sequence-to-Sequence)]]
**特徴 [#e3900069]
-記憶があり系列データの可変長入力が可能な点が最大の特徴
-中間層に再帰構造(再帰セル)を追加したニューラルネットワ...
-特に自然言語や音声データの時間的構造を学習する。
--時間順序を持つ可変長の系列データ入力を扱える。
--過去の系列を記憶した上で将来の予測ができる。
---一時刻前の中間層の出力を自らの入力に戻す。
---情報を一時的に記憶して振る舞いを動的に変化させる。
-長期に渡る特徴の学習は苦手。
--勾配消失・爆発の問題(の回避方法、[[BPTT法>#x324e38d]]...
--入力重み衝突、出力重み衝突(重み更新時、時系列を考慮で...
---入力重み衝突:入力が重要なら重みを大きくするが、時系列...
---出力重み衝突:出力(再帰の入力)が重要なら重みを大きく...
**構造 [#be6b1a57]
***再帰構造 [#j7d0a856]
-入力層 → 隠れ層
-隠れ層(追加可能)
--隠れ層 → 隠れ層(再帰)
--オプション:(隠れ層 → 隠れ層(再帰))
--オプション:(隠れ層 → 隠れ層(全結合))
-隠れ層 → 出力層
***表記方法 [#dd0c8bfa]
-表記方法には2つのパターンが有る。
--時間軸で展開していない。
--時間軸で展開している(最大で入力する系列データ分展開)。
-書き方(上下左右)~
一般的には...
--上:出力
--下:入力
--左:展開(時系列の前
--右:展開(時系列の後
>上下が逆のケースもある。
|#ref(mlst_1403.png,left,nowrap,mlst_1403,30%)|
***トポロジー [#vca3fbb0]
-多対1(Seq2Vec)
--系列 → 符号化
--系列の意味を符号化する(Encoder単体)。
--例:記事のトピック分類や時系列データ予測
-1対多(Vec2Seq)
--符号 → 系列
--符号の意味を系列化する(Decoder単体)。
--入力が画像の場合ある意味、[[Encoder-Decoder>RNN Encoder...
--例:画像のキャプション(見出し説明文)生成
-多対多([[Seq2Seq>RNN Encoder-Decoder(Sequence-to-Seque...
--系列 → 系列
---入力系列と出力系列が対応している場合は1つのRNN
---入力系列と出力系列が対応していない場合は[[Encoder-Deco...
--例:文を入力すると翻訳文が返る。
**RNNでできること [#n7a4f037]
[[系列データ(順序関係に重要な意味のあるデータ)>#z98a730...
***[[言語処理]] [#z44d533f]
-文章分類
-文章生成
-機械翻訳
***[[音声処理]] [#s07dc710]
-音声認識
***画像処理 [#j2ab51d7]
-[[動画>画像処理とコンピュータビジョン]]
***[[時系列予測>データマイニング(DM)- Python - RNN#cb84...
-株価変動
-購買履歴
-時系列異常検出
***その他 [#p849ed33]
-DNA配列
**系列データ [#z98a730c]
***時系列データの変動 [#y11573fa]
-長期変動(トレンド)
--通り長期に渡る全体的な上がり下がりの変動
--毎日(週/月/年)の、より長い期間で同じ傾向が見れられる。
-周期変動(季節性)
--一定期間ごとに繰り返される周期的な上下変動
--年単位や月単位、週単位の周期等が考えられる。
-不規則変動(残差)
--長期変動、周期変動を除去したあとに残った傾向
--ランダムに発生するであろうノイズ
***説明系列と目的系列、教師データ化 [#pafaec18]
-目的系列は1つの系列から成る。
-説明系列は複数の系列から成るケースがある。
-目的系列を教師データに変換するには~
元データからxタイムステップずらす。
--1ステップ先を予想する場合、x=1
--3ステップ先を予想する場合、x=3
-説明系列と目的系列は1つの同じ系列であるケースがあり、こ...
目的系列は説明系列をxタイムステップずらして教師データを...
***時系列データのデータ分割 [#af105024]
-時系列を維持して訓練・テストのデータ分割を行う。
-ランダムとかシャッフルをして取り出さない
*詳細 [#uc5ee5c5]
**順伝播 [#a889091d]
***概要 [#ba42aaf8]
-Wh、Wx、bの変数の再帰的な学習が必要(xt, ht-1が入力、ht...
--h0=tanh(x0Wx+h-1Wh+b)
--h1=tanh(x1Wx+h0Wh+b)
--...
--hn=tanh(xnWx+hn-1Wh+b)
-重みは、WhとWxで別々に存在する。
-出力のhtは再帰の入力になる。そのまま順伝播する場合は、ht...
-なお、h0は0だが、[[RNN Encoder Decoder>#ye7bfc6b]]のDeco...
***ちなみに、 [#abeadeee]
-x, hはベクトルで、例えば言語系であれば、単語のベクトル表...
-再帰セル以外は[[DNN>ニューラルネットワーク#ge448516]]と...
--例えばDNNの全結合層や、別のRNNの再帰の層を積み重ねる事...
--重ねない場合は、[[出力層(活性化関数+損失関数)>#z6651...
***出力層は... [#z6651c85]
-時系列だと回帰で恒等関数
-言語系だと分類問題なのでSoftmax関数
-損失関数も問題に合わせたものを選択する。
**逆伝播 [#x324e38d]
-学習で重みは誤差逆伝播法で更新されるが、~
全体を見ると以下の2つのパスがあるよね?
--[[DNN部分を遡るパス>深層学習の誤差逆伝播法]]
--[[RNN部分を遡るパス>#hb634528]]
-って、例えば言語系でコレで何を学習できんのよ?~
...と考えるがノード数が多いんだろうね?と~
([[何ノードあるのだろう?>言語処理(AI)#j3b25298]])。
|#ref(rnn_dnn1.png,left,nowrap,rnn_dnn1,30%)|#ref(rnn_dnn...
|>|https://rikeiminimalist.blog.jp/archives/7095932.html|
***BPTT法 [#hb634528]
-Backpropagation Through Time: 通時的誤差逆伝播法
-DNNと同様に[[誤差逆伝播法>深層学習の誤差逆伝播法]]による...
--二乗誤差関数(回帰)、クロスエントロピー誤差(分類)
--出力層から入力層へ遡る。再帰層は時間方向にも遡る。
-ただし、以下の再帰層の部分がDNNの[[誤差逆伝播法>深層学習...
--出力層から逆伝播した、それぞれの勾配の平均値を全体の勾...
(ただし、これって、系列 → 系列の場合の話だよね?という気...
--再帰層を遡るには、
---重みが2つあるので、...hn=tanh(xnWx+hn-1Wh+b)の微分を...
---再帰層は前再帰の勾配を算出して[[連鎖律>DS:数学的基礎 ...
-学習における問題と対策
--系列が長くなると問題が起きる(→ [[Truncated BPTT法>#m51...
---全部遡って勾配を算出するので処理時間が長くなる。
---連鎖率で掛け算を繰り返すので[[勾配消失問題>ニューラル...
--遠く離れた依存性を学習しなくなりRNNの利点を生かせなくな...
***Truncated BPTT法 [#m512f3ef]
-サンプル毎ではなく分割されたタイムステップ(再帰回数)の~
ブロック毎に[[BPTT法>#hb634528]]で重みを更新してから、次...
-[[BPTT法>#hb634528]]との違い
--逆伝播は分断されている。
--[[順伝播>#a889091d]]は分断されておらず前ブロックの記憶...
---[[BPTT法>#hb634528]]も全体を通して記憶を引継いでいる。
---[[Truncated BPTT法>#m512f3ef]]では学習単位でh0が0でな...
--ミニバッチの入れ方が異なる。
---[[BPTT法>#hb634528]]でも[[Truncated BPTT法>#m512f3ef]]...
---[[Truncated BPTT法>#m512f3ef]]では、サンプルをタイムス...
・行がバッチサイズのサンプル数、列がタイムステップ数の場合~
・n番目のミニバッチのx行目とのn+1番目のミニバッチのx...
***RTRL法 [#q5760441]
というものもあるらしい。
**RNNの原型・発展形 [#c141d604]
***[[RNN LM の Simple RNN>言語処理(AI)#j3b25298]] [#nfc...
-順伝播~
A、Bはパラメタ。
gt = xt(+)ht-1 ※ ベクトルの直和はベクトルの連結
ht = tanh(A(gt))
yt = Softmax(B(ht))
-[[逆伝播はBPTT法>#hb634528]]を使っていない。
***[[RNN Encoder Decoder>RNN Encoder-Decoder(Sequence-to...
[[Enc-Dec、Seq2Seq>RNN Encoder-Decoder(Sequence-to-Seque...
-入力の順序と出力の順序や長さが対応していない機械翻訳や質...
-RNN Encoderによってエンコードされた情報(≒[[LSTM>長短期...
***[[Bidirectional RNN>長短期記憶ニューラルネットワーク(...
(バイディレクショナル リカレントネットワーク)
-前方向のRNN層に加え、逆方向のRNN層も追加。
-過去だけでなく未来の情報も利用し効果的に予測。
*参考 [#tc8c34c6]
-コンテンツへのリンク - OSSコンソーシアム~
https://www.osscons.jp/joho108j0-537
--深層学習についてのレポート(RNN編)~
https://1drv.ms/p/s!Amfs5caPP9r5jzVgO9xfbO2sbvkF
--機械学習・深層学習についてのNotebook~
https://github.com/OpenTouryoProject/DxCommon/tree/master...
-[[ゼロから作るDeep Learning 2 自然言語処理編>言語処理(A...
**YouTube [#gdc35d56]
***[[某处生活_LiveSomewhere>深層学習(deep learning)#sf4...
-RNN入門
--PART1:概要・構造・特徴|記憶+可変長入力|時系列データ...
https://www.youtube.com/watch?v=zrSBFri9sdw
--PART2:レイヤ・誤差計算・BPTT~
https://www.youtube.com/watch?v=DWectS03wg8
--PART3:Truncated BPTT・ミニバッチの入れ方~
https://www.youtube.com/watch?v=WIZKxSl3Pq4
***AIcia Solid Project [#u8f2a523]
-[[深層学習(deep learning)>深層学習(deep learning)#z5...
-[[言語処理(AI)>言語処理(AI)#x1ea3efe]]のカットから
終了行:
「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfras...
-戻る([[ニューラルネットワーク]]、[[言語処理(AI)]])
--一般的なフツーのニューラルネットワーク
---[[順伝播型ニューラルネットワーク(FNN)>ニューラルネッ...
---[[ディープニューラルネットワーク(DNN)>ニューラルネッ...
---[[畳み込みニューラルネットワーク(CNN)]]
--再帰型ニューラルネットワーク(RNN)
---[[長短期記憶ニューラルネットワーク(LSTM)]]
---[[RNN Encoder-Decoder(Sequence-to-Sequence)]]
--[[生成モデル>機械学習の理論#p3f4e303]]系の[[ニューラル...
---[[自己符号化器(AE:オートエンコーダ)]]
---[[テキスト生成系(Transformer系)]]
---[[敵対的生成ネットワーク(GAN)]]
*目次 [#ha203f82]
#contents
*概要 [#z103dfa9]
(Recurrent Neural Network: RNN)~
≠ Recursive Neural Network(木構造を処理するネットワーク)
-[[再帰構造>#j7d0a856]]を持ち、[[2つの表記法>#dd0c8bfa]]...
-[[1対多、多対1、多対多のトポロジー>#vca3fbb0]]毎に用途...
-以下の発展形に繋がる。
--[[長短期記憶ニューラルネットワーク(LSTM)]]
--[[RNN Encoder-Decoder(Sequence-to-Sequence)]]
**特徴 [#e3900069]
-記憶があり系列データの可変長入力が可能な点が最大の特徴
-中間層に再帰構造(再帰セル)を追加したニューラルネットワ...
-特に自然言語や音声データの時間的構造を学習する。
--時間順序を持つ可変長の系列データ入力を扱える。
--過去の系列を記憶した上で将来の予測ができる。
---一時刻前の中間層の出力を自らの入力に戻す。
---情報を一時的に記憶して振る舞いを動的に変化させる。
-長期に渡る特徴の学習は苦手。
--勾配消失・爆発の問題(の回避方法、[[BPTT法>#x324e38d]]...
--入力重み衝突、出力重み衝突(重み更新時、時系列を考慮で...
---入力重み衝突:入力が重要なら重みを大きくするが、時系列...
---出力重み衝突:出力(再帰の入力)が重要なら重みを大きく...
**構造 [#be6b1a57]
***再帰構造 [#j7d0a856]
-入力層 → 隠れ層
-隠れ層(追加可能)
--隠れ層 → 隠れ層(再帰)
--オプション:(隠れ層 → 隠れ層(再帰))
--オプション:(隠れ層 → 隠れ層(全結合))
-隠れ層 → 出力層
***表記方法 [#dd0c8bfa]
-表記方法には2つのパターンが有る。
--時間軸で展開していない。
--時間軸で展開している(最大で入力する系列データ分展開)。
-書き方(上下左右)~
一般的には...
--上:出力
--下:入力
--左:展開(時系列の前
--右:展開(時系列の後
>上下が逆のケースもある。
|#ref(mlst_1403.png,left,nowrap,mlst_1403,30%)|
***トポロジー [#vca3fbb0]
-多対1(Seq2Vec)
--系列 → 符号化
--系列の意味を符号化する(Encoder単体)。
--例:記事のトピック分類や時系列データ予測
-1対多(Vec2Seq)
--符号 → 系列
--符号の意味を系列化する(Decoder単体)。
--入力が画像の場合ある意味、[[Encoder-Decoder>RNN Encoder...
--例:画像のキャプション(見出し説明文)生成
-多対多([[Seq2Seq>RNN Encoder-Decoder(Sequence-to-Seque...
--系列 → 系列
---入力系列と出力系列が対応している場合は1つのRNN
---入力系列と出力系列が対応していない場合は[[Encoder-Deco...
--例:文を入力すると翻訳文が返る。
**RNNでできること [#n7a4f037]
[[系列データ(順序関係に重要な意味のあるデータ)>#z98a730...
***[[言語処理]] [#z44d533f]
-文章分類
-文章生成
-機械翻訳
***[[音声処理]] [#s07dc710]
-音声認識
***画像処理 [#j2ab51d7]
-[[動画>画像処理とコンピュータビジョン]]
***[[時系列予測>データマイニング(DM)- Python - RNN#cb84...
-株価変動
-購買履歴
-時系列異常検出
***その他 [#p849ed33]
-DNA配列
**系列データ [#z98a730c]
***時系列データの変動 [#y11573fa]
-長期変動(トレンド)
--通り長期に渡る全体的な上がり下がりの変動
--毎日(週/月/年)の、より長い期間で同じ傾向が見れられる。
-周期変動(季節性)
--一定期間ごとに繰り返される周期的な上下変動
--年単位や月単位、週単位の周期等が考えられる。
-不規則変動(残差)
--長期変動、周期変動を除去したあとに残った傾向
--ランダムに発生するであろうノイズ
***説明系列と目的系列、教師データ化 [#pafaec18]
-目的系列は1つの系列から成る。
-説明系列は複数の系列から成るケースがある。
-目的系列を教師データに変換するには~
元データからxタイムステップずらす。
--1ステップ先を予想する場合、x=1
--3ステップ先を予想する場合、x=3
-説明系列と目的系列は1つの同じ系列であるケースがあり、こ...
目的系列は説明系列をxタイムステップずらして教師データを...
***時系列データのデータ分割 [#af105024]
-時系列を維持して訓練・テストのデータ分割を行う。
-ランダムとかシャッフルをして取り出さない
*詳細 [#uc5ee5c5]
**順伝播 [#a889091d]
***概要 [#ba42aaf8]
-Wh、Wx、bの変数の再帰的な学習が必要(xt, ht-1が入力、ht...
--h0=tanh(x0Wx+h-1Wh+b)
--h1=tanh(x1Wx+h0Wh+b)
--...
--hn=tanh(xnWx+hn-1Wh+b)
-重みは、WhとWxで別々に存在する。
-出力のhtは再帰の入力になる。そのまま順伝播する場合は、ht...
-なお、h0は0だが、[[RNN Encoder Decoder>#ye7bfc6b]]のDeco...
***ちなみに、 [#abeadeee]
-x, hはベクトルで、例えば言語系であれば、単語のベクトル表...
-再帰セル以外は[[DNN>ニューラルネットワーク#ge448516]]と...
--例えばDNNの全結合層や、別のRNNの再帰の層を積み重ねる事...
--重ねない場合は、[[出力層(活性化関数+損失関数)>#z6651...
***出力層は... [#z6651c85]
-時系列だと回帰で恒等関数
-言語系だと分類問題なのでSoftmax関数
-損失関数も問題に合わせたものを選択する。
**逆伝播 [#x324e38d]
-学習で重みは誤差逆伝播法で更新されるが、~
全体を見ると以下の2つのパスがあるよね?
--[[DNN部分を遡るパス>深層学習の誤差逆伝播法]]
--[[RNN部分を遡るパス>#hb634528]]
-って、例えば言語系でコレで何を学習できんのよ?~
...と考えるがノード数が多いんだろうね?と~
([[何ノードあるのだろう?>言語処理(AI)#j3b25298]])。
|#ref(rnn_dnn1.png,left,nowrap,rnn_dnn1,30%)|#ref(rnn_dnn...
|>|https://rikeiminimalist.blog.jp/archives/7095932.html|
***BPTT法 [#hb634528]
-Backpropagation Through Time: 通時的誤差逆伝播法
-DNNと同様に[[誤差逆伝播法>深層学習の誤差逆伝播法]]による...
--二乗誤差関数(回帰)、クロスエントロピー誤差(分類)
--出力層から入力層へ遡る。再帰層は時間方向にも遡る。
-ただし、以下の再帰層の部分がDNNの[[誤差逆伝播法>深層学習...
--出力層から逆伝播した、それぞれの勾配の平均値を全体の勾...
(ただし、これって、系列 → 系列の場合の話だよね?という気...
--再帰層を遡るには、
---重みが2つあるので、...hn=tanh(xnWx+hn-1Wh+b)の微分を...
---再帰層は前再帰の勾配を算出して[[連鎖律>DS:数学的基礎 ...
-学習における問題と対策
--系列が長くなると問題が起きる(→ [[Truncated BPTT法>#m51...
---全部遡って勾配を算出するので処理時間が長くなる。
---連鎖率で掛け算を繰り返すので[[勾配消失問題>ニューラル...
--遠く離れた依存性を学習しなくなりRNNの利点を生かせなくな...
***Truncated BPTT法 [#m512f3ef]
-サンプル毎ではなく分割されたタイムステップ(再帰回数)の~
ブロック毎に[[BPTT法>#hb634528]]で重みを更新してから、次...
-[[BPTT法>#hb634528]]との違い
--逆伝播は分断されている。
--[[順伝播>#a889091d]]は分断されておらず前ブロックの記憶...
---[[BPTT法>#hb634528]]も全体を通して記憶を引継いでいる。
---[[Truncated BPTT法>#m512f3ef]]では学習単位でh0が0でな...
--ミニバッチの入れ方が異なる。
---[[BPTT法>#hb634528]]でも[[Truncated BPTT法>#m512f3ef]]...
---[[Truncated BPTT法>#m512f3ef]]では、サンプルをタイムス...
・行がバッチサイズのサンプル数、列がタイムステップ数の場合~
・n番目のミニバッチのx行目とのn+1番目のミニバッチのx...
***RTRL法 [#q5760441]
というものもあるらしい。
**RNNの原型・発展形 [#c141d604]
***[[RNN LM の Simple RNN>言語処理(AI)#j3b25298]] [#nfc...
-順伝播~
A、Bはパラメタ。
gt = xt(+)ht-1 ※ ベクトルの直和はベクトルの連結
ht = tanh(A(gt))
yt = Softmax(B(ht))
-[[逆伝播はBPTT法>#hb634528]]を使っていない。
***[[RNN Encoder Decoder>RNN Encoder-Decoder(Sequence-to...
[[Enc-Dec、Seq2Seq>RNN Encoder-Decoder(Sequence-to-Seque...
-入力の順序と出力の順序や長さが対応していない機械翻訳や質...
-RNN Encoderによってエンコードされた情報(≒[[LSTM>長短期...
***[[Bidirectional RNN>長短期記憶ニューラルネットワーク(...
(バイディレクショナル リカレントネットワーク)
-前方向のRNN層に加え、逆方向のRNN層も追加。
-過去だけでなく未来の情報も利用し効果的に予測。
*参考 [#tc8c34c6]
-コンテンツへのリンク - OSSコンソーシアム~
https://www.osscons.jp/joho108j0-537
--深層学習についてのレポート(RNN編)~
https://1drv.ms/p/s!Amfs5caPP9r5jzVgO9xfbO2sbvkF
--機械学習・深層学習についてのNotebook~
https://github.com/OpenTouryoProject/DxCommon/tree/master...
-[[ゼロから作るDeep Learning 2 自然言語処理編>言語処理(A...
**YouTube [#gdc35d56]
***[[某处生活_LiveSomewhere>深層学習(deep learning)#sf4...
-RNN入門
--PART1:概要・構造・特徴|記憶+可変長入力|時系列データ...
https://www.youtube.com/watch?v=zrSBFri9sdw
--PART2:レイヤ・誤差計算・BPTT~
https://www.youtube.com/watch?v=DWectS03wg8
--PART3:Truncated BPTT・ミニバッチの入れ方~
https://www.youtube.com/watch?v=WIZKxSl3Pq4
***AIcia Solid Project [#u8f2a523]
-[[深層学習(deep learning)>深層学習(deep learning)#z5...
-[[言語処理(AI)>言語処理(AI)#x1ea3efe]]のカットから
ページ名: