近期看代码的时候发现了loss_scale的参数,不知道为什么算loss还需要放缩,在参数说明中,当只有选择了fp16精度的选项时,loss_scale才有效。
查了资料,简单记录一下:
参考:资料
定义:
Loss Scaling
在计算loss时适当放大loss,在优化器更新参数时缩小同样倍数梯度。目前apex支持动态放缩倍数。
思想:
在交易系统中算钱的时候,规范的做法是把金额如1.01元*100之后再做计算,计算完之后再除以100,这样可以避免0.01无法用二进制精确表示造成的舍入误差。
为什么要用?
很多时候训练时间过长,或者显存不够,使用混合精度(fp32+fp16)进行训练可以加快训练速度,减少显存需求空间。