量子化ビジュアライザー

AIモデルの量子化 (FP32 → FP16 → INT8 → INT4) をインタラクティブに学ぶ

🔄 量子化パイプライン体験

実数 → 整数 → 近似値:3ステップを体感する

0.73
量子化誤差:
解説: パイプラインの各ステップ(数式付き)

対称量子化の3ステップは以下の数式で記述されます。ビット幅 $b$ に対し、表現可能な最大整数 $q_{\max} = 2^{b-1} - 1$ とします。

Step 1 — Scale計算と量子化 (round):

$$s = \frac{\alpha}{q_{\max}}, \quad q = \mathrm{round}\!\left(\frac{x}{s}\right)$$

ここで $\alpha = \max|x_i|$(テンソル内の最大絶対値)、$x$ は実数値の重みです。

Step 2 — クランプ (clamp):

$$q_c = \mathrm{clamp}(q,\; -q_{\max},\; q_{\max})$$

丸め結果が表現範囲を超えた場合に切り詰めます。飽和 (saturation) とも呼びます。

Step 3 — 逆量子化 (dequantize):

$$\hat{x} = q_c \cdot s$$

この $\hat{x}$ が元の値 $x$ の近似値です。量子化誤差は $\epsilon = |x - \hat{x}|$ で定義され、最大誤差は $\frac{s}{2}$ に制限されます。

ビット幅を16→4→2と下げてみてください。2bitでは $q_{\max}=1$、取りうる値が $\{-1, 0, 1\}$ の3つだけになり、誤差が劇的に増えます。

🖼️ 画像で見るbitの荒さ

パターンを選んで比較

解説: なぜバンディングが起こるか(均一量子化理論)

$b$ bit/チャンネルの場合、表現可能な段階数は $L = 2^b$ です。連続値 $v \in [0, 255]$ は以下のように離散化されます:

$$\Delta = \frac{256}{L}, \quad \hat{v} = \left\lfloor \frac{v}{\Delta} \right\rfloor \cdot \Delta + \frac{\Delta}{2}$$

ステップ幅 $\Delta$ が大きくなるほど、隣接する量子化値の差が増え、グラデーション中に目に見える段差(バンディング)が発生します。

  • 8bit/ch: $L=256$, $\Delta=1$ — 人間の知覚閾値(約1/256)以下で滑らか
  • 4bit/ch: $L=16$, $\Delta=16$ — Weber-Fechnerの法則により暗部でバンディングが知覚される
  • 2bit/ch: $L=4$, $\Delta=64$ — 明確なバンディング。色の総数は $4^3 = 64$ 色
  • 1bit/ch: $L=2$, $\Delta=128$ — 各チャンネルON/OFFのみ。全 $2^3 = 8$ 色

均一量子化の理論的な平均二乗誤差 (MSE) は:

$$\mathrm{MSE} = \frac{\Delta^2}{12} = \frac{256^2}{12 \cdot 2^{2b}}$$

ビット幅が1bit減るたびにMSEは約4倍(6.02 dB)悪化します。

パターンを切り替えると、量子化の影響が画像の周波数特性によってどう異なるかを比較できます。高周波成分(波紋パターン)では量子化ノイズが原信号に紛れやすい一方、低周波(グラデーション)ではバンディングが顕著です。

🧩 モザイクで分かる「情報の限界」

どこまで粗くしても何か分かる?

認識可能な絵をモザイク化(空間解像度の量子化)して、判別不能になる境界を体験してみましょう。

解説: 空間量子化と値量子化

上の「🖼️画像で見るbitの荒さ」は値の量子化(色の段階を減らす)でした。ここでは空間の量子化(ピクセル数を減らす)を行っています。

AIモデルの量子化も本質は同じです。重みの精度を落とすと、細かいニュアンスから失われ、やがて本質的な特徴まで壊れます。「どのbit幅まで下げても大丈夫か」は、この「判別可能/不能」の境界線を見極める作業と似ています。

ブロックサイズ4×4程度なら大体何か分かりますが、16×16を超えると判別困難になります。INT4量子化が「ギリギリ使える」のと同じ感覚です。

📝 文章で見る量子化 — 言葉の「精度」を落とす

文章を段階的に劣化させると?

画像のモザイクと同じ原理を、文章に適用します。漢字→ひらがな→文字の間引き→記号化と精度を落としていくと、どの段階で意味が失われるかを体験できます。

解説: 文章の量子化とAIモデルの量子化の対応

この比喩はAIモデルの量子化と以下のように対応しています:

文章の劣化レベル対応するAI量子化情報の変化
原文(全漢字)FP32完全な情報を保持
ひらがな化FP16表記が変わるが意味はほぼ保持
2文字ごとに1文字INT8情報量が半減するが推測可能
4文字ごとに1文字INT4断片的、文脈から辛うじて推測
母音のみINT2ほぼ判読不能
文字数のみ1bit元の情報は完全に消失

AI量子化でも同様に、FP16までは品質をほぼ維持し、INT4がギリギリの実用ラインINT2以下では出力が崩壊します。

重要なのは、構造が明確な情報(コード、定型文)は量子化に強くニュアンスの微妙な情報(文学、感情表現)は量子化に弱いという点です。これはAIモデルでも同じ傾向が見られます。

📉 段階的劣化デモ — なぜ精度が下がるか

元信号 vs 量子化信号

8
2
解説: 階段波と信号対量子化雑音比 (SQNR)

ビット幅 $b$ の量子化レベル数は $L = 2^b$ です。信号の振幅範囲 $[-A, A]$ に対し、量子化ステップ幅は:

$$\Delta = \frac{2A}{2^b}$$

量子化誤差 $e = x - \hat{x}$ は $[-\Delta/2, +\Delta/2]$ の一様分布に近似でき、その分散は:

$$\sigma_e^2 = \frac{\Delta^2}{12}$$

信号対量子化雑音比 (SQNR) は、信号の分散 $\sigma_x^2$ に対して:

$$\mathrm{SQNR} = 10 \log_{10}\!\left(\frac{\sigma_x^2}{\sigma_e^2}\right) \approx 6.02\,b + C \;\text{[dB]}$$

つまり1bitごとに約6 dBのSQNRが得られ、1bit減るごとに雑音が約4倍になります。

  • 16bit: $L = 65{,}536$, SQNR ≈ 98 dB → 元信号とほぼ区別不能
  • 8bit: $L = 256$, SQNR ≈ 50 dB → わずかな階段が見える
  • 4bit: $L = 16$, SQNR ≈ 26 dB → 明らかな階段状
  • 1bit: $L = 2$, SQNR ≈ 8 dB → +1か-1のみ

信号の複雑さ(高調波数 $k$)を増やすと、高周波成分のエネルギーが増加し、量子化ノイズとの相互作用がより複雑になります。

🎯 なぜ量子化が成立するのか — 冗長性の可視化

重み分布の集中度

解説: 重みの分布と量子化誤差の関係

Transformerの重みは初期化にXavier/He初期化を用い、学習後もほぼ正規分布を保ちます:

$$w \sim \mathcal{N}\!\left(0,\; \frac{2}{n_{\mathrm{in}} + n_{\mathrm{out}}}\right)$$

典型的なLLM(7Bクラス)では、95%以上の重みが $\pm 3\sigma$ 以内($\sigma \approx 0.01$〜$0.02$)に収まります。

量子化の平均二乗誤差 (MSE) は、分布の確率密度関数 $f(x)$ と量子化関数 $Q(x)$ を用いて:

$$\mathrm{MSE} = \mathbb{E}\!\left[(x - Q(x))^2\right] = \int_{-\infty}^{\infty} (x - Q(x))^2 f(x) \, dx$$

重みが0付近に集中しているため、$|x|$ が小さい領域の量子化精度が全体のMSEを支配します。対称量子化のグリッド間隔 $s = \alpha / q_{\max}$ において、$\alpha$ が小さいほど精度が高くなるため、分布が狭いことは量子化にとって理想的です。

精度 vs 出力ロバスト性

簡易3層NN (2入力→4隠れ→1出力) を各ビット幅で計算し、出力を比較

解説: なぜ微小誤差が問題にならないか — 数理的根拠

量子化後の重みを $\hat{W} = W + E$ とすると($E$ は誤差行列)、ある層の出力は:

$$\hat{y} = \hat{W}x = Wx + Ex$$

誤差項 $Ex$ の影響が小さい理由は以下の4つです:

  • 重みが0付近に集中: $\|E\|_F \ll \|W\|_F$ となり、相対誤差 $\|E\|_F / \|W\|_F$ が小さい
  • 行列積で誤差が相殺(大数の法則): $E$ の各要素は平均0に近い独立な誤差。隠れ層の次元 $d$ が大きいとき、$Ex$ の各成分は $\sim \mathcal{O}(1/\sqrt{d})$ に縮小: $$\mathbb{E}[(Ex)_i^2] = \sum_j \mathbb{E}[E_{ij}^2] \cdot x_j^2 = \sigma_e^2 \|x\|^2$$
  • ReLUが微小差を吸収: $\mathrm{ReLU}(z) = \max(0, z)$ は負の値を全て0にするため、誤差が出力の符号を変えない限り影響なし
  • 損失平面の平坦性: 学習済みモデルは損失関数 $\mathcal{L}(W)$ の平坦な極小値にいるため、ヘッセ行列 $H$ の固有値が小さく、$\mathcal{L}(W+E) \approx \mathcal{L}(W) + \frac{1}{2} E^T H E$ の第二項が微小
このツールで学べること
量子化の全体像
ビット表現 → 分布の変化 → 誤差の可視化 → トレードオフ
対象読者
LLM利用者〜ML初学者
数式は展開可能。直感的な図解を優先
操作方法
スライダー & クリック
パラメータを動かすと全てリアルタイム更新
そもそも「量子化」とは? — 30秒で理解する

AIモデル(ChatGPTなどのLLM)は内部に数十億〜数千億の数値パラメータ(重み)を持ちます。通常 FP32(32ビット浮動小数点数)で保存されますが、7Bモデルなら28GBのメモリが必要です。

家の引っ越しで考えてみてください。FP32は全荷物を「超大型トラック」で運ぶようなもの。量子化は「荷物を圧縮して小型トラックに積み替える」技術です。多少シワがつく(精度低下)けれど、運搬コスト(メモリ・計算時間)が劇的に下がります。
$$\text{VRAM} = \frac{N \times b}{8} \quad \Rightarrow \quad \text{FP32: } 28\text{GB} \;\to\; \text{FP16: } 14\text{GB} \;\to\; \text{INT8: } 7\text{GB} \;\to\; \text{INT4: } 3.5\text{GB}$$

つまり量子化 = 数値の精度を落としてモデルを軽量化する技術。精度と効率の最適なバランスを探るのがこの分野の課題です。

数学的には、量子化は写像 $Q: \mathbb{R} \to \mathcal{C}$ であり、有限のコードブック $\mathcal{C} = \{c_1, c_2, \ldots, c_L\}$ ($L = 2^b$ レベル)への最近傍割当です。最適な $\mathcal{C}$ は歪み関数 $D = \mathbb{E}[(x - Q(x))^2]$ を最小化するように設計されます(Lloyd-Maxアルゴリズム)。

🔢 ビット構造の比較

各データ形式の内部構造

符号 指数 仮数/値

比較テーブル

形式ビット取りうる値の数メモリ(7B)精度
FP3232~42億28.0 GB基準
FP1616~65,53614.0 GB≈ 同等
INT882567.0 GB微減
INT44163.5 GB顕著に減
解説: FP vs INT の根本的な違い

浮動小数点 (FP) は「指数部」でスケールを動的に調整し、非常に広いダイナミックレンジを持ちます:

$$x = (-1)^{s} \times 2^{(E - \mathrm{bias})} \times (1 + M)$$

ここで $s$ は符号ビット、$E$ は指数部の整数値、$M$ は仮数部($0 \le M < 1$)。FP32では指数8bit、仮数23bitで、ダイナミックレンジは約 $10^{-38}$ 〜 $10^{38}$ です。

FP16 (half precision) では指数5bit・仮数10bitに縮小されますが、BFloat16 (BF16) は指数8bitを維持して仮数を7bitに削り、FP32と同じレンジを保ちます:

$$\text{FP16: } 6.1 \times 10^{-5} \sim 6.6 \times 10^4, \quad \text{BF16: } 1.2 \times 10^{-38} \sim 3.4 \times 10^{38}$$

整数型 (INT) は指数部がなく、固定のscale $s$ で値を表現します:

$$\hat{x} = s \cdot q, \quad q \in \{-2^{b-1},\ldots, 2^{b-1}-1\}$$

値は等間隔 $s$ で飛び飛びになり、最大 $s/2$ の量子化誤差が生じます。

FP32は「0.001mm刻みの精密なデジタルノギス」。INT4 は「1cm刻みのメジャー」。7.3mmの物を測ると、ノギスは7.3mmと言えるが、メジャーでは「1cm」としか言えない。この差が量子化誤差です。

📊 重み分布と量子化の影響

正規分布の重みを各精度で量子化

1000
1.0
解説: 分布の変形と情報理論的解釈

AIモデルの重みは正規分布 $w \sim \mathcal{N}(0, \sigma^2)$ に近い形を取ります。量子化は確率密度関数を離散分布に変換する操作です。

  • FP32 (灰): 連続分布そのもの。情報エントロピー $h(w) = \frac{1}{2}\ln(2\pi e \sigma^2)$
  • FP16 (緑): FP32とほぼ重なる。仮数10bitの精度は重みの精度を上回る
  • INT8 (黄): 256段階への離散化。離散エントロピー $H \le 8$ bits で、正規分布なら $H \approx 7.5$ bits
  • INT4 (紫): 16段階のみ。$H \le 4$ bits。確率密度のピーク付近の値にスパイクが集中

量子化による情報損失はKLダイバージェンスで測定できます:

$$D_{\mathrm{KL}}(p \| \hat{p}) = \sum_i p(x_i) \ln \frac{p(x_i)}{\hat{p}(x_i)} \ge 0$$

ビット幅が減るほど $D_{\mathrm{KL}}$ は大きくなり、元の分布との乖離が増大します。TensorRTなどの量子化ツールは、$D_{\mathrm{KL}}$ を最小化するクリッピング閾値 $\alpha$ を探索します (エントロピー校正)。

$\sigma$ を大きくすると分布が広がり、INT4のスパイクがより極端になるのを確認してください。これはscale $s = \alpha/q_{\max}$ が大きくなり、量子化グリッドが粗くなるためです。

🌡️ 量子化誤差を直感的に理解する

元の値 vs 量子化誤差(散布図)

各点は1つの重み。X軸=元の値、Y軸=量子化後の誤差。0から離れるほど誤差が大きいことが一目でわかる。

300

数直線スナップ — 値はこう「丸められる」

上段=INT8(256段階)、下段=INT4(16段階)。矢印が量子化誤差を表す。

12

🎯 2Dベクトルで見る量子化誤差

左: 個別ベクトルの量子化誤差。右: ベクトルの合計(Σ)で誤差がどう蓄積 or 相殺するか。薄い線は各ベクトルの加算過程を示します。

8
解説: ベクトル量子化と角度誤差の数理

重みベクトル $\mathbf{w} \in \mathbb{R}^d$ を要素ごとに量子化すると $\hat{\mathbf{w}} = Q(\mathbf{w})$ が得られます。このとき2種類の誤差が発生します:

1. ノルム(大きさ)の誤差:

$$\epsilon_{\mathrm{norm}} = \left|\; \|\mathbf{w}\| - \|\hat{\mathbf{w}}\| \;\right|$$

2. 角度誤差(方向のずれ):

$$\theta = \arccos\!\left(\frac{\mathbf{w} \cdot \hat{\mathbf{w}}}{\|\mathbf{w}\| \cdot \|\hat{\mathbf{w}}\|}\right)$$

ニューラルネットワークの行列積 $y = Wx$ において、角度誤差は活性化パターンの変化(どのニューロンが発火するか)に直結するため、ノルム誤差よりも品質への影響が大きくなります。

$d$ 次元で各要素の量子化誤差が独立に $\mathcal{U}[-s/2, s/2]$ に従う場合、誤差ベクトルのノルムの期待値は:

$$\mathbb{E}\!\left[\|\mathbf{e}\|\right] = s \sqrt{\frac{d}{12}}$$

次元数 $d$ が増えるほど誤差ノルムは $\sqrt{d}$ で成長しますが、元のベクトルのノルムも $\sqrt{d}$ で成長するため、相対誤差は次元数に依存しません。一方、角度誤差は高次元ほど小さくなる傾向があります(Johnson-Lindenstraussの類似性)。

グラフのオレンジの扇形は角度誤差を視覚化したものです。INT4で $\theta > 5°$ を超えるベクトルでは、行列積の出力に有意な影響が生じ始めます。

3. ベクトル和の誤差(右パネル):

ニューラルネットワークの行列積 $y = Wx$ は、重み行列の行ベクトルと入力の内積の「和」です。右パネルは量子化後の合計ベクトル $\sum Q(\mathbf{w}_i)$ が元の合計 $\sum \mathbf{w}_i$ からどれだけずれるかを示します。

各ベクトルの量子化誤差を $\mathbf{e}_i = \mathbf{w}_i - Q(\mathbf{w}_i)$ とすると、合計の誤差は:

$$\left\|\sum_i \mathbf{e}_i\right\| \le \sum_i \|\mathbf{e}_i\| \quad \text{(三角不等式)}$$

しかし $\mathbf{e}_i$ の方向がランダムに分散するため、実際には大数の法則により:

$$\mathbb{E}\!\left[\left\|\sum_i \mathbf{e}_i\right\|^2\right] = \sum_i \mathbb{E}\!\left[\|\mathbf{e}_i\|^2\right] = N \cdot \frac{d \cdot s^2}{12}$$
$$\left\|\sum_i \mathbf{e}_i\right\| \approx \sqrt{N} \cdot s\sqrt{\frac{d}{12}} \ll N \cdot \frac{s}{2}\sqrt{d}$$

つまり $N$ 個のベクトルを足すと、誤差は最悪ケースの $N$ 倍ではなく $\sqrt{N}$ 倍にしか成長しません。これが「量子化しても行列積が壊れにくい」根本的な理由です。再生成を何度か試すと、合計誤差が個別平均より小さいケース(誤差が相殺)が頻繁に観察できます。

解説: 量子化誤差の数理 — 鋸歯状パターンとスケールの違い

■ 鋸歯状(三角波)パターンの正体

INT4の散布図に見える規則的な波模様は、量子化の本質そのものです。対称量子化のグリッド間隔 $s$ で並ぶ量子化点の間で、誤差 $\epsilon(x) = |x - Q(x)|$ は以下の三角波を描きます:

$$\epsilon(x) = \left|x - s \cdot \mathrm{round}\!\left(\frac{x}{s}\right)\right|$$

各量子化点 $c_k = k \cdot s$ を中心に、$\epsilon$ は 0 → $s/2$ → 0 と線形に増減します。つまりグリッド点ちょうどでは誤差0、グリッド点の中間で最大誤差 $s/2$ に達します。これが周期 $s$ の三角波です:

$$\epsilon(x) = \frac{s}{2} - \left|\,\left(x \bmod s\right) - \frac{s}{2}\,\right|$$

■ INT8にも同じパターンがある — 見えないだけ

INT8もまったく同じ三角波構造を持ちます。見えない理由はスケールの違いです:

$$s_4 = \frac{\alpha}{2^3 - 1} = \frac{\alpha}{7}, \quad s_8 = \frac{\alpha}{2^7 - 1} = \frac{\alpha}{127}$$

INT8のグリッド間隔はINT4の約 $127/7 \approx 18$ 倍細かいため、三角波の振幅(最大誤差)も約18倍小さくなります:

$$\frac{s_4 / 2}{s_8 / 2} = \frac{q_{\max,8}}{q_{\max,4}} = \frac{127}{7} \approx 18.1$$

このグラフではY軸がINT4の最大誤差に合わせてスケーリングされているため、INT8の三角波は高さ $1/18$ に圧縮されて水平線のように見えるだけです。INT8だけを拡大表示すれば、全く同じ鋸歯状パターンが現れます。

■ 一般化: ビット幅と誤差包絡線

任意のビット幅 $b$ に対する誤差の包絡線は:

$$0 \le \epsilon(x) \le \frac{s_b}{2} = \frac{\alpha}{2(2^{b-1} - 1)}$$

グラフ上では、散布図の点が $y = 0$ と $y = s_b/2$ の間の帯状の領域を埋め、三角波の谷($\epsilon = 0$)は量子化グリッド点の位置に対応します。INT4は7本の谷、INT8は127本の谷があります。

■ なぜ0付近は誤差が小さく見えるか

鋸歯状パターンの振幅 $s/2$ は位置によらず一定ですが、散布図ではX軸の0付近に点が密集しています(正規分布のため)。密集した点群の中では三角波の個々の山が識別しづらく、「0付近は低誤差」に見えます。実際には絶対誤差は全域で同じ $[0, s/2]$ の範囲です。

ただし相対誤差は異なります:

$$\epsilon_{\mathrm{rel}}(x) = \frac{\epsilon(x)}{|x|} \le \frac{s/2}{|x|}$$

NNの出力への影響は $|w| \cdot \epsilon$ に比例するため、$|w|$ が小さい0付近の重みの量子化誤差は出力にほぼ影響しません。

■ クリッピング誤差

$|x| > \alpha$ の値は $\alpha$ に切り詰められ、三角波の上限を超えた単調増加の誤差が生じます:

$$\epsilon_{\mathrm{clip}}(x) = |x| - \alpha \quad \text{(for } |x| > \alpha \text{)}$$
INT4では $q_{\max} = 7$ で、全ての重みがたった15個の値 $\{-7s, \ldots, 0, \ldots, 7s\}$ のいずれかに丸められます。7Bモデルの70億パラメータがわずか15段階に。それでも動作するのは、重みの分布が0付近に集中しておりMSEが十分小さいためです。

⚡ メモリ・速度・品質トレードオフ

解説: メモリ・帯域幅・演算量の定量分析

メモリ使用量はパラメータ数 $N$ とビット幅 $b$ から:

$$\text{VRAM}_{\mathrm{weights}} = \frac{N \times b}{8} \;\text{[bytes]}$$

例: $N = 7 \times 10^9$, $b = 32$ → $28\,\text{GB}$。$b = 4$ → $3.5\,\text{GB}$。

ただし推論時にはKVキャッシュの分も必要です。シーケンス長 $L$、層数 $n_l$、隠れ次元 $d$ のとき:

$$\text{VRAM}_{\mathrm{KV}} = 2 \times n_l \times L \times d \times \frac{b_{\mathrm{kv}}}{8}$$

推論スループット: 自己回帰推論は1トークンずつ生成するため、メモリ帯域律速(compute-boundではなくmemory-bound)になります。帯域幅 $B_{\mathrm{mem}}$ [GB/s] のとき:

$$\text{tokens/s} \approx \frac{B_{\mathrm{mem}}}{\text{VRAM}_{\mathrm{weights}} / N_{\mathrm{tokens\_batch}}}$$

ビット幅を半分にすると転送データ量も半分 → 約2倍速。A100 (2TB/s) でINT4-7Bモデルなら理論上 $\sim 570$ tokens/s。

演算量 (FLOPs): INT8/INT4の整数演算はFP32の浮動小数点演算より高速で、A100ではINT8がFP32比で約4倍のスループット (624 TOPS vs 156 TFLOPS) です。

INT4にすれば、8GB VRAMの消費者向けGPU (RTX 3060等) で7Bモデルが動きます。FP32だとA100 (80GB) クラスが必要です。この差が「量子化革命」の核心です。
対称量子化 — 最も基本的な手法

対称量子化は、値の範囲を $[-\alpha, +\alpha]$ と仮定し($\alpha = \max|w_i|$)、0を中心に等間隔で離散化します。

量子化 (Quantize):

$$s = \frac{\alpha}{2^{b-1} - 1}, \quad q = \mathrm{round}\!\left(\frac{x}{s}\right), \quad q_c = \mathrm{clamp}(q, -q_{\max}, q_{\max})$$

逆量子化 (Dequantize):

$$\hat{x} = q_c \cdot s$$

特徴: $x=0$ が正確に $q=0$ にマッピングされるため、ReLU後のスパースなテンソル(多くの0を含む)に最適。zero-pointの保存が不要でメモリ効率が良い。

ステップバイステップ

    数直線(ドラッグで値を変更可能)

    元の値 量子化値 | 量子化グリッド --- 誤差
    解説: 数直線の見方

    細い縦線 = 量子化レベル(取りうる値の候補)。INT8なら255本、INT4なら15本。

    青い点(元の値)が最も近い量子化レベルに「吸い寄せられる」のが量子化です。赤い点との差が量子化誤差

    数直線上をドラッグすると入力値がリアルタイムに変わります。ビット幅を切り替えてグリッドの粗さの違いを体感してください。

    量子化手法ごとの出力品質の違い

    同じプロンプトを異なる量子化手法のモデルに与えたとき、応答の豊かさ・正確さ・ニュアンスにどのような差が出るかを示すシミュレーションデータです。

    量子化手法別 応答品質比較

    テキストクリックで展開。★クリックで評価(LocalStorage保存)。

    💥 外れ値の破壊的影響

    63個の正常重み + 1個の外れ値

    0
    解説: 外れ値問題の数理と対策手法

    Transformerの一部チャネルには、$|w_{\mathrm{out}}| \gg \sigma_w$ となる外れ値が存在します(Dettmers et al., 2022: LLM.int8())。

    外れ値がscaleに与える影響を定量化します。正常な重みの最大絶対値を $\alpha_n$、外れ値を $\alpha_o$ ($\alpha_o \gg \alpha_n$) とすると:

    $$s = \frac{\alpha_o}{q_{\max}}, \quad \text{正常値の有効ビット幅} = \log_2\!\left(\frac{2\alpha_n}{s}\right) = b - 1 + \log_2\!\left(\frac{\alpha_n}{\alpha_o}\right)$$

    $\alpha_o / \alpha_n = 100$ の場合、INT4 の正常値の有効ビット幅は $4 - 1 - 6.6 \approx -3.6$ → 実質的に情報量ゼロ

    対策手法:

    • SmoothQuant (Xiao et al., 2023): 活性化のチャネル単位のスケーリング因子 $\mathrm{diag}(s_j)$ を用いて、$Y = (X \cdot \mathrm{diag}(s)^{-1}) \cdot (\mathrm{diag}(s) \cdot W)$ と等価変換。活性化の外れ値を重みに「移す」
    • AWQ (Lin et al., 2024): 重要チャネル(活性化の大きさで測定)のscaleを $s_j = \left(\frac{\|X_j\|}{\max|W_j|}\right)^\alpha$ で事前調整。$\alpha$ は探索で最適化
    • GPTQ (Frantar et al., 2023): 近似ヘッセ行列 $H = 2X^TX$ を用いた最適ブレインサージョン (OBS) で、各重みの量子化誤差を他の未量子化重みに分散: $$\delta_F = -\frac{w_q - Q(w_q)}{[H^{-1}]_{qq}} \cdot H^{-1}_{:,q}$$
    • Mixed-precision (LLM.int8()): 外れ値チャネル(上位0.1%)をFP16で保持し、残りをINT8で量子化
    スライダーを0→50に動かして、量子化グリッドがどう変化するか観察してください。外れ値=50では、正常値($\pm 1$)の領域のグリッドがほぼ消失し、有効ビット幅が0に近づきます。

    📈 Perplexity vs ビット数曲線

    モデルサイズ別 量子化感度

    解説: Perplexityの数理的定義と量子化との関係

    Perplexity (PPL) は言語モデルの予測性能を測る指標で、テストコーパスの $N$ トークンに対して:

    $$\mathrm{PPL} = \exp\!\left(-\frac{1}{N}\sum_{i=1}^{N} \ln P(t_i \mid t_1, \ldots, t_{i-1})\right)$$

    直感的には「次のトークンを予測する際の平均的な選択肢の数」。PPL = 10 なら、各ステップで平均10個の候補から選んでいるのと同等の不確実性。低いほど性能が良い

    量子化重み $\hat{W} = W + E$ を用いたモデルのPPL変化は、Taylor展開で近似すると:

    $$\Delta \mathrm{PPL} \approx \mathrm{PPL}_0 \cdot \left(\frac{1}{N} \sum_i \nabla_W \mathcal{L}_i \cdot E + \frac{1}{2} E^T H E\right)$$

    ここで $\mathcal{L}_i = -\ln P(t_i|\cdot)$ はクロスエントロピー損失、$H$ はヘッセ行列。GPTQはこの $E^T H E$ 項を最小化する手法です。

    • 4bit以上: $\Delta\mathrm{PPL}/\mathrm{PPL}_0 \le 5\%$ → 実用上問題なし
    • 3bit以下: $\|E\|_F$ が急増し二次項が支配的に → 品質の崖 (quality cliff)
    • 大きいモデルほど量子化に強い: パラメータ冗長性が高く、$H$ の固有値が相対的に小さいため $E^T H E$ が抑制される

    実用ガイド

    2-3bit
    研究用
    品質劣化が大きい。研究・実験目的。GPTQの最新手法でも限界あり
    4bit
    実用最低ライン
    コスパ最強のスイートスポット。AWQ/GGUFで高品質を維持
    8bit
    安全圏
    品質ほぼ無劣化。メモリ75%削減。商用利用の定番
    16bit
    品質最優先
    FP32とほぼ同等。精度が絶対の場合。VRAM潤沢な環境向け

    🧠 ニューラルネット計算ウォークスルー

    2入力→3隠れ→1出力 ネットワーク

    解説: 順伝播における量子化誤差の伝搬

    $L$ 層のネットワーク $y = f_L \circ \cdots \circ f_1(x)$ において、各層の量子化誤差がどう伝搬するかを示しています。

    層 $l$ の出力誤差 $\delta^{(l)} = \hat{y}^{(l)} - y^{(l)}$ は、Lipschitz定数 $K_l$ を用いて:

    $$\|\delta^{(l)}\| \le K_l \|\delta^{(l-1)}\| + \|E^{(l)} x^{(l)}\|$$

    $K_l = \|W^{(l)}\| \cdot \mathrm{Lip}(\sigma)$ で、ReLUの場合 $\mathrm{Lip}(\sigma) = 1$。最終層の誤差は:

    $$\|\delta^{(L)}\| \le \sum_{l=1}^{L} \left(\prod_{k=l+1}^{L} K_k\right) \|E^{(l)} x^{(l)}\|$$

    $\|W\|$ が小さい(重みが0付近に集中)ため $K_l < 1$ となることが多く、誤差は層を通じて減衰します。これが量子化が成立する根本的な理由です。

    色の意味: FP32の出力 $y_{\mathrm{FP32}}$ を基準として、$|\hat{y}_b - y_{\mathrm{FP32}}| / |y_{\mathrm{FP32}}|$ が小さいほど緑、大きいほど赤。

    「新しい重みで再計算」を何度か押すと、INT8はFP32にほぼ一致し、INT4でも乖離が小さいケースが多いことがわかります。これがLipschitz定数 $< 1$ の効果です。