Day 4 - 量子化、蒸留、プルーニング のまとめ
この記事は個人的なお勉強用のメモです。
講義
軽量化の方法
・量子化
・蒸留
・プルーニング
※ 量子化がよく使われる。
量子化
Quantization
浮動小数点のデータ型を精度の低いデータ型にする。
例:64 bit 変数を 32 bit 変数に変更
【効果1】省メモリ化
64 bit を 32 bit にすると、消費メモリは半分になる。
【効果2】計算の高速化
bit 数を減らすと、浮動小数点の計算量が少なくて済む。
= 同じ時間で他の計算を多く行えるようになる。
【欠点】数値の精度が下がる。
ただし、ほとんどの場合、半精度(16bit)で問題ない。
現実的には、16 bit を選択するのが最も良い。
蒸留
概要
規模の大きなモデルの知識を使って(知識を継承して)、
軽量なモデルを作成する。
構成
・教師モデル
予測精度の高い、複雑なモデルやアンサンブルされたモデル
・生徒モデル
教師モデルを元に作られた軽量なモデル
生徒モデルの作り方
- 教師モデル(学習済み)と生徒モデル(未学習)を並列に配置する
- これらのモデルに同じ入力を与える
- 教師モデルの重みは変更しない
- 生徒モデルの重みのみを更新する
プルーニング
概要
モデルの精度に寄与が少ないニューロンを削減する。
⇒ モデルの軽量化、高速化
枝刈りするイメージ。
ニューロンの削減方法
重みがしきい値以下の場合に、ニューロンを削減して、再学習する。
ニューロンを削減しても、意外と性能は落ちないことがわかっている。
パラメータの数を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$ を高くすると、不正解に対する確率を大きくできる。
プルーニング
・あるチャンネル剪定では、ラッソに基づく。
・「部分ネットワーク構造」と「初期値」の組み合わせに当たりが存在し、
その当たりを引き当てると効率的に学習できるという仮説(宝くじ仮説)がある。
・剪定によって、その構造と初期値を見つけられる。
・剪定は学習中または学習後に行われる。
・剪定とは、精度に大きく影響を与えないノードやエッジを刈ること。
Author And Source
この問題について(Day 4 - 量子化、蒸留、プルーニング のまとめ), 我々は、より多くの情報をここで見つけました https://qiita.com/amateur2020/items/017a5b375d4eb8fe8791著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .