bf16とは - わかりやすく解説 Weblio辞書 (original) (raw)

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
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
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)および無限大として解釈される特殊な値である。

関連項目

参照

  1. ^A Study of BFLOAT16 for Deep Learning Training”. arXiv.org. 7 June 2024閲覧。

外部リンク

データ型
ビット列 ビット トリット ニブル オクテット バイト ワード ダブルワード
数値 整数型 符号付整数型 十進型(英語版) 有理数型(英語版実数型 複素数型 固定小数点型 浮動小数点型 半精度 単精度 倍精度 四倍精度 八倍精度(英語版拡張倍精度 ミニフロート bfloat16 ブロック浮動小数点
ポインタ 物理アドレス型 論理アドレス型(英語版) 仮想アドレス型(英語版参照型
テキスト キャラクタ型 ストリング型 ヌル終端
複合 配列 可変長配列 連想配列 構造体 レコード 共用体 タグ共用体(英語版タプル コンテナ リスト キュー スタック セット ツリー 代数的データ型
その他 ブーリアン型 void型 null型 列挙型 再帰データ型 トップ型(英語版ボトム型 関数の型(英語版) 不透明型(英語版) シンボル型(英語版Nullable型 Option型 Result型
関連項目 データ構造 型システム プリミティブ型 抽象型 抽象データ型 ボックス化 動的束縛
カテゴリ