BFloat16

Brain Floating Point 16

BFloat16(Brain Floating Point 16、BF16)とは、Googleが開発した16ビットの浮動小数点数フォーマットです。FP32と同じ8ビットの指数部を持つためダイナミックレンジが広く、ディープラーニングの学習においてFP16よりも数値的に安定した混合精度演算が可能です。

BFloat16の数値フォーマット

BFloat16は符号1ビット、指数部8ビット、仮数部7ビットで構成されます。FP16は符号1ビット、指数部5ビット、仮数部10ビットです。BFloat16は仮数部がFP16より短く精度は若干低いですが、指数部がFP32と同じ8ビットのため、表現できる数値の範囲(ダイナミックレンジ)がFP32とほぼ同等です。

表:BFloat16の要点まとめ
ひとことで言うとFP32と同じ広さの数値範囲を保ちながら、16ビットに収めた形式。
FP16との違い小数の細かさは劣るが、極端に大きい/小さい値でも壊れにくい。
注意点対応していないハードウェアもある。使う前に確認が必要。

学習への適性

ディープラーニングの学習では、勾配の値が非常に小さくなることがあり、FP16ではアンダーフロー(値がゼロに丸められる)が発生しやすいです。BFloat16は広いダイナミックレンジにより、この問題が起きにくいため、損失スケーリングなしでも安定した学習が可能です。これが実装の簡便さにつながっています。

図:BF16がAI学習に向く理由
1FP16の弱点表せる範囲が狭い
▶
2勾配が0になる小さすぎる値が消える
▶
3BF16は範囲が広いFP32と同じ指数部
▶
4学習が安定スケーリング調整が不要に

ハードウェアサポート

Google TPU、NVIDIA A100以降のGPU(Ampere、Hopper、Blackwell)、Intel Xeon(AMX)、AMD Instinctなど、主要なAIハードウェアがBFloat16をネイティブサポートしています。PyTorch、TensorFlow、JAXなどの深層学習フレームワークでも標準的にBFloat16がサポートされ、大規模モデルの学習で広く使用されています。