Attentionとは?AIが文のつながりを見る仕組みを図で理解する

「彼はリンゴを買い、食べた」。この「食べた」の対象がリンゴだと分かるのは、前の言葉を手掛かりにしているからです。LLMも、文章を処理するとき、周りの言葉のどれを手掛かりにするかを選んでいます。その仕組みが、Attention(アテンション)です。

この記事では、Attentionを数式を使わずに図で説明します。トークン(文章の小さな区切り)は別の記事で扱っているため、ここでは分かりやすいように、単語を単位にして示します。

この記事でわかること
  1. Attentionは、ある言葉を処理するときに、文中の関連する言葉を重み付けして参照する仕組みであること
  2. Query・Key・Valueの3つの役割と、複数の視点で同時に見るマルチヘッドAttentionのイメージ
  3. Self-Attention(同じ文の中を見る)と、Self以外のAttention(別の文を見る)の違い
  4. 長い入力では必要な情報を取り逃すことがあり、言葉どうしの組み合わせがn²で増えること

同じ言葉でも、前後で意味が変わる

英語の「bank」は、「銀行」の意味にも「川岸」の意味にもなります。どちらの意味なのかは、bankという言葉だけでは決まらず、周りの言葉で決まります。

例1Hedepositedcashatthebankbank = 銀行例2Hefishedfromtheriverbankbank = 川岸水色の言葉(手掛かり)を参照して、bank の意味が決まる
図1 同じ「bank」でも、手掛かりになる言葉によって意味が変わる

「deposited(預けた)」や「cash(現金)」があれば銀行、「fished(釣りをした)」や「river(川)」があれば川岸だと判断できます。文章を理解するには、ある言葉を、周りの言葉との関係の中で捉える必要があります。LLMがこの関係を扱うために使っている仕組みがAttentionです。

たとえ

会話の中で「それ」が何を指すのかを、前の発言を見返して確かめる動きに似ています。ただし、AIのAttentionは計算の仕組みであり、人間の注意力と同じものではありません。たとえは仕組みそのものではなく、イメージです。

注目先は、処理する言葉によって変わる

「彼はリンゴを買い、食べた」で考えます。「食べた」を処理するときは、「何を食べたのか」を示す「リンゴを」が重要な手掛かりです。一方、「買い」を処理するときは、「誰が買ったのか」を示す「彼は」が手掛かりになります。

「食べた」を処理するとき彼はリンゴを買い食べた何を食べた?「買い」を処理するとき彼はリンゴを買い食べた誰が買った?まだ読んでいない矢印が太いほど、強く参照している(説明用の模式図)
図2 注目先は、処理する言葉ごとに変わる(矢印の太さは説明用の模式図で、実際の重みではありません)

このように、注目先は固定ではなく、処理する言葉ごとに変わります。図の矢印の太さは、強く参照するほど太くしています。実際の強さはモデルが計算で決めるもので、図は説明用の模式図です。

図の「買い」を処理するときに「食べた」が灰色なのは、文章を生成するLLMでは、後ろの言葉を参照しないためです。この理由は、あとで説明します。

Attentionは関連する部分を重み付けする

Attentionでは、ある言葉が、文中の各言葉に対して「どれだけ関係があるか」を計算します。この関係の強さを「重み」と呼びます。重みは、すべて足すと100%になるように調整されます。そして、重みに応じて各言葉の情報を混ぜ合わせ、その言葉の新しい捉え方を作ります。

「食べた」を処理するとき、各語にどれだけ注目するか参照先の言葉関連の強さ(重み)リンゴを60%彼は25%買い10%食べた(自分)5%重みに応じて各語の情報を混ぜる「食べた」の新しい捉え方重みは合計100%になるように調整される(数値は説明用の例です)
図3 Attentionは、関連する言葉に重みを付けて情報を混ぜ合わせる

1か所だけを見るのではなく、複数の言葉を、それぞれ違う強さで同時に参照する点が特徴です。

Query・Key・Valueのイメージ

Attentionの計算には、Query(クエリ)、Key(キー)、Value(バリュー)という3つの役割が出てきます。名前は難しく見えますが、検索にたとえると整理しやすくなります。

論文での呼び方検索にたとえると役割
Query(クエリ)検索キーワード(問い)いま処理している言葉が、何を手掛かりにしたいか
Key(キー)見出し・タグ(札)各言葉が、どんな手掛かりになれるか。Queryと比べて、関連の強さを決める
Value(バリュー)本文(中身)参照したときに、実際に受け取って混ぜ合わせる情報
Query(問い)いま処理中の言葉が持つ問いKey(見出し)各言葉が掲げる札(手掛かり)Value(中身)参照したときに受け取る情報食べた何を食べた?(手掛かりを探す)リンゴを食べ物リンゴを果物のリンゴ彼は人(主語)彼は主語の彼買い動作買い買う動作実際のQuery・Key・Valueは、学習で自動的に作られる数値のまとまりです。人が読める言葉の札が付いているわけではありません(図は説明用です)
図4 Query・Key・Valueの3つの役割のイメージ

計算は、次の3段階です。1つ目に、QueryとKeyを比べて、どの言葉が手掛かりになりそうか(一致度)を出します。2つ目に、一致度を、合計100%の重みに直します。3つ目に、その重みに応じてValueを混ぜ合わせます。

「食べた」のQuery:何を食べた?各言葉のKey① 比べる② 100%の重みに直す③ Valueを混ぜるリンゴを食べ物一致度:高60%彼は人(主語)一致度:中25%買い動作一致度:低10%食べた(自分)動作一致度:低5%Valueを重み付きで混ぜる新しい捉え方一致度が高いKeyほど大きな重みになり、その言葉のValueが多く混ざる(数値は説明用の例です)
図5 QueryとKeyを比べて重みを決め、その重みでValueを混ぜる

KeyとValueが分かれているのは、「誰を参照するかを決めるための札」と、「参照したときに受け取る中身」を、別々に持たせるためです。論文でも、Attentionは「queryと、key・valueの組を、出力に対応づけるもの」で、出力はvalueの重み付きの和だと説明されています。

Self-Attentionでは、1つの言葉が3つの役割をすべて持ちます。自分が処理されるときはQueryを出し、他の言葉から参照されるときはKeyとValueを差し出します。

注意

図の「食べ物」や「何を食べた?」は、イメージをつかむための説明です。実際のQuery・Key・Valueは、学習によって自動的に作られる数値のまとまりで、人が読める言葉の札が付いているわけではありません。

マルチヘッドAttention:複数の視点で同時に見る

Attentionを1回だけ行うと、1通りの見方しかできません。そこで、見る視点を変えたAttentionを複数並べて同時に行い、結果を合わせる方式が、マルチヘッドAttentionです。「ヘッド」は、1つ1つのAttentionのことです。

ヘッド1「何を」の視点彼はリンゴを買い食べたヘッド2「誰が」の視点彼はリンゴを買い食べたヘッド3「動作」の視点彼はリンゴを買い食べた結果を合わせて新しい捉え方に観点は説明用の例です。実際の各ヘッドが何を見るかは、学習の中で決まります
図6 マルチヘッドAttention:視点を変えて同時に参照し、結果を合わせる

論文では、複数のヘッドによって、異なる見方の情報に、異なる位置で同時に注目できると説明されています。論文のモデルでは、8個のヘッドを並べています。図の「何を」「誰が」「動作」は説明用の観点で、実際に各ヘッドが何を見るかは、学習の中で決まります。

論文の付録には、代名詞の「its」が何を指すのかの処理に関わっているように見えるヘッドの例が、図で示されています。

Self-Attentionと、Self以外のAttention

Attentionは、Query・Key・Valueを、どこから作るかで2種類に分けて考えられます。

Self-Attention:同じ文の中で関係を見る彼はリンゴを買い食べた同じ文Query・Key・Valueは、すべて同じ文から作られるSelf以外:別の文を見る(クロスアテンション)入力側(元の文)出力側(作っている文)Iateanapple私はリンゴをQueryは出力側、Key・Valueは入力側から作られる(翻訳の例)
図7 Self-Attentionと、Self以外(クロスアテンション)の違い(翻訳の例は模式図です)
種類Queryの出どころKey・Valueの出どころ見ているもの
Self-Attention(自己注意)同じ文同じ文同じ文の中の、言葉どうしの関係
Self以外(クロスアテンション)出力側の文入力側の文別の文との関係

Self以外のAttentionの例は、翻訳です。論文の翻訳モデルでは、出力(日本語など)を作る側がQueryを出し、元の文を読む側のKeyとValueを参照します。これは論文では「encoder-decoder attention」と呼ばれ、一般にはクロスアテンションとも呼ばれます。図では、出力側の「リンゴを」を作るときに、元の文の「apple」を強く参照しています。

一方、続きの文章を生成するLLM(decoder-onlyのモデル)には、別に読む入力側がありません。入力した文章と、生成した文章を1つの並びとして扱うため、Self-Attentionが使われます。

Transformerの位置付け

Transformerは、2017年の論文で提案されたモデル設計です。それまで使われていた再帰型や畳み込みのネットワークを使わず、Attentionだけを中心に作られている点が特徴で、並列で計算しやすく、学習の時間も短くできると報告されました。現在のLLMの多くは、このTransformerをもとにしています。

入力トークンTransformerの層(これを何層も重ねる)Self-Attention文脈を集める各位置ごとの変換同じ構造の層が続く次のトークンの候補を出すAttentionは、層の中で「関連する言葉の情報を集める」役割をもつ
図8 Transformerの層の大まかな構造(簡略化した図です)

1つの層は、文脈を集めるSelf-Attentionと、各位置ごとの変換で構成されます。この層を何層も重ねて、次のトークンの候補を出します。論文のモデルでは、6層を重ねています。

文章を生成するLLMでは、ある言葉を処理するとき、自分より前の言葉だけを参照します。文章は前から順に作られ、後ろの言葉はまだ存在しないためです。論文でも、出力を作る側では、後ろの言葉の情報が前へ流れ込まないように、そうした接続を使えなくする処理(マスク)を入れたと説明されています。

処理する言葉参照先 →彼はリンゴを買い食べた彼は参照できる×××リンゴを参照できる参照できる××買い参照できる参照できる参照できる×食べた参照できる参照できる参照できる参照できる文章を生成するLLMでは、後ろの言葉はまだ存在しないので参照しない
図9 生成するときは、自分と自分より前の言葉だけを参照する

長い入力でも必要な情報を取り逃すことがある

Attentionがあっても、長い入力の中のすべての情報が確実に使われるわけではありません。トークンとコンテキストウィンドウの記事でも触れたとおり、必要な情報が入力の中ほどにあると使われにくくなる傾向(Lost in the Middle)や、入力が長いほど正確さが下がる傾向が報告されています。

仕組みの面から見ると、重みの合計は常に100%なので、参照先が増えるほど、1つあたりの重みは平均して小さくなります。

短い入力(参照先が4つ)長い入力(参照先が12)濃い棒=必要な情報濃い棒=必要な情報重みの合計は、どちらも100%参照先が増えると、1つあたりの重みは平均して小さくなる必要な情報への配分が薄まる可能性がある(原因とは確定していない)
図10 入力が長くなると、1つあたりの重みは小さくなりやすい(模式図で、実際の値ではありません)

長い資料を渡すときは、必要な部分に絞り、重要な条件を目立つ位置にも書くといった工夫が有効です。

なぜ、組み合わせが n² 個になるのか

Attentionでは、各言葉が、文中の言葉それぞれとの関係を計算します。言葉がn個あると、1つの言葉がn個を相手にするので、全体ではn × n = n²通りの組み合わせになります。

1マスが「ある言葉が、ある言葉を参照する」組み合わせ1つ3個3×3=9通り6個6×6=36通り12個12×12=144通り個数2倍組合せ4倍個数2倍組合せ4倍縦:処理する言葉横:参照先の言葉入力が長くなるほど、組み合わせは急に増える個数が10倍になると、組み合わせは100倍になる
図11 言葉の数がn個のとき、組み合わせはn×n(n²)通りになる

図は、縦が処理する言葉、横が参照先の言葉で、1マスが組み合わせ1つです。言葉が3個なら9通り、6個なら36通り、12個なら144通りです。個数が2倍になると、組み合わせは4倍になります。目安として、1,000個なら約100万通り、10,000個なら約1億通りです。

実際に文章を生成するLLMは、前の言葉しか参照しないため、数える組み合わせは約半分になります。それでも、入力が2倍になると約4倍になる増え方は変わりません。つまり、長い入力ほど、計算の負担は急に重くなります。Hugging Faceのドキュメントでも、多くのTransformerモデルは、Attentionの表が正方形になる「full attention」を使うため、長い文章では大きな計算上の負担になると説明されています。そのため、近くの言葉を中心に見るなど、計算を減らす工夫も提案されています。

なお、n²は計算量の増え方の話です。Anthropicは、この構造を、長い入力で精度が下がる現象の背景として挙げていますが、原因が実験で特定されたわけではありません。

全体像と用語

ここまでの内容を1枚にまとめると、次の図のようになります。

入力文章トークン化LLM(Transformerで構成)Attention関連する言葉を重み付けして参照各位置ごとの変換× 層を重ねる(生成時は自分より前の言葉だけを参照)次のトークンを選ぶ選んだトークンを足して、また最初から(これを繰り返して文章になる)
図12 Attentionを含む、LLMが文章を作る全体の流れ(簡略化した図です)
用語意味
Attentionある言葉を処理するときに、関連する言葉を重み付けして参照し、情報を混ぜ合わせる仕組み
重み参照先ごとの関連の強さ。合計が100%になるように調整される
Query・Key・Value問い・見出し・中身。QueryとKeyを比べて重みを決め、その重みでValueを混ぜる
マルチヘッドAttention見る視点を変えて、Attentionを複数並べて行い、結果を合わせる方式
Self-Attention同じ入力の中の言葉どうしで関係を見るAttention
クロスアテンション別の入力(翻訳の元の文など)を参照するAttention。論文ではencoder-decoder attention
TransformerAttentionを中心にしたモデル設計。現在のLLMの多くが、これをもとにしている
マスク文章を生成するときに、後ろの言葉を参照できないようにする処理

コメント