torch笔记十八 | 让训练更稳定

1. 数值稳定性

计算某层权重参数关于损失函数的梯度的时候,需要使用链式法则,有可能出现梯度爆炸和梯度消失现象。

梯度爆炸:例如使用ReLU激活函数,当x>1的时候,导数就是1。当权重比较大的时候,当权重比较大的时候,和1相乘会得到保留。导致的问题:值超出值域,16位浮点数尤为重要(数值空间6e-5~6e4);对学习率敏感。

梯度消失:例如使用Sigmoid作为激活函数,导数在0附近大一些,其他地方都很小。当权重比较大的时候,导数就会变很小,和权重相乘就会很小。问题:梯度值变成0;训练没有进展;仅仅顶层训练的较好,无法让网络更深。

总结:当数值过大或者过小都会导致数值问题,即梯度爆炸和梯度消失。该问题常出现在深度网络中,因为会对n个数累乘。

2. 让训练更加稳定

目标:让梯度值在合理的范围内。

常见缓解方法:

  • 将乘法变加法。ResNet、LSTM
  • 归一化。梯度归一化(不管梯度多大,都归一化到一定的区域),梯度裁剪(梯度大于5就变成5,小于-5就变成-5)
  • 合理的权重初始和激活函数。目标:让每层的输出和每层的梯度服从均值为0,方差为固定数的一个随机变量。权重初始化,可以使用 Xavier 初始化方法,确定方差的具体数值。激活函数,选择tanh和ReLU都没有问题,如果选择Sigmoid,要做一下调整,例如:4Xsigmoid(x)-2。

3. 其他的注意问题

  • nan, inf 的产生和解决。nan(not a number,非数),通常是因为分母出现了0;inf(超出浮点数的表示范围,溢出),通常是因为 lr 调的太大或者权重初始值就很大。解决方法:合理初始化权重,方差小一些、激活函数、调小学习率。
  • 权重在每个batch更新一次。
  • 激活函数推荐选择ReLU,简单。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值