其他

百度英伟达联手推混合精度训练,同样性能只需一半内存 | 附论文

2017-10-12 专注报道AI 量子位
夏乙 编译整理
量子位 出品 | 公众号 QbitAI

这几年来,各科技大厂搞出了越来越大的神经网络,达到了越来越高的准确率,但同时,这些模型对内存和计算力的要求也越来越高。

于是,有一部分研究者想要通过降低计算精度,来节约计算力。但使用混合精度或低精度运算往往会造成模型准确率的降低,还需要对网络进行修改。

现在,这个问题有了新进展。

百度和英伟达今天展示了一项双方的联合研究,用16bit半精度浮点数(FP16)来训练神经网络,降低了训练所需内存的同时,在同样的超参数下达到了和32bit单精度浮点数(FP32)相同的准确率。

他们在一篇题为Mixed Precision Training的论文中展示了这项训练神经网络的新技术。还分别在官方博客上发文(通俗地)介绍了这种“混合精度训练”。

为什么要用混合精度,而不是直接改成FP16呢?这要从神经网络中的通用矩阵乘法运算说起。

深度学习模型中包含各种层,比如全连接层、卷积层、循环层等等,其中每一层都能用通用矩阵乘法(GEMM)运算来实现。在训练过程中,GEMM占据了大部分计算。

如下图所示,GEMM可以分个成几个乘法运算,在加上加法运算。

 矩阵乘法

当使用FP16表示神经网络中的数时,GEMM运算的输入矩阵由16 bit的数字构成,我们需要能执行16 bit计算来做乘法的硬件,同时还需要用32 bit计算和存储来做加法。没有32 bit来完成加法运算,训练大型深度神经网络就会非常困难。

于是,研究员们对训练流程进行了一些修改。模型中的输入、权重、梯度和激活以FP16表示。

但只是简单地更改存储格式,有些模型无法达到与FP32基准相同的准确率。为了解决这个挑战,百度和英伟达联手提出了两项技术。

第一,

维护一个FP32格式的权重的主副本,用FP16权重来做正向和反向传播,优化器中的梯度更新会被添加到主FP32副本里,这个FP32副本会再舍入到FP16,在训练中使用。

这个过程,每次训练迭代都会重复一遍,直到模型收敛。

通过在训练中使用FP16的权重,可以使用适用于半精度的、更快的硬件。下图显示了混合精度训练中的一次迭代:

 深度学习模型的混合精度训练

第二,

引入了损失缩放(loss-scaling)技术,损失缩放能恢复一些小的重要梯度,对恢复某些模型的准确率损失来说很有必要。

在训练期间,一些权重梯度指数很小,在FP16格式下会变成0。为了解决这个问题,研究团队在反向传播开始时引入一个换算系数,来缩放损失,梯度也通过链式法则同时逐渐扩大,并能在FP16中表示出来。

在更新应用于权重之前,这些梯度还需要缩小。

百度在DeepSpeech 2模型上对这种方法进行了测试。

他们用这种方法来训练了DeepSpeech 2模型,进行语音识别。在使用同样模型架构和超参数的情况下,混合精度模型在英语和普通话数据集上,都达到了与FP32模型同样的准确率。

 用混合精度训练与FP32训练DeepSpeech2模型的英语、汉语语音识别字错率(CER)

通过使用FP16格式的权重,训练深度学习模型的内存需求也可以降低到单精度的一半。也就是说,训练同样一个模型、达到同样的性能,我们现在只需要原来一半的处理器。

另外,FP16算术的峰值性能通常远高于FP32计算,因此,混合精度训练通过运用FP16的计算单元,能够实现更快的速度。

而英伟达在博客上还介绍了混合精度训练在图像分类、对象检测等任务上的性能。

如上图所示,混合精度训练的各种深度神经网络模型在图像分类上,不需要损失缩放就能达到与单精度训练差不多的准确率。

而在对象检测任务上,混合精度训练实现的准确率甚至略高于FP32基准。

有关混合精度训练和全套结果和实验的更多详细信息,可以参考以下链接:

- 论文

Mixed Precision Training

作者:Paulius Micikevicius, Sharan Narang, Jonah Alben, Gregory Diamos, Erich Elsen, David Garcia, Boris Ginsburg, Michael Houston, Oleksii Kuchaev, Ganesh Venkatesh, Hao Wu

https://arxiv.org/abs/1710.03740

- 百度博客

http://research.baidu.com/mixed-precision-training/

- 英伟达博客

https://devblogs.nvidia.com/parallelforall/mixed-precision-training-deep-neural-networks/

加入社群

量子位AI社群9群开始招募啦,欢迎对AI感兴趣的同学,加小助手微信qbitbot3入群;


此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。


进群请加小助手微信号qbitbot3,并务必备注相应群的关键词~通过审核后我们将邀请进群。(专业群审核较严,敬请谅解)

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI

վ'ᴗ' ի 追踪AI技术和产品新动态


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存