オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

【深層学習】リカレントニューラルネットワーク #アルゴリズム編

こんな方におすすめ

深層学習・ディープラーニングでも必要な「リカレントニューラルネットワーク (Recurrent Neural Network : RNN)」の基本的な内容について知りたい



この記事では、リカレントニューラルネットワーク (Recurrent Neural Network : RNN)の基礎概念のまとめを行う.

「これから、機械学習ディープラーニングの学習をしたいから、 その基本となるリカレントニューラルネットワーク (Recurrent Neural Network : RNN)の理解を深めたい」 という方に向けた記事.

キーワード・知ってると理解がしやすい

Index

リカレントニューラルネットワーク (Recurrent Neural Network : RNN)とは

リカレントニューラルネットワーク (Recurrent Neural Network : RNN)とは、DNNのアーキテクチャの一つ.

通常のDNNのアーキテクチャでは、フィードフォワードと呼ばれる、流れが一方向のネットワークが使用される.

DNNのネットワークアーキテクチャ



RNNの特徴としては、リカレント(再帰的)の名称の通り、処理の流れが循環するようなアーキテクチャ.

歴史

1986年のデビッド・ラメルハートの研究で発案された模様.

レイヤ視点でのRNN その1

レイヤ視点で RNN を確認する.

まずは、単層をみてみる.

レイヤ視点のRNN



通常のネットワーク(フィードフォワードネット)では、入力  x に対して出力は  h の1つのみ.

しかし、リカレントニューラルネットワークは出力を再度、入力として加え、今までの情報を記憶しながら学習する.

さらに、レイヤの構造を詳細に見る.

ループ展開するとこのようになる.

ループ展開したRNN



このようにループを展開することで、右方向に伸びる長いニューラルネットワークと理解することができる.

入力にある  x_t は時刻  t における入力を表現している.

ノード視点でのRNN

では、RNN はレイヤ内で、どのような計算をしているのか.

上の図からわかるように、入力は  h_t-1 x_t で、出力は  h_t.

計算式は以下のようになる.

 \displaystyle{
h_{t}\ =\ \tanh(h_{t-1}W_{h}\ +\ x_{t}W_{x}\ +\ b)}



  • 入力

    • x_t : 時刻t の入力
    • h_{t-1} : 時刻t-1 の中間出力

  • 出力

    • h_t : 時刻t の中間出力

  • パラメータ

    • W_{h} : 前時刻の中間出力h_t-1を次時刻の中間出力h_tに変換する重みパラメータ
    • W_{h} : 入力xを中間出力hに変換する重みパラメータ
    • b : バイアスパラメータ

以上の計算をノード視点で考える.

ノード視点のRNN



ノード視点で考えることで以下の理解も深まる.

レイヤ視点でのRNN その2

RNN レイヤもひとつのレイヤにすぎないので、他のレイヤと組み合わせてネットワーク全体を構築する.

word2vec のような「言語モデル」を、例としてネットワーク全体を構築する.

構成されているレイヤは以下.

  • Embedding レイヤ
  • RNN レイヤ
  • 全結合層(Affine レイヤ)
  • Softmax レイヤ

レイヤ視点でのRNN その2



上図のように、複数のレイヤと一緒にネットワーク全体のアーキテクチャを構築する.

RNNの利点

このようなアーキテクチャにする利点は、時系列データ / 自然言語データの学習に効果的.

時系列データや自然言語データのタスクでは、ある時刻の変数を前時刻の情報から推測する.

しかし、通常の DNN のネットワークアーキテクチャだと、その系列情報までうまく学習することができない.

RNN のように過去の出力も入力の一部として取り込むことで、結果的に系列情報を学習するような仕組みをつくることができる.

まとめ

実装編

参考

書籍

Web サイト