博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
混合精度训练
阅读量:5171 次
发布时间:2019-06-13

本文共 979 字,大约阅读时间需要 3 分钟。

论文:

译文:混合精度训练

摘要

增加神经网络的size,可以提高准确率。但同时,也加大了训练模型所需的内存和计算量。我们介绍一种使用半精度浮点数来训练深度神经网络的方法,不会损失准确率,也不需要修改超参数。这种方法让内存需求减半,而且在最近的GPU上,加速了算术运算。权值、激活值和梯度都以IEEE半精度格式存储。由于半精度的数值范围比单精度小,我们提出3种技术避免关键信息丢失。1)我们维护一份权值的单精度copy,2)我们放大损失,来保留较小的梯度。3)我们证明,前面提出的方法,可以在很多任务和现代大规模模型(超过1亿参数)上,基于大数据集训练。

介绍

深度学习让很多不同的应用都取得了很大的进步,图像识别、语言建模、机器翻译和语音识别等等。这也衍生出两个关键的问题,更大的数据集和更复杂的模型

更大的模型通常需要更多的计算量和内存来训练。

实现 

1、FP32:

在混合精度训练中,权值、激活值和梯度是以FP16存储的。

 

2、损失放大:

 

3、算术精度:

总的来说,神经网络算术运算分为3类:向量点乘 

 

结果

Baseline(FP32):激活值、权值和梯度都用单精度存储。所有算术运算也都用FP32。

Mix Precision(MP):存储和算术运算都有用FP16。权值、激活值和梯度都用FP16来存储。权值存一份FP32主copy,用于更新。

 

总结和后续工作

混合精度训练,让我们减少内存消耗,以及花在算术运算上的时间。我们已经证明,很多深度学习模型可以用这种技术来训练,并且没有准确度损失,也不需要调参。对于小梯度很多的模型,可以采用梯度放大的办法来达到和FP32一样的准确度。 

如果DNN运算是受限于内存和算术带宽,那么在Volta架构的GPU上,FP16和FP32的加速比是2~6。如果是受限于延迟,加速比则会小一些网络训练和推理总的加速比,取决于框架和库对混合精度的优化,这也是后续工作的一个重点(本文实验用的库和框架都比较旧)。

我们会把这个技术应用于生成模型,如文字转语音系统和深度强化学习应用。进一步地,损失放大因子的选择会自动化,来简化混合精度的训练。损失放大因子会根据监控到的权值梯度,动态增大或者减小来防止溢出。

 

转载于:https://www.cnblogs.com/yangwenhuan/p/11337203.html

你可能感兴趣的文章
cygwin安装
查看>>
Hero In Maze
查看>>
学习使用autotools
查看>>
166. Fraction to Recurring Decimal
查看>>
redis集群原理
查看>>
Spark基础知识
查看>>
jQuery快速入门
查看>>
《软件需求分析》读书笔记NO.4
查看>>
qt初步---Qt实现软件从Windows到Linux跨平台
查看>>
16.1 Class类与Java反射
查看>>
CentosOS 7: 创建Nginx+Https网站
查看>>
向数据源DataTable 中添加新的一列,并向其赋值
查看>>
(C/C++) Link List - C 語言版本
查看>>
Spring 各种包功能
查看>>
[leedcode 122] Best Time to Buy and Sell Stock II
查看>>
[leedcode 137] Single Number II
查看>>
[转载]如何捕获控制台消息
查看>>
myeclipse激活+Aptana安装配置
查看>>
嵊州D1T1 总统先生,一路走好!
查看>>
Python字符串图解
查看>>