Skip to content

DNET_RNN

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

再帰型ニューラルネットワーク(RNN)

概要

(Recurrent Neural Network: RNN)
≠ Recursive Neural Network(木構造を処理するネットワーク)

特徴

  • 記憶があり系列データの可変長入力が可能な点が最大の特徴

  • 中間層に再帰構造(再帰セル)を追加したニューラルネットワークの総称。

  • 特に自然言語や音声データの時間的構造を学習する。

    • 時間順序を持つ可変長の系列データ入力を扱える。

    • 過去の系列を記憶した上で将来の予測ができる。

      • 一時刻前の中間層の出力を自らの入力に戻す。
      • 情報を一時的に記憶して振る舞いを動的に変化させる。
  • 長期に渡る特徴の学習は苦手。

    • 勾配消失・爆発の問題(の回避方法として、BPTT法が定着)

    • 入力重み衝突、出力重み衝突(重み更新時、時系列を考慮できない)

      • 入力重み衝突:入力が重要なら重みを大きくするが、時系列を考慮できない。
      • 出力重み衝突:出力(再帰の入力)が重要なら重みを大きくするが、時系列を考慮できない。

構造

再帰構造

  • 入力層 → 隠れ層

  • 隠れ層(追加可能)

    • 隠れ層 → 隠れ層(再帰)
    • オプション:(隠れ層 → 隠れ層(再帰))
    • オプション:(隠れ層 → 隠れ層(全結合))
  • 隠れ層 → 出力層

表記方法

  • 表記方法には2つのパターンが有る。

    • 時間軸で展開していない。

    • 時間軸で展開している(最大で入力する系列データ分展開)。

  • 書き方(上下左右)
    一般的には...

    • 上:出力
    • 下:入力
    • 左:展開(時系列の前)
    • 右:展開(時系列の後)

上下が逆のケースもある。

mlst_1403

トポロジー

  • 多対1(Seq2Vec)

    • 系列 → 符号化
    • 系列の意味を符号化する(Encoder単体)。
    • 例:記事のトピック分類や時系列データ予測
  • 1対多(Vec2Seq)

    • 符号 → 系列
    • 符号の意味を系列化する(Decoder単体)。
    • 入力が画像の場合ある意味、Encoder-Decoder
    • 例:画像のキャプション(見出し説明文)生成
  • 多対多(Seq2Seq

    • 系列 → 系列

      • 入力系列と出力系列が対応している場合は1つのRNN
      • 入力系列と出力系列が対応していない場合はEncoder-Decoder
    • 例:文を入力すると翻訳文が返る。

RNNでできること

系列データ(順序関係に重要な意味のあるデータ)の解析

言語処理(RNN)

言語処理

  • 文章分類
  • 文章生成
  • 機械翻訳

音声処理(RNN)

音声処理

  • 音声認識

画像処理(RNN)

時系列予測

時系列予測

  • 株価変動
  • 購買履歴
  • 時系列異常検出

その他(RNNでできること)

  • 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(ニューラルネットワークの該当節を参照)と同じで、
    なんらかの層を積み重ねる。

出力層は...

  • 時系列だと回帰で恒等関数
  • 言語系だと分類問題なのでSoftmax関数
  • 損失関数も問題に合わせたものを選択する。

逆伝播

  • 学習で重みは誤差逆伝播法で更新されるが、
    全体を見ると以下の2つのパスがあるよね?

  • って、例えば言語系でコレで何を学習できんのよ?
    ...と考えるがノード数が多いんだろうね?と
    (何ノードあるのだろう? 言語処理(AI)の該当節を参照)。

rnn_dnn1 rnn_dnn2

出典:https://rikeiminimalist.blog.jp/archives/7095932.html

BPTT法

  • Backpropagation Through Time: 通時的誤差逆伝播法

  • DNNと同様に誤差逆伝播法による学習ができる。

    • 二乗誤差関数(回帰)、クロスエントロピー誤差(分類)
    • 出力層から入力層へ遡る。再帰層は時間方向にも遡る。
  • ただし、以下の再帰層の部分がDNNの誤差逆伝播法と異なる。

    • 出力層から逆伝播した、それぞれの勾配の平均値を全体の勾配として使用しパラメタ更新する。
      (ただし、これって、系列 → 系列の場合の話だよね?という気がするが?)

    • 再帰層を遡るには、

      • 重みが2つあるので、...hn=tanh(xnWx+hn-1Wh+b)の微分を求めると、...
      • 再帰層は前再帰の勾配を算出して連鎖律に加える必要があり、
        全部遡って勾配を算出する必要がある。
  • 学習における問題と対策

    • 系列が長くなると問題が起きる(→ Truncated BPTT法

      • 全部遡って勾配を算出するので処理時間が長くなる。
      • 連鎖律で掛け算を繰り返すので
        勾配消失問題(ニューラルネットワークの該当節を参照)が起こり易く非効率。
    • 遠く離れた依存性を学習しなくなりRNNの利点を生かせなくなる
      (→ LSTM)。

Truncated BPTT法

  • サンプル毎ではなく分割されたタイムステップ(再帰回数)の
    ブロック毎にBPTT法で重みを更新してから、次のブロックの処理に移る。

  • BPTT法との違い

    • 逆伝播は分断されている。

    • 順伝播は分断されておらず前ブロックの記憶を次ブロックに引継いでいる。

    • ミニバッチの入れ方が異なる。

      • BPTT法でもTruncated BPTT法でも、
        どちらでもバッチ化はサンプル数を増やして実現。
      • Truncated BPTT法では、
        サンプルをタイムステップで分割するが連続性を保つ必要がある。
        ・行がバッチサイズのサンプル数、列がタイムステップ数の場合
        ・n番目のミニバッチのx行目と、n+1番目のミニバッチのx行目は
         連続したサンプルになるように分割する。

RTRL法

というものもあるらしい。

RNNの原型・発展形

RNN LM の Simple RNN

RNN LM については言語処理(AI)の該当節を参照。

  • 順伝播
    A、Bはパラメタ。
gt = xt(+)ht-1 ※ ベクトルの直和はベクトルの連結
ht = tanh(A(gt))
yt = Softmax(B(ht))

RNN Encoder Decoder

RNN Encoder-Decoder(Sequence-to-Sequence)を参照。

Enc-Dec、Seq2Seqモデルとも呼ばれるトポロジー

  • 入力の順序と出力の順序や長さが対応していない機械翻訳や質問応答タスクで使用されることが多い。

  • RNN Encoderによってエンコードされた情報(≒LSTMのコンテキスト)を
    RNN Decoderの始めの内部状態として入力。

Bidirectional RNN

Bidirectional RNN については長短期記憶ニューラルネットワーク(LSTM)の該当節を参照。

(バイディレクショナル リカレントネットワーク)

  • 前方向のRNN層に加え、逆方向のRNN層も追加。
  • 過去だけでなく未来の情報も利用し効果的に予測。

参考

YouTube

某处生活_LiveSomewhere

深層学習(deep learning)の該当節を参照。

AIcia Solid Project

移行メモ

  • 逆伝播の節の2枚の図は、元の PukiWiki では2列の表のセル内に置かれ、 その下の行に出典 URL が横結合(|>|)で入っていたため、 表の下に出典行として書き出した。

  • 「時系列データの変動」の「通り長期に渡る…」は誤字と判断し 「長期に渡る全体的な上がり下がりの変動」とした。 「見れられる」は「見られる」、「連鎖率」は「連鎖律」に正した。

  • 「勾配消失・爆発の問題(の回避方法、BPTT法が定着」「時系列の前」「時系列の後」など、 閉じ括弧が欠けていた箇所を補った。


Tags: 移行, 人工知能, 深層学習, ニューラルネットワーク, RNN, 系列データ, BPTT

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally