LLM(大規模言語モデル)のアテンション(Attention)とは、文章に含まれるトークン同士の関係性を計算し、それぞれの情報をどの程度取り入れるかを決める仕組みです。
ChatGPTをはじめとする多くのLLMは、Transformer(トランスフォーマー)と呼ばれるニューラルネットワークを基盤としています。
アテンションは、このTransformerの中核を担う技術の一つです。
例えば、「太郎は新しいパソコンを購入しました。彼はそれを使って仕事を始めました」という文章では、「彼」は「太郎」を、「それ」は「新しいパソコン」を指しています。
LLMは、アテンションなどの仕組みを利用することで、離れた位置にある単語同士の関係性を内部表現に反映できます。
ただし、アテンションは人間のように意識的に文章を理解する仕組みではありません。
文章を数値データとして処理し、数学的な計算によって情報を統合する技術です。
ここでは、LLMのアテンションの基本的な意味から、具体的な仕組み、種類、Transformerにおける役割、計算コスト、関連技術まで詳しく解説します。
アテンション(Attention)とは
アテンションの意味
アテンションは、英語で「注意」や「注目」を意味する言葉です。
AIや機械学習の分野では、複数の情報に異なる重みを割り当て、それらを統合する仕組みを指します。
LLMの場合、文章を構成するトークン同士の関係を計算するために利用されます。
トークンとは、LLMが文章を処理する際の基本単位です。
単語そのものだけでなく、単語の一部分、文字、記号などに対応する場合もあります。
例えば、「猫がソファで眠っている」という文章を考えてみましょう。
「眠っている」という表現を処理する際、「猫」という主体や「ソファ」という場所に関する情報が役立つ可能性があります。
アテンションは、このようなトークン間の情報のやり取りを実現する仕組みです。
ただし、アテンションの重みが大きいことと、人間が考える意味での重要度が高いことは必ずしも一致しません。
LLMにアテンションが必要な理由
文章を適切に処理するためには、単語を個別に扱うだけでなく、単語同士の関係性を考慮する必要があります。
例えば、「田中さんは、市場調査の結果を分析し、競合企業の動向を確認したうえで、新商品の販売戦略を提案しました」という文章があります。
この文章では、文頭の「田中さん」と文末の「提案しました」が関係しています。
アテンションを利用するTransformerでは、離れた位置にあるトークン同士でも、参照が許可されていれば、同じ層の中で直接情報をやり取りできます。
そのため、長距離の依存関係を扱いやすいという特徴があります。
ただし、アテンションを利用していても、長い文章の情報を常に正確に利用できるとは限りません。
文章の長さや構造によっては、重要な情報を十分に反映できない場合もあります。
従来のRNNやLSTMとの違い
Transformerが登場する以前は、RNN(再帰型ニューラルネットワーク)やLSTMなどが自然言語処理で広く利用されていました。
これらのモデルは、基本的に文章を順番に処理しながら内部状態を更新する仕組みです。
一方、TransformerのSelf-Attentionでは、参照可能なトークン同士の関係を並列に計算できます。
この仕組みによって、学習時の並列処理を効率化しやすくなりました。
また、離れたトークン間の情報を直接統合できることも特徴です。
ただし、RNNやLSTMでもアテンションを組み合わせることは可能です。
アテンションはTransformerだけに限定された技術ではありません。
アテンションの基本となるQuery・Key・Valueとは
アテンションの仕組みを理解するうえで重要なのが、Query(クエリ)、Key(キー)、Value(バリュー)という3つの要素です。
これらは、各トークンの内部表現から生成される数値ベクトルです。
それぞれ異なる役割を持っています。
Query(Q)の役割
Queryは、あるトークンがほかのトークンから情報を受け取る際に使用するベクトルです。
直感的には、「どのような情報を参照するか」を決めるための特徴と考えられます。
例えば、「父が車を運転している」という文章で、「運転している」の内部表現を更新する場合を考えてみましょう。
このとき、そのトークンに対応するQueryと、参照可能なほかのトークンのKeyを比較します。
ただし、Queryは人間が入力する検索キーワードや質問文ではありません。
学習によって形成された数値ベクトルです。
Key(K)の役割
Keyは、Queryとの適合度を計算するためのベクトルです。
各トークンの内部表現から生成され、Queryと照合されます。
QueryとKeyの内積を計算することで、Attentionスコアが求められます。
一般に、スコアが大きいほど、その組み合わせに大きなAttention重みが割り当てられる傾向があります。
ただし、スコアの大きさは、人間が考える単語の意味的な類似度と必ずしも一致しません。
Value(V)の役割
Valueは、Attentionによって実際に統合される情報を表すベクトルです。
QueryとKeyによって求めた重みを利用し、複数のValueを組み合わせることで、新しい内部表現を生成します。
つまり、QueryとKeyが情報を取り込む割合を決め、Valueが統合する情報の中身を担うという仕組みです。
Query・Key・Valueによる処理の流れ
アテンションの処理は、大きく次のように進みます。
- 入力されたトークンの内部表現からQuery・Key・Valueを生成する。
- QueryとKeyを比較して、トークン間の適合度を計算する。
- 適合度をAttention重みに変換する。
- Attention重みを使ってValueを統合する。
- 統合した情報を、各トークンの新しい内部表現として後続の処理に渡す。
この一連の処理によって、LLMはほかのトークンの情報を反映した表現を形成できます。
アテンションの計算はどのように行われるのか
QueryとKeyの適合度を計算する
アテンションでは、最初にQueryとKeyの適合度を計算します。
Transformerで広く利用されるScaled Dot-Product Attentionでは、QueryとKeyの内積によってスコアを求めます。
このスコアは、参照先との適合度を表す数値です。
ただし、この段階では、まだ最終的なAttention重みにはなっていません。
スコアを調整する
次に、計算したスコアを一定の方法で調整します。
Scaled Dot-Product Attentionでは、Keyベクトルの次元数に応じたスケーリングを行います。
これは、ベクトルの次元数が大きくなるにつれて、内積の値が極端に大きくなることを抑えるためです。
スケーリングによって、後続のSoftmax処理が極端に偏ることを抑え、学習を安定させやすくなります。
SoftmaxでAttention重みを求める
スコアを調整した後、Softmaxという関数を利用してAttention重みを求めます。
Softmaxは、複数のスコアを正規化し、合計が1になる重みに変換する処理です。
例えば、3つのトークンに対して、それぞれ約60%、30%、10%の重みが割り当てられる場合があります。
この場合、最初のトークンに対応するValueには、ほかの2つより大きな重みが掛けられます。
ただし、実際の重みはモデルの内部表現や学習状況によって変わります。
また、Attention Maskによって参照が禁止された位置には、重みが0になるよう処理します。
Valueを重み付きで統合する
最後に、計算したAttention重みを、それぞれのValueに掛けて足し合わせます。
この処理によって、各トークンはほかのトークンの情報を取り込んだ新しい内部表現を得られます。
ただし、Attention重みが大きいことが、最終的な出力への影響の大きさを直接意味するわけではありません。
最終的な影響は、Valueの内容や後続の処理によっても変わります。
Self-Attention(自己注意機構)とは
Self-Attentionの基本的な仕組み
Self-Attentionとは、同じ入力系列に由来するQuery・Key・Valueを使って、トークン同士の情報を統合する仕組みです。
各トークンの内部表現からQuery・Key・Valueを生成し、それぞれの関係性を計算します。
これにより、トークンは同じ系列に含まれるほかのトークンの情報を取り込めます。
ただし、同じ系列のすべてのトークンを自由に参照できるとは限りません。
Causal MaskやSliding Window Attentionなどによって、参照できる範囲が制限される場合があります。
Self-Attentionによって文脈を反映できる
Self-Attentionの重要な役割の一つが、文脈を反映した内部表現を形成することです。
例えば、英語の「bank」という単語には、金融機関と川岸という異なる意味があります。
「銀行にお金を預けた」という文脈と、「川岸に座った」という文脈では、同じ単語でも意味が異なります。
Self-Attentionを含むTransformerの処理では、周囲のトークンとの関係性を反映した表現が形成されます。
ただし、文脈に応じた表現はSelf-Attentionだけで生まれるわけではありません。
トークン埋め込み、位置情報、MLP、複数のTransformer層なども関係しています。
Self-AttentionとCross-Attentionの違い
Attentionには、Self-AttentionのほかにCross-Attentionという種類があります。
Self-Attentionは、同じ系列に由来する情報を統合する仕組みです。
一方、Cross-Attentionは、異なる系列や情報源の間で情報を統合する仕組みです。
例えば、Encoder-Decoder型の機械翻訳モデルでは、Decoder側のCross-AttentionがEncoder側の出力を参照します。
また、画像と文章を組み合わせて処理するマルチモーダルモデルでも、Cross-Attentionが利用される場合があります。
ただし、マルチモーダルモデルのすべてがCross-Attentionを採用しているわけではありません。
画像や音声などをトークンとして表現し、Self-Attentionによって統合する構造もあります。
Multi-Head Attention(マルチヘッドアテンション)とは
Multi-Head Attentionの仕組み
Multi-Head Attentionとは、複数のAttentionを並列に計算する仕組みです。
個々のAttentionの計算単位をヘッド(Head)と呼びます。
各ヘッドは、異なる学習済みの射影行列を利用してQuery・Key・Valueを生成します。
その結果、異なる特徴や関係性を表現できる可能性があります。
例えば、「昨日購入した赤い車を、父が運転している」という文章には、色と対象の関係、人物と動作の関係、時間と行動の関係などが含まれます。
Multi-Head Attentionは、こうした複数の関係性を扱うために役立ちます。
ただし、それぞれのヘッドが文法・意味・時系列などを明確に分担しているとは限りません。
実際には、複数のヘッドが似た働きをする場合もあります。
複数のヘッドを利用するメリット
Multi-Head Attentionでは、各ヘッドが異なる射影を利用して情報を処理します。
そして、各ヘッドの出力を結合し、学習可能な線形変換によって統合します。
これにより、単一のAttentionだけでは捉えにくい、多様な情報の関係性を表現できる可能性があります。
ただし、ヘッド数が多いほど必ず性能が高くなるわけではありません。
性能は、モデルの次元数、学習データ、学習方法、全体のアーキテクチャなどによって変わります。
Multi-Head Attentionの課題
Multi-Head Attentionでは、複数のヘッドに対応する計算やデータの保存が必要です。
特に、文章生成時には過去のトークンに対応するKeyとValueを保存することが多く、メモリ使用量が課題になる場合があります。
この問題に対応するため、MQAやGQAなどの方式が利用されています。
Causal Attention(因果アテンション)とは
Causal Attentionの役割
Causal Attentionは、ある位置のトークンが、それより未来の位置にあるトークンを参照できないようにする仕組みです。
GPT系の自己回帰型LLMでは、基本的にそれまでのトークンを条件として、次のトークンを予測します。
例えば、「私は昨日、映画を」という文章が入力された場合、モデルはその続きを予測します。
このとき、未来の正解トークンを参照できてしまうと、実際の文章生成時とは異なる条件で学習することになります。
そこで、未来の位置への参照を制限します。
Causal Maskの仕組み
Causal Attentionでは、Causal Maskと呼ばれる仕組みを利用します。
Causal Maskは、Attentionスコアに制限を加え、未来の位置にあるトークンを参照できないようにします。
例えば、「私は昨日、映画を見た」という文章では、「昨日」の位置から「私は」と「昨日」を参照できます。
一方、それより後ろにある「映画を」や「見た」は参照できません。
この仕組みによって、自己回帰型LLMは未来のトークン情報を利用せずに予測できるようになります。
なお、Causal Attentionという名称の「因果」は、未来のトークンを参照しないという制約に関係しています。
モデルが現実世界の因果関係を必ず正しく理解できるという意味ではありません。
Transformerにおけるアテンションの役割
Token Embeddingとの関係
LLMは、入力された文章をそのまま数値計算できません。
そのため、文章をトークンに分割し、それぞれを数値ベクトルへ変換します。
この処理をToken Embeddingと呼びます。
Token Embeddingによって生成された内部表現は、Transformerの各層へ渡されます。
Attentionは、その内部表現を利用して、トークン間の情報を統合します。
MLPとの違い
Transformerには、AttentionのほかにMLP(Multi-Layer Perceptron)も含まれています。
MLPは、各トークン位置の内部表現に対して、学習済みの非線形変換を行う仕組みです。
Attentionは主に異なる位置のトークン間で情報を集約し、MLPは各位置の特徴を変換します。
この2つの処理が組み合わされることで、より複雑な内部表現が形成されます。
残差接続と正規化の役割
Transformerでは、残差接続や正規化処理も重要です。
残差接続は、ある処理への入力を、その処理の出力に加える仕組みです。
これによって、深いネットワークでも情報や勾配を伝達しやすくなります。
また、Layer NormalizationやRMSNormなどの正規化処理は、内部表現のスケールを調整し、学習の安定性を高めるために利用されます。
LLMの性能は、Attentionだけでなく、これらの技術が組み合わされることで実現されています。
アテンションと位置情報の関係
アテンションだけでは単語の順序を十分に表現できない
基本的なSelf-Attentionの仕組みだけでは、単語の位置関係を十分に区別できません。
例えば、「犬が猫を追いかけた」と「猫が犬を追いかけた」という文章があります。
使われている単語は似ていますが、主語と目的語が逆になっているため、意味が異なります。
この違いを適切に処理するには、トークンの位置や順序に関する情報が必要です。
Positional Encodingとは
Positional Encodingは、Transformerへトークンの位置情報を与えるための技術です。
初期のTransformerでは、三角関数を利用した位置ベクトルを、トークンの埋め込み表現に加える方法が採用されました。
これにより、モデルはトークンの位置に関する情報を利用できるようになります。
ただし、位置情報を与える手法は一つではありません。
学習可能な位置埋め込みや、相対位置を考慮する方法などもあります。
RoPEとは
RoPE(Rotary Position Embedding)は、QueryとKeyに対して位置に応じた回転変換を適用する手法です。
これによって、QueryとKeyの関係にトークン間の相対的な位置情報を反映できます。
RoPEは、多くのLLMで利用されている位置表現技術です。
ただし、RoPEを採用するだけで、無制限に長い文章を正確に処理できるようになるわけではありません。
長文処理性能には、学習時の系列長やモデル構造、推論時の設定なども関係しています。
アテンションの計算コストと長文処理の課題
トークン数が増えると計算量が大きくなる
標準的な全系列Self-Attentionでは、入力トークン数が増えるほど、計算するトークン間の組み合わせが増加します。
各ヘッドの次元数を固定した場合、主要なAttention行列積の計算量は、系列長の二乗に比例して増加します。
例えば、トークン数が2倍になると、Attentionスコア行列の要素数は4倍になります。
そのため、長い文章を処理する場合には、計算時間やメモリ使用量が大きな課題になります。
ただし、これは標準的な全系列Attentionに関する説明です。
Transformer全体の計算量や、KVキャッシュを利用した逐次生成の計算量と同じではありません。
FlashAttentionとは
FlashAttentionは、Attention計算時のメモリアクセスを効率化する技術です。
標準的なAttentionと数学的に同等の結果を得ることを目指しながら、大きな中間行列をGPUの高帯域幅メモリにすべて保存することを避けます。
これにより、メモリ使用量やデータ転送量を抑え、処理速度を向上させられる場合があります。
ただし、FlashAttentionは、全トークン間Attentionの理論上の二乗計算量を一般に線形へ変える技術ではありません。
Sparse Attentionとは
Sparse Attentionは、すべてのトークン間の組み合わせを計算するのではなく、一部の組み合わせだけを計算する方法です。
例えば、近くにあるトークンを中心に参照したり、特定のトークンから広い範囲を参照したりする構造があります。
これにより、計算量やメモリ使用量を削減できる場合があります。
一方で、参照可能な範囲を制限するため、必要な情報を適切に統合できるかどうかが重要になります。
MHA・MQA・GQAの違い
MHA(Multi-Head Attention)
MHAは、複数のAttentionヘッドを利用する基本的な構造です。
各Queryヘッドに対応するKey・Valueヘッドを持ち、それぞれ異なる射影を利用して情報を統合します。
柔軟な表現が可能な一方、生成時には複数のKey・Valueを保存する必要があります。
MQA(Multi-Query Attention)
MQAは、複数のQueryヘッドが、単一のKey・Valueヘッドを共有する方式です。
この構造によって、文章生成時のKVキャッシュに必要なデータ量を削減できます。
特に、長文生成や複数のリクエストを同時に処理する場合に役立ちます。
ただし、Key・Valueを共有することで、モデルの表現能力との間にトレードオフが生じる可能性があります。
GQA(Grouped-Query Attention)
GQAは、MHAとMQAの中間的な構造です。
Queryヘッドを複数のグループに分け、グループごとにKey・Valueヘッドを共有します。
これにより、MHAより少ないKey・Valueヘッド数で処理できます。
GQAは、表現能力とメモリ効率のバランスを取るための技術です。
ただし、GQAが常にMHAやMQAより高性能になるわけではありません。
実際の性能は、モデル構造や学習条件などによって変わります。
KVキャッシュとは
KVキャッシュの仕組み
KVキャッシュは、過去のトークンについて計算したKeyとValueを保存し、次のトークン生成時に再利用する仕組みです。
自己回帰型LLMは、通常、1トークンずつ次のトークンを生成します。
新しいトークンを生成するたびに、過去のトークンのKeyとValueを再計算すると、同じ処理が繰り返されます。
KVキャッシュを利用すれば、過去に計算したKeyとValueを再利用できます。
一般的なTransformerでは、KVキャッシュは各Attention層に対応して保持されます。
KVキャッシュのメリット
KVキャッシュの主なメリットは、逐次生成における重複計算を減らせることです。
これにより、文章生成を効率化できます。
特に、長文生成や多数のリクエストを同時に処理するシステムでは重要な技術です。
KVキャッシュのデメリット
KVキャッシュには、メモリを消費するという課題があります。
保存するトークン数が増えるほど、必要なメモリ容量も大きくなります。
また、KVキャッシュを利用しても、新しいトークンが過去のトークンを参照するAttention計算は必要です。
そのため、生成が進んで参照対象が増えると、新しいトークンのAttention計算に必要な処理量も増加します。
アテンションの重みからLLMの判断理由はわかるのか
Attention重みは重要度と同じではない
Attention重みを調べると、あるトークンがどの位置に対して大きな重みを割り当てたかを確認できます。
しかし、その重みが大きいことと、最終的な回答への影響が大きいことは同じではありません。
Attentionの出力は、重みだけでなくValueの内容にも依存します。
さらに、各ヘッドの出力は統合され、残差接続やMLPなどの処理を経て変換されます。
そのため、Attention重みだけから、LLMが特定の回答を生成した理由を断定することはできません。
アテンションの分析でわかること
Attention重みの分析は、モデル内部の情報処理を調査するための一つの方法です。
例えば、特定のヘッドがどの位置を参照する傾向にあるのかを調べられます。
ただし、モデルの出力に対する因果的な影響を詳しく調査するには、入力の変更による比較や内部活性の操作など、ほかの分析手法と組み合わせる必要があります。
アテンションがLLMの性能に与える影響
文脈に合った文章生成
LLMが自然な文章を生成するためには、それまでの文脈を利用する必要があります。
Attentionは、過去のトークンの情報を統合し、次のトークンを予測するための内部表現を形成します。
これにより、前後の文脈を反映した文章を生成しやすくなります。
ただし、自然な文章生成能力はAttentionだけで実現されるわけではありません。
モデル全体の構造や大規模な学習なども重要です。
長文の要約
長文要約では、文章の異なる箇所にある情報を関連付ける必要があります。
Attentionは、離れた位置の情報を統合するために重要な役割を果たします。
ただし、長い文章を入力できるモデルでも、すべての情報を正確に利用できるとは限りません。
特に、長文の途中にある重要な情報を見落とす場合があります。
質問応答
質問応答では、質問と参照情報を関連付ける必要があります。
例えば、「この商品の発売日はいつですか?」という質問に回答する場合、質問と発売日に関する記述を結び付けることが重要です。
Attentionは、このような情報統合を支える仕組みの一つです。
コード生成
プログラムには、変数、関数、条件分岐などの関係があります。
Attentionは、離れた位置にあるコード同士の情報を関連付けることにも役立ちます。
ただし、Attentionを利用しているからといって、生成されたコードの正しさが保証されるわけではありません。
アテンションに関するよくある質問
アテンションはLLMの記憶装置なのか
Attentionは、記憶装置そのものではありません。
Attentionは、現在処理しているトークン間の情報を統合するための計算機構です。
LLMが学習によって獲得した知識の多くは、モデルのパラメータに分散して表現されています。
また、KVキャッシュには過去のトークンのKeyとValueが一時的に保存されますが、それ自体が永続的な記憶になるわけではありません。
アテンションとRAGの違いは何か
RAG(Retrieval-Augmented Generation)は、外部の情報源から関連情報を検索し、その情報をLLMに与えて回答を生成する方法です。
一方、AttentionはLLM内部の情報統合機構です。
RAGによって取得した文書がプロンプトに追加された場合、LLMはAttentionなどの仕組みを利用して、その文書の情報を処理します。
つまり、RAGは外部情報を取得して利用する方法であり、Attentionは内部で情報を統合する計算方法です。
アテンションとコンテキストウィンドウの違いは何か
コンテキストウィンドウは、モデルが一度に扱えるトークン数に関する上限です。
一方、Attentionは、参照可能なトークンの情報を統合する仕組みです。
ただし、モデルによってはSliding Window Attentionなどを採用し、コンテキストウィンドウ内のすべてのトークンを各層で直接参照しない場合もあります。
アテンションはどのように学習されるのか
一般的な自己回帰型LLMでは、次のトークンを予測する学習を通じて、モデルのパラメータが調整されます。
Query・Key・Valueを生成する射影行列も、学習対象に含まれます。
予測結果と正解トークンの差から損失を計算し、誤差逆伝播によって勾配を求めます。
そして、最適化アルゴリズムによってパラメータを更新します。
この学習を繰り返すことで、予測に役立つAttentionのパターンが形成されていきます。
アテンションがあれば正確な推論ができるのか
Attentionは、異なるトークンの情報を組み合わせる仕組みですが、論理的な正しさを保証するものではありません。
LLMでは、Attentionを利用していても、推論の誤りやハルシネーションが発生します。
推論性能には、モデル構造、学習データ、学習方法、推論時の計算方法など、さまざまな要素が関係しています。
まとめ
LLMのアテンション(Attention)は、トークン同士の関係性を計算し、それぞれの情報を重み付きで統合する仕組みです。
その中心となるのが、Query・Key・Valueという3つのベクトルです。
QueryとKeyの適合度からAttention重みを計算し、その重みを利用してValueを統合します。
この仕組みによって、LLMは離れた位置にあるトークンの情報を関連付け、文脈を反映した内部表現を形成できます。
また、Multi-Head Attentionは複数の異なる特徴を扱うために利用され、Causal Attentionは未来のトークンを参照できないようにする役割を担います。
一方、標準的な全系列Attentionには、文章が長くなるほど計算コストが増加するという課題があります。
そのため、FlashAttention、MQA、GQA、KVキャッシュなどの効率化技術が利用されています。
アテンションはLLMの性能を支える重要な技術ですが、文章理解や推論能力のすべてを単独で実現しているわけではありません。
実際のLLMは、Attention、MLP、位置情報、正規化処理、大規模な学習など、さまざまな技術を組み合わせて動作しています。
アテンションの仕組みを理解することで、LLMが文章を処理する原理だけでなく、長文処理や推論における強みと限界についても理解を深められるでしょう。
以上、LLMのアテンションの仕組みや役割についてでした。
最後までお読みいただき、ありがとうございました。
