Chapter 5

第5章: 順番を覚える — RNNとLSTM

ある長い文章をあなたが読んでいる。

「鈴木さんは朝早く家を出て、駅でコーヒーを買い、地下鉄に乗り、3 つ目の駅で降りて、信号を渡って、会社のビルに着いた。彼女 のデスクには …」

彼女 が誰を指すか、あなたは即座に分かる ── 冒頭で出た 鈴木さん だ。 途中の「コーヒー」「地下鉄」「信号」は脇道の出来事で、最初の登場人物が今も生きている、と判断している。

人間がやっているのは、読みながら頭の中に「これまでに出てきた人物・話題・流れ」を抱え続ける ことだ。 n-gram(前章)は 直前 2〜3 単語しか見ない ので、こんな芸当はできない。

ここで機械にも「読みながら覚えておく」能力を持たせたい。 そのために生まれた仕組みが本章の主役 ── RNN と LSTM だ。

5.1 「過去を覚えながら読む」という発想

前章の n-gram は、たとえるなら 記憶を持たない読書家 だ。 ページを 1 つめくるたびに直前の数単語以外は忘れてしまい、毎回ゼロから「次の単語は何か」を予測する。

これを改善するには、読みながら情報を蓄え続ける器 を機械の内側に持たせるのが自然な発想だ。

RNN (Recurrent Neural Network = リカレントニューラルネット) の発想

文を 1 トークンずつ順に読み、各時点で 「これまでの情報を要約した内部状態」 を更新していく。 次のトークンを予測するときは、この内部状態を頼りにする。

「これまでの情報を要約した内部状態」── これがミソだ。 n-gram は「直前 n−1 トークン」を覚えていたが、RNN は理屈上 文の始めから今までの全部 を内部状態に圧縮する。

つまり RNN は 読書家にメモ用紙を 1 枚渡した ようなものだ。 本のページを読み進めるごとに、メモ用紙を 更新 していく。 直近の単語を読むときには、このメモ用紙だけ見れば、これまでの情報の要約が得られる。

5.2 RNN の動作イメージ

絵で描くと、こうなる。

入力(トークン)鈴木さん朝早く家をRNN セル(内部状態を更新)h₁h₂h₃h₄h₅出力(次トークン予測など)予測予測予測予測予測赤い矢印が「前ステップから受け継ぐ記憶」
図 5.1 — RNN の動作イメージ。トークンを 1 つずつ読むたびに、内部状態 h が次のステップに受け継がれていく。各時点での予測は、その時点の h を見て行う。

ポイントは、赤い矢印(同じ枠の中での「前から次へ」のつながり) にある。 h₁ には「鈴木」の情報だけ、h₂ には「鈴木 + さん」の情報、…、h₅ には「鈴木 さん は 朝早く 家を」を圧縮した情報が乗っている。

この 「過去を圧縮した内部状態を、各ステップで持つ」 という構造が、リカレント(再帰的)の名の通り、文の長さに関わらず一定の枠組みで処理できる強みを生む。

RNN は 直前 n−1 単語 という人為的な窓を切り捨てた。 理屈上は、文の最初のトークン の情報も内部状態 h に乗っているはずだ。 これは前章末で見た n-gram の最大の弱点 = 長距離依存に弱い を、原理的に解いている。

5.3 RNN は何ができるか ── 「系列を扱う」基本ツール

RNN という枠ができると、いろいろなタスクが同じ枠で扱えるようになる。

タスク入出力の関係
言語モデリング(次トークン予測)入力: 1 トークンずつ。出力: 次のトークン確率
文章生成予測で得た次トークンを入力に戻して、自己回帰的に生成
文書分類(スパム、感情分析など)入力: 全文。最終の h を見て分類
機械翻訳(初期型)入力 RNN で英語を読み、出力 RNN で日本語を生成(seq2seq という構造)
固有表現抽出(NER)入力: 各トークン。出力: 各トークンが人名・地名かのラベル

このうち seq2seq(sequence-to-sequence) は、機械翻訳に革命をもたらした構造で、後の第6章で扱う Attention の温床にもなった。 入力 RNN で英文を読み、その情報を圧縮した「最後の隠れ状態」を、出力 RNN に手渡して日本語を生成する ── という仕組みだ。

しかし、ここで一つの根深い問題にぶつかる。

5.4 RNN の弱点 ── 「長い文だと記憶が薄れる」

理屈上、RNN は文の最初のトークンの情報も最後まで覚えていられるはずだった。 ところが、実際に学習させてみると、長い文では昔の情報がどんどん薄れる という現象が起きた。

具体例:

鈴木さん は朝早く家を出て、駅でコーヒーを買い、地下鉄に乗り、3 つ目の駅で降りて、信号を渡って、会社のビルに着いた。彼女 のデスクには …」

理屈上は、彼女 を処理するステップで 鈴木さん の情報も内部状態 h に残っている。 だが現実には、間に「コーヒー」「地下鉄」「3 つ目の駅」「信号」と多くの新情報が割り込む うちに、鈴木さん の痕跡が薄まり、最後にはほぼ消える。

技術的にはこれを 勾配消失問題(vanishing gradient) と呼ぶ。 ニューラルネットの学習信号が、ステップを遡るほど弱くなり、長距離の依存関係を学習できなくなる現象だ。

ここは、本書で深入りしないが、「ニューラルネットの記憶は、ただ長い時間放っておくと指数的に薄れる」 という事実だけ覚えておいてほしい。
学校の数学のように「100 ステップ遡れる」とはいかず、実用上は「10〜20 ステップが限界」程度の感覚で、設計者は悩まされていた。

5.5 LSTM ── 「忘れない仕組み」を作り込む

この勾配消失問題に対し、1997 年に Hochreiter と Schmidhuber が提案した解決策が、LSTM (Long Short-Term Memory) という改良版 RNN だった。

LSTM の核となる発想:

RNN の内部状態に「ゲート(門)」を仕込み、忘れる・覚える・取り出すを明示的に制御する。

  • 忘却ゲート (forget gate): 過去の記憶のうち、いま捨てていいものを判定
  • 入力ゲート (input gate): 今のステップで覚えるべき新情報を判定
  • 出力ゲート (output gate): 今のステップで予測に使う記憶を選ぶ

これにより、重要な情報は何百ステップでも保持 され、どうでもいい情報は早く忘れる ── という動的なメモリ管理が可能になる。

たとえるなら、RNN は メモを取りっぱなしのノート で書ききれなくなる人。 LSTM は 重要なところだけ蛍光ペンで残し、不要な落書きは消す スマートな読者だ。

LSTM の登場(と、その親戚の GRU)によって:

2010 年代前半、自然言語処理の最先端は 「とにかく LSTM で系列を扱う」 時代だった。

補足

本書では LSTM の数式や内部構造には踏み込まない。
「ゲートで記憶を制御する」「長距離依存を扱う」「2010 年代前半の標準ツールだった」という性質さえ覚えておけば、後章への接続には十分だ。

5.6 LSTM もまだ限界があった ── 並列化できない

LSTM は素晴らしかったが、2 つの本質的な制約 が残った。

制約①: 並列化できない

RNN/LSTM は 「1 トークンずつ順に処理する」 構造をしている。 ステップ 5 を計算するには、ステップ 4 の内部状態 h₄ が必要。h₄ を得るには h₃ が必要 ── と前のステップの計算を順番に待つしかない。

これは現代の GPU(並列計算が得意なハードウェア)と相性が悪い。 たとえ文中の 1000 トークンが互いに独立して計算できる関係にあっても、順番に待たないと進めない。 学習に時間がかかり、巨大データで訓練することが難しかった。

制約②: 長距離依存はやはり苦手

LSTM のゲートはずいぶん改善したが、「100 ステップ以上の長距離依存」 はやはり扱いにくかった。 特に、文書全体や複数段落をまたぐ依存は、現実的には捉えきれない。

この 2 つを 一気に解決した のが、第6章で出てくる Attention と、それを全面採用した第7章の Transformer だ。

「順番に読まなくていい」「全トークンを一度に見て、どこに注目するかを学ぶ」

この発想の転換が、現代 LLM の爆発を準備した。

5.7 「系列を扱う」編、ここまでの整理

第4〜5章で、「系列を扱う」グループを走り切った。 ここでの 2 つの章は、第6章以降の Attention / Transformer への重要な布石になっている。

やったこと残った課題
第4章 n-gram単語の並びを確率で見る基本長距離依存に弱い、単語が背番号
第5章 RNN/LSTM内部状態に文脈を蓄えて、長い系列を扱う並列化できない、超長距離は苦手

次のグループでは、これら「順に読む」アプローチを 根本から見直す。 全文を一気に眺めて、どこに注目すべきか を学ばせる ── Attention の発想に踏み込む。 そこから一直線に Transformer、BERT、GPT へと続く。

5.8 この章の振り返り

次章では、機械翻訳の seq2seq の中で生まれた発想 ── Attention がいかに NLP を変えたかを見にいく。 本書のクライマックスへの助走が始まる。