本文へ移動

ITパスポート試験

りかれんと にゅーらる ねっとわーく

リカレントニューラルネットワーク

RNN

Recurrent Neural Network

リカレントニューラルネットワーク(RNN)は、文章の単語の並びや時刻ごとの測定値のように順序を持つデータ(系列データ)を扱うためのニューラルネットワークです。各時刻の入力と、1つ前の時刻から引き継いだ隠れ状態とから、その時刻の隠れ状態を計算します。この計算にはすべての時刻で同じ重みを使うので、長さの違う系列にも同じモデルを当てはめられます。

詳しい説明

リカレントニューラルネットワークとは何か

リカレントニューラルネットワークは、順序を持つデータを処理するためのニューラルネットワークの一群です。英語の Recurrent Neural Network の頭文字をとって RNN と略します。recurrent は「繰り返し現れる」という意味で、日本語では再帰型ニューラルネットワークとも呼びます。

ここでいう順序を持つデータとは、値が1列に並び、並び順に意味があるデータのことで、系列データと呼びます。文章は単語が並んだ系列で、単語の順番を入れ替えると意味が変わります。1時間ごとの気温の記録も、時刻の順に値が並んだ系列です。

イアン・グッドフェロー(Ian Goodfellow)、ヨシュア・ベンジオ(Yoshua Bengio)、アーロン・クールヴィル(Aaron Courville)による教科書『Deep Learning』(2016年)の第10章は、RNNを系列データを処理するためのニューラルネットワークの一群と説明しています。同じ章は、畳み込みニューラルネットワークが画像のように格子状に並んだ値の処理に特化しているのと同じように、RNNは という値の並びの処理に特化したネットワークだと対比しています。 は 番目の時刻の入力、 は系列の長さです。さらに、ほとんどのRNNは長さの違う系列を処理できるとしています。

同じ重みを時刻ごとに使い回す理由

『Deep Learning』第10章は、ふつうの多層のネットワークからRNNへ進むために、モデルの異なる部分で同じパラメータを共有するという考え方を使うと書いています。パラメータとは、重みのように学習によって値が決まる数のことです。

同じ章は、次の2つの文を例に挙げています。

  • I went to Nepal in 2009
  • In 2009, I went to Nepal

どちらの文からも、語り手がネパールへ行った年として2009を取り出したいとします。2009は1つ目の文では6番目の単語、2つ目の文では2番目の単語です。固定の長さの文を処理する全結合のフィードフォワードネットワーク(入力から出力へ一方向に計算が進むネットワーク)は、入力の位置ごとに別々のパラメータを持ちます。そのため、同じ規則を文中の位置ごとに別々に学習しなければなりません。これに対してRNNは、いくつもの時刻にわたって同じ重みを共有します。

時刻ごとに別々のパラメータを持たせると、学習のときに現れなかった長さの系列には対応できません。同じ章は、この点がパラメータを共有する理由だと述べています。

状態を前の時刻から引き継ぐ再帰の式

『Deep Learning』第10章は、再帰の考え方をまず次の式で示しています。

は時刻 におけるシステムの状態、 は状態を1つ先へ進める関数、 は のパラメータです。時刻 の の定義が、時刻 の という同じものを参照しているので、この式は再帰的だと同章は説明しています。

この式には外からの入力がありません。同じ章は続けて、各時刻の入力 を加えた形を示し、状態を表す変数をネットワークの隠れ層の値 に書き換えます。

は隠れ状態と呼ばれ、時刻 までに読んだ入力の情報をまとめて持ちます。多くのRNNはこの式か、これに似た式で隠れ層の値を決めると同章は書いています。実際のRNNでは、ここに隠れ状態から予測を読み出す出力層などが加わります。

同じ章は、 が過去の入力の要約になるものの、その要約は一般に情報の一部を失うと述べています。長さがいくらでもありうる系列 が、決まった長さのベクトル に写されるためです。どの情報を残すかは、学習の目的によって変わります。

隠れ状態の更新を数値で追う

『Deep Learning』第10章は、代表的なRNNの隠れ状態の計算を次の2つの式で書いています。

は入力から隠れ層への重み、 は1つ前の時刻の隠れ層から今の時刻の隠れ層への重み、 はバイアスです。 は出力が と1の間に収まる活性化関数です。同章は、図がどの活性化関数を使うかを指定していないので、ここでは を仮定すると断ったうえでこの式を書いています。計算は最初の隠れ状態 を決めることから始まり、 から まで同じ式を繰り返します。

入力も隠れ状態も1つの数の場合で、実際に計算してみます。、、、 とします。どれも説明のために決めた架空の値です。入力の系列を とすると、次のようになります。

時刻 入力
11
20
30

時刻2と時刻3の入力は0ですが、隠れ状態は0になりません。時刻1で読んだ1という入力の影響が、 の項を通じて後の時刻まで残っているからです。

同じ3つの値を並べ替えた系列 を入れると、、、 になります。入力に含まれる値の組は同じでも、並び順が違うと最後の隠れ状態が と に分かれます。RNNの隠れ状態は、入力の順序を反映した値になります。

この例では、3つの時刻のすべてで同じ 、、 を使いました。これが前の節で見たパラメータの共有です。

ループを時間方向に広げて見る

RNNの図は、隠れ層から自分自身へ戻る矢印のあるループの形で描くことができます。『Deep Learning』第10章は、このループを時刻ごとに別々の節点として横に並べ直す操作を展開(unfolding)と呼んでいます。展開した図は、同じ部品が系列の長さの数だけ繰り返し並んだ形になり、図の大きさは系列の長さで決まります。

同じ章は、展開によって次の2つの利点が生まれると書いています。

1. 系列の長さに関係なく、学習するモデルの入力の大きさがいつも同じになる。モデルが、ある状態から次の状態への移り方として定められているためです。
2. すべての時刻で、同じパラメータを持つ同じ関数 を使える。

この2つによって、時刻ごとに別のモデルを学習する代わりに、すべての時刻とすべての系列の長さに共通する1つのモデル を学習できます。同章は、これにより学習データに現れなかった長さの系列にも一般化でき、パラメータを共有しない場合よりはるかに少ない学習例でモデルを推定できると述べています。

3つの代表的な設計パターン

『Deep Learning』第10章の10.2節は、RNNの重要な設計パターンの例として次の3つを挙げています。

パターン再帰の結合出力の出し方
1隠れ層から次の時刻の隠れ層へ各時刻で出力を出す
2出力から次の時刻の隠れ層へ、の結合だけ各時刻で出力を出す
3隠れ層から次の時刻の隠れ層へ系列全体を読んでから、1つの出力を出す

1つ目は、入力の系列を同じ長さの出力の系列に写す形です。同章は、前の節の2つの式に出力の式を加えた計算をこの形の例として示し、この形の図を章の大部分で繰り返し使う代表例としています。

2つ目は、隠れ層どうしの再帰の結合を持たず、ある時刻の出力だけが次の時刻の隠れ層へ戻る形です。

3つ目は、文章全体を読んでから1つの判定を出すように、系列全体を1つの値にまとめる形です。

この3つは設計パターンの例であり、RNNの作り方がこの3つに限られるわけではありません。同じ章は、再帰を含むほとんどどんな関数もRNNとみなせると書いています。この分類は一般化した型であり、後で登場するエルマンネットワークやジョルダンネットワークのような具体的な構造をそのまま指すものではありません。たとえばパターン2は出力から隠れ層への結合だけを挙げていますが、実際に提案された構造(ジョルダンネットワークなど)は状態ユニット自身への再帰結合も同時に持つ場合があり、細部は一致しません。

起源について教科書が書いていること

『Deep Learning』第10章は、RNNを紹介する最初の文で、ラメルハートら(Rumelhart et al., 1986a)の文献を引用しています。この教科書自身がRNNを考え出したとは書いておらず、RNNという考え方の出典としてこの文献を挙げています。

このページは、ラメルハートらの原論文そのものは確認していません。原論文がRNNをどのように提案し、どう呼んでいたかは、教科書の引用を通じて分かる範囲を超えるので、ここでは断定しません。

長い系列での学習の難しさ

『Deep Learning』第10章の10.7節は、RNNで長い時間にまたがる依存関係を学習することの難しさを扱っています。同節によれば、基本的な問題は、多くの段階を通って伝わる勾配が、たいていは消失し、まれに爆発することです。勾配とは、重みを少し動かしたときに誤差がどれだけ変わるかを表す量で、学習はこの値を手がかりに重みを直します。勾配が消失すると遠い過去の入力に対する手がかりが小さくなり、爆発すると学習が大きく乱れます。

前の節の数値の例でも、時刻1の入力の影響は時刻2で約0.363、時刻3で約0.180と小さくなっていきました。これは順方向の値の例ですが、同じ重みを何度も掛け合わせる計算が繰り返されるという構造は共通しています。

同じ章の10.10節は、執筆時点で実用上最も効果的な系列モデルとして、ゲート付きRNNと呼ばれるものを挙げ、その中に長短期記憶(LSTM)とゲート付き回帰ユニット(GRU)にもとづくネットワークを含めています。どちらも、勾配が消失も爆発もしない経路を時間方向に作るという考え方にもとづくと同節は説明しています。

誤解しやすい点

RNNは時間の流れを扱うネットワークだと思われがちです。しかし『Deep Learning』第10章は、時刻を表す番号 が現実の時間の経過を指す必要はなく、系列の中の位置だけを指す場合もあると書いています。文章の単語の番号は、時間ではなく位置です。

隠れ状態が過去の入力をすべてそのまま覚えている、というのも誤解です。前に見たとおり、隠れ状態は決まった長さのベクトルなので、長さの制限の無い過去の系列を一般には情報を失いながら要約しています。

RNNの「再帰」は、同じ計算を時刻ごとに繰り返し、前の時刻の結果を次の時刻の計算に使うことを指します。展開した図で見ると、層が時刻の数だけ深く重なった1本の長い計算になっており、同じ章はこの構造について、とても深い計算グラフを通じてパラメータが共有されると表現しています。

試験で問われること

ITパスポート試験

  • 時系列データの処理に用いられることが問われます。
  • ループ構造を持ち過去の情報を保持する点が問われます。
  • 自然言語処理や翻訳での利用例が問われます。

最終更新日: 2026/09/23