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
Position Encodingは「意味ベクトル」に「位置ベクトル」を足し算で混ぜ込む

オリジナル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を並べて「位置の指紋」を作る。各位置に重複のない512次元ベクトルが割り当たる

なぜ 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: Q, K を位置に応じて回転させて内積をとると、絶対位置が消えて相対距離だけが残る

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など、未紹介の重要パーツも統合します。

理解度チェック

問題 0 / 50%
Q1

なぜAttentionに位置エンコーディング(PE)が必要なのですか?

キーボード: 1〜4 で選択、Enter で回答