【百度、NVIDIA】混合精度训练 Mixed Precision Training

Mixed Precision Training

思路如图1

【百度、NVIDIA】混合精度训练 <wbr>Mixed <wbr>Precision <wbr>Training

简单说,权值用32位保存,然后训练过程中截断为16位,而后weightactivation都用FP16来计算,最后更新还是使用FP32的权值。

两种方法来控制半精度的信息损失。

一、保存一个单精度浮点的权值备份。在训练过程中舍入到半精度。(加速训练?减少硬件开销?但是没有减少存储的参数量)

二、适当地缩放损失

结果:

精度没有损失,

memory减少约一半,

速度更快。

所有的过程用的是半精度FP16

没有超参需要针对调整;这种方法对比单精度没有精度损失;

可以用于大部分模型(可以用于大数据集)

 

亮点:两种方法来控制半精度的信息损失。

一、保存一个单精度浮点的权值备份。在训练过程中舍入到半精度。(加速训练、减少硬件开销、存储的参数量增加了50%,但是由于减少了过程中的activation,所以总体来说还是减少了memory的消耗);

同时FP16在硬件实现中更快。

 

假如单纯的使用FP16训练,精度降低了80%,所以要使用32位量化训练,但是参数更新过程使用16位。

 

为什么需要FP32

l  有些梯度太小,在FP16就变成0,大约有5%的数据被忽略成0(感觉不是很合理,毕竟2^-24太小了影响不大)

l  有些数太大,即使在FP16下可以表示,当加法右移操作使它二进制点对齐时,仍然可能变为0

 

 

二、适当地缩放数值。

等于是把图三整体右移,即scaling up方法是乘以8即右移三位

【百度、NVIDIA】混合精度训练 <wbr>Mixed <wbr>Precision <wbr>Training

实验过程很完善,在ILSVRCDetection CNNSpeech RecognitionMachine TranslationLanguage ModelingDCGAN都做了实验。

 

猜你喜欢

转载自blog.csdn.net/Mys_GoldenRetriever/article/details/82113082