Attentionの隠れた弱点 — 順序を見ない
ここまで説明してきたAttentionには、実は 致命的な弱点 があります。順序を区別できないのです。
「犬が人を噛む」と「人が犬を噛む」をAttentionに入力したらどうなるでしょう? 単語の集合 {犬, が, 人, を, 噛む} は同じ。Attentionは「すべての単語のペアの内積を計算する」だけなので、順序を入れ替えても結果が変わりません。
そこで、「この単語は文中の何番目か」という位置情報をベクトルに足し込む 工夫が必要になります。これが Positional Encoding(位置エンコーディング、PE) です。
graph LR T[Token Embedding\n意味ベクトル] --> PLUS[+] P[Positional Encoding\n位置ベクトル] --> PLUS PLUS --> X[入力ベクトル\n意味+位置] X --> A[Attention 層へ] style T fill:#3b82f6,stroke:#1d4ed8,color:#fff style P fill:#8b5cf6,stroke:#6d28d9,color:#fff style X fill:#14b8a6,stroke:#0d9488,color:#fff
オリジナルTransformer — sin/cos の多周波数
Vaswaniらは、次のような 正弦波(sinusoidal)PE を採用しました。
正弦波PE(位置 pos、次元 i):
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
式は複雑そうですが、本質はシンプル。次元ごとに違う周波数のsin/cosを並べる だけです。
多針時計のアナロジー
この仕組みを「多針時計」に例えるとイメージしやすくなります。
- 秒針:高周波数(位置1つでぐるぐる回る) → 細かい位置を区別
- 分針:中周波数(60ステップで1周)
- 時針:低周波数(3600ステップで1周) → 大まかな位置を区別
- 日針、月針……
針の組み合わせで「瞬間」が一意に決まるように、sin/cosの多周波数の組み合わせで「位置」が一意に符号化されます。
graph TD P[位置 pos=42] P --> D0[次元0: sin pos/1\n高周波] P --> D2[次元2: sin pos/100\n中周波] P --> D4[次元4: sin pos/10000\n低周波] P --> D510[次元510: cos pos/10000\n低周波] D0 --> V[位置ベクトル PE_42\n512次元の指紋] D2 --> V D4 --> V D510 --> V style P fill:#3b82f6,stroke:#1d4ed8,color:#fff style V fill:#14b8a6,stroke:#0d9488,color:#fff
なぜ sin/cos なのか
Vaswaniらが正弦波を選んだ核心理由は 「相対位置が線形変換になる」 という美しい性質です。
任意のオフセット k に対し:
PE(pos+k) = M_k × PE(pos)
M_k は pos に依存しない回転行列
つまり「k だけ離れている」という関係を1つの線形変換で表現できる。モデルが「kだけ離れた単語の関係」を学びやすいのです。さらに、訓練時に見なかった長い系列にも 外挿(extrapolation) しやすいという副産物もあります。
なぜ「足す」のか — concatではダメ?
「位置情報を意味情報に足したら、混ざって元に戻せないのでは?」と感じるかもしれません。実は、高次元空間では大丈夫 です。
高次元では2つのランダムなベクトルがほぼ直交するため、意味成分と位置成分は事実上分離して読めます。さらに、concatすると次元が増えてパラメータコストも増えるため、「足す」がパラメータ効率の点でも優れています(原論文では「両方試して差がなかったので足し算を採用」と書かれています)。
BERT/GPT-2 — 学習可能な位置エンコーディング
原論文のsin/cos方式ではなく、位置ごとに学習可能なベクトル を割り当てる方式もあります(Learned Positional Embedding)。BERTやGPT-2が採用しました。
| 方式 | 長所 | 短所 |
|---|---|---|
| 正弦波PE(原論文) | 訓練時より長い系列に外挿できる、データ不要 | 柔軟性に欠ける |
| Learned PE(BERT, GPT-2) | 最高性能を出しやすい、柔軟 | 最大長 N を超える位置を表現できない |
| RoPE(Llama, Qwen, DeepSeek) | 相対位置が自然に効く、外挿性も高い | 実装がやや複雑 |
| ALiBi(BLOOM, MPT) | 極めてシンプル、外挿が強い | 柔軟性は低い |
| NoPE(最新研究) | マスクから位置が創発、PE不要 | 長文では性能劣化することも |
RoPE — 現代LLMの主流
2026年現在、Llama, Qwen, Mistral, DeepSeek, GPT-NeoX など、ほぼすべての近代LLMが採用しているのが RoPE(Rotary Positional Embedding、回転位置埋め込み) です。Su et al. 2021の RoFormer 論文で提案されました。
アイデア:位置に応じて Q/K を「回転」させる
従来の方式は「位置ベクトルを足す」でしたが、RoPEは違います。QとKを、位置に比例した角度だけ回転させてから内積をとるのです。
埋め込みベクトルを2次元ずつのペアに分け、ペアごとに角度 m × θ で回転させます(m は位置)。すると、QとKの内積に 絶対位置m, nが消えて、相対距離(m-n)だけが残る という驚くべき性質が現れます。
graph TD Q[Query at pos=m] --> ROT_Q[回転 m×θ] K[Key at pos=n] --> ROT_K[回転 n×θ] ROT_Q --> DOT[内積] ROT_K --> DOT DOT --> R[結果に m-n だけが残る\n相対距離が自動的に効く] style Q fill:#3b82f6,stroke:#1d4ed8,color:#fff style K fill:#3b82f6,stroke:#1d4ed8,color:#fff style ROT_Q fill:#8b5cf6,stroke:#6d28d9,color:#fff style ROT_K fill:#8b5cf6,stroke:#6d28d9,color:#fff style R fill:#14b8a6,stroke:#0d9488,color:#fff
RoPEの利点
- 相対位置が自然に効く:絶対位置を入れているのに、Attentionの内積では相対位置だけが意味を持つ
- 距離減衰:遠いトークンほど自然に注意が減衰する性質を持つ
- 外挿性:訓練時より長い系列に拡張しやすい(後述のYaRNなどで1Mトークンまで延長可能)
- Linear Attentionとも互換:効率化派生にも適用できる
その他の方式 — ALiBi と NoPE
ALiBi — シンプルな線形バイアス
ALiBi(Attention with Linear Biases) は、位置情報を入力に加えず、Attentionスコアに「距離 × 負の傾き」のペナルティを直接足す方式です。
# ALiBi の式
score(i, j) = Q · K - m × |i - j|
# 遠い token ほど自然に注意が下がる
# m はヘッドごとに事前定義された傾き BLOOM、MPT などが採用。「短く学習→長くテスト」が得意 な外挿性が特徴です。「遠い席の声ほど小さく聞こえる」音量フェードの比喩がよく使われます。
NoPE — 位置情報なしでもいける?
最近の研究では、「位置情報を一切与えなくても decoder-only Transformer は動く」という驚きの観察があります(2022年Havivら以降、2024-2025年に活発化)。
Causal Mask(未来を見ない制約)自体が「自分が何番目か」の情報を持つため、内部表現に位置が 創発 するのです。「1番目のトークンは1個しか参照できない、2番目は2個…」という非対称性から、モデルが位置を発見します。
Long Context(100万トークン)の課題
Gemini 2.0 が2M(200万)トークン、Llama 4 が10Mトークンのコンテキストを実現するなど、2026年は「超長文コンテキスト」が標準化しつつあります。これを支えるのが RoPEの拡張技術 です。
| 手法 | 概要 | 採用モデル |
|---|---|---|
| Position Interpolation (PI) | 入力位置を縮小して学習済み範囲に押し込む | Llama初期の長文版 |
| NTK-aware scaling | 高周波次元の情報損失を緩和 | Code Llama, Qwen |
| YaRN | NTKの改良版、温度補正も追加。現在の標準 | Llama/Qwen/DeepSeek長文版 |
| iRoPE (Interleaved RoPE) | 一部の層からPEを抜き、無限長への汎化を狙う | Llama 4 Scout (10Mトークン) |
この章のまとめ
Attentionは順序を見ない集合演算なので、位置エンコーディング(PE) で位置情報を別途注入します。
- 正弦波PE:多周波数のsin/cosで「多針時計の指紋」を作る(原論文)
- Learned PE:位置ごとに学習可能なベクトル(BERT, GPT-2)
- RoPE:Q/Kを位置に応じて回転、相対位置が自然に効く(現代LLM主流)
- ALiBi:距離に比例した負のバイアスを加える(シンプル、外挿性高い)
- NoPE:マスクから位置が創発する(最新研究)
次の第10章では、ここまで個別に見てきたピース(Self-Attention、Multi-Head、Causal Mask、PE)を組み立てて、Transformer全体のアーキテクチャ を完成させます。FFN、Residual接続、LayerNormなど、未紹介の重要パーツも統合します。
理解度チェック
なぜAttentionに位置エンコーディング(PE)が必要なのですか?
キーボード: 1〜4 で選択、Enter で回答