モデルの軽量化の手法として、プルーニング・量子化・蒸留が出てくる。そもそもなんで軽くする必要があるん?
【疑問】モデルの軽量化、プルーニング・量子化・蒸留と宝くじ仮説、エッジAIでなぜ要るん?【G検定】
前提のおさらい。MobileNetやEfficientNetは、最初から軽い構造を設計する方向の工夫やった。ここで扱うのは、学習したモデルをあとから小さくする方向
>>1
スマホ・カメラ・車みたいな現場の機械の上でAIを動かすのがエッジAI。通信なしで速く答えられるし、データを外に送らなくてすむ。ただ、メモリも計算力も電池も限られてる
そこでモデルを小さくするのがモデル圧縮
>>3
量子化は、重みを表す数のビット数を減らす
1億個の重みを32ビットの小数で持つと400MB。8ビットの整数にすれば100MBで、4分の1。計算も速くなる
>>4
ビット数を減らしたら精度が落ちるやろ
>>5
少しは落ちる。ただ、8ビット程度なら落ち幅は小さいことが多い。量子化したときのずれも含めて学習しなおす方法もある
プルーニングは、重要でない重み(値が0に近いものなど)や、まるごとのチャネルを取り除く。重みの9割を取り除いても、学習しなおせば精度があまり落ちない例が報告されてる
>>7
宝くじ仮説は、フランクルとカービンの2019年の論文
大きいネットワークの中には、最初の重みのまま取り出して単独で学習しても、もとと同じくらいの精度に届く小さいネットワーク(当たりくじ)が含まれている、という仮説。プルーニングで残る部分がそれに当たる
蒸留は、ヒントンらの2015年の論文で広まった方法。大きいモデル(教師)の出力を、小さいモデル(生徒)にまねさせる
正解のラベルだけやなくて、教師の出す確率の分布もまねさせる。分布をなだらかにするために、ソフトマックスに温度 を入れる
>>9
教師の出力の点が (4, 2, 0) なら、 だと約 (0.87, 0.12, 0.02) で、ほぼ1つ目しか見えん
にすると、点を2で割って (2, 1, 0) にしてからソフトマックスで、約 (0.67, 0.24, 0.09)。「2つ目もそこそこ似てる」という情報が生徒に伝わる
>>10
正解のラベルだけで小さいモデルを学習させるのと、そんなに違うもんなん?
>>11
論文では、同じ小さいモデルでも、正解のラベルだけで学習するより、教師の分布をまねさせたほうが成績がよかった。犬の画像が「狼に少し似てる」みたいな、クラスどうしの似かたを教わるのが効くと考えられてる
管理人のひとこと
- エッジAIは現場の機械の上でAIを動かすこと。メモリや計算力が限られるのでモデル圧縮が要る。
- 量子化はビット数を減らす(1億個の重みで32ビット400MB→8ビット100MB)。プルーニングは重要でない重みやチャネルを取り除く。
- 宝くじ仮説(2019年の論文)は、大きいネットワークの中に、単独で学習してももとと同じくらいの精度に届く小さいネットワークがあるという仮説。
- 蒸留(2015年の論文)は教師の確率の分布を生徒にまねさせる。温度 で (4,2,0) は約 (0.67,0.24,0.09) となだらかになる。