第6章: 注目すべき場所を学ぶ — Attentionの登場
2014 年。当時の機械翻訳は、前章で見た seq2seq(RNN ベースの翻訳器) を中心に動いていた。
しかし、英文が長くなればなるほど、訳が崩れる。 「猫が窓際で気持ちよさそうに寝ている」のような文ならまだしも、 20〜30 単語を超える長文になると、訳文の終盤で 誰が何をしているか分からなくなる ── 詰まらない翻訳になっていた。
人間の翻訳者なら、英文を訳すときに 「いま訳している日本語の単語は、英文のどこに対応するか」 を視線で行き来させる。 ところが当時の RNN は、英文全体を 「1 つの隠れ状態 h」に圧縮 して日本語側に手渡すだけ。 長文では、その 1 つの h に情報が乗り切らなくなっていた。
ここで一人の研究者が提案した、ある工夫がすべてを変える ── Attention(注意機構) の登場だ。
6.1 翻訳における素朴な問い ── 「いま、どこを見るべきか」
機械翻訳で「The cat sat on the mat.」を「猫がマットの上に座っていた。」に訳す状況を考える。
訳し終わった文を眺めると、対応関係はこうなっている:
| 日本語 | 対応する英単語 |
|---|---|
| 猫 | cat |
| が | (助詞、英語に対応なし) |
| マット | mat |
| の上に | on the |
| 座って | sat |
| いた | (時制、過去形) |
訳す側の人間は、日本語の 「猫」を出力するとき、英文の cat を見ている。
「マット」を出力するとき、英文の mat を見ている。
つまり、出力する単語ごとに、入力のどこに注目するか が変わる。
ところが、前章末で見た RNN ベースの seq2seq は、英文全部を 1 個の隠れ状態に圧縮した後、日本語側ではその 1 個だけを頼りに訳す。 「いま、どこを見るべきか」を毎ステップ柔軟に変える という芸当が、そもそもできない。
Attention の核となる発想
出力の各ステップで、入力のどこに注目するか を学習させる。 入力全体を 1 つに圧縮するのではなく、「注目度(attention weight)」のかかった重み付き平均 を毎ステップ計算する。
「全文を眺めて、いま重要なところを選び出す」── これが Attention。 人間の視線の動きを、機械に持たせた発想だ。
6.2 Attention の動き ── 雰囲気だけ
数式は使わず、雰囲気だけで動きを見てみよう。
英文「The cat sat on the mat.」が入力される。 RNN(または別の仕組み)で各単語に ベクトル表現 が割り当てられているとする。
The → ベクトル v₁、cat → v₂、sat → v₃、on → v₄、the → v₅、mat → v₆
ここで、日本語側で「猫」を出力したい瞬間を考える。 Attention は次のように動く:
Attention の 3 段ステップ(イメージ)
- クエリを作る: 「いま自分が何を出力したいか」を表すベクトルを作る(=日本語側の状態)
- 入力との一致度を測る: クエリと、入力側の各ベクトル (v₁〜v₆) との 似ている度合い を計算
- 重み付け平均: 一致度を重みとして、入力ベクトルの重み付き平均を出す ── これが「注目された入力情報」
「猫」を出力するときには、cat のベクトル v₂ の重みが圧倒的に大きくなり、結果として v₂ がほぼそのまま 渡される。
「マット」を出力するときには、今度は v₆ の重みが大きくなる。
つまり、出力ステップごとに 「入力のどこに重み(注意)を置くか」を都度計算 し、それに応じて情報を取り出す。 これによって、長い文でも、各出力単語が 正しい入力単語と直接結びつく ことができる。
6.3 Attention の効果は劇的だった
Attention 付きの seq2seq(Bahdanau ら、2014)は、機械翻訳の品質を一気に押し上げた。
- 長文翻訳の崩れが大幅に改善
- BLEU スコア(翻訳品質の指標、第4章末で触れた n-gram ベース)が大幅向上
- 訳文がより自然に、対応関係が明瞭に
そして、Attention の効果は機械翻訳だけにとどまらなかった。
| 応用 | Attention の使い方 |
|---|---|
| 機械翻訳 | 出力単語ごとに、入力文のどこに注目するか |
| 質問応答 | 質問に対して、文書のどの部分が答えに関わるか |
| 文書要約 | 要約のどの部分が、原文のどこから来ているか |
| 画像キャプション | 画像のどこを見て、そのキャプション単語を出すか |
「入力のどこに注目するか」を明示的に学習する という考え方は、NLP の枠を超えて広く採用された。
6.4 注目度の可視化 ── 機械が「何を見ているか」を可視化できる
Attention の副次的だが非常に重要な恩恵は、機械が文中のどこに注目したかを可視化できる ことだ。
たとえば、英→仏翻訳の attention 重みをマトリクスで描くと、こうなる:
これは深層学習の歴史でも稀な「ニューラルネットの内側を、人間が解釈できる形で覗き見られる」現象だった。 研究者にとって嬉しかったのは、「機械が言語の構造をちゃんと捉えている」ことが目視で確認できた点だ。
ニューラルネットは長く「ブラックボックス」と批判されてきた。
Attention は、その内部に 「注目度のマトリクス」 という形で、解釈可能な情報をもたらした。
これが研究コミュニティに与えた影響は大きかった ── Attention は精度向上のテクニックを超え、研究を進める道具 にもなった。
6.5 「Self-Attention」── 文の中の単語同士を関連付ける
ここまでは「入力(英文) vs 出力(日本文)」という 異なる系列の間 で Attention を取る話だった。 ところが、その後の研究で重要な拡張が出てくる ── Self-Attention(自己注意) だ。
発想はシンプル:
Self-Attention の発想
Attention は、「同じ文の中の単語同士」 に対しても使える。 文中の各単語について、「自分は同じ文の他のどの単語に注目すべきか」 を計算する。
たとえば「それ はとても速かった。犬 が 猫 を追いかけた」という文で、それ を処理するとき、犬 の重みを大きくすれば、代名詞の指示先が解決する。
Self-Attention は、文の中のあらゆる単語ペアの関係 を直接捉えられる。 RNN/LSTM だと「i 番目と j 番目の単語の関係」を捉えるには、間の |i−j| ステップを順に処理しなければならなかった。 Self-Attention なら、どんなに離れた単語ペアでも 1 ステップで関係を計算できる。
そして決定的なのは、Self-Attention は 「順に処理する」必要がない ということ。 文中のすべての単語ペアを 同時に並列計算 できる。 これは、第5章末で見た「LSTM が並列化できない」という制約を 根本から解消 する。
「Attention があれば、もう RNN は要らないんじゃないか?」
研究者たちはこの可能性に気づいた。
そして 2017 年、Google の研究者たちが衝撃的なタイトルの論文を出す ──
“Attention Is All You Need”(注意さえあれば十分だ)。
これが次章で扱う Transformer の誕生だ。
6.6 Attention の力をもう一度まとめる
Attention が NLP にもたらした 3 つの大きなブレイクスルー:
- 長距離依存を直接扱える ── どんなに離れた単語ペアでも、1 ステップで関係を計算
- 並列計算ができる ── 全単語ペアを同時に処理。GPU と相性抜群、超大規模学習が可能に
- 解釈可能性が高い ── 注目マトリクスとして「機械が何を見ているか」を可視化できる
これは、第5章末で見た RNN/LSTM の 2 つの制約(並列化不可、長距離依存の弱さ) に対する、完璧な解答だった。
6.7 この章の振り返り
- 機械翻訳の seq2seq で、長文の精度低下を解決するために Attention が登場(2014年)
- 「出力の各ステップで、入力のどこに注目するか」を学習する ──「視線を動かす」発想
- 重み付け平均によって、入力の必要な部分だけを毎ステップ取り出せる
- 注目度を可視化することで、機械翻訳の対応関係が目視できるようになった
- Self-Attention: 同じ文の中の単語同士に Attention を適用、長距離依存を 1 ステップで扱う
- Self-Attention は 並列計算が可能、RNN/LSTM の最大の制約を解消
- 「Attention だけで十分なのでは?」という発想が、次章の Transformer に直結
次章では、Attention を全面採用して 「順に読む」処理を完全に捨てた 革命的アーキテクチャ ── Transformer の構造に踏み込む。 ここから本書のクライマックスが始まる。