Day 4 - 量子化、蒸留、プルーニング のまとめ


この記事は個人的なお勉強用のメモです。

講義

軽量化の方法
・量子化
・蒸留
・プルーニング

※ 量子化がよく使われる。

量子化

Quantization

浮動小数点のデータ型を精度の低いデータ型にする。
例:64 bit 変数を 32 bit 変数に変更

【効果1】省メモリ化
 64 bit を 32 bit にすると、消費メモリは半分になる。

【効果2】計算の高速化
 bit 数を減らすと、浮動小数点の計算量が少なくて済む。
 = 同じ時間で他の計算を多く行えるようになる。

【欠点】数値の精度が下がる。
 ただし、ほとんどの場合、半精度(16bit)で問題ない。

現実的には、16 bit を選択するのが最も良い。

蒸留

概要

規模の大きなモデルの知識を使って(知識を継承して)、
軽量なモデルを作成する。

構成

・教師モデル
 予測精度の高い、複雑なモデルやアンサンブルされたモデル

・生徒モデル
 教師モデルを元に作られた軽量なモデル

生徒モデルの作り方

  1. 教師モデル(学習済み)と生徒モデル(未学習)を並列に配置する
  2. これらのモデルに同じ入力を与える
  3. 教師モデルの重みは変更しない
  4. 生徒モデルの重みのみを更新する

プルーニング

概要

モデルの精度に寄与が少ないニューロンを削減する。
⇒ モデルの軽量化、高速化

枝刈りするイメージ。

ニューロンの削減方法

重みがしきい値以下の場合に、ニューロンを削減して、再学習する。

ニューロンを削減しても、意外と性能は落ちないことがわかっている。
パラメータの数を10分の1以下にしても、精度は90%近くを保つ結果あり。

関連記事

黒本で補習。

量子化
・活性化を二値化すると、ほとんどの勾配が 0 になってしまう。
・回避策は、ストレート・スルー・エスティメータ(Straight-Through Estimator, STE)
・STE を適用して逆伝播する。

蒸留
・ソフトターゲット損失($L_{soft}$)を算出する際は、先生の出力(予測結果)を目標分布に用いる。
・ハードターゲット損失($L_{hard}$)を算出する際は、正解ラベルを目標分布に用いる。
・$L_{soft}$ と $L_{hard}$ の加重平均値を最小値の対象にする。

L=\frac{\lambda_1 T^2 L_{soft} + \lambda_2 L_{hard}}{\lambda_1 + \lambda_2}

 ※ $L$ は2つのターゲット損失を加重平均した値
 ※ $\lambda_1$ と $\lambda_2$ は $L_{soft}$ と $L_{hard}$ の相対的な重みを意味する定数
 ※ $T$ を二乗する理由は、スケールを合わせるため

・温度付きソフトマックス関数を使う。

Softmax(z)_i=\frac{\exp(z_i/T)}{\sum_j \exp(z_j/T)}

・温度 $T$ を高くすると、不正解に対する確率を大きくできる。

プルーニング
・あるチャンネル剪定では、ラッソに基づく。
・「部分ネットワーク構造」と「初期値」の組み合わせに当たりが存在し、
 その当たりを引き当てると効率的に学習できるという仮説(宝くじ仮説)がある。
・剪定によって、その構造と初期値を見つけられる。
・剪定は学習中または学習後に行われる。
・剪定とは、精度に大きく影響を与えないノードやエッジを刈ること。