対称量子化の3ステップは以下の数式で記述されます。ビット幅 $b$ に対し、表現可能な最大整数 $q_{\max} = 2^{b-1} - 1$ とします。
Step 1 — Scale計算と量子化 (round):
ここで $\alpha = \max|x_i|$(テンソル内の最大絶対値)、$x$ は実数値の重みです。
Step 2 — クランプ (clamp):
丸め結果が表現範囲を超えた場合に切り詰めます。飽和 (saturation) とも呼びます。
Step 3 — 逆量子化 (dequantize):
この $\hat{x}$ が元の値 $x$ の近似値です。量子化誤差は $\epsilon = |x - \hat{x}|$ で定義され、最大誤差は $\frac{s}{2}$ に制限されます。
$b$ bit/チャンネルの場合、表現可能な段階数は $L = 2^b$ です。連続値 $v \in [0, 255]$ は以下のように離散化されます:
ステップ幅 $\Delta$ が大きくなるほど、隣接する量子化値の差が増え、グラデーション中に目に見える段差(バンディング)が発生します。
均一量子化の理論的な平均二乗誤差 (MSE) は:
ビット幅が1bit減るたびにMSEは約4倍(6.02 dB)悪化します。
認識可能な絵をモザイク化(空間解像度の量子化)して、判別不能になる境界を体験してみましょう。
上の「🖼️画像で見るbitの荒さ」は値の量子化(色の段階を減らす)でした。ここでは空間の量子化(ピクセル数を減らす)を行っています。
AIモデルの量子化も本質は同じです。重みの精度を落とすと、細かいニュアンスから失われ、やがて本質的な特徴まで壊れます。「どのbit幅まで下げても大丈夫か」は、この「判別可能/不能」の境界線を見極める作業と似ています。
画像のモザイクと同じ原理を、文章に適用します。漢字→ひらがな→文字の間引き→記号化と精度を落としていくと、どの段階で意味が失われるかを体験できます。
この比喩はAIモデルの量子化と以下のように対応しています:
| 文章の劣化レベル | 対応するAI量子化 | 情報の変化 |
|---|---|---|
| 原文(全漢字) | FP32 | 完全な情報を保持 |
| ひらがな化 | FP16 | 表記が変わるが意味はほぼ保持 |
| 2文字ごとに1文字 | INT8 | 情報量が半減するが推測可能 |
| 4文字ごとに1文字 | INT4 | 断片的、文脈から辛うじて推測 |
| 母音のみ | INT2 | ほぼ判読不能 |
| 文字数のみ | 1bit | 元の情報は完全に消失 |
AI量子化でも同様に、FP16までは品質をほぼ維持し、INT4がギリギリの実用ライン、INT2以下では出力が崩壊します。
重要なのは、構造が明確な情報(コード、定型文)は量子化に強く、ニュアンスの微妙な情報(文学、感情表現)は量子化に弱いという点です。これはAIモデルでも同じ傾向が見られます。
ビット幅 $b$ の量子化レベル数は $L = 2^b$ です。信号の振幅範囲 $[-A, A]$ に対し、量子化ステップ幅は:
量子化誤差 $e = x - \hat{x}$ は $[-\Delta/2, +\Delta/2]$ の一様分布に近似でき、その分散は:
信号対量子化雑音比 (SQNR) は、信号の分散 $\sigma_x^2$ に対して:
つまり1bitごとに約6 dBのSQNRが得られ、1bit減るごとに雑音が約4倍になります。
信号の複雑さ(高調波数 $k$)を増やすと、高周波成分のエネルギーが増加し、量子化ノイズとの相互作用がより複雑になります。
Transformerの重みは初期化にXavier/He初期化を用い、学習後もほぼ正規分布を保ちます:
典型的なLLM(7Bクラス)では、95%以上の重みが $\pm 3\sigma$ 以内($\sigma \approx 0.01$〜$0.02$)に収まります。
量子化の平均二乗誤差 (MSE) は、分布の確率密度関数 $f(x)$ と量子化関数 $Q(x)$ を用いて:
重みが0付近に集中しているため、$|x|$ が小さい領域の量子化精度が全体のMSEを支配します。対称量子化のグリッド間隔 $s = \alpha / q_{\max}$ において、$\alpha$ が小さいほど精度が高くなるため、分布が狭いことは量子化にとって理想的です。
簡易3層NN (2入力→4隠れ→1出力) を各ビット幅で計算し、出力を比較
量子化後の重みを $\hat{W} = W + E$ とすると($E$ は誤差行列)、ある層の出力は:
誤差項 $Ex$ の影響が小さい理由は以下の4つです:
AIモデル(ChatGPTなどのLLM)は内部に数十億〜数千億の数値パラメータ(重み)を持ちます。通常 FP32(32ビット浮動小数点数)で保存されますが、7Bモデルなら28GBのメモリが必要です。
つまり量子化 = 数値の精度を落としてモデルを軽量化する技術。精度と効率の最適なバランスを探るのがこの分野の課題です。
数学的には、量子化は写像 $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) | 精度 |
|---|---|---|---|---|
| FP32 | 32 | ~42億 | 28.0 GB | 基準 |
| FP16 | 16 | ~65,536 | 14.0 GB | ≈ 同等 |
| INT8 | 8 | 256 | 7.0 GB | 微減 |
| INT4 | 4 | 16 | 3.5 GB | 顕著に減 |
浮動小数点 (FP) は「指数部」でスケールを動的に調整し、非常に広いダイナミックレンジを持ちます:
ここで $s$ は符号ビット、$E$ は指数部の整数値、$M$ は仮数部($0 \le M < 1$)。FP32では指数8bit、仮数23bitで、ダイナミックレンジは約 $10^{-38}$ 〜 $10^{38}$ です。
FP16 (half precision) では指数5bit・仮数10bitに縮小されますが、BFloat16 (BF16) は指数8bitを維持して仮数を7bitに削り、FP32と同じレンジを保ちます:
整数型 (INT) は指数部がなく、固定のscale $s$ で値を表現します:
値は等間隔 $s$ で飛び飛びになり、最大 $s/2$ の量子化誤差が生じます。
AIモデルの重みは正規分布 $w \sim \mathcal{N}(0, \sigma^2)$ に近い形を取ります。量子化は確率密度関数を離散分布に変換する操作です。
量子化による情報損失はKLダイバージェンスで測定できます:
ビット幅が減るほど $D_{\mathrm{KL}}$ は大きくなり、元の分布との乖離が増大します。TensorRTなどの量子化ツールは、$D_{\mathrm{KL}}$ を最小化するクリッピング閾値 $\alpha$ を探索します (エントロピー校正)。
各点は1つの重み。X軸=元の値、Y軸=量子化後の誤差。0から離れるほど誤差が大きいことが一目でわかる。
上段=INT8(256段階)、下段=INT4(16段階)。矢印が量子化誤差を表す。
左: 個別ベクトルの量子化誤差。右: ベクトルの合計(Σ)で誤差がどう蓄積 or 相殺するか。薄い線は各ベクトルの加算過程を示します。
重みベクトル $\mathbf{w} \in \mathbb{R}^d$ を要素ごとに量子化すると $\hat{\mathbf{w}} = Q(\mathbf{w})$ が得られます。このとき2種類の誤差が発生します:
1. ノルム(大きさ)の誤差:
2. 角度誤差(方向のずれ):
ニューラルネットワークの行列積 $y = Wx$ において、角度誤差は活性化パターンの変化(どのニューロンが発火するか)に直結するため、ノルム誤差よりも品質への影響が大きくなります。
$d$ 次元で各要素の量子化誤差が独立に $\mathcal{U}[-s/2, s/2]$ に従う場合、誤差ベクトルのノルムの期待値は:
次元数 $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)$ とすると、合計の誤差は:
しかし $\mathbf{e}_i$ の方向がランダムに分散するため、実際には大数の法則により:
つまり $N$ 個のベクトルを足すと、誤差は最悪ケースの $N$ 倍ではなく $\sqrt{N}$ 倍にしか成長しません。これが「量子化しても行列積が壊れにくい」根本的な理由です。再生成を何度か試すと、合計誤差が個別平均より小さいケース(誤差が相殺)が頻繁に観察できます。
■ 鋸歯状(三角波)パターンの正体
INT4の散布図に見える規則的な波模様は、量子化の本質そのものです。対称量子化のグリッド間隔 $s$ で並ぶ量子化点の間で、誤差 $\epsilon(x) = |x - Q(x)|$ は以下の三角波を描きます:
各量子化点 $c_k = k \cdot s$ を中心に、$\epsilon$ は 0 → $s/2$ → 0 と線形に増減します。つまりグリッド点ちょうどでは誤差0、グリッド点の中間で最大誤差 $s/2$ に達します。これが周期 $s$ の三角波です:
■ INT8にも同じパターンがある — 見えないだけ
INT8もまったく同じ三角波構造を持ちます。見えない理由はスケールの違いです:
INT8のグリッド間隔はINT4の約 $127/7 \approx 18$ 倍細かいため、三角波の振幅(最大誤差)も約18倍小さくなります:
このグラフではY軸がINT4の最大誤差に合わせてスケーリングされているため、INT8の三角波は高さ $1/18$ に圧縮されて水平線のように見えるだけです。INT8だけを拡大表示すれば、全く同じ鋸歯状パターンが現れます。
■ 一般化: ビット幅と誤差包絡線
任意のビット幅 $b$ に対する誤差の包絡線は:
グラフ上では、散布図の点が $y = 0$ と $y = s_b/2$ の間の帯状の領域を埋め、三角波の谷($\epsilon = 0$)は量子化グリッド点の位置に対応します。INT4は7本の谷、INT8は127本の谷があります。
■ なぜ0付近は誤差が小さく見えるか
鋸歯状パターンの振幅 $s/2$ は位置によらず一定ですが、散布図ではX軸の0付近に点が密集しています(正規分布のため)。密集した点群の中では三角波の個々の山が識別しづらく、「0付近は低誤差」に見えます。実際には絶対誤差は全域で同じ $[0, s/2]$ の範囲です。
ただし相対誤差は異なります:
NNの出力への影響は $|w| \cdot \epsilon$ に比例するため、$|w|$ が小さい0付近の重みの量子化誤差は出力にほぼ影響しません。
■ クリッピング誤差
$|x| > \alpha$ の値は $\alpha$ に切り詰められ、三角波の上限を超えた単調増加の誤差が生じます:
メモリ使用量はパラメータ数 $N$ とビット幅 $b$ から:
例: $N = 7 \times 10^9$, $b = 32$ → $28\,\text{GB}$。$b = 4$ → $3.5\,\text{GB}$。
ただし推論時にはKVキャッシュの分も必要です。シーケンス長 $L$、層数 $n_l$、隠れ次元 $d$ のとき:
推論スループット: 自己回帰推論は1トークンずつ生成するため、メモリ帯域律速(compute-boundではなくmemory-bound)になります。帯域幅 $B_{\mathrm{mem}}$ [GB/s] のとき:
ビット幅を半分にすると転送データ量も半分 → 約2倍速。A100 (2TB/s) でINT4-7Bモデルなら理論上 $\sim 570$ tokens/s。
演算量 (FLOPs): INT8/INT4の整数演算はFP32の浮動小数点演算より高速で、A100ではINT8がFP32比で約4倍のスループット (624 TOPS vs 156 TFLOPS) です。
対称量子化は、値の範囲を $[-\alpha, +\alpha]$ と仮定し($\alpha = \max|w_i|$)、0を中心に等間隔で離散化します。
量子化 (Quantize):
逆量子化 (Dequantize):
特徴: $x=0$ が正確に $q=0$ にマッピングされるため、ReLU後のスパースなテンソル(多くの0を含む)に最適。zero-pointの保存が不要でメモリ効率が良い。
細い縦線 = 量子化レベル(取りうる値の候補)。INT8なら255本、INT4なら15本。
青い点(元の値)が最も近い量子化レベルに「吸い寄せられる」のが量子化です。赤い点との差が量子化誤差。
数直線上をドラッグすると入力値がリアルタイムに変わります。ビット幅を切り替えてグリッドの粗さの違いを体感してください。
同じプロンプトを異なる量子化手法のモデルに与えたとき、応答の豊かさ・正確さ・ニュアンスにどのような差が出るかを示すシミュレーションデータです。
Transformerの一部チャネルには、$|w_{\mathrm{out}}| \gg \sigma_w$ となる外れ値が存在します(Dettmers et al., 2022: LLM.int8())。
外れ値がscaleに与える影響を定量化します。正常な重みの最大絶対値を $\alpha_n$、外れ値を $\alpha_o$ ($\alpha_o \gg \alpha_n$) とすると:
$\alpha_o / \alpha_n = 100$ の場合、INT4 の正常値の有効ビット幅は $4 - 1 - 6.6 \approx -3.6$ → 実質的に情報量ゼロ。
対策手法:
Perplexity (PPL) は言語モデルの予測性能を測る指標で、テストコーパスの $N$ トークンに対して:
直感的には「次のトークンを予測する際の平均的な選択肢の数」。PPL = 10 なら、各ステップで平均10個の候補から選んでいるのと同等の不確実性。低いほど性能が良い。
量子化重み $\hat{W} = W + E$ を用いたモデルのPPL変化は、Taylor展開で近似すると:
ここで $\mathcal{L}_i = -\ln P(t_i|\cdot)$ はクロスエントロピー損失、$H$ はヘッセ行列。GPTQはこの $E^T H E$ 項を最小化する手法です。
$L$ 層のネットワーク $y = f_L \circ \cdots \circ f_1(x)$ において、各層の量子化誤差がどう伝搬するかを示しています。
層 $l$ の出力誤差 $\delta^{(l)} = \hat{y}^{(l)} - y^{(l)}$ は、Lipschitz定数 $K_l$ を用いて:
$K_l = \|W^{(l)}\| \cdot \mathrm{Lip}(\sigma)$ で、ReLUの場合 $\mathrm{Lip}(\sigma) = 1$。最終層の誤差は:
$\|W\|$ が小さい(重みが0付近に集中)ため $K_l < 1$ となることが多く、誤差は層を通じて減衰します。これが量子化が成立する根本的な理由です。
色の意味: FP32の出力 $y_{\mathrm{FP32}}$ を基準として、$|\hat{y}_b - y_{\mathrm{FP32}}| / |y_{\mathrm{FP32}}|$ が小さいほど緑、大きいほど赤。