-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_RNN
- 戻る(ニューラルネットワーク、言語処理(AI))
- 一般的なフツーのニューラルネットワーク
- 順伝播型ニューラルネットワーク(FNN)(ニューラルネットワークの該当節を参照)
- ディープニューラルネットワーク(DNN)(ニューラルネットワークの該当節を参照)
- 畳み込みニューラルネットワーク(CNN)
- 再帰型ニューラルネットワーク(RNN)
- 生成モデル(機械学習の理論の該当節を参照)系の
ニューラルネットワーク
- 一般的なフツーのニューラルネットワーク
(Recurrent Neural Network: RNN)
≠ Recursive Neural Network(木構造を処理するネットワーク)
-
1対多、多対1、多対多のトポロジー毎に用途が変わる。
-
以下の発展形に繋がる。
-
記憶があり系列データの可変長入力が可能な点が最大の特徴
-
中間層に再帰構造(再帰セル)を追加したニューラルネットワークの総称。
-
特に自然言語や音声データの時間的構造を学習する。
-
時間順序を持つ可変長の系列データ入力を扱える。
-
過去の系列を記憶した上で将来の予測ができる。
- 一時刻前の中間層の出力を自らの入力に戻す。
- 情報を一時的に記憶して振る舞いを動的に変化させる。
-
-
長期に渡る特徴の学習は苦手。
-
勾配消失・爆発の問題(の回避方法として、BPTT法が定着)
-
入力重み衝突、出力重み衝突(重み更新時、時系列を考慮できない)
- 入力重み衝突:入力が重要なら重みを大きくするが、時系列を考慮できない。
- 出力重み衝突:出力(再帰の入力)が重要なら重みを大きくするが、時系列を考慮できない。
-
-
入力層 → 隠れ層
-
隠れ層(追加可能)
- 隠れ層 → 隠れ層(再帰)
- オプション:(隠れ層 → 隠れ層(再帰))
- オプション:(隠れ層 → 隠れ層(全結合))
-
隠れ層 → 出力層
-
表記方法には2つのパターンが有る。
-
時間軸で展開していない。
-
時間軸で展開している(最大で入力する系列データ分展開)。
-
-
書き方(上下左右)
一般的には...- 上:出力
- 下:入力
- 左:展開(時系列の前)
- 右:展開(時系列の後)
上下が逆のケースもある。

-
多対1(Seq2Vec)
- 系列 → 符号化
- 系列の意味を符号化する(Encoder単体)。
- 例:記事のトピック分類や時系列データ予測
-
1対多(Vec2Seq)
- 符号 → 系列
- 符号の意味を系列化する(Decoder単体)。
- 入力が画像の場合ある意味、Encoder-Decoder
- 例:画像のキャプション(見出し説明文)生成
-
多対多(Seq2Seq)
-
系列 → 系列
- 入力系列と出力系列が対応している場合は1つのRNN
- 入力系列と出力系列が対応していない場合はEncoder-Decoder
-
例:文を入力すると翻訳文が返る。
-
- 文章分類
- 文章生成
- 機械翻訳
- 音声認識
- 動画(画像処理とコンピュータビジョン)
- 株価変動
- 購買履歴
- 時系列異常検出
- DNA配列
-
長期変動(トレンド)
- 長期に渡る全体的な上がり下がりの変動
- 毎日(週/月/年)の、より長い期間で同じ傾向が見られる。
-
周期変動(季節性)
- 一定期間ごとに繰り返される周期的な上下変動
- 年単位や月単位、週単位の周期等が考えられる。
-
不規則変動(残差)
- 長期変動、周期変動を除去したあとに残った傾向
- ランダムに発生するであろうノイズ
-
目的系列は1つの系列から成る。
-
説明系列は複数の系列から成るケースがある。
-
目的系列を教師データに変換するには
元データからxタイムステップずらす。- 1ステップ先を予想する場合、x=1
- 3ステップ先を予想する場合、x=3
-
説明系列と目的系列は1つの同じ系列であるケースがあり、この場合、
目的系列は説明系列をxタイムステップずらして教師データを作成する。
- 時系列を維持して訓練・テストのデータ分割を行う。
- ランダムとかシャッフルをして取り出さない
-
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 ≒ yt。
-
なお、h0は0だが、RNN Encoder DecoderのDecoderでは0ではないケースも。
-
x, hはベクトルで、例えば言語系であれば、単語のベクトル表現が入力される。
-
再帰セル以外はDNN(ニューラルネットワークの該当節を参照)と同じで、
なんらかの層を積み重ねる。- 例えばDNNの全結合層や、別のRNNの再帰の層を積み重ねる事ができる。
- 重ねない場合は、出力層(活性化関数+損失関数)を設ける。
- 時系列だと回帰で恒等関数
- 言語系だと分類問題なのでSoftmax関数
- 損失関数も問題に合わせたものを選択する。
-
学習で重みは誤差逆伝播法で更新されるが、
全体を見ると以下の2つのパスがあるよね? -
って、例えば言語系でコレで何を学習できんのよ?
...と考えるがノード数が多いんだろうね?と
(何ノードあるのだろう? 言語処理(AI)の該当節を参照)。
![]() |
![]() |
出典:https://rikeiminimalist.blog.jp/archives/7095932.html
-
Backpropagation Through Time: 通時的誤差逆伝播法
-
DNNと同様に誤差逆伝播法による学習ができる。
- 二乗誤差関数(回帰)、クロスエントロピー誤差(分類)
- 出力層から入力層へ遡る。再帰層は時間方向にも遡る。
-
ただし、以下の再帰層の部分がDNNの誤差逆伝播法と異なる。
-
出力層から逆伝播した、それぞれの勾配の平均値を全体の勾配として使用しパラメタ更新する。
(ただし、これって、系列 → 系列の場合の話だよね?という気がするが?) -
再帰層を遡るには、
- 重みが2つあるので、...hn=tanh(xnWx+hn-1Wh+b)の微分を求めると、...
- 再帰層は前再帰の勾配を算出して連鎖律に加える必要があり、
全部遡って勾配を算出する必要がある。
-
-
学習における問題と対策
-
系列が長くなると問題が起きる(→ Truncated BPTT法)
- 全部遡って勾配を算出するので処理時間が長くなる。
- 連鎖律で掛け算を繰り返すので
勾配消失問題(ニューラルネットワークの該当節を参照)が起こり易く非効率。
-
遠く離れた依存性を学習しなくなりRNNの利点を生かせなくなる
(→ LSTM)。
-
-
サンプル毎ではなく分割されたタイムステップ(再帰回数)の
ブロック毎にBPTT法で重みを更新してから、次のブロックの処理に移る。 -
BPTT法との違い
-
逆伝播は分断されている。
-
順伝播は分断されておらず前ブロックの記憶を次ブロックに引継いでいる。
- BPTT法も全体を通して記憶を引継いでいる。
- Truncated BPTT法では学習単位でh0が0でない。
-
ミニバッチの入れ方が異なる。
-
BPTT法でもTruncated BPTT法でも、
どちらでもバッチ化はサンプル数を増やして実現。 -
Truncated BPTT法では、
サンプルをタイムステップで分割するが連続性を保つ必要がある。
・行がバッチサイズのサンプル数、列がタイムステップ数の場合
・n番目のミニバッチのx行目と、n+1番目のミニバッチのx行目は
連続したサンプルになるように分割する。
-
BPTT法でもTruncated BPTT法でも、
-
というものもあるらしい。
RNN LM については言語処理(AI)の該当節を参照。
- 順伝播
A、Bはパラメタ。
gt = xt(+)ht-1 ※ ベクトルの直和はベクトルの連結
ht = tanh(A(gt))
yt = Softmax(B(ht))
- 逆伝播はBPTT法を使っていない。
RNN Encoder-Decoder(Sequence-to-Sequence)を参照。
Enc-Dec、Seq2Seqモデルとも呼ばれるトポロジー
-
入力の順序と出力の順序や長さが対応していない機械翻訳や質問応答タスクで使用されることが多い。
-
RNN Encoderによってエンコードされた情報(≒LSTMのコンテキスト)を
RNN Decoderの始めの内部状態として入力。
Bidirectional RNN については長短期記憶ニューラルネットワーク(LSTM)の該当節を参照。
(バイディレクショナル リカレントネットワーク)
- 前方向のRNN層に加え、逆方向のRNN層も追加。
- 過去だけでなく未来の情報も利用し効果的に予測。
-
コンテンツへのリンク - OSSコンソーシアム
https://www.osscons.jp/joho108j0-537-
深層学習についてのレポート(RNN編)
https://1drv.ms/p/s!Amfs5caPP9r5jzVgO9xfbO2sbvkF -
機械学習・深層学習についてのNotebook
https://github.com/OpenTouryoProject/DxCommon/tree/master/Notebook/path
-
-
ゼロから作るDeep Learning 2 自然言語処理編
(言語処理(AI)の該当節を参照)
深層学習(deep learning)の該当節を参照。
-
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
-
- 深層学習(deep learning)のカットから
- 言語処理(AI)のカットから
移行メモ
逆伝播の節の2枚の図は、元の PukiWiki では2列の表のセル内に置かれ、 その下の行に出典 URL が横結合(
|>|)で入っていたため、 表の下に出典行として書き出した。「時系列データの変動」の「通り長期に渡る…」は誤字と判断し 「長期に渡る全体的な上がり下がりの変動」とした。 「見れられる」は「見られる」、「連鎖率」は「連鎖律」に正した。
「勾配消失・爆発の問題(の回避方法、BPTT法が定着」「時系列の前」「時系列の後」など、 閉じ括弧が欠けていた箇所を補った。
Tags: 移行, 人工知能, 深層学習, ニューラルネットワーク, RNN, 系列データ, BPTT
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。

