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とほぼ同等です。
| ひとことで言うと | FP32と同じ広さの数値範囲を保ちながら、16ビットに収めた形式。 |
|---|---|
| FP16との違い | 小数の細かさは劣るが、極端に大きい/小さい値でも壊れにくい。 |
| 注意点 | 対応していないハードウェアもある。使う前に確認が必要。 |
学習への適性
ディープラーニングの学習では、勾配の値が非常に小さくなることがあり、FP16ではアンダーフロー(値がゼロに丸められる)が発生しやすいです。BFloat16は広いダイナミックレンジにより、この問題が起きにくいため、損失スケーリングなしでも安定した学習が可能です。これが実装の簡便さにつながっています。
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がサポートされ、大規模モデルの学習で広く使用されています。