G検定(ジェネラリスト検定)
りょうしか
量子化
Quantization
量子化は、ニューラルネットワークの重みや活性化の値を、32ビットの浮動小数点数のような高精度な表現から、8ビット整数のような少ないビット数の表現へ変換する手法です。モデルの軽量化の手法の一つで、スマートフォンなどのモバイル機器の上で、少ないメモリと短い遅延で推論を行うために使われます。
詳しい説明
量子化とは
ニューラルネットワークの中では、重み(学習で決まるパラメータ)と活性化(各層が出力する値)が、多くの場合32ビットの浮動小数点数で表されています。量子化は、これらの値をより少ないビット数の表現、たとえば8ビットの整数へ置き換える手法です。
ジェイコブ(Jacob)らの論文(Google、CVPR 2018)は、それまでの研究を、CNN(畳み込みニューラルネットワーク)の重みや活性化、またはその両方を32ビットの浮動小数点数からより低いビット数の表現へ量子化するもの、と整理しています。
32ビットの値を8ビットで表せば、1つの値を表すのに使うビット数は4分の1になります。その代わり、表せる値の細かさは粗くなります。
なぜ量子化が必要なのか
ジェイコブらは、次の2つを背景に挙げています。
- スマートフォンなどの知的なモバイル機器が広く使われるようになったこと
- 深層学習のモデルは計算にかかる費用が非常に大きいこと
この2つが重なると、機器の上で直接推論を行う方式(オンデバイス推論)を、効率よく、しかも正確に行う必要が出てきます。
論文によれば、当時の最先端のCNNはモバイル機器で使うのに向いていませんでした。スマートフォン、AR/VR機器、ドローンのようなモバイルプラットフォームにCNNを載せるには、次の2点が求められます。
- 機器に載っている限られたメモリに収まる、小さなモデルサイズ
- 利用者が離れずに使い続けられる、短い遅延(応答の速さ)
量子化は、値を表すビット数を減らすことで、これらの要求に応えようとする手法です。
整数演算だけで推論する方式
ジェイコブらが提案したのは、推論を整数の演算だけで行えるようにする量子化の方式です。広く出回っている整数演算専用のハードウェアでは、浮動小数点数で推論するよりも、整数演算での推論のほうが効率よく実装できる、というのがこの方式の狙いです。
具体的には、次のように値を扱います。
- 重みと活性化の両方を8ビット整数として量子化する
- 畳み込みの演算では、掛け合わせる値(オペランド)に8ビット整数を使い、結果を足し込んでいく累積器には32ビット整数を使う
- バイアスの加算は32ビット整数だけで行う
- 活性化関数のReLU6は8ビット整数の演算だけで行う
掛け算の材料は8ビットと小さく保ちつつ、多くの積を足し合わせる部分には32ビットの累積器を使う、という組み合わせになっています。
精度を保つための訓練の工夫
値を少ないビット数で表すと、表現が粗くなるため、モデルの精度が下がるおそれがあります。ジェイコブらは、推論の量子化方式とあわせて訓練の手順も設計し(共同設計)、量子化した後でもモデル全体を通した(end-to-endの)精度を保てるようにしました。
その結果、この方式は精度と機器上での遅延とのトレードオフを改善した、と論文は述べています。改善は、もともと実行時の効率がよいことで知られるモデルの系列であるMobileNetsでも大きく、ImageNetの画像分類とCOCOの物体検出で、一般的なCPUを使って示されています。
プルーニングとの違い
モデルを軽くする手法には、プルーニングもあります。プルーニングは不要な接続そのものを取り除く手法です。これに対して量子化は、接続は残したまま、それぞれの値を表すのに使うビット数を減らす手法です。
試験で問われること
G検定
- 量子化が、重みや活性化の値を32ビットの浮動小数点数のような高精度な表現から、8ビット整数のような少ないビット数の表現へ変換する手法であることを説明できますか。
- スマートフォンやドローンなどのモバイル機器でのオンデバイス推論では、小さなモデルサイズと短い遅延が求められ、それが量子化を使う理由になっていることを確認しておきましょう。
- ジェイコブ(Jacob)らの方式では、整数演算だけで推論を行うことで、整数演算専用のハードウェア上で浮動小数点数の推論より効率よく実装できること、また量子化後の精度を保つために訓練の手順もあわせて設計したことを説明できますか。
- プルーニングが不要な接続そのものを取り除くのに対し、量子化は接続を残したまま各値のビット数を減らす手法である、という違いを確認しておきましょう。
最終更新日: 2026/09/23