本文へ移動

G検定(ジェネラリスト検定)

そうほうこうあーるえぬえぬ

双方向 RNN

Bi-RNN

Bidirectional RNN

双方向 RNN は、系列の先頭から時間の順に進む RNN と、系列の末尾から時間を遡る RNN の2本を組み合わせたリカレントニューラルネットワークです。各時刻の出力は、前向きの RNN が持つ過去側の要約と、後ろ向きの RNN が持つ未来側の要約の両方を使えます。ある時刻の予測が、その時刻より後の入力にも左右される音声認識や手書き文字認識のような課題のために考えられました。

詳しい説明

過去しか見ない RNN では足りない場面

RNN(リカレントニューラルネットワーク)は、系列の入力を1つずつ読み、読んだ内容を状態と呼ぶベクトルにまとめて次の時刻へ渡すネットワークです。イアン・グッドフェロー(Ian Goodfellow)、ヨシュア・ベンジオ(Yoshua Bengio)、アーロン・クールヴィル(Aaron Courville)による教科書『Deep Learning』(2016年)の第10章§10.3は、それまでの節で扱ったRNNがすべて「因果的(causal)」な構造だったと書いています。因果的とは、時刻 の状態が過去の入力 と現在の入力 の情報だけを持ち、 より後の入力を知らないという意味です。

ところが、時刻 の出力 が入力の系列全体にもとづくように予測したい課題が多くあります。教科書が挙げる例は音声認識です。いま聞こえている音をどの音素(意味を区別する最小の音の単位)と解釈するのが正しいかは、調音結合(co-articulation、前後の音につられて音の出方が変わる現象)のために、後に続く数個の音素に左右されることがあります。さらに、近くの語どうしの言語的なつながりのために、後に続く数個の語に左右されることもあります。音としてはどちらにも聞こえる2通りの解釈がある語なら、正しい方を決めるために未来側(と過去側)をかなり先まで見る必要が出てきます。教科書は、手書き文字認識や、系列を別の系列へ変換する多くの学習課題でも同じことが言えるとしています。

前向きの RNN と後ろ向きの RNN を組み合わせる

双方向 RNN は、この「未来側も見たい」という必要に応えるために考えられました。教科書の説明では、双方向 RNN は次の2本の RNN を組み合わせます。

  • 前向きの RNN: 系列の先頭から始めて、時間の順に進みます。時刻 の状態を と書きます。
  • 後ろ向きの RNN: 系列の末尾から始めて、時間を遡る向きに進みます。時刻 の状態を と書きます。

時刻 の出力 は、 と の両方を入力として受け取ります。教科書の図10.11の説明によれば、 は過去についての要約を出力に届け、 は未来についての要約を出力に届けます。

具体的に、長さ4の系列 の時刻 で考えます。前向きの RNN は と を読み終えた時点の状態 を持っています。後ろ向きの RNN は から読み始めて時刻2まで戻ってきた状態 を持っており、これが時刻2より後の と の要約を含みます。出力 はこの2つを受け取るので、系列の最初から最後までの情報を使えます。1本の因果的な RNN なら、時刻2の出力は と を知らないまま決まります。

なお、この節は2つの状態を出力の計算でどう合わせるか(たとえば2つのベクトルをつなげて1本にするのか)を式では示していません。ここで確かに言えるのは、出力が両方の状態を入力として受け取るという構造までです。

窓の幅を決めずに前後を見られる

教科書は、この構造によって出力 が過去と未来の両方に依存しながら、時刻 の周りの入力に最も敏感な表現を計算できると説明しています。しかも、 の周りに固定の大きさの窓を決める必要がありません。

比べる相手として教科書が挙げているのは、フィードフォワードネットワーク、畳み込みネットワーク、そして一定の長さだけ先読みする緩衝領域(look-ahead buffer)を持たせた通常の RNN です。これらで前後の文脈を使おうとすると、「前後いくつまで見るか」という窓の大きさをあらかじめ決めることになります。双方向 RNN では、どこまで遠くの情報を使うかを窓の大きさとして固定せず、2本の RNN の状態がそれぞれ過去側と未来側の要約を運びます。

系列の末尾が揃うまで出力が決まらない

後ろ向きの RNN は系列の末尾から始まります。この構造から、時刻 の を計算するには、系列の最後の入力まで手元に揃っている必要があります。そのため、入力が1つ届くたびにすぐその時刻の出力を返す、という使い方とは相性がよくありません。時刻1の出力でさえ、最後の入力を読み終えるまで確定しないからです。

逆に言えば、双方向 RNN が力を発揮するのは、系列全体を先に受け取ってから各時刻の出力を決めてよい場面です。教科書は、音声認識、手書き文字認識、生物情報学(bioinformatics)のように未来側を見る必要がある応用で、双方向 RNN が非常に大きな成功を収めてきたと述べています。これらの分野で具体的にどのような形で使われたかは、この節には書かれていません。

2次元の入力への広げ方

教科書は同じ考え方を画像のような2次元の入力にも広げられると述べています。上・下・左・右の4方向それぞれに進む RNN を4本用意すると、格子の各点 の出力 は、主にその点の近くの情報をとらえながら、RNN が遠くの情報を運ぶことを学習できれば、離れた位置の入力にも依存できます。

畳み込みネットワークと比べると、画像に当てる RNN は計算の負担が大きいのが普通だと教科書は書いています。その代わりに、同じ特徴マップの中で離れた位置にある特徴どうしの相互作用を扱えるという利点があります。

誰が考えたかについての出典の範囲

『Deep Learning』第10章§10.3は、双方向 RNN が上で述べた必要に応えるために考案されたとし、その出典としてシュスター(Schuster)とパリワル(Paliwal)による1997年の論文を挙げています。このページのこの記述は、教科書がそう紹介していることにもとづいています。シュスターとパリワルの論文そのものは今回取得できておらず、論文の中で彼らがどのような構成や式を示したかは確かめていません。このページで説明した2本の RNN の構成と記号 ・・ は、教科書の説明と図10.11にもとづくものです。

試験で問われること

G検定

  • 双方向 RNN は、系列の先頭から時間の順に進む前向きの RNN と、系列の末尾から時間を遡る後ろ向きの RNN の2本を組み合わせます。時刻 の出力は、前向きの状態 と後ろ向きの状態 の両方を受け取ります。
  • 1本の通常の RNN は因果的な構造で、時刻 の状態は までの入力の情報しか持ちません。双方向 RNN は後ろ向きの RNN を加えることで、 より後の入力の要約も出力に届けます。
  • 後ろ向きの RNN は系列の末尾から始まるため、出力を決めるには系列の最後の入力まで揃っている必要があります。そのため、入力が届くたびにその場で出力を返す使い方とは相性がよくありません。系列全体を先に受け取ってから各時刻の出力を決めてよい課題に向いています。
  • 前後の文脈を使うために固定の大きさの窓を決める必要がない点が、窓の幅をあらかじめ決めるフィードフォワードネットワークや畳み込みネットワークとの違いです。音声認識、手書き文字認識、生物情報学が、未来側を見る必要がある応用の例として『Deep Learning』に挙げられています。

最終更新日: 2026/09/23