計算機算術
FP16(半精度:符号1・指数部5・仮数10ビット)でニューラルネットワークを学習させるときに問題になりやすく、損失の値を何倍かに拡大して計算する工夫(ロススケーリング)で対策するのはどれか。
- A仮数が長すぎて、メモリの使用量が増えること
- B表せる範囲が狭く、小さな勾配が0になってしまうこと
- C整数として扱われ、小数を表せないこと
答えと解説を見る
正解:B. 表せる範囲が狭く、小さな勾配が0になってしまうこと
FP16は指数部が5ビットしかないため、表せる正の値はおよそ6 × 10⁻⁸(非正規化数を含む)から65504までと範囲が狭くなります。学習で計算される勾配には非常に小さな値が多く、FP16ではアンダーフローして0になり、学習が進まなくなります。ロススケーリングでは損失を例えば1024倍してから逆伝播し、勾配を表せる範囲に持ち上げ、重みを更新する前に元に戻します。仮数は10ビットでFP32より短く、小数も表せます。
- A. 仮数はFP32より短く、メモリの使用量は半分です。
- B. 正しい。範囲が狭く、小さな勾配が0になるのを防ぐためです。
- C. FP16は浮動小数点の形式で、小数を表せます。