bfloatとは何か
double vs fp32 vs fp16 vs bfp16
double (64bit)
1/11/52 = 64
fp32 -> float (32bit)
1 / 8 / 23 = 32
fp16 -> float (16bit)
1 / 5 / 10 = 16
IEEEで規格化
bfloat16
1 / 8 / 7 = 16
指数部をfp32に合わせている
仮数部は実質的な有効数字 (粒度) を決めて,指数部は値のrangeを決めるので,仮数部を減らして指数部を増やすことで,取りうる値のrangeを最大化してあげる
(仮数部) x 2^(指数部)
2^()部分は桁のようなものなので,
fp16だと0.00000001Xが表現できなかったのが,指数部が増えることで表現できる桁数が伸びるイメージ
(指数部は2進数表記なので2^2^Xになる点に注意)
Google Brainが考案
https://gyazo.com/049e5df9eeb5d85307a91b6cfff38612
https://gyazo.com/8c857b9fa640d6fdf543a589b4a3b380
BFloat16 offers better stability during training than FP16. Most google models are BFloat16 due to using TPUs, where BF16 is native. We're seeing more LLMs trained in BFloat16 out of superior stability (see the BigScience project by HuggingFace who noted better stability).