BF16是一种相对较新的浮点数格式,又叫BFloat16或Brain Float16。
深度学习中一般不需要FP64,FP32这种高精度的浮点格式。虽然这两种浮点格式数据精度高,但也增加了存储成本和处理过程中的时间成本。如果有一种数据格式能解决FP64,FP32这两种数据格式的这两个缺点,同时又能满足一定的精度要求,那无疑会大大提高深度学习模型的推理速度和部署灵活性。
这种数据格式就是BF16,使用BF16算法的预测精度与FP32相似,但不如FP32精确(谷歌曾说过,这是因为神经网络对指数的大小比尾数敏感得多)。对于大多数应用程序,尤其是计算机视觉和语音方面,这种折衷是可以接受的。
BF16的指数位比FP16多,跟FP32一样,不过小数位比较少。这样设计说明了设计者希望在16bits的空间中,通过降低精度(比FP16的精度还低)的方式,来获得更大的数值空间(Dynamic Range),三种浮点数据格式指标比较如下所示: