
第 8章 深度学习
252
8.3.4
运算精度的位数缩减
在深度学习的高速化中,除了计算量之外,内存容量、总线带宽等也有
可能成为瓶颈。关于内存容量,需要考虑将大量的权重参数或中间数据放在
内存中。关于总线带宽,当流经
GPU
(或者
CPU
)总线的数据超过某个限制时,
就会成为瓶颈。考虑到这些情况,我们希望尽可能减少流经网络的数据的位数。
计算机中为了表示实数,主要使用64 位或者32 位的浮点数。通过使用
较多的位来表示数字,虽然数值计算时的误差造成的影响变小了,但计算的
处理成本、内存使用量却相应地增加了,还给总线带宽带来了负荷。
关于数值精度(用几位数据表示数值),我们已经知道深度学习并不那么
需要数值精度的位数。这是神经网络的一个重要性质。这个性质是基于神经
网络的健壮性而产生的。这里所说的健壮性是指,比如,即便输入图像附有
一些小的噪声,输出结果也仍然保持不变。可以认为,正是因为有了这个健
壮性,流经网络的数据即便有所“劣化”,对输出结果的影响也较小。
计算机中表示小数时,有 32 位的单精度浮点数和64 位的双精度浮点数
等格式。根据以往的实验结果,在深度学习中,即便是16 位的半精度浮点
数(
half float
),也可以顺利地进行学习
[30]
。实际上,
NVIDIA
的下一代
GPU
框架
Pascal
也支持半精度浮点数的运算,由此可以认为今后半精度浮点数将
被作为标准使用。
NVIDIA的Maxwell GPU虽然支持半精度浮点数的存储(保存数据
的功能),但是运算本身不是用16位进行的。下一代的Pascal ...