TL

ベクトル量子化と圧縮(PQ・スカラー量子化)

埋め込みのメモリを1/4〜1/100超に削りRAM費用を圧縮できます。スカラー量子化・PQ・二値量子化を誤差と検索精度のトレードオフから原理で選べるようになります。

応用ベクトル検索量子化スカラー量子化直積量子化埋め込みメモリ最適化最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.スカラー量子化はfloat32の各次元を1バイトのint8等へ線形写像する単純な圧縮。次元ごとに独立なため誤差が読みやすく、4倍圧縮でrecall劣化が小さい実務上の第一選択。
  • 2.直積量子化(PQ)はサブベクトルごとに学習したコードブックで数バイトへ圧縮し1〜2桁の削減を狙うが、コードブック学習と非対称距離計算という別の複雑さを持ち込む。
  • 3.二値量子化は各次元の符号だけを1ビットに残す極限の圧縮で、ハミング距離による超高速な一次スクリーニング+元ベクトルでの再ランキングという二段構成が前提になる。

索引構造と表現圧縮は別問題

HNSW と IVF-PQ は「どのベクトルを見るか」を絞る 索引構造 の話でした。本稿はその一段手前、「1本のベクトルを何バイトで表すか」という 表現の圧縮 に絞ります。索引構造を変えなくても、ベクトル自体を圧縮すればメモリは減ります。逆に索引構造(IVFなど)と量子化(PQなど)は独立な軸で、自由に組み合わせられます。

埋め込みは通常 float32(4バイト/次元)で生成されます。1536次元なら1本6144バイト。1億本を素朴に持てば600GB超で、RAMに載せるには非現実的です。ここで効くのが 量子化(quantization)、すなわち連続値を少ないビット数の離散値へ写して近似する技術です。圧縮率を上げるほどメモリと転送帯域は減りますが、元の値との差である 量子化誤差 が積み重なり、距離計算の精度、ひいては検索の recall が落ちます。この誤差とメモリのトレードオフをどう制御するかが本稿の主題です。

スカラー量子化:次元ごとに独立に丸める

スカラー量子化(SQ: Scalar Quantization) は、各次元の値域を線形にマッピングして低ビット整数へ丸める、最も単純な量子化です。int8 量子化を例にすると手順はこうです。

  1. 次元ごと(あるいはベクトル全体で1つ)に最小値 min・最大値 max を統計から求める。
  2. スケール scale = (max - min) / 255 を計算する。
  3. 各値 x を code = round((x - min) / scale) で 0〜255 の整数に変換する。
  4. 検索時は逆変換 x' = min + code * scale で近似的に復元してから距離計算する(あるいは整数のまま近似距離を計算する)。
スカラー量子化(int8, 次元ごと)
  入力: x = 0.734 (min=-1.0, max=1.0 と仮定)
  scale = 2.0 / 255 ≈ 0.00784
  code  = round((0.734 - (-1.0)) / scale) = round(221.2) = 221
  復元:  x' = -1.0 + 221 * 0.00784 ≈ 0.732   (誤差 ≈ 0.002)

float32(32ビット)から int8(8ビット)へは 4倍圧縮。誤差は各次元で独立かつ一様分布に近く、外れ値さえ適切にクリッピングすれば実務上の recall 劣化は小さく抑えられます。次元間の相関を利用しない代わりに、コードブック学習が不要で実装・運用が単純という利点があります。バイナリ量子化ほど極端でなく、PQほど複雑でもない、いわばバランス型の第一選択です。int4(16段階)まで攻めると8倍圧縮になりますが、段階が粗くなるぶん誤差が増え、recall 劣化が無視できなくなる領域に入ります。

非対称スカラー量子化(ASQ)

クエリ側は float32 のまま、データ側だけ int8 に量子化しておき、距離計算時にクエリ側を都度スケールへ合わせて計算する方式です。クエリの精度を落とさずデータ側のメモリだけ削減でき、実装コストの割に recall 低下を抑えやすいため広く使われます。

PQとの対比:どこで複雑さを払うか

PQ(直積量子化)はHNSWとIVF-PQの記事で扱った通り、ベクトルをサブベクトルに分割し、サブ空間ごとに k-means で学習したコードブックの代表点番号(1バイト程度)へ置き換える手法です。スカラー量子化との本質的な違いは、次元間の統計的構造を利用するかどうかにあります。

観点スカラー量子化直積量子化(PQ)
圧縮単位次元ごとに独立(相関を見ない)サブベクトル単位(サブ空間内の分布を利用)
学習min/maxの統計だけ(教師データ不要に近い)サブ空間ごとのk-meansコードブック学習が必須
圧縮率の目安4〜8倍(int8/int4)数十〜100倍超(m・nbitsで調整)
距離計算整数のまま、またはスケール復元して計算非対称距離計算(ADCの表引き)が前提
運用の複雑さ低い。次元追加・分布変化に強いコードブックの再学習・ドリフト管理が要る

圧縮率で勝るPQは、コードブックというデータ依存の前処理を背負います。学習データの分布から外れたベクトル(分布ドリフト)が増えると量子化誤差が偏り、コードブックの再学習が要ります。スカラー量子化は次元ごとの min/max さえ更新すれば追従しやすく、圧縮率よりも運用の単純さと予測可能な誤差を優先する場面に向きます。

二値量子化:符号1ビットへの極限圧縮

二値量子化(binary quantization) は各次元の値を符号(正か負か)だけの1ビットに落とす、最も過激な量子化です。float32(32ビット)から1ビットへの 32倍圧縮 になります。

二値量子化
  入力ベクトル: [0.12, -0.05, 0.88, -1.3, 0.0]
  符号ビット :  [1,     0,     1,    0,    1]   (0以上なら1、負なら0)

距離の近似には ハミング距離(ビットが異なる箇所の数)を使います。ハミング距離はXORとポップカウント(立っているビット数を数える命令)だけで計算でき、浮動小数点の積和より桁違いに高速です。ビット演算はCPU・GPUの専用命令と相性がよく、1億件規模でもメモリに載り切ってミリ秒台のスクリーニングが可能になります。

代償は情報量の損失です。各次元の大きさ(マグニチュード)情報が捨てられ符号しか残らないため、単体では検索精度が大きく落ちます。そのため二値量子化は単独では使わず、次の**二段構成(two-stage retrieval)**が前提になります。

  1. 二値コードでハミング距離を計算し、候補を大量(例: 上位1000件)に高速絞り込みする。
  2. 絞り込んだ候補だけ、元のfloat32ベクトル(あるいはSQ/PQで圧縮したベクトル)で正確な距離を計算し、上位k件に**再ランキング(re-ranking)**する。
二値量子化は再ランキングとセットでしか使えない

二値量子化だけで最終結果を返すと、符号情報しか見ていないぶんrecallが大きく落ちます。実運用では必ず「二値で粗く絞る→元ベクトルで仕上げる」の二段にし、一段目の絞り込み件数(何件を候補として残すか)をrecallとレイテンシのつまみとして調整します。

誤差はどこから来て、どう制御するか

3方式に共通するのは、量子化誤差が内積・コサイン類似度の順序を乱すことです。順序が乱れると上位k件の入れ替わりが起き、recallが下がります。誤差の主な発生源は次の2つに整理できます。

  • 表現力の不足: 割り当てるビット数が値の分布に対して粗すぎる。段階数を増やす(int8→int4をやめる、PQのnbitsを増やす)ことで緩和できるが、メモリ増と引き換え。
  • 分布の未学習・ドリフト: min/maxやコードブックが実データの分布とずれている。定期的な再キャリブレーション・再学習で緩和する。
使い分けの目安

まずスカラー量子化(int8)で4倍圧縮を試し、精度劣化が許容範囲か検証するのが実務上の定石です。それでもメモリが足りなければPQで圧縮率を追加確保し、超大規模かつ一次スクリーニングの速度が支配的なら二値量子化+再ランキングを検討します。3方式は排他ではなく、二値量子化で粗く絞り、PQやSQで圧縮したベクトルで再ランキングする多段構成も一般的です。

まとめ

まとめ

量子化はベクトル索引の「探索範囲を絞る」層とは独立に、「1本のベクトルを何バイトで表すか」を決める層です。スカラー量子化は次元ごとに独立な線形丸め込みで4〜8倍を安全に稼ぐ第一選択、**PQ(直積量子化)**はサブ空間ごとのコードブック学習で1〜2桁の圧縮を狙う代わりに運用の複雑さを背負い、二値量子化は符号1ビットまで削ってハミング距離で爆速の一次スクリーニングを行い、必ず元ベクトルでの再ランキングとセットで使います。どの方式も量子化誤差と検索精度はトレードオフであり、圧縮率だけでなく分布のドリフトや再学習コストまで含めて選ぶ必要があります。索引構造そのものはHNSWとIVF-PQ、値のスケーリングや符号化の考え方は列指向の軽量符号化、近似で省メモリを得る発想はブルームフィルタとも地続きです。

データベース Article

ベクトル量子化と圧縮(PQ・スカラー量子化)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

ベクトル検索

比較で見る軸

難易度: advanced / カテゴリ: データベース / タグ数: 6

導入後に効く点

直積量子化(PQ)はサブベクトルごとに学習したコードブックで数バイトへ圧縮し1〜2桁の削減を狙うが、コードブック学習と非対称距離計算という別の複雑さを持ち込む。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
データベース
タグ数
6

判断チェックリスト

  • 自社の用途が「ベクトル検索 / 量子化」に近いか確認する。
  • 強みである「スカラー量子化はfloat32の各次元を1バイトのint8等へ線形写像する単純な圧縮。次元ごとに独立なため誤差が読みやすく、4倍圧縮でrecall劣化が小さい実務上の第一選択。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

ベクトル検索量子化スカラー量子化直積量子化埋め込みベクトル検索量子化スカラー量子化