自己注意とは、モデルが一文を処理するとき、まず各単語が文中のどの単語にどれだけ注目すべきかを判断し、その情報を統合する仕組みです。固定された順序で一語ずつ読むのではなく、すべての単語が互いに採点します。関連が強いほど重みは大きくなり、最終的に各単語は、自分に最も必要な文脈を混ぜ込んだ新しい表現を得ます。
まずは例で考える
「小明は鍵を机の上に置き、彼はその後出かけた。」という文の「彼」は誰を指すでしょうか。人は一目で小明だと分かります。自己注意も似たことをします。「彼」を処理するとき、モデルは「小明」に高い重みを与え、「机」や「鍵」には低い重みを与えるため、「彼」の表現には「小明」の情報が含まれます。この重みは人間が書いた規則ではなく、学習の過程で大量のテキストから学ばれたものです。
何を計算しているのか
処理は三つの段階に分けられます。まず各単語をベクトルに変換し、次に単語同士の適合度を計算し、最後にそのスコアで重み付けして他の単語の情報を集約します。スコアが高い単語の影響は大きく、低い単語はほとんど無視されます。重要なのは並列性です。文中のすべての単語が同時にこの処理を行えるため、前の単語の処理を待つ必要がなく、長いテキストの処理や学習効率の高さにつながっています。
循環型や畳み込みとの違い
循環型の構造は文を順に読むため、離れた単語の情報は伝わるうちに弱まりやすくなります。畳み込み構造は一度に固定された範囲の単語しか見られず、範囲外の関係は層を重ねて間接的に作るしかありません。自己注意には固定の範囲がなく、順序に沿った伝達にも依存しないため、遠い単語同士が直接結びつきます。ただし万能ではありません。語順を知るための位置情報が別に必要で、なければ「猫が犬を追う」と「犬が猫を追う」を区別するのが難しくなります。
限界はどこにあるか
自己注意の役割は「どの情報がより重要か」を決めることだけで、事実を記憶したり、論理的に推論したり、出力を正しく保証したりするものではありません。見られる範囲も文脈の長さに制限され、範囲外の内容は直接参加できません。計算量は文が長くなるほど急速に増えるため、長いテキストのコストは短いテキストより明らかに高くなります。知識ベースや推論エンジンではなく、情報の選別装置と捉える方が正確です。
よくある誤解
第一に、自己注意は理解そのものではありません。重みが高いことは、モデルが学んだ統計的な関連が強いことを示すだけで、本当に意味を理解しているわけではありません。第二に、注意の重みをそのまま説明として使うことはできません。重みが高い単語が、ある回答の唯一の理由とは限りません。第三に、自己注意はTransformer全体と等しくありません。Transformerにはフィードフォワードネットワーク、位置エンコーディング、正規化などの部品もあり、注意だけでは完全なモデルは成り立ちません。