1. 定義と概要
RNNエンコーダ・デコーダとは、系列データ(文章や音声のように、並び順そのものに意味があるデータ)を順番に読み込みながら、隠れ状態(それまでの入力を反映した内部の値)を更新していくRNNを、入力側と出力側に2つ組み合わせた構造です。
入力側のRNNはエンコーダ(入力データを読み込んで、ひとまとまりの情報に変換する側の部品)と呼ばれ、入力系列を先頭から1つずつ読み込みながら隠れ状態を更新し続けます。最終的な隠れ状態は、1つの固定長ベクトル(元のデータの長さに関わらず、常に同じ長さになるように変換した数値の並び)としてまとめられます。この固定長ベクトルは、文脈ベクトルやコンテキストベクトルとも呼ばれます。
出力側のRNNはデコーダ(エンコーダが作った情報をもとに、出力データを順番に作り出す側の部品)と呼ばれ、この文脈ベクトルを受け取って出力系列を先頭から1つずつ生成していきます。たとえば日本語の文をエンコーダが文脈ベクトルに変換し、デコーダが英語の単語を先頭から順に生成すれば、機械翻訳の構造になります。
従来型のニューラルネットワークは入力と出力の長さが固定されており、文の長さがまちまちな機械翻訳のような系列変換の課題をそのまま扱えませんでした。
2014年、Cho氏らの論文はRNNを2つ組み合わせ、間に固定長ベクトルを挟む構造とGRU(RNNの弱点を補うために作られた、情報の取捨選択をするゲートを備えた発展形)をあわせて提案しました。この構造の名称が「RNN Encoder-Decoder」で、当時は統計的機械翻訳(大量の対訳データの規則性をもとに翻訳する、従来からの手法)が出す訳文の候補を採点する部品として組み込まれていた点が特徴です。
同じ2014年、Sutskever氏らの論文はLSTM(長期の情報を忘れにくくする仕組みを備えた、RNNのもう一つの発展形)を積み重ね、翻訳文を直接生成する枠組みをSeq2Seqとして提案しました。呼び方の由来は別々の論文にありますが、指している骨格は2つのRNNと1つの固定長ベクトルというほぼ同じ構成のため、現在では同じ意味として使われる場面が多くなっています。
2. 試験対策ポイント
構造の柱は3段階として整理できます。読み込み・まとめ・生成の順に、担い手と処理を並べます。
| 段階 | 担い手 | 処理 |
|---|---|---|
| 読み込み | エンコーダのRNN | 入力系列を1トークン(文章を構成する単語や記号などの最小単位)ずつ読み込み、隠れ状態を更新し続ける |
| まとめ | エンコーダの最終時刻 | 最終時刻の隠れ状態を1つの固定長ベクトルにまとめる |
| 生成 | デコーダのRNN | 文脈ベクトルを初期状態として受け取り、出力系列を1トークンずつ生成する |
真ん中のまとめの段階が、次に述べる制約の源にもなります。
最大の制約はボトルネック問題(情報を1つの決まった大きさの入れ物に押し込むことで、中身の一部が失われてしまう問題)です。入力系列がどれだけ長くても情報を1つの固定長ベクトルに押し込むため、系列が長くなるほど前半の内容が薄まり、出力の精度が落ちやすくなります。
2015年、Bahdanau氏らはこの制約を指摘し、デコーダが出力のたびにエンコーダの各時刻の情報を参照する Attention(入力のどこに注目するかを重みとして学習する仕組み)を提案しました。この仕組みの詳細は、別のテーマとして扱われます。
呼び方の整理として、系列を入力し系列を出力するという課題設定・枠組みそのものを指すSeq2Seqという言葉があります。その枠組みをRNN2つと1つの固定長ベクトルで具体的に実装した構造を指す言葉が RNN Encoder-Decoder です。両者は実務ではほぼ同義に使われます。枠組み全体を掘り下げた整理は、Seq2Seqを扱う別記事に譲ります。
学習の場面では、デコーダへの入力としてモデル自身の前ステップの出力ではなく正解データを与える教師強制(Teacher Forcing。学習のときに、モデル自身の予測ではなく正解データを次の入力として使う手法)が組み合わされます。教師強制自体の仕組みや副作用は、ここでは立ち入りません。
エンコーダ・デコーダの内部には、RNNの発展形であるLSTMやGRUが使われる場合が多くなっています。勾配消失(誤差を過去にさかのぼって伝える際に、時間をさかのぼるほど信号が弱くなっていく現象)という通常のRNNの弱点を補ったうえで、文脈ベクトルへの圧縮を行う組み合わせです。
3. 関連概念との比較・相違点
Attention を加えた構成との最大の違いは、固定長ベクトルへの圧縮に伴う情報損失への対処の仕方です。RNNエンコーダ・デコーダは入力系列全体を1つの文脈ベクトルにまとめてデコーダへ渡します。
一方で Attention を加えた構成はエンコーダの各時刻の隠れ状態を保持しておき、デコーダが出力のたびに重み付けして参照します。1つのベクトルに固定するか、複数のベクトルから都度選んで参照するかが分かれ目です。
トランスフォーマー(RNNを使わず、Self-Attention を中心に系列を処理するニューラルネットワークの構造)のエンコーダ-デコーダとの違いは、内部処理が逐次か並列かという点にあります。RNNエンコーダ・デコーダは時刻ごとに順番に読み書きするため、前の時刻の計算が終わるまで次に進めません。
一方でトランスフォーマーはSelf-Attention(系列内の各要素どうしの関係を直接計算する仕組み)により、系列全体を一度に並列処理できます。RNNをそもそも使わない点も、混同しやすいところです。
4. ビジネス・実務での活用シナリオ
機械翻訳では、原言語の文をエンコーダが文脈ベクトルに変換し、デコーダが目的言語の単語を先頭から順に生成します。応用の詳細や実用上の工夫は、ニューラル機械翻訳を扱う別のテーマの範囲です。
文章要約では、長い入力文章をエンコーダが読み込んで文脈ベクトルにまとめ、デコーダが短い要約文を生成します。入力と出力で系列の長さが異なる課題にそのまま対応できる構造が活きる場面です。
チャットボット(人と自動でやり取りする対話プログラム)の応答生成では、ユーザーの発話文をエンコーダが読み込み、デコーダが応答文を1語ずつ生成します。対話のように入力と出力がどちらも系列になるタスクの土台として使われます。
5. 要点まとめ
- RNNエンコーダ・デコーダは、入力系列を読むエンコーダのRNNと出力系列を生成するデコーダのRNNを、1つの固定長ベクトル(文脈ベクトル)でつなぐ構造です。
- 系列全体を1つの固定長ベクトルに圧縮するため、長い系列では情報が失われやすいボトルネック問題があり、これを解消する仕組みとして Attention が提案されました。
- 枠組みを指すSeq2Seqという呼び方と、RNNで実装した構造を指す RNN Encoder-Decoder という呼び方は由来こそ別ですが、ほぼ同じ骨格を指す言葉として使われています。
6. 確認問題
問1RNNエンコーダ・デコーダでは、エンコーダのRNNが入力系列全体を1つの固定長ベクトル(文脈ベクトル)にまとめ、デコーダのRNNがそのベクトルをもとに出力系列を生成する。
解答・解説をみる
○ 正しい
エンコーダが入力を読み込んで1つの文脈ベクトルにまとめ、デコーダがそこから出力を生成する2段構造が、RNNエンコーダ・デコーダの骨格です。この骨格を保ったまま各時刻の隠れ状態を参照できるように拡張したものが Attention を加えた構成にあたります。
問2RNNエンコーダ・デコーダは入力系列を1つの固定長ベクトルに圧縮する際、系列がどれだけ長くなっても情報の損失は起こらない。
解答・解説をみる
× 誤り
正しくは、系列が長くなるほど1つの固定長ベクトルに情報を押し込みきれず、損失が生じやすくなります。この制約はボトルネック問題と呼ばれ、これを解消する仕組みとして提案されたのが Attention です。
問3RNN Encoder-Decoder と Seq2Seqは、どちらも系列を入力して系列を出力する構造を指す言葉で、呼び方の由来は異なるがほぼ同じ骨格を指すため実務ではほぼ同義に使われる。
解答・解説をみる
○ 正しい
RNN Encoder-Decoder は RNN2つと固定長ベクトルによる構造そのものの名称で、Seq2Seqは系列変換の枠組みを指す名称という違いがありますが、指している中身はほぼ重なります。

