用語集 · コンピューティング

半精度

別名:Half precision、float16、FP16、16-bit float、reduced precision、半精度浮動小数点数、16ビット浮動小数点数、低精度

数を、ふつうの32ビットではなく16ビットで保存することです。有効数字は約3桁で、メモリは半分になります。

コンピュータは実数を、符号、指数(どれくらい大きいか)、仮数(有効数字)として保存します(浮動小数点数を参照)。ふつうの32ビット形式(float32、単精度)は仮数が23ビットで、有効数字は約7桁です。

半精度(float16、IEEE 754の16ビット形式)は、指数が5ビット、仮数が10ビットです。

value=(−1)s×1.m×2e−15\text{value} = (-1)^{s} \times 1.m \times 2^{e - 15}

有効数字は約3桁で、表せる数は約0.00006から65,504までです(それより小さい数は桁を失い、大きい数は収まりません)。32ビットの数を半精度に変えると、収まる中で最も近い値に丸められます。元に戻す変換は正確ですが、丸めはそのまま残ります。

ニューラルネットワークの重みが数桁より多くの精度を必要とすることはまれなので、重みを半精度で保存するのは、モデルのサイズを半分にするよくある方法です。これは精度を下げる方法のうち単純なものです。量子化はふつう、もっと先まで行くことを指します。重みをスケール係数付きの小さな整数の集合(8ビットや4ビット)に対応させ、サイズを4分の1や8分の1にしますが、そのぶんモデルの振る舞いが変わるリスクも大きくなります。bfloat16は別の16ビット形式で、float32の範囲を保つ代わりに、桁数はさらに少なくなっています。

このプロジェクトでは

今すぐ試すのページでは、生徒の方策をブラウザの中で動かしています。その3つの重み行列(448 → 512 → 512 → 48、約53万個の数)は半精度で保存されていて、2.1 MBではなく1.0 MBです。バイアスと観測の正規化は32ビットのままです。ブラウザは実行前に重みを32ビットに戻すので、計算の速さは以前と変わりません。

同じ3,000制御ステップで比べると、半精度のネットワークが出す48個の関節目標は、元のネットワークとの差が平均0.014%、最大0.0008でした。40個のキューブと、それぞれ36発のパンチで、どちらのネットワークも一度も倒れませんでした。

関連用語

← すべての用語