Kimi K3 の KDA、Sparse Attention との比較分析
本文の状態
日本語全文を表示中
詳細モードで約56分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
zartbot
本記事は Kimi K3 の KDA 機構を Linear Attention と Sparse Attention に比較分析し、両者のメモリ処理における根本的な差異とアルゴリズムの競合構造を体系的に解明する。
AI深層分析を開く2026年8月21日 19:56
AI深層分析
キーポイント
KDA の代数構造と限界の再確認
KDA は仿射縮約半群であり、情報の忘却が不可逆であるため、一度失われた情報は復元できないという根本的な制約を持つ。
メモリ処理における Linear と Sparse の対立軸
Linear Attention がレジスタファイルのような状態管理を行うのに対し、Sparse/Full Attention はキャッシュ構造に類似しており、両者の争点は圧縮をどのデータパス(書き込み・保存・読み取り)に挿入するかという点にある。
アーキテクチャ視点からのメモリ壁分析
LLM の記憶とチップの物理的メモリの両義性を考慮すると、アルゴリズム競争は実質的に同等な知能下でのメモリアクセス効率の違いに帰着する。
圧縮即智能という視点の提示
O(T) 計算量の達成や Grassmann 多様体を用いた潜在次元圧縮など、高度な圧縮技術が知能そのものと直結するという新たな議論を提起する。
軸圧縮のトレードオフ:選択権と解像度
Token 軸を圧縮すると候補数が減り読み手の選択権が失われる一方、チャネル軸を圧縮しても各トークンの独立性は保たれ選択権が残るものの情報解像度が低下する。
重要な引用
半群,实质的阐述就是为什么不是群,这就回答了遗忘的不可逆性
仿射结构把这两者干净地分开,但是先写入的信息必被后续转移继续遗忘
本质上模型架构和芯片/系统架构 co-design 的视角来看,本质上是在设计 Memory subsytem
両者の違いは、実質的に圧縮が読み手側の選択権を奪うかどうかの取舍である。
編集コメントを表示
編集コメント
本記事は Kimi K3 の内部動作を深く掘り下げた技術論であり、単なる性能比較を超えてアルゴリズムとハードウェアの共設計(co-design)という視点を提供している。読者はここで提示される「圧縮即智能」の概念を通じて、次世代 LLM 開発におけるメモリ効率化の新たな可能性を探る必要がある。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
2026年8月21日 17:54 執筆:渣B(浙江省)
Linear Attention と Sparse Attention の比較についてさらに語る
TL;DR
前回の「Kimi K3 の KDA(1): KDA が Gated MLA や AttnRes とどのように協調するか」では、K3 の混合アテンション機構が『Attention は Linear か Sparse か?』という記事で指摘された 9 つの Linear Attention の欠陥をどう解決したかを詳細に分析しました。
しかし、KDA にも一つの根本的な課題があります。処理過程において状態行列は固定されており、もし KDA レイヤー内で情報が衝突や Delta による上書きによって既に失われてしまった場合、その後のプロセスでそれを回復することは不可能です。これが第一回記事で KDA の代数構造が「アフィン縮小半群」であるかを議論した理由であり、たった 6 文字に膨大な情報が凝縮されています。
「半群」という概念は、なぜ「群(グループ)」ではないのかを本質的に説明するものです。これにより、忘却の不可逆性が明確になります。同時に、複合演算の閉包性と非可換性も示されており、これが並列処理戦略において一つの次元での制限要因となります。
「アフィン変換」においては、アフィン構造が「どの程度速く忘れるか(安定性)」と「何を記憶するか(表現力)」を明確に分離しています。しかし、先に書き込まれた情報は、後の転移によって必ず忘却されます。これが表現力の源泉であると同時に、セグメント間の圧縮において順序を保つ必要がある根本的な理由でもあります。
「縮小」については、古いトークンほど重みが小さくなり、その減少は幾何級数的です。各点で収束し、一定の隙間を持たずに展開されるため、長文コンテキストにおける状態の数値精度の必要性など、多くの導出が可能になります。
しかし、第一回記事では Sparse Attention 方案との詳細な比較が不足していました。実はここには学界と産業界の間で多くの議論があります。私の一貫した見解は、未解決の問題こそが素晴らしい研究機会であるということです。議論があるということは、それぞれに優位性と欠点がある証拠です。そこで今回は、いくつかの視点からその違いを詳しく掘り下げていきます。
アテンションのデータパスを「KV 書き込みセグメント」「KV 保存セグメント」、そして最後の「Query 読み取りセグメント」に分割し、それぞれのデータパスにおける異なる圧縮メカニズムとアドレス指定メカニズムを中心に分析を行います。
アーキテクチャの視点から見ると、Linear Attn の State は、コンピュータアーキテクチャにおけるレジスタファイル(Register File)に近いものと言えます。一方、従来の Full Attn や Sparse Attn の KV は、キャッシュ構造に類似しています。つまり、モデルアーキテクチャとチップ/システムアーキテクチャの協調設計(co-design)という観点から本質を捉えれば、これは Memory サブシステムの設計問題です。ここで言う「Memory」は二重の意味を持ちます。一つは LLM における記憶機能であり、もう一つは実際のチップにおけるメモリストレア構造のことです。
さらに考慮すべき点として、Agent Harness や RSI シナリオにおける Memory の扱いがあります。そのため、全体像としては Test-Time Training や Harness シナリオにおける時空間の組み合わせ可能性(composability)の問題もカバーする必要があります。
これは需要側の分析であり、供給側におけるチップのメモリウォール(記憶壁)が存在する現状を踏まえると、アルゴリズムやモデル構造の競争は、実質的に同等の知能レベルにおける「メモリアクセスの違い」へと収斂しています。これがまさに Sparse Attention と Linear Attention の議論の核心です。
もちろん、LLM のメモリをアーキテクチャの視点から捉えるアプローチについては、後日別記事として詳しく取り上げる予定です。
本稿の構成は以下の通りです。
- Linear vs Sparse の議論の本質とは?
1.1 標準的な Full Attention から始める
1.2 Linear Attention の実態:結合律によるクエリ知能の置換
1.3 Sparse Attention の圧縮:学習されたプーリング
1.4 統一された圧縮粒度の指標
- 圧縮が抱える難題
2.1 KV 圧縮の下界が示すもの
2.2 排除できない O(T) の壁
2.3 Linear と Sparse の議論を再考する
2.4 Linear Attention の視点から
2.4.1 補修と統合のプロセス
2.4.2 KDA を避けて通れないいくつかの壁
2.5 Sparse Attention の視点から
- 圧縮こそが知能である
3.1 O(T) をサポートする Linear Attn は可能か?
3.1.1 ブロックサイズの制約
3.1.2 Prefix Cache スナップショットに基づくアプローチ
3.1.3 ブロックの重なりと状態の更新速度
3.1.4 クエリに応じたブロック選択
3.2 Grassmann 多様体を用いた隠れ次元圧縮?
3.2.1 JL 補題から Grassmann 多様体へ
3.2.2 グローバル潜在空間からブロック局所部分空間へ
3.2.3 局所座標系内での Sparse Attention の実行
3.2.4 実際にはどれほど削減できるのか?
3.2.5 圧縮に適したブロックのみを低次元空間へ送る
3.3 Harness? 時間軸における圧縮の活用
3.3.1 時間軸は実は三つの時計で構成される
3.3.2 Compaction!:時間軸の圧縮
3.3.3 代数的にどちらが可逆で、どちらが交換可能か?
- まとめ
- Linear vs Sparse の議論の本質とは?
1.1 標準的な Full Attention から始める
コンピュータアーキテクチャの視点から標準的な Full Attention を見ると、そこには「書き込み」「保存」「読み出し」の一連のプロセスが完全に含まれています。あるトークンが入力されてから利用されるまでには、以下の三段階を経ます。
① 書き込み段:各トークンに対して1回実行
② 保存段
③ 読み出し段:各クエリに対して1回実行
Softmax を用いた Full Attention のベースラインでは、この三段階のいずれにおいても圧縮は行われません。したがって、保存量は O(T^2)、読み出しコストも同様に O(T^2) となります。
しかし、ここで重要な非対称性に気づく必要があります。
書き込み段は「各トークン」に対して1回実行されるのに対し、読み出し段は「各クエリ」に対して実行されます。さらに重要なのは、読み出し対象となる未来のクエリは、書き込み段が実行されている時点ではまだ存在していないという点です。
この視点に立てば、Linear Attention と Sparse Attention の議論の本質は、メモリの処理において「圧縮をどの段階に挿入するか」によって、出力品質を損なうことなくいかに効率を最大化できるかという点にあります。唐杰教授が最近発表した『Memory for Large Language Models』というサーベイ論文は非常に優れた内容であり、本稿でもこの視点から詳細に分析を展開していきます。
image実質的な選択は、どこに圧縮を挿入するか、そしてどの軸に沿って圧縮を行うかにかかっています。KV には圧縮可能な 2 つの軸、つまりトークン軸とチャネル軸があります。しかし、この 2 つの軸で圧縮すると結果が全く異なるため、4 つの主要なアプローチが存在します。
方案 A(案 A):書き込み段に挿入し、トークン軸に沿って圧縮します。トークンが入力された瞬間に定長のオブジェクトに折り畳まれ、書き込み完了と同時に圧縮も完了します。これにより、過去の履歴は 1 つの状態に圧縮されます。ストレージ使用量は大幅に削減され、最も徹底した省メモリ化を実現しますが、トークン軸が 1 つのオブジェクトにまで圧縮されてしまうため、読み取り側で Query を基に「どれを選ぶか」という選択自体ができなくなります。Linear Attention や KDA がこのアプローチを採用しています。
方案 A'(案 A プライム):書き込み段に挿入しますが、チャネル軸のみを圧縮します。MLA(Merged Layer Attention)が代表例です。KV に対する下位投影を行うことで書き込み側で圧縮し、各トークンに対して 1 回だけ実行されます。これはどの Query とも無関係であり、圧縮比は数倍に達しますが、トークン自体をマージすることはありません。つまり、エントリ数はそのまま維持され、各トークンは独立したエントリとして残ります。読み取り時には、576 次元の空間から元の K と V に再投影されるため、候補数のベースラインと全く同じであり、Query の選択権は失われません。唯一の代償は、各候補が少しぼやけてしまうことです。
両者の本質的な違いは、「圧縮によって読み取り側の選択肢を奪うか」という取舍にあります。トークン軸を圧縮するのは「選べる対象の数」に手を加えることですが、チャネル軸を圧縮するのは「それぞれの対象の解像度(鮮明さ)」に手を加えることです。
方案 B(案 B):読み取り段に挿入します。Query が来るたびに、その Query に合わせて履歴を圧縮します。圧縮関数が自由に Query に依存できるため、Query 感知度は最大限になります。しかし、ストレージの節約にはなりません。圧縮する対象となる完全な履歴を残しておく必要があるからです。また、計算コストが「トークンあたり 1 回」から「Query あたり 1 回」に変わり、むしろ計算コストが増大します。そのため、このアプローチを実装するエンジニアはいません。
方案 C(案 C):圧縮をストレージ段と読み取り段の両方に挿入し、2 つの軸を同時に圧縮します。DSA がこのアプローチを採用しています。まず KV の保存形態を変更し、トークン軸上で N 個のエントリを M 個にプーリング(集約)し、チャネル軸では各エントリを 512 次元に圧縮します。このステップはまだ Query とは無関係です。しかし、圧縮後に残るのは依然としてアドレス可能な KV エントリの集合であり、単にエントリ数が減っただけです。そのため、読み取り側は従来通り、Query に基づいてサブセットを選択して参照することができます。
これら 4 つのアプローチをベースラインと比較すると、進化のロジックが明確になります。
- アプローチ:圧縮挿入位置 / 圧縮軸 / ストレージ削減 / Query あたり候補数 / 圧縮関数が Query に依存可能か / Query で再構成可能か / 代表例
- ベースライン:なし / なし / なし / Full Softmax / はい / はい / -
- A:書き込み段 / トークン軸 / 1 つの定長オブジェクトに圧縮 / いいえ(因果律により禁止) / いいえ / Linear, KDA
- A':書き込み段 / チャネル軸 / 各トークンを独立維持 / はい(Gated MLA) / はい / Gated MLA
- B:読み取り段 / 任意 / リソースを節約しない / はい / はい / - (無人実装)
- C:ストレージ段+読み取り段 / 両軸(N→M, 512 次元化) / いいえ / はい / DSA, CSA / DSA, CSA
要理解 KDA(Kimi K3) の仕組み、まず「圧縮は本質的に情報損失を伴う」という事実を押さえる必要があります。計算資源やストレージとのバランスをどう取るかというトレードオフの中で、最適な妥協点を見出すことが求められます。
K3 が「方案 A」を採用し、トークン軸を極限まで圧縮して状態を更新する場合、その過程で可読性(アジェンダビリティ)を失わないよう、中間段階として「方案 A'」と呼ばれる一連の措置を挿入せざるを得ません。これは、トークン軸を圧縮した後に、再び参照可能な状態に戻すための安全装置のようなものです。
一方、「方案 C」は A と B の中間地点に位置します。この方式が成立する背景には、「方案 A'」と共通する、あまり目立たない性質があります。それは「圧縮された対象でも依然として参照可能である」という点です。「方案 A'」はトークンを一切結合させずにこれを維持し、「方案 C」は結合した後に一定数の独立エントリを残すことで実現しています。しかし、「方案 A」はこの重要な性質を失ってしまいます。
1.2 Linear の本質:結合律によるクエリ知能の喪失
KDA の書き込みセグメントにおける計算式は以下の通りです。
ここで、$\alpha_t$ と $\beta_t$ を含むすべてのパラメータ($\alpha, \beta, \gamma, \delta$ など)は、現在のトークン入力 $x_t$ によってのみ生成されます。これを一般解として展開すると、以下のようになります。
この式にはクエリ $Q$ が含まれていません。つまり、履歴の中で各トークンが占める割合は、そのトークン自身が書き込まれた時の $\alpha, \beta$ と、その後のすべてのトークンの $\gamma, \delta$ の積によって決定されます。これらの値は、いかなるクエリが到来するよりも前に完全に確定してしまいます。
書き込みセグメントが完了した時点で、「どの情報が重要で、どれが不要か」という判断はすでに $\alpha, \beta$ といった値の中に固定されてしまうのです。
では、クエリは果たして何ができるのでしょうか?読み出しを暗黙的なカーネル形式で展開してみましょう。
本質的に、クエリが調整できるのは $Q$ と $K$ の間の角度だけです。しかし、クエリが調整できない「包絡線(エンベロープ)」が存在します。これは $Q$ と演算子のノルムの相容性によって決まり、以下の式で表されます。
右辺には $Q$ が含まれていません。つまり、明確な判断を下せます。「KDA においてクエリが果たせることは、すでに描かれた天井の下で方向を選ぶことだけ」です。天井そのものを動かすことはできません。この天井は距離に対して単調減少し、古いトークンほど上限が低くなります。
したがって、書き込み時に「重要ではない」と判断されて $\alpha$ が小さかった情報や、後のトークンによって繰り返し減衰された情報は、後からどんなに適切なクエリが来ても、決して取り戻すことができません。
これは本質的に「賭け」の問題になります。書き込みセグメントでは、現在において以下の二つのことを決定する必要があります:$\alpha$ で「その情報をどの程度長く保持するか」、$\beta$ で「どれほど強く書き込むか」。そしてこれら二つの最適値は、将来どのようなクエリが来るかに依存します。
最初の 2 つのトークンまで完全に同じだが、その後のクエリが異なるシナリオにおいて、KDA は必ず同じ $\alpha, \beta$ を出力します。未来のクエリを予測できない以上、書き込み時点での判断は固定されてしまうのです。
より直接的な対比として、以下の式を見てください。
左辺:和を先に計算し、クエリに依存しない評価を行う
右辺:まずスコアを付け、その後で和を計算する(クエリ依存)
左の式が $O(1)$ で毎ステップ処理できる唯一の理由は、和の計算をクエリの適用前に移したからです。一度和が計算されれば、履歴はクエリに依存しない一つのオブジェクトとなり、その後にどれだけ多くのクエリが来ても、読み出しにかかるコストは一度きりで済みます。
これは効率のための取舍です。「読む前にまず何を読むかを確認する」という権利を放棄し、代わりに定数時間での状態更新と引き換えにしたのです。これにより、クエリは状態行列の中から方向を選ぶことしかできず、Sparse Attention のように「どのオブジェクトを対象とするか」を選択することはできなくなります。
もう一つの側面として、固定された状態行列の容量制限があります。現在の K3 を例にとると、各層が収容できる上限は約 $1M$ 個の要素です。コンテキスト長を $L$ とすると、1M のコンテキスト下でトークンあたり保持される要素数はおよそ 1.5 個に過ぎません。
しかし、Linear Attention 自体が抱える欠陥(前述した 9 つの欠陥など)に対処するためには、Hybrid Attention を導入する必要があります。
1.3 Sparse Attention の圧縮:学習によるプーリング
DeepSeek-V4 を例に取ると、その「圧縮」ステップは KDA の「減衰による被覆」とは全く異なる情報損失のメカニズムを持つため、詳しく見る価値があります。
HCA(Hybrid Compressed Attention) の形式が最もシンプルです。$\alpha, \beta$ を定義し、每 $k$ 個のエントリを以下のように圧縮します。
ここで $w_i$ は学習可能なウィンドウ内の位置バイアスです。この圧縮操作により、シーケンス長は $1/k$ に短縮されます。注意すべき点は、$\odot$ がハダマール積(要素ごとの積)であるため、重みがチャネルごとに独立していることです。つまり、同じウィンドウ内でもチャネルによって異なるトークンを主要な情報源として選択できます。この点はしばし見落とされますが、これにより圧縮の表現力は単なるスカラー加重平均よりもはるかに高くなります。
CSA(Compressed Sparse Attention) の圧縮率は 4 ですが、もう一つの特徴として「オーバーラップ(重なり)」メカニズムを持っています。これは二組の投影 $W_1, W_2$ と二組の重み $\alpha_1, \alpha_2$ を計算し、各圧縮スロットは $k$ 個のエントリから生成されます。
「Q」のインデックスと「K」のインデックスが重なるため、シーケンス長は圧縮されますが、隣接するスロットでは境界トークンを共有します。この重なりは単なる平滑化のテクニックではなく、より深い意味を持ちます。圧縮されたスロットを獲得した後、CSA は Query を基に再度 top-k インデクサで選択を行うことができます。一方、HCA レイヤーは圧縮比が低いため、すべての圧縮スロットに対して密なアテンション(dense attention)を適用します。
1.4 統一された圧縮粒度の尺度
トークン数を 1 つの分割不可能なユニットにマージする数を「G」と定義すると、「Q」が識別できる履歴断片数は G で表されます。4 つのメカニズムを同じ定規の上に並べて比較します。
- メカニズム:圧縮粒度 / 1M でのアドレス可能ユニット数 / ユニットあたりの次元数 / トークン・層あたり保持要素数 / Query の動作
- KDA, 69 レイヤー:1 (1M では 1.5) / 1 / - / 1.5 / 方向のみ選択可能
- Gated MLA, 24 レイヤー:1 / 1,048,576 / 576 / 576 / すべてのユニットに連続重み付け
- DSv4 HCA, 31 レイヤー:128 / 8,192 / 512 / 4 / すべてのユニットに連続重み付け
- DSv4 CSA, 30 レイヤー:4 (2 倍の重なりを含む) / 262,144 / 512 / 128 / まず 1024 を選択し、その後重み付け
圧縮率の観点から見ると、1M の条件下で KDA はトークン・層あたりわずか 1.5 個の要素しか保持しません。一方、DSv4 の HCA レイヤーは 4 個を保持します。KDA の方がより強力に圧縮されていますが、両者のオーダーは同じです。
ここで疑問があります。最終的なアブレーション実験の結果次第では、HCA はこのような高い圧縮率下でもほとんど役立たずになる可能性があります。どこまで圧縮できるかの下限値を算出できないでしょうか?
しかし、全モデルの K3 における計算量は G で、DSv4 では G です。K3 の層・トークンあたりの平均保持要素数は、実は DSv4 の 2.30 倍にもなります。「Linear Attn は本当に省演算できたのか?」と逆に問わざるを得ません。
もう一つの顕著な違いはアドレス可能ユニット数です。KDA は 1 つですが、DSv4 CSA は 262,144 です。これをビット換算すると、「1 回の読み込みで Query が下せる選択の多さ」がわかります。CSA は 262,144 ユニットから 1024 を選び出すため、その決定量は
となります。
一方、KDA のユニット数は 1 つであり、組み合わせによる選択量はちょうど G bit です。これにより「Query 依存性」に計算可能な尺度が生まれます。
- KDA の Query 依存は純粋な連続的な方向選択であり、離散的なアドレス情報はゼロです。
- HCA と MLA は離散選択を行いませんが、連続重み付けは 8,192 および 1,048,576 の識別可能なユニットに作用します。
- CSA のみが、離散選択と連続重み付けの両方を利用しています。
ここで計算可能なシナリオを提示しましょう。履歴に 2 つの事実、事実 A と事実 B があると仮定します。これら 2 つのアドレスベクトルのコサイン類似度が G です。これは自然言語において非常に一般的なケースで、同種のエンティティの Key が互いに近接することはよくあります。次に、2 つの Query を入力します:Q1 は A を求め、Q2 は B を求めます。
KDA の側では、2 つの Query はすでに相互に汚染された状態を共有しています。書き込み時に Delta は Q1 方向に沿って消去されますが、Q2 と Q1 はほぼ同方向であるため、Q2 は消去パス上にあり、ついでに一部抹殺されてしまいます。Q1 を使って Q2 を検索すると得られる相対残差は
となります。
この残差の振幅は信号そのものを超えています。さらに深刻なのは、後続の乗算減衰によって信号と汚染が同比例で縮小されるため、Q2 の状態は時間経過とともに改善しないことです。Q1 も同じく汚染された Q2 に直面しており、2 つの Query はこの汚染を個別に回避する方法を持ちません。回避できる対象が 1 つしかないからです。
DSA(DSv4 CSA)の側では、2 つの事実は異なるスロットに格納されています。それらがたまたま同じ 4 トークンのウィンドウ内に収まらない限り、Q1 と Q2 のスロットは互いに重なりません。Q1 のインデクサは Q1 のスロットを top-1024 にランク付けし、Q2 のインデクサも同様に Q2 のスロットを top-1024 にランク付けします。この 2 回の選抜は完全に独立しています。もしどちらかの選抜で漏れが生じても、そのスロットは元の場所に存在しており、次の層のインデクサが再度スコアリングを行います。
KDA と DSA の圧縮手法を比較する際、両者の干渉メカニズムに注目した分析視点も有効です。以下にその対比を示します。
2 件の事実が互いに干渉するのはどのような場合か
- 判据の性質:KDA (Key-Dependent Attention) / DSA (Distance-Sensitive Attention)
- 可预测性:両者の Key ベクトルが方向を同じくする場合。位置情報とは無関係。 / 両者が同一の圧縮ウィンドウに収まる場合。コンテンツ内容とは無関係。
- 性質:意味論的 (Semantic) / 位置的 (Positional)
- 予測可能性:学習された Key の分布次第であり、不可预测。 / T と位置情報から直接計算可能で、可预测。
- 緩和策の有無:なし。書き込み前に誰が衝突するかを事前に知る術がない。 / あり。CSA (Compressed Sparse Attention) では、2 つの投影行列が重なる構造がこの問題を解決している。
最後に、両者の決定的な差異をまとめます。
- KDA の圧縮:DSA の圧縮
- 圧縮後の対象:分割不可能な定長状態 / 依然としてアドレス可能なスロットの列
- 書き込み時の上書き:はい。K と V の減衰が T に沿って情報を消去する / いいえ。スロットは追加のみで、互いに上書きしない
- 可逆性:不可逆。モノイド群であり群ではないため / キャッシュ層では无损(情報消失なし)。スロット内でのプーリング処理のみが情報損失を引き起こす
- 失效の形態:コンテンツが消滅し、永久的に失われる / 単に見逃しただけで、再試行可能
- 补救方向:补救不可能。MLA (Multi-Head Linear Attention) の別の副本から情報を取り戻す必要がある / インデクサーの改善で対応可能。次層や次のステップで再度選択できる
このように「不確実性をいつ解消するか」という点で両者は分岐します。K3 は 69 層目に賭け、24 層の MLA と 8 つの AttnRes アーカイブによるヘッジ(対抗策)を採用しています。一方、DSv4 はすべての処理を「読み取り時」に遅延させています。
2. 圧縮が抱える難問
本章では、KV キャッシュ圧縮の理論的下界について議論を開始し、その後、Sparse Attention と Linear Attention のそれぞれの長所と短点について詳しく解説します。
2.1 KV 圧縮の下界とは何を意味するのか
KDA は計算複雑度を O(T^2) から O(T) に削減できると言われますが、この評価は KDA レベルに限られた話です。モデル全体として見れば、K3 は Linear Attention が抱える純粋な欠陥を解決するため、24 層にわたって完全な MLA を保持しています。
したがって、以下のような仮説を立てることができます:KV キャッシュの圧縮における理論的下界は、モデルレベルでは O(T) の形式で必ず存在し、これを完全に排除することは不可能です。実際の違いは、この T に付随する定数項をいかに下げるかというトレードオフの問題に過ぎません。
K3 は T 層の数を 93 層から 24 層へ減らすことで対応し、DSv4 は各層における T 項の単価を下げることで、CSA では 4 倍、HCA では 128 倍の圧縮を実現しています。
では、この下界は本当に存在するのでしょうか?前章で述べた通り、本質的には「Query-blind(クエリ情報を考慮しない)」状態におけるデータ圧縮の下界の問題として捉える必要があります。
2.2 消えない O(T) の正体
この仮説について、いくつかの論文を検索した結果、『Compression Barriers in Autoregressive Transformers』[1] という論文に詳細な記述が見つかりました。その中の定理 6 は以下の通りです。
定理 6. ある普遍的定数 C が存在し、任意の入力長 T に対して、出力 y が条件を満たす確率が少なくとも 9/10 となるようなアルゴリズムは、少なくとも Ω(T) ビットのメモリを必要とする。これは、汎用的でデータに依存しない KV キャッシュ圧縮方案は存在しないことを意味する。
数学的な記述が多すぎて「読者を人扱いしていない」と批判されることもあるため、ここではその証明の概要を噛み砕いて説明します。大まかな流れとしては、この問題を「通信インデックス問題」へと帰着させるアプローチです。つまり、Attention メカニズム自体をメモリへのアクセス問題として捉え直します。
アリスはビット列 x を保持しており、
Bob は添字 i を保持しており、Alice はそれを知らない状態です。
Alice から Bob へは、一方通行の通信(双方向のやり取りは不可)でメッセージを 1 つだけ送信できます。
Bob は少なくとも確率 p で正しい値 x_i を出力する必要があります。
この問題における一方向ランダム通信複雑性は O(log n) です。
アテンション(Attention)アルゴリズムに例えると、Alice が保持する入力は 0/1 の行列 A で、全ビット数は n×d です。Bob はこの行列の i 番目の要素を参照する必要があります。ここで、n はトークンシーケンスの長さ、d は隠れ層次元(hidden-dim)を表します。
アテンションメカニズムは、アドレス指定による読み出し操作として機能します。ここでは特に、Alice が KV(Key-Value)ペアに対して行うエンコーディングに焦点を当てます。
- Value にエンコードする情報を載せる:最も単純なアプローチは、行列 A の i 番目の行をそのまま i 番目の Value ベクトルとして扱うことです。
つまり、v_i = A[i] です。
- Key を相互に独立したアドレスとして使う:互いに干渉しない n 個のアドレスベクトルを構築する必要があります。標準的な正交基底 e_1, ..., e_n は、互いの内積が 0 になるため、この目的には理想的です。しかし、Key の空間を圧縮したい場合(例えば Key を d' 次元空間に落とし込み、d' < n とする場合)、n 個の厳密な直交ベクトルを収容することはできません。
ここで登場するのが、Johnson–Lindenstrauss(JL)のランダム射影です。これは非常に美しい問題解決法を提供します。「多数の高次元ベクトルを低次元に圧縮しても、それらの間のユークリッド距離を近似したまま保つことは可能か?」という問いに対する答えは「Yes」です。
形式的に記述すると、n 個の点 x_1, ..., x_n を考えます。許容される相対誤差を ε としたとき、JL の補題は以下の性質を持つ写像 f: R^d → R^{d'} が存在することを保証します。
任意の i, j に対して、
(1 - ε) ||x_i - x_j||² ≤ ||f(x_i) - f(x_j)||² ≤ (1 + ε) ||x_i - x_j||²
ここで必要な目標次元 d' は、
d' = O(log n / ε²)
で済みます。
つまり、Alice の Key を d' 次元に圧縮する場合、各要素が独立して標準正規分布に従うランダム行列 R(d × d')を用意し、f(x) = Rx と定義します。さらに、スケーリング係数として 1/√d' を掛けます。
もし d' ≥ C log n / ε² (C は適切な定数)であれば、確率少なくとも 1 - δ で、すべての内積が以下の条件を同時に満たすことが保証されます:
つまり、高次元空間内の直交ベクトルを低次元へランダム射影しても、その直交性はほぼ保たれます。これは高次元空間の直感に反する性質を示しています。すなわち、n 次元空間は n よりも遥かに多い数の近似直交方向を収容できるのです。
ここで、下界が成立するための最初の条件として、m ≥ C log n が現れます。
Alice は n 個の三元組を入力した後、b ビットのメモリ状態を Bob に送信します。Bob はその後、アルゴリズムに新たな三元組 (i, v_i, w_i) を入力します。ここで i は第 k 番目のアドレスベクトルの方向を表し、v_i は定数因子 C でスケーリングされます(このスケーリング手法は Keles et al., 2022 に由来します)。
すると、スコアリングベクトル s_k が満たすべき条件は以下のようになります。これは論文で「ソフトマックスの可塑性 (malleability)」と呼ばれる現象です。定数 C を大きくすることで、s_k と他のスカラー値との間隔を任意に広げることができます。指数関数がさらにその間隔を増幅させるため、ソフトマックスは滑らかな加重平均から近似 argmax へと退化し、離散的支持集合上でディラックの尖峰(デルタ関数)に近づきます。
s_k をソフトマックスの重みとします。出力ベクトルの第 k 成分は以下の式で表されます。
目標項:C^2 / (1 + C^2)
干扰项:∑_{j≠k} exp(s_j) / (1 + ∑_{j=1}^n exp(s_j))
(Bob が入力した行は s_k = C^2 を満たし、分子には寄与しません。分母には C^2 という項が追加されますが、全体のオーダーは変わりません。)
以下、二つのケースに分けて検討します。主項を A、干扰项の和の上界を B と記します。
ケース 1: C = 0。分子には干扰项のみが残ります。各 s_j は負の値をとるため、B < 1 です。したがって、出力は非常に小さくなります。
ケース 2: C > 0。分子には主項 A が少なくとも一つ含まれます。A の値は C^2 に比例して大きくなるため、出力は顕著に増加します。
このプロトコルが成立するためには、Bob がこれらの二つの区間を明確に区別できる必要があります。つまり、C を十分に大きく取ることで、ケース 1 とケース 2 の出力値の差を最大化できます。論文では C = log n、n = 2^b と設定しています。
このように、二つのケースにおける出力値は C^2 倍の差が生じます。至此、C の構成が完了し、その取值範囲も確定しました。しかし、Bob が正解できることと、C が十分に大きくなることは、還元(reduction)の最後のステップまで繋がっていません。最も重要なのは、プロトコルの成功率が要件を満たすことです。
ここで失敗の原因は二つあります。一つは JL 射影が内積条件を満たさない場合(確率 ε)、もう一つはアルゴリズム自体が誤った結果を出力する場合(確率 δ)です。併集合界を用いると、Bob の成功確率は少なくとも 1 - (ε + δ) となります。
これは索引問題が求める成功率の要件を満たしています。至此、完全かつ合法的な索引問題プロトコルが構築されました。
- 入力規模:n = 2^b、つまり b ビット
- 性質:一方向性、確率的、成功率 1 - (ε + δ)
- 通信量:O(b)
JL 定理は、上記の条件を満たすいかなるプロトコルにおいても、その通信量は Ω(log n) でなければならないと断言します。したがって、以下の下界を導出できます。
本プロトコルの通信量に関する下界
論文ではさらに、以下の点についても議論されています:
低次元空間における限界:埋め込み次元が小さい場合、論文は空間計算量の下限を証明し、Zandieh 氏らが提案した SubGen アルゴリズムがこの特定条件下で理論的下界に到達していることを示しています。しかし、現在の LLM の多くはこの前提とは異なるアプローチを採用しています。
構造的仮定の役割:論文明確に指摘しているのは、非構造化なスパース性だけでは線形な空間の壁を破ることはできないという点です。つまり、アテンション行列がスパースであること自体は重要ですが、そのスパース性がどこに存在するかを知らなければ、亜線形の空間計算量の実現は不可能です。この知見は、スライディングウィンドウなど特定のスパースパターンに依存する実用的アルゴリズムの数多くの理論的根拠となっています。
スライディングウィンドロアテンションの拡張:論文では、ウィンドウ外の Value ベクトルを完全に無視しないより一般的なスライディングウィンドウアテンションメカニズムも分析されています。このシナリオに対して著者は、リザーバーサンプリング(Reservoir Sampling)に基づく新たな亜線形空間アルゴリズムを提案し、その空間計算量がほぼ最適であることを証明しました。
時間計算量の下限:論文はさらにトークン生成の時間計算量についても研究しており、非適応的(事前にデータアクセスパターンが固定される)なストリーミングアルゴリズムにおいて、最悪ケースで最後のトークンを処理するまでの時間が少なくとも一定値になることを証明しています。
2.3 Linear と Sparse の議論を再考
ここで一つ疑問が生じます。一般的な通説として以下のような主張がなされることがあります。
Linear attention の状態は固定された値に保たれ、入力と無関係であるため、必然的に情報が失われ、Softmax Attention の出力を再現することはできない。
したがって、これは保証のない有損近似に過ぎない。
それなら意味がない。KV キャッシュの保存は避けられないのだから、JL 引理を用いて KV の次元を圧縮する方がマシではないか?MLA/DSA/CSA のように。
固定された状態こそが Linear Attn の最大の弱点です。Linear attention の状態は入力よりも桁違いに小さい(次元数を n とすると、約 2000 倍の差があります)。これは完全に理論的下界の外側に位置しており、この点について Linear Attn を支持する立場の人々が反論するのは難しいでしょう。単純な Linear Attn には前稿で 9 つの欠陥を指摘しました。
しかし、こうした結論は一面しか捉えていないかもしれません。Linear Attention の道筋にはすでに Hybrid Attention が発展しており、例えば Kimi K3 は「3 層の KDA + 1 層の Gated MLA」を一つのユニットとして捉えるべきではないでしょうか?
ここで議論されている困難な問題は、インデックス通信問題に帰着されます。つまり、アリスが 1 ビットを隠し、ボブが後で特定の位置から取り出すという問題です。これは本質的に「干し草の山の中の針」の問題、すなわち非構造化された長いコンテキストから単一の情報を正確に検索するタスクと同等です。したがって、定理は単に「亜線形計算には損傷が伴う」と述べるだけでなく、その損傷がどの種の問題で顕著になるかを具体的に指摘しています。
これは経験的に観察される現象とも一致します。Kimi K3 は長文コンテキストにおける正確な情報検索タスクでは性能が低下する可能性がありますが、言語モデリング、要約、常識推論など情報が高度に冗長なタスクでは損失はごくわずかです。つまり、「3 層の KDA + 1 層の MLA」からなる K3 ブロック全体として、非常に有望なアテンション構造と言えるかもしれません。
こうして対立する見解が生まれます。「私が慣れ親しんだ近似手法なら多少の損傷は許容できるが、あなたの手法では許されない」という主張です。そして、「必ず無損でなければならない」という条件も必要ないのです。少し曖昧さを含ませた上で、最後に Full Attn を追加すればよいのではないでしょうか?
論文では、データに依存しない状況、つまり注意行列がスパイシーであることは知っていてもその位置が不明な場合でも、線形未満の空間計算を実現できないことが示されています。これは、インデクサーを持たない一連のスパイシーアテンションアルゴリズムの可能性を閉ざす結果となりました。
そこでハイブリッドアテンションについて、リニアアテンション支持者は「状態行列はデータ駆動型の圧縮であり、MLA(Multi-head Latent Attention)との組み合わせで長距離記憶を回復し、スパイシーアテンションよりも多くの層にわたる帰納的バイアスを持ち、汎化能力も向上する」と主張するかもしれません。
したがって、リニアアテンションとスパイシーアテンションの対立は、インデクサーを持つハイブリッドアテンションや DSA/CSA などのスパイシーアテンション手法との比較へと移行しました。
本質的な争点は、「殊途同帰」の目標に向かうものです。すなわち、Query-blind(クエリ非依存)の状態において、KV 圧縮比を維持しつつ定数項をさらに小さくし、パラメータ効率を高めるアテンション機構を見つけることです。
これは徐々に三つの軸での圧縮問題へと発展しました。第一にトークンシーケンス軸、第二に hidden-dim(隠れ次元)チャネル軸、そして第三にモデル深さの軸です。最後の「モデル深さ」は比較において見落とされがちですが、ここには重要な効率性の問いが存在します。
DeepSeek-V4 Pro のモデル層数(61 層)は、ハイブリッドアテンションを採用した K3(93 層)よりも大幅に少ないです。パラメータ規模においても V4p は K3 よりも遥かに小さいにもかかわらず、両者の性能上限はどうなるのでしょうか?少なくとも V4P-0813 の発表後のスコアを見ると、その結果は非常に良好です。これが前述の「パラメータ効率をさらに高める必要性」が定義された理由です。
リニアアテンションの欠陥をモデル深度で補うことは值得でしょうか?スケーリング則(Scaling-Law)の観点からは大規模なパラメータ規模への拡大は肯定されますが、その前にまずパラメータ効率の問題を解決すべきではないでしょうか?
その他にも、低精度アテンション計算(チップ効率の次元)やデータ依存性の時間軸の次元といった要素があります。後者は主に Agent ハーネスプロセスにおけるコンテキスト圧縮アルゴリズムで現れます。これらについては後ほど触れます。
2.4 リニアアテンションの視点
2.4.1 縫い合わせと補修のプロセス
前稿『Kimi K3 の KDA(1): KDA が Gated MLA および AttnRes とどのように連携するか』で詳述した通り、リニアアテンションにはいくつかの問題があり、conv を追加して修正する必要があります。さらに σ も加えられ、γ も必要となり、最後に非線形活性化関数である SiLU を全体に適用しなければなりません。
本来避けようとした指数演算が再び加わってしまいました。それでもなお、状態の累積や衝突は避けられません。
リニアアテンションは状態行列への入力のみを続け、不要な情報を忘却させることができません。そこで Mamba-2 では σ を導入し、入力の依存性を持つ記憶寿命を持たせました。しかし、この忘却は粗粒度であり、書き込みも依然として加算のみです。
その結果、DeltaNet が登場しました。これは Δ であり、現在のキーに沿って方向性を定めて書き換えが可能ですが、グローバルな旧状態を即座にクリアするメカニズムが欠けています。
そこで Gated DeltaNet が生まれました。これは γ であり、グローバル忘却と方向性のある書き換えの両方を可能にしますが、各ヘッドには減衰係数が一つしかありません。
そして KDA が登場しました。これは δ であり、各キーチャネルごとに独立した減衰を導入しましたが、固定された状態は完全なトークンアドレス可能なメモリとは異なります。
次に、遷移(transition)について考えましょう。この遷移には特定の固有値があり、ある方向に沿った固有値は、制約を加えない限り、仮に初期状態が安定していても、その方向での値が増幅されたり、逆方向に過剰に振れたりする可能性があります。
そのため、Q/K に対して L2 ノルム(L2Norm)の適用をパッチとして追加し、出力ゲートにもフルランク射影(Full-rank projection)を追加する必要があります。さらに MLA(Merged Linear Attention)も同時に導入されるため、全体としての活性化パラメータは約 8B 増加します。
これは KDA オペレータレベルでの話ですが、さらにその代数構造に目を向けると、KDA は「アフィン収縮半群(affine contraction semigroup)」であることがわかります。この収縮の性質が、長距離検索における記憶能力に限界をもたらすため、Hybrid Attention(ハイブリッドアテンション)を採用し、フルアテンションを持つ MLA で補完する必要があります。これが、Linear Attn から始まり、KDA へと至るまでの「縫い合わせ」的な進化の過程です。
2.4.2 KDA が避けられない3つの壁
もし将来、Linear Attn が KV の MLA のようなフルアテンションを回避し、サブラインニア(亜線形)な計算コストで利益を得られるようになるなら、等価的に言えば、トークン間のアテンションを線で結び、一つのトポロジー(位相構造)を構成したと考えることができます。その際、問われるべきは「距離が 2 離れている 2 つのトークンの間にある『線』が、KDA の状態空間の中で読み出されるまで生き残れるか」という点です。
KDA の重みは時間経過とともに指数関数的に減衰するため、この線の強度も距離に応じて指数関数的に低下します。「まだ生きている」と判断する閾値(例えば、減衰して 1% 以下になれば「死んだ」とみなす)を設定すると、以下の関係が導かれます。
ここで重要なのは、距離を大きくするには唯一つの方法しかないことです。それはパラメータを 1 に近づけることです。しかし、このパラメータを 1 に近づけると同時に、3 つの悪影響が発生します。
第一重目の壁:極端な要件(減衰の壁)
これは、距離が 10 倍になるごとに、パラメータは 10 分の 1 ずつ小さくしなければならないという要求です。例えば、458 トークンまでなら許容範囲ですが、1M トークンを支えるには、パラメータを小数点以下第 7 位まで精密に制御する必要があります。これは、ある数を「1」の極めて狭い領域に釘付けにするような、過酷な要求です。
第二重目の壁:勾配がほぼゼロ(学習可能性の壁)
このパラメータを微分すると、その値はシグモイド関数の極左端に位置することになります。ここでの勾配は 4 つ桁ほど小さくなり、最適化器に対して「この方向への更新は行わないでください」と告げるような状態になります。
第三重目の壁:学習できても計算精度が不足(数値の壁)
前稿§2.3.8 でも触れた通り、FP32 形式では有効数字が残り 7 桁程度しかありません。つまり、1M トークン離れた長距離アテンションのトポロジーループは、FP32 の精度ではもはや信頼性が保てません。
この 3 つの壁の共通点は、「互いに独立でありながら、すべてが同じ方向に制約を強めている」ことです。
- 項目:要件
- 長距離維持のための精度(第一重):高い
- 学習のための勾配(第二重):大きい
- 有効数字の桁数(第三重):多い
これら 3 つはすべて同じ「ノブ」に依存しており、すべてが同一方向へ悪化しています。どの設定値を選んでも、この 3 つを同時に満たすことは不可能です。
一方で、減衰には下限と上限があります。
- 下限:パラメータが小さすぎると(例:0.99 以下)、一度に忘れすぎてしまうため、数値的な安全性を買う代わりに、「速やかに忘れる」という能力を失います。この欠損は delta 項によって補われます。
- 上限:パラメータが大きすぎると(例:1 に近い場合)、長期的な記憶を獲得できますが、その代償として「一貫した収縮の隙間」が消失してしまいます。
しかし、各ステップで更新できる delta はランク 1 の方向のみです。つまり、選択的に n 次元の概念部分空間を消去するには、少なくとも n ステップが必要です。「減衰は速く行えるが、そのチャンネル内では選択性がなく」「高速かつ選択的な忘却」を単一の層・単一のステップ内で達成することはできません。これは、複数のトークンや複数の層によるリレー方式に頼るしかありません。
ここから導き出されるのは、連続する KDA 層の連携と、モデル全体の深さが必要であるという事実です。実際、この「深さ軸」における効率性も影響を受けます。これにより、以下のような弁証法(対立)が生じます。
- 超長距離依存を維持するためには、特定のチャンネルをパラメータ 1 に近づける必要がある。
- しかし、これらのチャンネルの時間スケールを学習し続けるためには、減衰ゲートが飽和領域にない状態を保つ必要がある。
- 超長距離依存を維持するためには、計算効率を高めるために低精度(FP32 など)を使用できない。
- 減衰の矛盾をバランスさせるため、潜在的にモデル層数を深くする必要があるが、これも計算効率に影響を与える。
このように、KDA は単なる技術的な改良ではなく、計算効率、記憶容量、学習可能性という複数の要素の間で、極めて厳しいトレードオフを強いられている構造なのです。
次に、効率性に関する問題、あるいは別の言い方をすれば、「なぜ FlashKDA の chunksize は 16 に設定されているのか」という問いについて考えましょう。
公式における除算は、chunkwise 形式の弱点(アキレス腱)です。ここで登場する項は、距離保留因子の連乗積であり、その逆数は chunk 内の距離とともに無制限に増加します。負の Softplus パラメータ化を採用した場合、16 ステップの累積減衰は理論値に限りなく近づきますが、有限精度の世界では必ずオーバーフローを起こしてしまいます。
Kimi Linear の対策は、chunk を 16 トークン分のサブタイルに細分化することです。非対角タイルについては、対数空間で相対減衰を計算すれば Tensor Core で処理できますが、対角タイルは依然として位置ごとに明示的な計算が必要となり、これが chunk 内での主要なボトルネックとなっています。
Kimi K3 の解決策は、この数値問題を根源から排除することです。項の上限を封じ込めたことで、逆数の再スケーリング因子は常に正確に表現可能になります。これにより、対角タイルと非対角タイルがどちらも稠密な Tensor Core GEMM として統一され、低速な処理パスは完全に削除されました。
これが FlashKDA が chunksize = 16 を選んだ三つの理由です:
- 数値範囲: 16 は bf16 の動的範囲にちょうど収まり、chunk 内での再スケーリング技術が不要になります。
- 逆数の計算コスト: の逆数は Neumann 級数で直接展開できるため、さらなる分解は不要です。
- 命令マッピング: すべての数学演算が SM80 MMA (m16n8k16) 命令にきれいにマッピングされ、カーネルはシンプルかつ移植性が高いものになります。
「Tensor Core の一般的な 16x8x16 の次元と完璧に合致している」と言うのは正しい表現ですが、ここで別の視点を考えてみましょう。TPU や DSA アーキテクチャのアクセラレーターでは、通常 Tensor Core が 128x128 または 256x256 です。この場合どうすればよいのでしょうか?
大まかな問題は以下の図の通りです。
「CHUNK を 128 に変えればすべて解決する」と思えるかもしれません。しかし、K3 の数値制約が逆に作用してしまいます。単一レベルの再スケーリングでは、項が制限されるため(bf16/fp32 の指数上限はどちらもです)、MXU への親和性を高めるために CHUNK を大きくすることはできません。それはモデルの変更であり、カーネルの変更ではありません。CHUNK = 16 とこの制約は、セットで設計された一対の要素なのです。
より深い障壁は「チャネルごとの減衰」にあります。危険な因子が内積内部に現れます。
これはチャネルごとのベクトルであり、点積から分離して取り出すことができません。GDN や Mamba-2 のようにスカラー減衰を採用する場合、項は純粋なスカラーであるため、対数空間で自由にブロックごとに再アノテーションでき、chunk を大きくしてもほぼ痛みはありません。しかし、KDA は表現力を優先しチャネルごとの減衰を選んだ結果、再アノテーションのウィンドウが数値範囲によって 16 トークンに固定されてしまいました。
もちろん、2 レベルのループ分塊戦略を採用することも考えられます。外側の CHUNK を 128 に設定して項の影響を受けない GEMM を 128x128 で計算し、内側で行列を結合させて Tensor Core の利用率を高める方法です。しかし、全体として見れば MFU(モデルフロップル利用率)はそれほど高くならないでしょう。
2.5 Sparse Attn の視点
スパースアテンションの考え方は非常にシンプルです。まず、EOT(End of Token)の観点から見ると、SDPA(Scaled Dot-Product Attention)が最適解であるため、計算コストがかかってもソフトマックスを維持する価値があります。
残る課題は2つあります。1 つ目はチャネル軸(チャンネル方向)です。KV(Key-Value)ペアにスパース性があることを認め、JL 引理(Johnson-Lindenstrauss Lemma)を用いて隠れ次元(hidden-dim)上で圧縮を行います。これが MLA(Multi-head Latent Attention)の仕組みです。
2 つ目はトークンシーケンス軸です。コンテンツに対して一定の知見を持ち、より低次元で低精度(FP4)の評価器(インデクサー)を用いて選択を行うことで対応します。これが DSA(Dynamic Sparse Attention)のアプローチです。
さらに、シーケンスが長くなるとソフトマックスのピーク値が小さくなる問題があります。これへの対策として、アテンションシンク(attn-sink)処理を導入するか、top-k 選択によって長文コンテキストの峰度(kurtosis)を高める方法があります。
さらに進んでブロック構造による圧縮を行い、top-k 選択時にブロック境界で値がジャンプする問題を回避するため、KV 上でオーバーラップ(重複領域)を持たせる手法を採用します。これが CSA(Chunked Sparse Attention)です。これにより、DeepSeek の技術進化の全体像が見えてきます。
ただし、スパースアテンションにおいて単に一定数の top-k を固定して選択する方法には課題もあります。この硬いカットオフで選ばれたブロックが、フルアテンションをどのように近似できるかを保証する必要があるからです。以下に簡単な導出を示します。
k 個のキーがあり、ソート後のスコアを s_i、ソフトマックス確率を p_i とします(ただし i=1, ..., k)。top-k カットオフにより上位 k 個を保持し、再正規化を行います:p'_i = p_i / Z (i ≤ k)、p'_j = 0 (j > k)。ここで Z は正規化定数です。末尾の質量を ε と記します。
各トップ k の確率は分母が小さくなるため増加し(p'_i > p_i)、各末尾の確率はゼロになります。トップ側で「余った」総量は ε、末尾で「失われた」総量も ε です。したがって、このバランスが成り立ちます。
対、尤度比は と無関係な定数です。定数の対数を期待値としても、それはその定数自体になります。
これは Top-k 重帰一化に固有の構造です。スコアの分布を改めて分析すると、先頭部分は各項目が で、合計 項あります。末尾部分も同様に各項目が で、合計 項あります。これらを に代入します。
つまり、 が 1 大きくなるごとに、誤差の上界は約 倍に縮小されます。例えば の場合、 を満たすことが保証されます。この上界を評価するには、単に 2 つの数値があれば十分です。
この条件を満たすためには、直接得られる唯一の要件は以下の通りです。
捨てられた要素を除外する必要があります。
したがって、単純なバケット分割アルゴリズムを適用できます。
投桶(バケットへの投入):スコアを計算する際に併せてバケット番号を算出し、整数カウント値に 1 を加算します。各キーに対して減算、取整、カウントの処理はそれぞれ一度だけ行います。
查表(テーブル参照):バケット内のキーの最大値は固定されています。このテーブルはデータに依存しないため、コンパイル時に事前に計算しておくことができます。「そのバケットに含まれる要素数」に「各要素が取りうる最大値」を乗算することで、そのバケットの品質上限を導き出せます。
「累加」処理は、最も右側(スコアが最低)のバケットから左へ向かって行います。予算を超過した時点で停止し、その時点のバケットが境界線となり、閾値として機能します。これにより、特定のキーが保持されます。
HCA 実装に関連する別の潜在的な問題として、Sparse Attention が TopK をどのように選択するかに関わらず、単一ブロック内の圧縮率をさらに高める方法も検討すべき課題です。HCA のプーリングマッピングは以下の通りです。
最も単純なモデルを構築してみましょう。ゲート近似が均一であると仮定し、ウィンドウ内にはクエリに必要な信号を持つトークンが 1 つのみ存在するとします(そのスケールは S とする)。残りの N-1 トークンは互いに独立しており、平均ゼロ、同じスケールを持ちます。プーリング後のスロットは以下のようになります。
信号と同窓干渉の関係を整理します。
信号の振幅を A_s、干渉の振幅は独立した要素が加算されるため A_i とすると、両者の差(相殺)により、信噪比 (SNR) は極めて単純な形式に収束します。
- 機構:信号 / 同窓干渉 / SNR / 分貝
- MLA:1 / 0 / -- / --
- CSA:4 / 0.577 / dB / dB
- HCA:128 / 0.089 / dB / dB
もう一方の観点として、アテンション分布の損失を KL 分解して考察します。
削除された確率質量は、HCA の場合、そのサポート集合がすべての圧縮スロットに及ぶため、第一項は恒等的にゼロとなります。読み取り側が无损(ロスレス)であるにもかかわらず、すべての損失がプーリング段階に集中していることがわかります。これが実質的な欠陥の源泉です。なぜなら、損失がすべて書き込み側にあり、その決定プロセスがクエリ内容と無関係であるため、クエリを変更しても失われた情報は取り戻せないからです。
以上をまとめると、Sparse Attention における実際の KVCache のストレージ量は O(N) ですが、定数項は CSA を用いることで O(1) にまで削減可能です。さらに読み取り側では TopK の選択により、デコード段階での読み取り帯域幅も一部低減できます。しかしながら、TopK の固定カットオフという問題が残っています。Dynamic バケット化アルゴリズムはこの問題を解決しましたが、固定カットオフと比較するとトークンごとの計算量が不均一となり、多数の細かな長尾計算が発生して全体の計算効率を阻害する恐れがあります。
さらに難しい課題として、圧縮率をさらに高める方法(例えば O(1) への到達)が挙げられます。この場合、HCA のような単純なプーリング手法では限界に直面します。ここには新たなアルゴリズムの検討が必要であり、これについては後ほど詳しく展開します。
最後に、Linear Attention の支持者からは、「Sparse Attention は KV に対して Append-Only(追記のみ)であり、Linear Attention のように忘却や消去機能を持たず、後段のインデクサーで選択的に削除するしかない」という指摘があります。また、Linear Attention にはより優れた帰納的バイアスがあり、汎化能力も高いのではないかという疑問も呈されています。
- 圧縮こそが知能である
前文でも述べた通り、Sublinear な圧縮を実現するにはデータ感知型かつデータ駆動型のアプローチが必要です。本文冒頭で KDA を取り上げたのもそのためです。「アフィン収縮半群」というたった 6 文字の概念に、KDA の多くの性質が凝縮されていますが、現在のモデルはまだそのような知能レベルには達していないのが実情です。
では、私たちが現時点で考慮すべき圧縮の方向性はどこにあるのでしょうか。少なくとも第一に、O(N) を極端に追求する Linear Attention がもたらす諸々の欠陥を認め、現状の O(N) の制約を受け入れた上で、以下の方向性を検討する必要があります。
- トークン系列軸:これは「どの程度のトークンを残すか」を圧縮します。複数のトークンを 1 つのブロックとして構成し、ブロックベースで圧縮するか、TopK による Sparse な選択を行うか、あるいは Linear Attention の拡張版を採用するかなどが考えられます。
- Hidden-dim チャネル軸:これは「各トークンにどの程度の幅を持たせるか」を圧縮します。MLA(Multi-head Latent Attention)のような手法や、文脈の異なる段落を特定の部分空間へマッピングするアプローチ(Grassmann Manifold などの手法が該当します)などが候補となります。
モデルの深さ軸:これはバランスを取る必要がある軸であり、比較において最も見落とされがちな点です。Linear Attention は単層内でクエリ認識能力を失うため、その分をより多くの層数で補おうとします。結果として、節約された KV Cache のメリットは、パラメータ数の増加、直列深度の拡大、TPOT(Time Per Output Token)の悪化という形で帳尻合わせされてしまいます。したがって、この軸で問うべきは「どれだけ深く堆積できるか」ではなく、「各層のパラメータ効率」です。同じ性能を、より少ない層数とパラメータで実現できるかが重要です。
チップ効率軸(上記の3つの軸と直交する工程上の軸):より低い数値精度での計算が可能かどうか、精度を一段階下げられるかどうかが鍵となります。
原文を表示
原创 渣B 2026-08-21 17:54 浙江
image
继续谈谈 Linear Attn 和 Sparse Attn
TL;DR
前面一篇文章《谈谈Kimi K3 的KDA(1): KDA 如何与 Gated MLA 以及 AttnRes 协同》详细分析了 K3 的混合注意力机制如何解决 《详细分析一下Attention, Sparse or Linear?》提出的 9 个 Linear Attention 的缺陷.
但是还有一个问题, KDA本身在处理过程中状态矩阵是固定的, 若某份信息在KDA层被写入状态矩阵时已经因为碰撞或者Delta覆盖而丢失, 后续的过程中是无法恢复的. 这是第一篇文章为什么要讨论KDA的代数结构是一个仿射收缩半群, 简单的6个字压缩了大量的信息:
半群, 实质的阐述就是为什么不是群, 这就回答了遗忘的不可逆性. 同时也阐述了复合运算的封闭性, 以及不满足交换律, 这样并行策略上会受到一个维度的限制
仿射变换, 仿射结构中 管"忘多快"(稳定性), 管"记什么"(表达力); 仿射结构把这两者干净地分开, 但是先写入的信息必被后续转移继续遗忘, 它既是表达力的来源, 也是段间归约必须保序的根源.
收缩, 越老的 token, 权重越小, 且是几何式变小, 逐点收缩而无一致间隙展开了很多推导, 例如长上下文的情况下对状态的数值精度需求..
但是第一篇文章还缺少一个详细的和Sparse Attention方案的对比. 其实这里学术界和工业界还是有很多争议的, 我一直的观点是对于未收敛的问题或许都是一个非常好的研究机会, 既然是争议自然各自都有优劣势, 那么就逐渐剥开来详细探讨, 因此本文从几个视角来详细分析:
将Attn的数据路径拆分为 KV写入段, KV存储段以及最后的 Query 读取段 , 再以数据路径不同的压缩机制和寻址机制来展开分析.
从体系结构的视角, Linear Attn 的 State 更像是体系结构中的Register File, 而传统的Full Attn / Sparse Attn 的 KV 类似于传统的 Cache 结构, 那么实质上模型架构和芯片/系统架构 co-design 的视角来看, 本质上是在设计 Memory subsytem, 而这里 Memory 一语双关, 既代表 LLM 中的记忆, 又代表真实芯片中的内存存储结构.
可能需要考虑的一个问题是 Agent Harness 和 RSI 场景下的 Memory , 所以整体上还需要覆盖 Test-Time Training 和 Harness 场景下的一些时空可组合性的问题.
这些是需求侧的分析, 然后在供给侧芯片的Memory wall的存在, 实质上算法/模型结构的竞争本质也变成了同等智力情况下的内存访问的差异. 这其实才是 Sparse 和 Linear 争论的焦点... 当然从体系结构的视角来看待 LLM memory的算法或许后面会单独写一篇.
本文目录如下:
- Linear vs Sparse 的争议是什么?
1.1 从标准Full Attention 谈起
1.2 Linear的实质是结合律换掉的查询感知
1.3 Sparse Attention压缩是学习出来的池化
1.4 统一压缩粒度标尺
- 压缩的难题
2.1 KV压缩的下界在说什么?
2.2 无法消除的 O(T)?
2.3 再看 Linear 和 Sparse 的争议
2.4 Linear Attn的视角
2.4.1 缝缝补补的过程
2.4.2 KDA不可避免的几个墙
2.5 Sparse Attn的视角
- 压缩即智能
3.1 支持 O(T) 的Linear Attn ?
3.1.1 block size 的约束
3.1.2 基于 Prefix Cache 快照
3.1.3 block overlap 和 state 快慢更新
3.1.4 Query-Aware block selection
3.2 基于 Grassmann Manifold 的 hidden-dim 压缩 ?
3.2.1 从 JL 引理到 Grassmann Manifold
3.2.2 从全局 latent 到 block-local 子空间
3.2.3 在局部坐标内完成 Sparse Attention
3.2.4 到底能够省多少 ?
3.2.5 只让适合压缩的 block 进入低维空间
3.3 Harness? 时间轴上的压缩?
3.3.1 时间轴其实是三个时钟
3.3.2 Compaction! 时间轴的压缩
3.3.3 代数上到底谁可逆, 谁可交换?
- 小结1. Linear vs Sparse 的争议是什么?
1.1 从标准Full Attention 谈起
从计算机体系结构的视角来看, 标准的 Full Attention实质上包含一个完整的写入 / 存储 / 读取的过程. 一个 token 从进来到被用掉, 经过三段:
①写入段每执行一次②存储段③读取段每执行一次
基于 Softmax 的 Full Attention 基线在这三段上都不压缩, 于是存储是 , 读取是 , 但是注意到一个不对称的地方:
写入段对每个 token 执行一次
读取段对每个 query 执行一次, 且未来的 query 在写入段执行的时候根本还不存在.
从这个视角来看, 本质上 Linear Attn 和 Sparse Attn 的争议, 实质上是在阐述关于 Memory 的处理: "把压缩插在哪一段" 能够获得更高的效率并且在输出上尽量不打折扣. 唐杰老师最近有一篇《Memory for Large Language Models》的survey 写的挺好的, 后面我们将展开从这个视角进行分析.
image实质上的选择是压缩的插入位置以及压缩沿哪条轴进行, 一份 KV 有两条轴可压, token 轴与通道轴, 而这两条轴的压缩后果截然不同, 因此构成了 4 种方案:
方案 A, 压缩插在写入段, 沿 token 轴. token 进来的瞬间就被折叠进一个定长对象, 写完即压完, 条历史被压成 1 个状态. 存储降到 , 这是最彻底的省法. 但是 token 轴被压到只剩一个对象, 于是读取端基于 Query 连"挑哪一个"这个动作都没有对象可挑. Linear Attention 与 KDA 走这条路.
方案 A', 压缩插在写入段, 但只沿通道轴. 通过对 KV 下投影的方式在写入端压缩, 以 MLA 为代表, 每个 token 只执行一次, 与任何 query 无关, 压缩比 倍. 但它一个 token 都没有合并: 条目数仍然是 , 每个 token 保留自己独立的一条. 读取时把 576 维上投影回完整的 K 与 V, 于是候选个数与基线完全相同, query 的选择权一分未失, 唯一的损失是每个候选变糊了.
两者的区别, 实质上是一个压缩是否剥夺读取端的选择权的取舍.压 token 轴动的是"有几个东西可挑", 压通道轴动的是"每个东西看得多清".
方案 B, 压缩插在读取段. 每来一个 query, 就针对这个 query 把历史压一次. query 感知拉满, 因为压缩函数可以自由地依赖 query. 但存储一分不省 . 你必须留着完整历史才有东西可压; 而且压缩成本从"每 token 一次"变成"每 query 一次", 计算反而更贵. 因此这条路工程上没人走.
方案 C, 压缩插在存储段, 两条轴一起压, 选择插在读取段. 先把 KV 的存储形态改一改 , token 轴上把 条池化成 条, 通道轴上每条槽是 512 维 , 这一步仍然与 query 无关; 但压完之后留下的东西仍然是一堆可寻址的 KV 条目, 只是条目少了. 于是读取段可以照旧按 query 挑一个子集来看. DSA 走这条路.
把四个方案与基线并排, 演进的逻辑就清楚了:
方案
压缩插在
沿哪条轴
存储
每查询候选数
压缩函数可依赖 query
读取可按 query 重组
代表
基线
不压
都不压
不适用
能
Full Softmax
A
写入段
token 轴,
1 个定长对象不能, 因果律禁止
不能Linear, KDA
A′
写入段
通道轴,
不能, 因果律禁止
能Gated MLA
B
读取段
任意
能能
不省资源, 无人实现
C
存储段加读取段
两条轴, 且降到 512
不能
能DSA, CSA
实质上就是压缩是有损的, 在压缩损失代价上需要和算力/存储做一个合理的平衡. 当 K3 以方案 A 把 token 轴压到底换 状态时, 不得不在中间插入一系列 方案 A'保住 token 轴换回可寻址性.
方案 C 是 A 与 B 之间的那个中间点, 而它之所以存在, 靠的是与方案 A′ 同一个不显眼的性质: 压缩之后的对象仍然可寻址. A′ 靠一个 token 都不合并来保住这一点, C 靠合并之后仍留下 条独立条目来保住这一点; 只有 A 把这一点丢了.
1.2 Linear的实质是结合律换掉的查询感知
KDA 的写入段是
而 与 的全部参数 , , , 都只由当前 token 的输入 生成. 展开成通解:
这个式子里没有 . 一个 token 在历史中占多大份额, 由它自己写入时的 与之后所有 token 的 连乘决定, 而这些量在任何 query 到来之前就已经全部确定. 写入段做完之后, 谁重要谁不重要这件事就已经被写死在 里了.
那么 query 到底还能做什么? 把读出展开成隐式核的形式:
实质上 query 可以调方向为 与 的夹角; 但 query 调不了包络, 即由 与算子范数的相容性,
右端一个 都没有. 于是有一个干脆的判断: query 在 KDA 里只能在一个已经画好的天花板底下挑方向, 天花板本身它碰不到. 而这个天花板沿距离单调递减 , 越老的 token 上限越低, 所以一条被写入时判断为"不重要"因而 很小的信息, 或者一条被后续 token 反复衰减的信息, 无论后来来了多么切题的 query, 都拿不回来.
这就把问题变成了一个下注问题. 写入段要在当下决定两件事: 决定这条信息记多久, 决定它写多重. 而这两件事的最优值取决于将来会来什么 query. 对两段前缀完全相同, 但后续 query 不同的序列, KDA 必然给出完全相同的 .
一个更直接的对比如下:
先求和与无关对比先打分依赖
左式之所以能做到 每步, 唯一的原因是求和被移到了查询之前. 求和一旦完成, 历史就成了一个与查询无关的对象, 之后来多少查询都只花一次读取. 它是效率的取舍:你把"读之前先看一眼要读什么"这个权利卖掉了, 换回常数状态. 使得查询变成了在状态矩阵中选方向, 而不是像Sparse Attention那样可以选择对象.
的另一面是指固定的状态矩阵, 以当前 K3 为例, 实质上每一层能够容纳的上限为 元素 , 设Context 长度为 , 那么每 token 在 1M context 下保留的元素大概只有 1.5 个, 但是为了应对 Linear Attention 自身的一些缺陷 (例如前文列举的9个缺陷) 必须引入Hybrid Attention.
1.3 Sparse Attention压缩是学习出来的池化
以DeepSeek-V4为例, 压缩这一步值得细看, 因为它和 KDA 的"衰减覆盖"是完全不同的丢信息方式. HCA 的形式最简单: 令 , , 每 个条目按
压成一个, 其中 是可学习的窗口内位置偏置. 通过这个压缩操作, HCA将序列长度压缩为倍. 注意 是哈达玛积, 所以权重是逐通道的, 也就是说同一个窗口内不同通道可以选择不同的 token 作为主要来源. 这一点常被忽略, 它使压缩的表达力远高于标量加权平均.
CSA 的压缩率只有 4, 但多了一层重叠机制. 它算两套投影 与两套权重 , 每个压缩槽由 个条目产生:
用于 的 索引与用于 的 索引重叠, 所以序列长度仍压到 但相邻槽共享边界 token. 注意, 重叠不是平滑技巧那么简单, 它有更多深层次的用途. 拿到压缩槽之后, CSA 还可以基于Query再做一次 top-k indexer进行选择, 而 HCA 层由于压缩比 它对全部压缩槽做 dense attention.
1.4 统一压缩粒度标尺
令 为被合并成一个不可再分单元的 token 数, 则 就是查询能分辨的历史片段数. 四类层放在同一把尺子上:
机制
压缩粒度
1M 下可寻址单元数
每单元维数
每 token 每层保留元素
查询能做的事
KDA, 69 层
1, 1M 下为 1.5
只能选方向
Gated MLA, 24 层
1
1,048,576
576
576
对全部单元连续加权
DSv4 HCA, 31 层
128
8,192
512
4
对全部单元连续加权
DSv4 CSA, 30 层
4, 含 2 倍重叠
262,144
512
128
先选 1024 个再加权
从压缩比来看, 1M 下 KDA 每 token 每层只留 1.5 个元素, 而 DSv4 的 HCA 层留 4 个, KDA 压得更狠, 但两者同量级. 其实这里我有一个疑问, 可能最终的消融实验来看, HCA估计这么高的压缩比下也没什么卵用, 是否可以算出某个压缩比的下界出来? 但是加权到全模型 K3 是 , DSv4 是 , K3 每层每 token 平均保留的元素反而是 DSv4 的 2.30 倍, 反问 Linear Attn 到底省了么?
另一个展现的差异是可寻址单元数: KDA 是 1, DSv4 CSA 是 262,144. 把它折成比特就是"一次读取里查询能做出多少选择决定": CSA 从 262,144 个单元里选 1024 个, 决定量为
而 KDA 的单元数为 1, 组合选择量恰好 bit. 于是"查询感知"有了一个可算的刻度:
KDA 的查询依赖是纯连续的方向选择, 离散寻址信息量为零
HCA 与 MLA 不做离散选择, 但连续权重作用在 8192 与 1,048,576 个可分辨单元上
只有 CSA 同时用上了离散选择与连续加权
现在给一个能算的场景. 设历史里有两条事实, 事实 与事实 , 它们的地址向量余弦相似度 , 这在自然语言里是非常常见的, 两个同类实体的 key 很容易这么近. 然后来两个 query: 要 , 要 .
KDA 这一侧, 两个 query 共享一份已经互相污染的状态. 写入时 delta 沿 擦除, 而 与 几乎同向, 于是 躺在擦除路径上被顺手抹掉一部分. 用 去查 得到的相对残差是
残差幅度已经超过信号本身. 更要紧的是后续的乘法衰减把信号与污染同比例缩小, 所以 不随时间改善. 而 面对的是同一个被污染的 , 两个 query 没有任何办法各自绕开这份污染, 因为可绕的对象只有一个.
DSA 这一侧, 两条事实在两条不同的槽里. 除非它们恰好落在同一个 4 token 的窗内, 否则 与 的槽互不覆盖. 的 indexer 把 的槽排进 top-1024, 的 indexer 把 的槽排进 top-1024, 两次挑选完全独立. 即使某一次挑漏了, 槽还在原处, 下一层的 indexer 会重新打一次分.
另外对于KDA 和 DSA 两种压缩, 还有一个分析压缩干扰的视角, 对比如下:
什么情况下两条事实互相干扰
判据的性质
可预测性
有无缓解手段
KDA
两者 key 方向相近, 与位置无关
语义的
不可预测, 取决于学到的 key 分布
无, 写入前无法预知谁会撞车
DSA
两者落在同一压缩窗内, 与内容无关
位置的
可预测, 由 与位置直接算出
有, CSA 的两套投影重叠正为此
最后, 总结一下两者的差异:
KDA 的压缩
DSA 的压缩
压缩后的对象
一个不可再分的定长状态
一个仍可寻址的槽序列
写入是否覆盖
是, 衰减与 沿 擦除
否, 槽只追加不互相覆盖
可逆性
不可逆, 幺半群非群
缓存层面无损, 只有槽内池化有损
失效的形态
内容没了, 永久
这次没看到, 可重试
补救方向
无法补救, 只能由 MLA 从另一份副本取回
改进 indexer 即可, 下一层下一次都能重选
两条路线"把不确定性消解在写入时还是读取时"上分道: K3 在 69 层里下注, 用 24 层 MLA 与 8 个 AttnRes 归档做对冲; DSv4 全部推迟到读取段.
- 压缩的难题
这一章的目的是从 KV 压缩的下界计算谈起, 然后展开分别谈论一下 Sparse 和 Linear 各自的优势和缺陷.
2.1 KV压缩的下界在说什么?
KDA 虽然可以说把复杂度从 降到 , 这个说法仅在 KDA 层级上, 对整个模型而言: K3 保留了 24 层完整 的 MLA 用于解决纯 Linear Attn的一系列缺陷. 因此, 我们可以得到一个猜想: KV的压缩的下界从模型层面必定以 的形式存在而无法消除, 实际上的区别只是 的常数项如何降低的取舍. K3 靠减少 层的数量, 从 93 层降到 24 层; DSv4 靠降低每层 项的单价, 压缩 4 倍(CSA)或 128 倍(HCA).
那么是否这个下界真的存在? 正如前一章所讲, 实质上要考虑在Query-blind的情况下的数据压缩下界的问题.
image2.2 无法消除的 O(T) ?
对于这个猜想, 后来搜了一些论文, 发现在论文《Compression Barriers in Autoregressive Transformers》[1]中已经有一些详细的阐述了, 其中:
定理 6. 存在某个普适常数 , 使得对于 , 任何能够以至少 9/10 的概率产生一个输出 满足:
的算法, 必须使用至少 比特的内存. 这意味着, 通用的, 数据无关的 KV 缓存压缩方案是不存在的.
据说太多的数学内容被批“不拿读者当人看”, 那么大白话说说大概的证明过程, 大致就是把这个问题规约成一个通信索引问题. 也就是说我们把 Attn 本身当作一个访问内存的问题.
Alice 持有比特串 ;
Bob 持有下标 , 且 Alice 不知道 ;
Alice 只能向 Bob 发送一条消息 (单向通信, 不允许交互);
Bob 需以至少 的概率输出 .
该问题的单向随机通信复杂度为.
image类比 Attn 算法, 此处 Alice 持有的输入是 0/1 矩阵 , 共 个比特; Bob 需要查询其第 位. 其中 为 token 序列长度, 为hidden-dim. 然后将注意力用作按地址寻址的读取操作. 我们关注 Alice 这一侧针对 KV 的编码:
image1. 以 value 承载待编码信息 :最直接的一步: 将矩阵 的第 行取作第 个 value 向量:
即
2.以 key 作为相互独立的地址: 构造需要 个互不干扰的地址向量. 在 中这是平凡的: 标准正交基 两两内积为 . 但我们期望将 key 的空间压缩, 例如 key 位于 维空间且 , 无法容纳 个严格正交的向量.
这里就引入了Johnson–Lindenstrauss(JL)随机投影, 它解决的是一个很漂亮的问题:能不能把大量高维向量压缩到低维, 同时近似保留它们两两之间的欧氏距离? 答案是可以.
image形式化的描述, 设有 个点 , 给定允许的相对误差 , JL 引理保证存在一个映射 使得对所有点对 ,都有
并且所需的目标维数仅为
也就是说对于Alice 的 key 压缩到 维, 取随机矩阵 (各元素独立服从标准正态分布), 定义 , 并令 . 只要
则以至少 的概率, 所有内积同时满足:
即: 将高维空间中的正交向量随机投影到低维后, 其正交性近似保持. 这体现了高维空间的一个非直观性质: 维空间可以容纳远多于 个近似正交的方向. 此处出现了下界成立的第一个条件: .
Alice 输入完 个三元组后, 将 比特内存状态发送给 Bob. Bob 只需再向算法输入一个三元组 , 其中
待定
即取第 个地址向量的方向, 并按因子 缩放 (该缩放技巧出自 Keles et al., 2022). 于是打分向量 满足
这正是论文所称 softmax 的可塑性 (malleability): 增大 可使 与其余 的间距任意增大, 而指数函数进一步将该间距放大, 使 softmax 由平滑的加权平均退化为近似的 argmax, 即在离散支持集上逼近一个 Dirac 的尖峰.
令 为 softmax 权重. 输出向量的第 个分量是
目标项干扰项
(Bob 输入的那一行满足 , 不贡献分子; 仅使分母增加一项 , 不改变量级.)
以下分两种情况. 记主项 , 干扰项之和的上界 :
情况 1: . 分子中仅剩干扰项, 且各 , 故
情况 2: . 分子至少包含主项本身, 故
协议成立的条件是 Bob 能够区分这两个区间, 即要求 . 而
任何 均可. 论文取 , , 此时
image即两种情况下的输出相差 倍. 至此 的构造已经完成, 且 的取值范围已确定. 但 只保证了 Bob 能够答对, 距离 必须很大 还隔着整条归约的收尾. 最关键的是协议的正确率达标, 此时存在两个失败来源: JL 投影不满足内积条件 (概率 ), 以及算法自身出错 (概率 ). 取并集界, Bob 的成功概率至少为
image满足索引问题对成功率的要求. 至此我们持有一个完整合法的索引问题协议:
输入规模: , 即 个比特;
单向, 随机化, 成功率 ;
通信量: .
JL定理断言: 任何满足上述条件的协议, 其通信量为 .因此我们可以夹出下界
本协议的通信量定理的下界
论文还做了以下几点探讨:
低维空间下的边界: 当嵌入维度 较小 ()时, 论文证明了空间复杂度的下界为 , 并指出 Zandieh 等人提出的 SubGen 算法在这种特定场景下达到了这个理论下界. 但是通常现在的LLM
结构性假设的作用: 论文明确指出, 非结构化的稀疏性本身并不足以打破线性的空间壁垒. 也就是说, 仅仅知道注意力矩阵是稀疏的, 但不知道稀疏的位置, 依然无法实现亚线性空间. 这为许多依赖特定稀疏模式(如滑动窗口)的实用算法提供了理论依据.
滑动窗口注意力的扩展: 论文分析了一种更通用的滑动窗口注意力机制, 其中窗口外的 Value 向量并未被完全忽略. 针对此场景, 作者提出了一个新颖的, 基于蓄水池抽样 (Reservoir Sampling) 的亚线性空间算法, 并证明了其空间复杂度几乎是最优的.
时间复杂度下界: 论文还研究了 token 生成的时间复杂度, 证明了任何非自适应 (non-adaptive, 即提前确定数据访问模式) 的流式算法, 在最坏情况下处理最后一个 token 的时间复杂度至少是 .
2.3 再看 Linear 和 Sparse 的争议
其实这里就有一个问题了, 通常的论断会出来:
Linear attention 状态固定为 , 与 无关, 必然丢信息, 无法复现 softmax attention 的输出;
所以它是一个没有任何保证的有损近似;
所以它没有意义, 反正 躲不掉, 不如老实存全量 KV, 然后根据 JL 引理去压缩 KV 的维度? 就像 MLA/DSA/CSA 那样?
固定的状态是Linear Attn最大的软肋, linear attention 的状态比 低了 倍 (取 , , 约 2000 倍), 它完完全全在下界之外, 这一条我觉得支持 Linear Attn 的同学也没什么好否认的, 单纯的 Linear Attn 前面一篇文章也讨论 9 种缺陷...
当然这样的结论是有些片面的, 因为Linear Attention的路径上已经发展出来Hybrid Attention了, 例如Kimi K3 或许应该把 3层 KDA + 1层Gated MLA作为一个整体来看待?
例如归约用的那个困难问题是索引通信问题, 即 Alice 藏一个比特, Bob 事后指定位置去取. 这本质上就是 needle-in-a-haystack: 从无结构的长上下文里精确检索单点信息. 所以定理不只是说"亚线性会有损", 它精确指出了有损会发生在哪种任务上. 而这正是经验上观察到的现象: Kimi K3 在长上下文精确召回类任务上可能会掉点, 在语言建模, 摘要, 常识推理这类信息高度冗余的任务上只有很少的损失? 因此整个 K3 block( 3x KDA + 1x MLA)是否也是一种不错的Attention结构? 因此出现一种争锋相对的观点: "我习惯的那类近似可以有损, 你那类不行", 而且我也不需要"必须有保证无损" , 模糊一点后面加一个 Full Attn 又不是不行?
另一方面论文也阐述了一下对数据不感知的情况下, 仅仅知道注意力矩阵是稀疏的, 但不知道稀疏的位置, 依然无法实现亚线性空间, 这也封死了一系列没有带 indexer 的 Sparse Attn 算法. 那么对于 Hybrid Attn , 可能支持 Linear Attn 的同学也会说状态矩阵是基于数据驱动的压缩, 并配合交替的 MLA 恢复了长程记忆, 然后还相对于 Sparse Attn 多了很多层的归纳偏置能力, 并且可以提高泛化能力?
因此 Linear Attn 和Sparse Attn 对比和争议已经改为 Hybrid Attn 和 DSA/CSA 这类带有 indexer 的 Sparse Attn 方案的对比.
实质上双方的争议变成了一种殊途同归的目标: 我们需要寻找一种 Attn 机制, 在 Query-blind 的情况下, 希望在 KV 压缩比维持 的情况下, 进一步降低常数项的大小, 然后进一步提高参数的效率.
实际上就逐渐演变成了三个轴的压缩: token序列轴, hidden-dim 通道轴维度 和 模型深轴, 最后一个是在对比中比较容易忽视的, 这里存在一个值得探讨的效率问题, DeepSeek-V4 pro的模型层数(61层) 大幅度的小于 Hybrid Attn 的层数(K3 93层), 虽然模型参数规模上 V4p 也比 K3 小了很多, 两者的模型效果上限如何? 至少看 V4P-0813发布后的分数还是很不错的, 这就是为什么前面定义中有进一步提高参数的效率的需求. Linear Attn的缺陷靠深度来换是否值得? Scaling-Law来看做大模型参数规模肯定是认同的, 但是在这个基础上是否应该先解决好参数效率的问题再堆参数呢?
其实额外的还有一些低精度Attn计算(即芯片效率维度)和数据感知的时间轴的维度, 后者主要展现在Agent harness过程中对 context 的压缩算法上, 我们稍后会提...
2.4 Linear Attn的视角
2.4.1 缝缝补补的过程
前面一篇文章《谈谈Kimi K3 的KDA(1): KDA 如何与 Gated MLA 以及 AttnRes 协同》也详细谈到过, Linear Attention的一些问题导致 必须要加一个 conv 来修复一下, 然后 加了, 也得加, 加完还得整个非线性的SiLU, 这不想省的指数运算又被加回来了一些, 即便如此, 状态仍会累积和碰撞.
然后Linear Attention只能一直往状态矩阵里面输入, 没法让它遗忘一些东西. 于是在 Mamba-2 里面引入 , 这是一个输入相关的记忆寿命, 但遗忘过于粗粒度, 写入仍是相加. 于是出现了 DeltaNet, 即 , 可以沿当前 key 定向改写, 但是缺少快速清空全局旧状态的机制. 于是我们又搞出了Gated DeltaNet , 即 , 此时增加了全局遗忘和定向改写结合的能力, 但是每个 head 只有一个 decay. 接着就出现了KDA, , 引入了每个 key channel 独立 decay, 但是固定状态仍不等于完整 token-addressable memory.
然后我们继续考虑 transition . 它有 个特征值为 , 沿 方向的特征值为如果不约束 , 即使 , 也可能出现, 导致该方向在递推中被放大或反向过冲. 接着, 继续打补丁 Q/K 要加 L2Norm. 然后output gate也需要加一个Full-rank projection, 同时也需要 MLA 也同时加上, 整体激活参数又多了 8B.
这是在 KDA 算子层面, 更进一步从它的代数结构上来看, 它是一个仿射收缩半群,收缩的性质决定了它对一些长程检索的记忆能力是有局限性的, 因此必须采用Hybrid Attn, 通过 Full Attn 的 MLA 来做补充. 这是整个 Linear Attn 逐渐演进到 KDA 缝缝补补的过程.
2.4.2 KDA不可避免的几个墙
如果我们考虑未来 Linear Attn 能够避免 KV 的 MLA 一类的Full Attn 获得亚线性的收益, 其实等价的来说我们把 token 之间的 attn 连成线构成一个拓扑, 那么需要回答的一个问题是: 两个相距 的 token, 它们之间那条"连线"在 KDA 状态里能不能活到被读出来., KDA 的权重沿时间按 衰减, 所以这条连线的强度随距离指数掉. 设定一个"还算活着"的门槛 (衰减到 1% 以下就算死了), 得到
关键在于 变大只有一个办法, 把 往 1 顶. 而 会同时触发三件坏事:
第一重:需求本身就极端(衰减墙) : 意味着 每涨 10 倍, 就得小 10 倍. 只能撑 458 个 token, 要撑 1M 得 . 得精确到小数点后第 7 位.这是要求把一个数钉在 1 的邻域里一个极窄的位置上.
第二重:那个位置的梯度几乎是零(可训练墙): ,求导得 .要 就得 , sigmoid 的极左端, 趋零, 梯度小了四个数量级,等于告诉优化器"这个方向别走了".
中段所需处相差倍
第三重:就算学到了,也算不准(数值墙): 在前一篇文章§2.3.8 也谈到过这个问题, FP32 在 只剩 7 位有效位,也就是 1M 距离上的长程 Attn 拓扑环路在 FP32 下已经不可靠.
三重的关键在于"互相独立、同向变紧"
长持久度的唯一途径需求精度(第一重)梯度(第二重)有效位数(第三重)
三者卡在同一个旋钮上,而且都朝同一方向恶化, 没有任何一档 能让三者同时满意. 而另一方面:
衰减的下界被封死 (, 一步忘不光) 是买数值安全, 丢掉的"快忘"能力由 delta 项补回;
衰减的上界开放 (, 长记忆) 是买表达力, 代价是一致收缩间隙消失.
但是每步 delta 只能擦一个方向(Rank=1). 所以:选择性清除一个 维概念子空间至少需要 步. 衰减虽可快清但通道内无选择性. "又快又有选择性"的遗忘在单层单步内不可达, 只能靠多个 token 或多层接力.是不是这里也推导出需要连续几个 KDA 层配合, 以及整个模型需要更深的网络才能完成? 实际上深度轴的效率也受到了影响. 这产生一个辩证矛盾:
为了保留超长依赖, 模型需要把某些通道推向 .
为了继续学习这些通道的时间尺度, 又希望衰减门控不处于饱和区.
为了保持超长依赖, 模型又无法使用低精度提高计算效率
为了平衡衰减的矛盾, 潜在的又需要加深模型的层数, 也会影响到计算效率.
接下来还有一个效率的问题, 或者说我换个说法提问 为什么FlashKDA的chunksize = 16? 公式里 的除法是 chunkwise 形式的阿喀琉斯之踵: 是 保留因子的连乘积, 其倒数 随 chunk 内距离无界增长. 在负 Softplus 参数化下, 16 步累积衰减可以任意接近 , 有限精度下必然溢出.
Kimi Linear 的对策是把 chunk 细分为 16 token 的次级 tile: 非对角 tile 在 log 空间算相对衰减后可用 Tensor Core, 但对角 tile 仍须逐位置对显式计算, 成为 chunk 内计算的主要瓶颈. Kimi K3 的解法是从源头消除数值问题: 封底之后,
上限
于是倒数重标定因子全程可表示, 对角 tile 与非对角 tile 统一为稠密 Tensor Core GEMM, 慢速路径被彻底删除. 这也解释了 FlashKDA 选择 的三重理由:
数值范围: 刚好落在 bf16 动态范围内, 无需任何 chunk 内 rescaling 技巧;
求逆便宜: 的逆用 Neumann 级数直接展开即可, 无需进一步分解;
指令映射: 全部 数学干净地映射到 SM80 MMA (m16n8k16) 指令, 内核简单且可移植.
好的说法是刚好配合 GPGPU 常见的 TensorCore 16x8x16的维度, 但是思考另一个问题对于 TPU 这些 DSA 架构的加速器通常 TensorCore 为128x128 / 256x256 应该怎么办呢? 大致的问题如下图所示:
image看上去只要把 CHUNK 改成 128 就能解决一切. 但 K3 的数值约束会反噬: 单级重标定要求 (bf16/fp32 指数上限均为 ), 所以不能靠提高 买 MXU 友好度 , 那是改模型, 不是改 kernel. 与 CHUNK = 16 是联合标定的一对.
更深层的障碍在于 channel-wise 衰减: 危险因子出现在内积内部
是逐通道向量, 无法从点积里提出来. 若像 GDN / Mamba-2 那样用标量衰减, 是纯标量, 可以在 log 空间自由按块重锚定, 放大 chunk 几乎无痛. KDA 为表达力选了 channel-wise, 代价就是重锚定窗口被数值范围钉死在 16 token.
当然我们也可以考虑做一个 2 级循环分块的策略, 外层 CHUNK = 128 把不受 影响的 GEMM 按照 128x128 计算, 内层再采用拼接矩阵的方式提高 TensorCore 的利用率. 但总体来看 MFU 也并不会太好.
2.5 Sparse Attn的视角
其实 Sparse Attn 的视角是非常 straightforward 的, 首先在 EOT 的视角下SDPA是最优解, 因此 softmax 再慢也值得保留. 那么剩下几件事情: 从通道轴来看, 承认 KV 的稀疏性, 然后利用 JL 引理在 hidden-dim 上压缩, 这就是 MLA 做的事情. 从token序列轴的维度, 对内容一定层度的感知, 通过一个更低维度更低精度(FP4)的评估器(indexer) 来做选择, 这就是 DSA. 另一方面是序列长了 Softmax 峰值变小的问题, 一方面可以引入 attn-sink 的处理, 另一方面 topk 的选择也增加了长上下文的峰度.
然后进一步进行分块构造 的压缩, 并对于 top-k 可能存在的 block 边界跳跃的问题, 通过 KV 上的 overlap 来处理, 这就是 CSA. 可以看到 DeepSeek 整个演进的过程.
当然 Sparse 直接取某个常数的 topK 可能也是有一些问题的, 如何保证这种硬截断选出的 block 能够近似的拟合到 Full Attn, 简单推导一下:
对于 个 key, 排序后分数 , softmax 概率 , 其中 . Top-k 截断保留前 个并重新归一化: (), . 记尾部质量 .
头部每个 (分母变小了), 尾部每个 . 头部"多出来的"总量 , 尾部"丢掉的"总量也是 . 于是
image对 , 似然比 是一个与 无关的常数. 常数的对数取期望还是它自己:
是 Top-k 重归一化独有的结构. 我们再来分析 score 的分布, 头部每项 , 共 项; 尾部每项 , 共 项. 代入 :
也就是说 每大 1, 误差上界约缩小 倍. 例如 , 时, 即保证 . 这个界只需两个数.
image那么要保证 , 由 直接得到唯一一条要求:
被扔掉的
因此可以做一个简单的分桶算法:
投桶: 算分数 时顺手算桶号 , 把整数计数 加一. 每个 key 只做一次减法, 一次取整, 一次计数.
查表: 桶 里的键最多值 , 这张表与数据无关, 编译期就能算好. "桶里有几个"乘上"每个最多值多少"就是该桶的质量上界.
累加: 从最右边 (分数最低) 的桶往左累加, 一超过预算就停. 停在哪个桶, 边界就是阈值 ; 保留 的键.
还有一个潜在的问题和 HCA 实现相关, 不管Sparse 怎么选择topK, 如何进一步提高单个 block 的压缩比也是一个值得去考虑的问题. HCA 的池化映射是
我们来构造一个最简模型: 门控近似均匀即 ; 窗口内恰有一个 token 携带查询所需的信号 , 尺度为 ; 其余 个 token 相互独立, 零均值, 同尺度. 池化后的槽为
信号同窗干扰
信号幅度为 , 干扰幅度按独立叠加为 . 两者的 相消, 于是信噪比只剩一个极简的形式:
机制
信号
同窗干扰
SNR
分贝
MLA
1
0
--
CSA
4
0.577
dB
HCA
128
0.089
dB
另一方面把注意力分布的损失做 KL 分解:
被删除的概率质量
HCA 的支撑集是全部压缩槽, 所以第一项对它恒为零, 虽然它的读取端是无损的, 全部损失集中在池化那一步. 实际是缺陷的来源: 因为损失全在写入侧, 而写入侧的决定与查询无关, 所以换一个查询什么也换不回来.
简单做个总结, 对于Sparse Attn实际的 KVCache 的存储为 , 常数项通过 CSA 可以降低到 . 然后在读取侧通过 TopK 的选择也可以在 Decode 阶段降低一些读取带宽. 但是还存在一个TopK固定截断的问题, 虽然 Dynamic分桶的算法解决了, 但是这种算法相对于固定截断可能会导致每个token的运算量不同, 又会引起大量的零碎的长尾计算拖累整个计算效率.
比较麻烦的一件事是, 如何进一步压缩, 例如把 ? 此时像 HCA 那样简单的池化就会遇到一些问题了, 这里可能还有一些新的算法需要弄出来, 后面我们会展开...
最后 Linear Attn支持者还会提一个问题, Sparse Attn 对于 KV 是 Append-Only 的, 并没有像Linear 那样有遗忘擦除的能力, 而只能在后期 indexer 上移除选择. 并且 Linear Attn 似乎还有更好的归纳偏置能力并且带来更好的泛化能力 ?
- 压缩即智能
正如前文所讲, Sublinear的压缩可能要数据感知和数据驱动. 本文开头针对KDA的探讨就是一个很好的例子, 仿射收缩半群短短六个字就概括了 KDA 的很多性质, 但似乎现在的模型都还没有智能到这种层度.... 那么对于我们来说, 现阶段应该考虑哪几个方面的压缩呢?
我觉得至少第一点, 我们得承认过分追求 的 Linear Attn 带来的各种缺陷, 接受当前 的现状再来思考以下几个方向:
token序列轴: 压的是"留下多少个 token". 是否需要多个 token 组成一个block, 然后block based 压缩, 或者 topK 的 Sparse 选择或者 Linear Attn的扩展等.
hidden-dim 通道轴: 压的是"每个 token 存多宽". 类似于 MLA 这样的方式, 或者潜在的将 context 不同的段落映射到一个子空间, 例如一些Grassmann Manifoild的做法.
模型深轴: 这是一个需要平衡的轴, 也是对比时最容易被忽视的一条. Linear Attn 在单层里丢掉的查询感知, 往往要靠更多的层数补回来, 于是省下的 KV Cache 又以参数量, 串行深度和 TPOT 的形式还了回去. 所以这条轴上真正要问的不是"能堆多深", 而是每一层的参数效率: 同样的能力能不能用更少的层, 更少的参数拿到.
芯片效率轴 (与上面三条正交的工程轴): 是否能够更低的数值精度来计算, 降低一档精
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み