参数更新方法

本文深入探讨了梯度下降法及其多种变种,包括动量更新、NAG、Adagrad、RMSprop 和 Adam 等优化算法。通过对比不同算法的特点,帮助读者理解如何选择合适的优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码实现

https://github.com/hsmyy/zhihuzhuanlan/blob/master/momentum.ipynb

1、梯度下降法

clipboard

加大梯度下降的步长

clipboard[1]

继续加大步长


2、动量更新

Momentum改进自SGD算法,让每一次的参数更新方向不仅仅取决于当前位置的梯度,还受到上一次参数更新方向的影响。

v = mu * v - learning_rate * dx # integrate velocity 

x += v # integrate position 

clipboard[3]

3、NAG

如果预到的地点梯度比较大,更新就比较快,如果梯度比较小就更新比较慢

  1. x_ahead = x + mu * v   通过上一次的动量v估计本次的位置,
  1. v = mu * v - learning_rate * d x_ahead  通过估计的位置计算梯度,
  2. x += v 

clipboard[4]

4、Adagrad

cache += dx**2 

x += - learning_rate * dx / (np.sqrt(cache) + eps)

这个方法其实是动态更新学习率的方法,其中cache将每个梯度的平方和相加,而更新学习率的本质是,如果求得梯度距离越大,那么学习率就变慢,而eps是一个平滑的过程,取值通常在(10^-4~10^-8 之间)

clipboard[5]

gt,i=∇θJ(θi)是目标函数对参数的梯度,ϵ是平滑项,防止除零操作,一般取值1e−8

Adagrad的一大优势时可以避免手动调节学习率,比如设置初始的缺省学习率为0.01,然后就不管它,另其在学习的过程中自己变化。当然它也有缺点,就是它计算时要在分母上计算梯度平方的和,由于所有的参数平法必为正数,这样就造成在训练的过程中,分母累积的和会越来越大。

5、RMSprop

cache = decay_rate * cache + (1 - decay_rate) * dx**2 

x += - learning_rate * dx / (np.sqrt(cache) + eps)

6、Adam

m = beta1*m + (1-beta1)*dx 

v = beta2*v + (1-beta2)*(dx**2) 

x += - learning_rate * m / (np.sqrt(v) + eps)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值