この記事は英語版の対応するページを翻訳することにより充実させることができます。(2023年12月) 翻訳前に重要な指示を読むには右にある[表示]をクリックしてください。
|
bfloat16(brain floating point[1], bf16)は、コンピュータ内における16ビットの浮動小数点数の数値表現(フォーマット)である。
bfloat16形式はGoogleの人工知能研究グループであるGoogle Brainによって2018年に開発された、より機械学習での利用に適した比較的新しいフォーマットである。
16ビット浮動小数点形式の一般的なフォーマットであるfp16(IEEE754 16ビット/半精度浮動小数点形式)と比較した場合、数値の精度よりも数値が表現できる桁数の幅(ダイナミックレンジ)を重視した設計となっている。その特性上通常の整数計算には適しておらず、fp16の置き換えを意図したものではない。
bfloat16は以下の形式である
bfloat16 | ||||||||||||||||
符号 | 指数部 (8 bit) | 仮数部 (7 bit) | ||||||||||||||
┃ | ┌────────────────┐ | ┌───────────────────┐ | ||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | |
15 | 14 | 7 | 6 | 0 | ||||||||||||
比較としてfp16形式を以下に示す
IEEE 754 16ビット半精度浮動小数点(fp16) | ||||||||||||||||
符号 | 指数部 (5 bit) | 仮数部 (10 bit) | ||||||||||||||
┃ | ┌────────────────┐ | ┌───────────────────┐ | ||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | |
15 | 14 | 10 | 9 | 0 | ||||||||||||
fp16に対して指数部への割り当てビット数を増やし、その分仮数部を減らしたものとなっている。
fp16が10−14 ~ 6.55 × 104程度の数値幅しか表現できないのに対し、bfloat16は10−38 ~ 3 × 1038の数値範囲を表現することが可能で、これは32ビット浮動小数点形式と同じ数値幅である。
その分仮数部の数値幅は減少しており、大きな整数値の精度を落とす代わりに0に近い数の精度を増加させている。
bfloat16では、正規最大値付近での丸め誤差はおよそ2まで増大する(fp16の場合はおよそ0.00098)が、ゼロ付近での精度はfp16が2^(-14)であるのに対し、bfloat16では2^(-126)となり、高精度の表現が可能になっている。
このため通常の数値計算用途には向いていないが、機械学習においては以下のような特性により有用である。
指数部の値は、実際の指数に対してオフセット値(bfloat16の場合127)を加算した値が格納される(オフセットバイナリ)。
fp16でも同様の方法で指数を表現しており、指数バイアスなどと呼ばれる。
また、指数部の最小値0x00と最大値0xFFはそれぞれ非正規数(NaN)および無限大として解釈される特殊な値である。