みんなのAI
機械学習AI論文

学ぶ

  • AI論文
  • 理論・数学基盤
    • CPAL2026
      • Kernel von Mises Formula of the Influence Function
  • 最適化・効率化
    • PolarQuant: Quantizing KV Caches with Polar Transformation
  • アーキテクチャ・アルゴリズム
    • CPAL2026
      • AlphaFormer: End-to-End Symbolic Regression of Alpha Factors with Transformers
  • 予測・表形式データ
  • AutoML・MLパイプライン
    • ICML 2025
      • AutoML-Agent: A Multi-Agent LLM Framework for Full-Pipeline AutoML
  • ビジョン・マルチモーダル
  • NLP・LLM
    • CPAL2026
      • The Curse of Depth in Large Language Models
  • 信頼性・XAI
  • データ中心・特徴設計
  • エッジ・ウェブ
  • ドメイン応用
🏅マイ実績
学ぶ/AI論文/最適化・効率化/Chapter 1: PolarQuant: Quantizing KV Caches with Polar Transformation

Chapter 1: PolarQuant: Quantizing KV Caches with Polar Transformation

長文脈 LLM の実運用では、重みより KV キャッシュ が先にメモリを圧迫することがよくあります。PolarQuant はランダム前処理のあとでベクトルを極座標に移し、角度をコンパクトに保存することで、従来のように 「元の数値に戻すための付け足し情報」 を抱え続ける負担を大きく減らします。このレビューでは、なぜ角度分布が π/4\pi/4π/4 近傍に集中し、その性質がなぜ超低ビット量子化を可能にするのかを数式と直感で説明します。
PDF原論文 PDF を開く↗
[概要と導入] 3行要約 + 問題設定
3行要約
- 長い文脈を扱う LLM では過去トークンの Key と Value を保存し続けるため、KV キャッシュが VRAM の真のボトルネックになりやすいです。
- 従来のやり方: 数値をとても短くしても、塊ごとに「元のレンジに戻すための補助数字」 が別途必要です。それはたいてい 高精度(例: FP16) で別に保存されるので、VRAM の節約は思ったほど大きく感じられません。
- PolarQuant はランダム前処理のあと極座標へ変換し、角度をコンパクトに保存します。その 重い付け足し にあまり縛られず、4.2 倍以上 の圧縮と高い長文脈品質を示します。
比喩
従来法は箱を小さくしても箱ごとに重いラベルを貼って保管する倉庫のようなものです。PolarQuant は一度よく混ぜてから半径 1 個と方向情報を保存するので、補助ラベルのコストが小さくなります。
やさしい言い方でいうと
- ジレンマ: 数値を小さくしただけでは足りず、ブロックごとに 説明書(メタデータ) を FP16 クラスで付け続けるので、中身より梱包材が重い状態になりやすいです。
- PolarQuant の方針: 軸上の数値の代わりに 距離(半径 rrr)ひとつ と 角度たち に分けて保存します。残りは「どちら向きか」だけを書くイメージです。
- ミキサー(SSS)と 45∘45^\circ45∘: 極座標に入る 前に ランダムに混ぜると、大きな塊を半分にしたとき 前後のエネルギー が揃いやすく、比を角度にすると π/4\pi/4π/4(45∘45^\circ45∘)付近 に集まりやすいです。狭い帯に値がよく出ると分かれば、少ないビットで角度量子化しやすくなります。
- 論文で報告された点: KV キャッシュ 4.2 倍以上 の圧縮、104K 近い極長文脈でも needle タスクで強い結果、オフラインコードブック で Prefill を大きく短縮(オンライン約 11.6 秒 vs オフライン約 3.4 秒など)。
一行: よく混ぜると角度が 予測しやすく集中する 構造を使い、復元用の付け足し負担を大きく減らす 方法です。
[背景知識] 必須の基礎概念
先に押さえる — 本文の前に
- 浮動小数点数(FP32 と FP16)
ニューラルネットの中間値は通常 実数(浮動小数) として扱います。GPU でよく使うのは FP32(32 ビット・単精度)と FP16(16 ビット・半精度 half precision)です。FP16 はビット数が FP32 の半分なので、同じ個数の数を置くとメモリはおおよそ半分になりますが、表現できる目盛りはやや粗くなります。論文で「KV を FP16 で保持する」とあるのは、圧縮前のベースラインが 16 ビット浮動小数である、という意味に近いです。
- 量子化(quantization)とは
連続的な実数を ごく短いビットの整数コード(例: 4 ビットなら 24=162^4=1624=16 段階)に 最も近い値へ丸めて格納することです。保存や計算を軽くするのが主な目的で、使うときは実数に近い値へ 復元(逆量子化)します。「どのコードが元のどの範囲か」を伝える 補助数字(scale や zero-point など)が要ることが多いです。
- INT4 と FP16 が同じ文に出る理由
値そのものは INT4 のように短くしても、ブロックごとに そのコードを解釈するルール を FP16 のような ビットの多い形式 で別に書いておくことがよくあります。その メタ情報 のせいで「数は減ったのに VRAM は思ったほど減らない」ことが起きます。以下で PolarQuant がその負担をどう減らすか続きます。

各項目は 用語の定義 に加え、後続の式でその記号が 何のために出てくるか を短く結びつけています。
- KV キャッシュ: 自己回帰生成で過去の Key, Value を再利用するためのメモリ。
ここでの意味: 式に出る xxx は重みパラメータではなく キャッシュに載る活性 に近い。PolarQuant が変えるのは 注意機構そのものではなく表現の持ち方。
- 量子化オーバーヘッド 値を ごく短い整数 に押し込むには、たいてい 塊ごとに「元のレンジに合わせる補助数字」(論文・実装では scale や zero-point などと呼ばれる)が要ります。それが ブロックごとに しかも 高精度 で残ると、隠れコストになります。
ここでの意味: 「ビットは減ったのに VRAM が減らない」の一因は その補助数字が付きまとう こと。PolarQuant は座標を変えてその層を薄くします。
- 極座標: 生の座標を半径と角度で表す考え方。PolarQuant はこれを高次元に再帰的に拡張します。
ここでの意味: 軸並びの数値ではなく 1 つのスケール(半径)+向き(角度) に情報を分け、角度だけを別に短く保存 する設計の土台になります。
- ランダム前処理: ベクトルをランダムに混ぜて、特定の軸に偏らない扱いやすい分布に整える工程。
ここでの意味: SSS は飾りではなく、後で角度分布を きれいに解析・コードブック設計 できるようにするための鍵。
- 集中現象: 高次元では一部の角度が強く集中し、そのおかげで少ないビットでもよく表現できます。
ここでの意味: 「角度の質量がどこに溜まるか」が 必要ビット数 に直結する、という実務的メッセージ。
日常のイメージ: KV キャッシュは長い会話のための 過去トークン倉庫、量子化は倉庫の数値を小さくすることです。しかしブロックごとに 「短いコードを元の数値に戻す説明」 が要ると、ラベルが荷物より重く なりがちです。
[提案手法] 数式の詳しい解説
PolarQuant の問いは、「ランダムに十分混ぜたベクトルを極座標に変換すると、どの情報を最も安く保存できるか」です。
この節の読み方(ロードマップ)
記号をすべて暗記する必要はありません。流れだけ掴めば十分です。
1. SSS で混ぜる — 特定の軸に値が偏らないようにし、あとで 角度ごと に扱いやすくする。
2. 角度を層に積む — Level 1 は「隣接 2 座標の向き」、上位は 前後の大きな塊 のエネルギー比を 1 つの角にまとめる。
3. 結合密度が積に分かれる — 半径と各層の角度を ほぼ独立 に設計しやすい。
4. π/4\pi/4π/4 付近に集中 — 値が 狭い帯 に出やすいと 少ないビット でよい。
5. 角度を短く保存 → 復元 → いつものアテンション — 式の形は変えない。
負担を減らす:
(4) (5) の指数や Γ\GammaΓ は飛ばしてよい。「π/4\pi/4π/4 近傍に質量が溜まる」 だけ持ち帰ればメッセージは足ります。

1) ランダム前処理:なぜ SxSxSx がガウス的に見えるか
直感を先に: Sx∼N(⋯ )Sx \sim \mathcal{N}(\cdots)Sx∼N(⋯) は 解析用の絵 で、各座標が 似た強さで揺れ、ほぼ別々に扱える、という意味です。本番のサンプルが常に厳密ガウスである必要はなく、角度ごとの量子化を正当化する近似です。
元の埋め込み x∈Rdx \in \mathbb{R}^{d}x∈Rd にスケッチ行列 S∈Rm×dS \in \mathbb{R}^{m \times d}S∈Rm×d を掛けます。
Sx∼N(0,∥x∥22Im)Sx \sim \mathcal{N}(0, \|x\|_2^2 I_m)Sx∼N(0,∥x∥22​Im​)
一言: SxSxSx の各座標は平均 0・分散 ∥x∥22\|x\|_2^2∥x∥22​ の正規分布に従い、互いに 独立 です。
記号
  • 記号xxx
  • 意味量子化したい元の KV ベクトル
  • 記号ddd
  • 意味元の次元
  • 記号SSS
  • 意味ランダム前処理行列
  • 記号mmm
  • 意味スケッチ後の次元
  • 記号ImI_mIm​
  • 意味mmm 次元単位行列
  • 記号∥x∥2\|x\|_2∥x∥2​
  • 意味ユークリッドノルム(ベクトルの「大きさ」)
記号意味
xxx量子化したい元の KV ベクトル
ddd元の次元
SSSランダム前処理行列
mmmスケッチ後の次元
ImI_mIm​mmm 次元単位行列
∥x∥2\|x\|_2∥x∥2​ユークリッドノルム(ベクトルの「大きさ」)
この分布の書き方の狙い: ∼N\sim\mathcal{N}∼N は「SxSxSx を 等分散・ほぼ独立 な座標として扱える」という 解析上の仮定 です。厳密に常にガウス、というより 角度ごとに分けて量子化 する余地を作るための近似です。
直感: 特定の軸に偏ったベクトルを混ぜると、座標ごとに scale を付けるより 半径+方向 で表す方が自然になります。

2) Level 1:隣接 2 座標の角度
直感を先に: 平面で (a,b)(a,b)(a,b) の傾き角を tan⁡−1(b/a)\tan^{-1}(b/a)tan−1(b/a) で取るのと同じです。長さはまだ残し、向きだけ抜きます。2 つずつペアにして d/2d/2d/2 個の小さな角ができます。
ψj(1):=tan⁡−1 ⁣(x2jx2j−1),j=1,…,d/2\psi_j^{(1)} := \tan^{-1}\!\left(\frac{x_{2j}}{x_{2j-1}}\right), \quad j = 1, \ldots, d/2ψj(1)​:=tan−1(x2j−1​x2j​​),j=1,…,d/2
一言: 平面ベクトル (x2j−1,x2j)(x_{2j-1}, x_{2j})(x2j−1​,x2j​) の方向角です。
意味: まず 隣接 2 次元の向き だけを ψ(1)\psi^{(1)}ψ(1) に落とし、大きな塊同士のエネルギー比較は上位レベルで扱う、という 段階的な情報の切り出し です。

3) Level ℓ≥2\ell \ge 2ℓ≥2:左右ブロックのノルム比
直感を先に: 添字は複雑ですが、やることは 前半ブロックと後半ブロックのノルム比 に tan⁡−1\tan^{-1}tan−1 を掛けることです。比 ≈1\approx 1≈1 なら前後のエネルギーが釣り合い、角は π/4\pi/4π/4 付近。ℓ\ellℓ が上がるほど 大きな塊同士の比較になります。
ψj(ℓ):=tan⁡−1 ⁣(∥x(j−1/2)2ℓ+1:j2ℓ∥2∥x(j−1)2ℓ+1:(j−1/2)2ℓ∥2)\psi_j^{(\ell)} := \tan^{-1}\!\left( \frac{\left\|x_{(j-1/2)2^{\ell}+1:j2^{\ell}}\right\|_2} {\left\|x_{(j-1)2^{\ell}+1:(j-1/2)2^{\ell}}\right\|_2} \right)ψj(ℓ)​:=tan−1(​x(j−1)2ℓ+1:(j−1/2)2ℓ​​2​​x(j−1/2)2ℓ+1:j2ℓ​​2​​)
一言: 右半分の「エネルギー」と左半分の比の tan⁡−1\tan^{-1}tan−1 です。比が 1 に近いと角度は π/4\pi/4π/4 付近 に来ます。

4) 結合密度の因数分解
直感を先に: 「同時密度が積」≒ ほぼ独立 — 半径の量子化と各層の角度コードブックを 一つの巨大な結合問題にせず、だいたい分けて設計できる、という信号です。
fR,Ψd(r,ψd(x))=fR(r)∏ℓ=1log⁡2dfΨ(ℓ) ⁣(ψ(ℓ))f_{R,\Psi_d}(r, \psi_d(x)) = f_R(r) \prod_{\ell=1}^{\log_2 d} f_{\Psi^{(\ell)}}\!\left(\psi^{(\ell)}\right)fR,Ψd​​(r,ψd​(x))=fR​(r)ℓ=1∏log2​d​fΨ(ℓ)​(ψ(ℓ))
一言: 半径と各レベルの角度ブロックが 独立(同時分布が積)なので、角度を 1 次元ずつ 量子化しやすいです。

5) ℓ≥2\ell \ge 2ℓ≥2 の角度密度(π/4\pi/4π/4 への集中)
直感を先に: 長い式は「角 ψ\psiψ はどこに出やすいか」の確率です。sin⁡(2ψ)\sin(2\psi)sin(2ψ) は ψ=π/4\psi=\pi/4ψ=π/4 で最大。大きなべき乗が付くとピーク外はほぼ 0 → 45∘45^\circ45∘ 近傍の細い帯だけに質量 → ビットが節約できます。
fℓ(ψi(ℓ))=22ℓ−1−2 Γ(2ℓ−2)2Γ(2ℓ−1)sin⁡2ℓ−1−1(2ψi(ℓ))f_{\ell}(\psi_i^{(\ell)}) = \frac{2^{2^{\ell-1}-2}\,\Gamma(2^{\ell-2})^2}{\Gamma(2^{\ell-1})} \sin^{2^{\ell-1}-1}(2\psi_i^{(\ell)})fℓ​(ψi(ℓ)​)=Γ(2ℓ−1)22ℓ−1−2Γ(2ℓ−2)2​sin2ℓ−1−1(2ψi(ℓ)​)
直感: sin⁡(2ψ)\sin(2\psi)sin(2ψ) は ψ=π/4\psi=\pi/4ψ=π/4 で最大。指数が大きいほどピーク以外が押し潰され、狭い区間に質量が集中 → 少数ビットのコードブックでも誤差を抑えやすい。

6) 角度量子化(1 次元 K-means 型)
直感を先に: 直線上に代表角(コードブック)を置き、実際の角を 最も近い代表に丸める典型的 1 次元量子化。bbb ビットなら区間は 2b2^b2b 個です。
Eψi(ℓ)∼fℓ[∑j∈[2b]:ψi(ℓ)∈Ij(ℓ)∣ψi(ℓ)−θj(ℓ)∣2]\mathbb{E}_{\psi_i^{(\ell)} \sim f_{\ell}} \left[ \sum_{j \in [2^b] : \psi_i^{(\ell)} \in I_j^{(\ell)}} \left| \psi_i^{(\ell)} - \theta_j^{(\ell)} \right|^2 \right]Eψi(ℓ)​∼fℓ​​​j∈[2b]:ψi(ℓ)​∈Ij(ℓ)​∑​​ψi(ℓ)​−θj(ℓ)​​2​
bbb はビット数、Ij(ℓ)I_j^{(\ell)}Ij(ℓ)​ は区間、θj(ℓ)\theta_j^{(\ell)}θj(ℓ)​ は代表値(セントロイド)です。

7) 相対 MSE のイメージ
直感を先に: ベクトルが大きいと絶対誤差も許容しやすいので、元のノルムに対する割合で約束する形です。ε\varepsilonε が小さいほど良い圧縮品質です。
E[∥x−x′∥22]=ε∥x∥22\mathbb{E}\left[\|x - x'\|_2^2\right] = \varepsilon \|x\|_2^2E[∥x−x′∥22​]=ε∥x∥22​
誤差が ∥x∥22\|x\|_2^2∥x∥22​ に比例する形で、相対精度 ε\varepsilonε で議論できます。

8) 復元式
直感を先に: インデックス iii は 二分木を下る経路に対応し、各レベルで cos⁡ψ\cos\psicosψ か sin⁡ψ\sin\psisinψ のどちらを掛けるかが決まります。長い式はそのルールの一行表記です。全体スケール ∥x∥2\|x\|_2∥x∥2​ × レベルごとに cos または sin と覚えれば十分です。
xi=∥x∥2∏ℓ=1log⁡2d(cos⁡ψ⌊i/2ℓ⌋(ℓ))1{(i mod 2ℓ)≤2ℓ−1}∏ℓ=1log⁡2d(sin⁡ψ⌊i/2ℓ⌋(ℓ))1{(i mod 2ℓ)>2ℓ−1}x_i = \|x\|_2 \prod_{\ell=1}^{\log_2 d} (\cos \psi_{\lfloor i / 2^{\ell} \rfloor}^{(\ell)})^{\mathbf{1}\{(i \bmod 2^{\ell}) \le 2^{\ell-1}\}} \prod_{\ell=1}^{\log_2 d} (\sin \psi_{\lfloor i / 2^{\ell} \rfloor}^{(\ell)})^{\mathbf{1}\{(i \bmod 2^{\ell}) > 2^{\ell-1}\}}xi​=∥x∥2​ℓ=1∏log2​d​(cosψ⌊i/2ℓ⌋(ℓ)​)1{(imod2ℓ)≤2ℓ−1}ℓ=1∏log2​d​(sinψ⌊i/2ℓ⌋(ℓ)​)1{(imod2ℓ)>2ℓ−1}
各レベルで cos⁡\coscos / sin⁡\sinsin を掛けるかを指示関数で選び、座標 xix_ixi​ を再構成します。

9) アテンションは不変
直感を先に: K^,V^\hat{K},\hat{V}K^,V^ は 圧縮→復元したキャッシュです。softmax や d\sqrt{d}d​ スケールは 学習時と同じで、中身だけ差し替わります。
softmax⁡ ⁣(K^:i⋅qid)V^:i\operatorname{softmax}\!\left(\frac{\hat{K}_{:i} \cdot q_i}{\sqrt{d}}\right) \hat{V}_{:i}softmax(d​K^:i​⋅qi​​)V^:i​
PolarQuant は KV の格納・復元 だけを変え、アテンションの式そのものは変えません。
[トイデータで追う] 整数の例
上の式を 数字で一度だけ追うための短い例です。記号より Level 1 → Level 2 → π/4\pi/4π/4 のつながりを見てください。
x=(3,4,4,3)x=(3,4,4,3)x=(3,4,4,3) とし、手計算しやすい前処理後ベクトルを整数で x′=(3,4,4,3)x'=(3,4,4,3)x′=(3,4,4,3) と置きます(実際の SxSxSx は一般に非整数です)。
なぜ xxx と x′x'x′ を同じにするか: 本番では x′=Sxx'=Sxx′=Sx で値が変わります。ここではノルム比がきれいに出るように 数字だけ を選んだ例です(手順の定義は同じ)。
Level 1
ψ1(1)=tan⁡−1(4/3),ψ2(1)=tan⁡−1(3/4)\psi_1^{ (1) } = \tan^{-1}(4/3),\quad \psi_2^{ (1) } = \tan^{-1}(3/4)ψ1(1)​=tan−1(4/3),ψ2(1)​=tan−1(3/4)
おおよそ ψ1(1)≈0.93\psi_1^{ (1) }\approx 0.93ψ1(1)​≈0.93 rad、ψ2(1)≈0.64\psi_2^{ (1) }\approx 0.64ψ2(1)​≈0.64 rad。
Level 2(ブロックノルム)
∥x1:2′∥2=32+42=5,∥x3:4′∥2=42+32=5\|x'_{1:2}\|_2 = \sqrt{3^2+4^2}=5,\quad \|x'_{3:4}\|_2 = \sqrt{4^2+3^2}=5∥x1:2′​∥2​=32+42​=5,∥x3:4′​∥2​=42+32​=5
比はちょうど 111 なので
ψ1(2)=tan⁡−1(1)=π4.\psi_1^{ (2) } = \tan^{-1} (1) = \frac{\pi}{4}.ψ1(2)​=tan−1(1)=4π​.
(3,4)(3,4)(3,4) と (4,3)(4,3)(4,3) が同じ長さ 5(3–4–5)になるため、高レベル角が ちょうど π/4\pi/4π/4 に一致する整数例です。復元した K^,V^\hat{K},\hat{V}K^,V^ を通常のアテンションに入れます。
[実験・実装] 数式から PyTorch・CUDA・ベンチマークへ
きれいな式を読むと、次に 「実装はどうで、数値はどうだったのか?」 と聞きたくなります。PolarQuant の著者らは理論どまりにせず、Llama-3.1 など実モデルで厳しいベンチマークまで踏み込んでいます。以下は 実装の要点 と 4 本の実験柱 です。

1. ハードウェアと実装
式を動くコードに落とす設計が再現性の土台です。
- ハードウェア: NVIDIA RTX A6000(VRAM 48GB)1 枚で実験。
- フレームワーク・型: PyTorch 実装。量子化した 角度インデックス を 8 ビット(torch.uint8)に パッキングして格納。
- カスタム CUDA カーネル: クエリ × 復元 Key キャッシュ、注意スコア × 復元 Value キャッシュ などの積を高速化する 専用カーネル を実装。
- 共有の前処理行列 SSS: ランダム前処理の行列 SSS は K/V 埋め込みに加え、全レイヤー・全ヘッドで同一のものを共有。
- コードブック二戦略: 角度量子化に 1 次元 k-means++ を使用。
- オンライン: プロンプトごとに角度を計算し その場で クラスタリング。
- オフライン: 事前計算したコードブックを 全プロンプトで再利用。

2. 実験 1 — 実データでも角度は π/4\pi/4π/4 付近に尖るか
理論上の角度分布が 実際の KV にも当てはまるかを可視化します。
- 設定: LongBench の Qasper からプロンプトを取り、KV を抽出し L=4L=4L=4 の極座標変換を適用。
- 結果: 前処理なしでは角度が散らばり、前処理ありでは外れ値が減る。上位レベルほど π/4\pi/4π/4 近傍に鋭く集中することが実データで確認できる、と報告されています。

3. 実験 2 — Needle-In-A-Haystack(極限コンテキスト)
強い圧縮でも 重要情報を取りこぼさないか を見る定番テストです。
- 設定: Llama-3.1-8B-Instruct、入力長 4K〜104K。
- 公平なメモリ: SnapKV、PyramidKV、KIVI などと比較し、全手法の KV メモリを元の 25%(圧縮率 0.25) に揃えた、とされています。
- 結果: トークン削除型は抜けがちになりやすい一方、PolarQuant は KIVI を上回り、recall が 最も完全に近い 結果として示されています。

4. 実験 3 — LongBench(汎用長文タスク)
- 設定: LongBench-V1。注意: 新規生成トークン側のキャッシュは精度のため FP16 維持 と論文に記載。
- 結果: 非圧縮(Exact)平均 48.63 に対し、PolarQuant-R(オンライン) が 48.37 とほぼ同等。KIVI(46.70) や SnapKV(44.57) を上回るスコアとして報告。

5. 実験 4 — ランタイム
- 設定: 入力 16,384 トークン、生成 1,024 トークンの所要時間。
- デコード: 生成フェーズで KIVI より約 14% 高速、と報告。
- Prefill: オンライン は約 11.633 秒、オフライン は約 3.364 秒 — クラスタリングコストの差が大きい。品質差は小さいため、速度重視ならオフラインが推奨、とされています。

まとめ: PolarQuant は PyTorch・CUDA・実モデル の上で、分布 → 極限文脈 → 汎用ベンチ → 速度 まで一気通貫で検証した研究です。
直感: トークンを 捨てて 凌ぐのではなく、情報を保った圧縮に近い結果です。オフラインコードブックは あらかじめ作った角度の見本表のようなもので、プロンプトごとにクラスタし直す オンライン より Prefill が速く、実運用で効きます。
[結論と限界]
実務的な意義
1. 正規化メタデータが必須という発想を崩した。
2. 長文脈サービングのメモリ痛点を直接狙っている。
3. attention 自体は変えず、キャッシュ表現だけを変える。
限界
- コードブック構成にはまだ改良余地がある。
- 重みや activation への一般化には追加検証が必要。
- 実運用では CUDA kernel や packing 最適化が重要になる。
[図解プラン] 極端な対比の可視化
左は従来のブロック量子化:保存した値を復元するための補助数字 が各ブロックに付きまとう様子。右は PolarQuant:ランダム前処理、極座標、半径 1 個と 45∘45^\circ45∘ 近傍に集中した角度。

KV 保存の対比

従来はブロックごとに FP16 メタが積み上がり、PolarQuant は r と角度にまとめます。

ブロック量子化

ブロックごとに **短いコードを元の数値に戻す補助数字** が要るため、見かけは圧縮でもオーバーヘッドが残ります。
KVINT4+metaFP16× N+FP16 メタ / ブロックメタ負荷 ↑

PolarQuant

ランダム前処理後に極座標へ移し、集中した角度だけを量子化します。
KVSrθcodebookr + θ codebook保存負荷 ↓

図の記号の読み方

FP16
半精度の浮動小数(16 ビット)。FP32 の半分のビットなので同じ個数ならメモリもおおよそ半分ですが、目盛りはやや粗くなります。
量子化
連続的な実数を 短い整数コード に丸めて保存すること。利用時は 逆量子化し、ブロックごとに 範囲を伝える補助数字 が要ることが多いです。
KV
過去トークンの Key/Value を載せたキャッシュベクトルの塊です。
INT4
数値を 4 ビットに圧縮した値。そのままでは使いにくく、補助情報が要ります。
+meta / FP16
短くした数値を元のレンジに戻すために付ける 追加の数字。たいてい 高精度(例: FP16) で別に保存されます。
× N
ブロックが N 個あると、メタもだいたい N 回分かさばるイメージです。
S
座標を混ぜるランダム前処理行列。極座標へ移しやすい分布にします。
r
極座標の半径=ベクトル全体の大きさです。
θ
角度(向き)。実数全部ではなくコードブック番号として保存します。
codebook
よく出る角度の候補を並べた表。インデックスだけでビットを節約します。
PolarQuant の美しさは、問題を別の座標系へ移した点にあります。生の座標を無理に削る代わりに、長さと方向へ分けて保存することで、KV キャッシュが支配的な環境で大きな価値を持ちます。