Sparse Attention すぱーすあてんしょん
Sparse Attentionスパースアテンション計算量削減長文対応アテンションパターンTransformer
Sparse Attentionについて教えて
簡単に言うとこんな感じ!
通常のアテンションは「全員が全員を見る」けど、Sparse Attentionは「近くの人だけ見る」または「重要な人だけ見る」に絞る仕組みだよ!計算量を大幅に減らせるから、長い文章を扱うときに特に役立つんだ!
Sparse Attentionとは
Sparse Attention(スパースアテンション) とは、通常の全ペアアテンション(Dense Attention)の計算を削減するため、各トークンがアテンションを向ける相手を一部に限定する手法です。通常のアテンションはN個のトークンがあるとN×Nの計算(O(N²))が必要ですが、Sparse Attentionは参照先を絞ることでO(N√N)やO(N log N)程度に削減できます。
長いコンテキストで重要な情報は「近隣」や「特定のパターン」に集中することが多いという観察に基づいています。例えば日本語の文章でも、直前の数文の文脈が次の文に最も影響するケースが多く、1,000トークン前の文章が常に重要とは限りません。
主なSparse Attentionパターン
| パターン | 内容 | 特徴 |
|---|---|---|
| ローカルウィンドウ | 前後N個のトークンのみ参照 | シンプルで長文に有効 |
| ストライド(Strided) | N個おきにサンプリング参照 | グローバルな文脈を捉える |
| ランダム | ランダムに選んだトークンを参照 | 理論的な多様性確保 |
| グローバル + ローカル | 特定トークンは全体参照、他はローカル | BigBird・Longformer等 |
| スライディングウィンドウ | 移動窓で近隣を参照 | Sliding Window Attentionと重複 |
歴史と背景
- 2019年:OpenAI「Sparse Transformer」でストライドパターンを提案
- 2020年:BigBird(Google)・Longformer(Allen AI)が長文向けSparse Attentionを実用化
- 2021年以降:Flash AttentionとSparse Attentionの組み合わせで効率化が進む
- 現在:Sliding Window AttentionやGQAと組み合わせて長コンテキスト実現に貢献
Dense vs Sparse Attentionの計算量比較
シーケンス長 N = 10,000 トークンの場合
Dense Attention:
計算量: N² = 100,000,000 回の操作
Sparse Attention(ウィンドウサイズ 64):
計算量: N × 64 = 640,000 回の操作
→ 約156倍削減
ただし情報の欠落リスクがあるため、
グローバルトークンとの組み合わせが一般的
関連用語
- Sliding Window Attention — ローカルウィンドウ型Sparse Attentionの代表手法
- Flash Attention — Sparse Attentionと組み合わせて効率化する手法
- コンテキスト長 — Sparse Attentionが長コンテキストを可能にする
- マルチヘッドアテンション — Sparse Attentionが削減する通常のアテンション機構