Chapter 6

第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 段ステップ(イメージ)

  1. クエリを作る: 「いま自分が何を出力したいか」を表すベクトルを作る(=日本語側の状態)
  2. 入力との一致度を測る: クエリと、入力側の各ベクトル (v₁〜v₆) との 似ている度合い を計算
  3. 重み付け平均: 一致度を重みとして、入力ベクトルの重み付き平均を出す ── これが「注目された入力情報」

「猫」を出力するときには、cat のベクトル v₂ の重みが圧倒的に大きくなり、結果として v₂ がほぼそのまま 渡される。
「マット」を出力するときには、今度は v₆ の重みが大きくなる。

つまり、出力ステップごとに 「入力のどこに重み(注意)を置くか」を都度計算 し、それに応じて情報を取り出す。 これによって、長い文でも、各出力単語が 正しい入力単語と直接結びつく ことができる。

6.3 Attention の効果は劇的だった

Attention 付きの seq2seq(Bahdanau ら、2014)は、機械翻訳の品質を一気に押し上げた。

そして、Attention の効果は機械翻訳だけにとどまらなかった。

応用Attention の使い方
機械翻訳出力単語ごとに、入力文のどこに注目するか
質問応答質問に対して、文書のどの部分が答えに関わるか
文書要約要約のどの部分が、原文のどこから来ているか
画像キャプション画像のどこを見て、そのキャプション単語を出すか

「入力のどこに注目するか」を明示的に学習する という考え方は、NLP の枠を超えて広く採用された。

6.4 注目度の可視化 ── 機械が「何を見ているか」を可視化できる

Attention の副次的だが非常に重要な恩恵は、機械が文中のどこに注目したかを可視化できる ことだ。

たとえば、英→仏翻訳の attention 重みをマトリクスで描くと、こうなる:

Attention 重みの可視化(英→仏翻訳)入力(英語)→Thecatsatonthemat出力 ↓Lechats’est assissur letapis濃いマスほど注目度が高い。出力ごとに対応する入力単語が浮かび上がる
図 6.1 — 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. 長距離依存を直接扱える ── どんなに離れた単語ペアでも、1 ステップで関係を計算
  2. 並列計算ができる ── 全単語ペアを同時に処理。GPU と相性抜群、超大規模学習が可能に
  3. 解釈可能性が高い ── 注目マトリクスとして「機械が何を見ているか」を可視化できる

これは、第5章末で見た RNN/LSTM の 2 つの制約(並列化不可、長距離依存の弱さ) に対する、完璧な解答だった。

6.7 この章の振り返り

次章では、Attention を全面採用して 「順に読む」処理を完全に捨てた 革命的アーキテクチャ ── Transformer の構造に踏み込む。 ここから本書のクライマックスが始まる。