【李宏毅机器学习特训营】之优化器Momentum详解

传统梯度下降的缺陷

一、梯度爆炸

误差梯度是神经网络训练过程中计算的方向和数量,用于以正确的方向和合适的量更新网络权重。 在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致 NaN 值。 网络层之间的梯度(值大于 1.0)重复相乘导致的指数级增长会产生梯度爆炸。 梯度爆炸引发的问题 在深度多层感知机网络中,梯度爆炸会引起网络不稳定,最好的结果是无法从训练数据中学习,而最坏的结果是出现无法再更新的 NaN 权重值。

二、梯度梯度消失

某些情况下梯度趋近于0导致无法更新。

在某些情况下,梯度会变得非常小,有效地阻止了权重值的变化。在最坏的情况下,这可能会完全停止神经网络的进一步训练。例如,传统的激活函数(如双曲正切函数)具有范围(0,1)内的梯度,反向传播通过链式法则计算梯度。这样做的效果是,用这些小数字的n乘以n来计算n层网络中“前端”层的梯度,这意味着梯度(误差信号)随n呈指数递减,而前端层的训练非常缓慢。

梯度消失解决方法

传统的SGD算法
在这里插入图片描述

Momentum算法
参考链接:https://distill.pub/2017/momentum/
原文链接:On the importance of initialization and momentum in deep learning

在这里插入图片描述
从公式可以看出相对于SGD算法,Momentum算法吸取了之前梯度下降的信息
在这里插入图片描述
在这里插入图片描述
像传统的SGD就会卡在第三个小球那块,而Momentum算法,由于小球在之前的下降过程中,积攒了一些能量,有可能在学习中越过这个局部最优点。

paddlepaddleAPI代码:

import paddle

inp = paddle.uniform(min=-0.1, max=0.1, shape=[10, 10], dtype='float32')
linear = paddle.nn.Linear(10, 10)
out = linear(inp)
loss = paddle.mean(out)
momentum = paddle.optimizer.Momentum(learning_rate=0.1, parameters=linear.parameters(), weight_decay=0.01)
out.backward()
momentum.step()
momentum.clear_grad()

百度深度学习API连接

梯度爆炸解决方法

在这里插入图片描述

对于学习率,一般训练越久步长应该越小,adagrad算法除以一个时间的根号,可以使学习率随着时间减少。
gt是当前梯度。
ot是之前梯度的累加,如果之前存在大梯度值,可以使这次更新步长减少。
百度API描述链接
最后附上课程链接:https://aistudio.baidu.com/aistudio/course/introduce/1978

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值