tf.bfloat16是什么,它被称为"截断的16位浮点数"?

13
2个回答

26
是 TensorFlow 特有的一种格式,与 IEEE 的 float16 格式不同,因此采用了新名称。其中b代表(谷歌)Brain。

基本上, 是一个截断为前 16 位的 float32,所以它具有相同的 8 位指数和仅有 7 位的尾数。 因此,从 float32 转换到 或从 转换到 float32 都很容易,并且由于其范围基本与 float32 相同,因此在从 float32 切换时最小化了出现 NaN 或爆炸/消失梯度的风险。

参见这里获取更多信息:

// 浮点数的紧凑 16 位编码。该表示使用 1 位符号、8 位指数和 7 位尾数。
// 假定浮点数是 IEEE 754 格式,因此该表示只是单精度浮点数的位 16-31。
//
// 注意:IEEE 浮点标准定义了与此格式不同的 float16 格式(它具有更少的指数位和更多的尾数位)。
// 我们不在这里使用该格式,因为相对于该格式,转换为/从 32 位浮点数更加复杂,并且该格式的转换非常简单。

至于量化整数,它们被设计用来替换在训练网络中使用的浮点数,以加快处理速度。基本上,它们是实数的一种固定点编码,但操作范围是根据网络任意给定点上的观察分布来选择的。

有关量化的更多信息,请参见此处


感谢。由于现有的IEEE float16类型,我们并未将我们的表示称为“float16”,而只是使用“uint16”。为什么是uint16?这可能是文档中的错误,应该是指bfloat16吗? - JMC
2
我认为他们只是在引用bfloat16在内部的表示方式 - P-Gn
你的量化第二个链接已经失效了。 - Z boson

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接