优化算法-3:RMSProp算法和Adam算法

本文来自于网易云课堂

RMSProp算法

RMSProp算法全称root mean square prop算法。
这里写图片描述
从前面的例子可以知道,当我们利用梯度下降法的时候,虽然横轴也在前进,但纵轴摆动太大。假设纵轴是b横轴是w,假如我们想减弱b的幅度,加快或者不减少w的前进,RMSProp算法就可以起到这个作用。
其执行过程是这样的:
这里写图片描述
那么该算法是怎么起作用的呢?对于b方向,我们想减少b的摆动。所以对于 sdw s d w sdb s d b ,我们希望 sdw s d w 较小,这样在 w:=wαdwsdw w := w − α d w s d w 除数就会较小,那么更新的就会大一些,同样 sdb s d b 较大,这样在 b:=bαdbsdb b := b − α d b s d b 除数就会较大,那么更新的就会小一些,减少了纵轴的摆动。
所以,RMSProp和Momentum算法有相似的一点是都可以消除下降过程中的摆动。

w和b只是为了方便展示才使用的,实际上对于高维度w来说,可能纵轴是w1,w3..而横轴是w2,w4等。
这个算法中的 β β 和动量梯度下降法的不是同一个。
为了防止 sdw s d w 接近为0,一般会在 sdw s d w 加上一个很小的 ϵ ϵ ,比如说 108 10 − 8 。这只是为了保证数值能稳定一些。

Adam算法

在深度学习的历史上,包括许多志明研究者在内提出了优化算法,并很好的解决了一些问题。但随后这些优化算法被指出并不能一般化,不能适用于多种神经网络。时间久了,深度学习圈子里的人开始多少有些质疑全新的算法。很多人觉得动量下降算法很好用,很难找到更优化的算法了。所以RMSProp和Adam算法是少有的经受人们质疑的2种算法,已被证实可以适用不同的深度学习结构。
Adam算法基本上是将momentum和rmsprop结合在一起。
这里写图片描述
这里写图片描述
Adam,读作/艾德穆,不是额呆穆/(音标不会打)算法是非常常用的算法,其全称是Adaptive Moment Estimation。 β1 β 1 用来计算微分 dw d w ,叫做第一矩(first moment), β2 β 2 用来计算平方数的指数加权平均数,叫做第二矩(second moment),所以Adam的名字由此而来。

### RMSProp算法的计算公式 RMSProp作为一种自适应学习率的优化算法,在处理非凸优化问题上表现出色。该算法的核心在于引入了衰减系数(decay rate),这使得历史梯度平方不会无限制增长,从而解决了AdaGrad学习率单调递减的问题[^2]。 具体来说,对于每一个参数\( \theta_t \),在时间步\( t \)处更新规则如下: 设初始时刻各参数对应的累积梯度平方项为零向量\( s_0 = 0 \),则第\( t \)次迭代时有: \[s_{t}=\rho * s_{t-1}+(1-\rho)*g^{2}_{t}\] 其中\( g_t \)表示当前时刻关于参数\(\theta\)的目标函数偏导数构成的列向量;\( \rho \)(通常取值接近于1, 如0.9)代表的是上述提到过的衰减速率(decay rate),用来平衡新旧信息的比例关系; \( s_t \)则是到目前为止所有见过的数据点对该位置产生的影响程度的一个估计值——即所谓的“累积梯度”。 接着根据这个累积梯度来调整实际使用的有效步长(learning rate): \[\Delta{\theta}_t=-\frac{\eta}{\sqrt{s_t+\epsilon}}*g_t\] 这里\( \eta \)是预定义好的全局固定的学习速率(global learning rate); 而为了防止分母过小造成数值不稳定的情况发生,加入了极小正实数\( \epsilon \)(一般设定为\( 1e^{-8} \))作为保护机制。 最后完成一次完整的参数更新操作: \[\theta_{t+1}=\theta_t+\Delta{\theta}_t\] 以上便是整个RMSProp算法的工作流程及其背后的数学表达形式[^3]。 ```python import numpy as np def rmsprop_update(params, grads, cache=None, lr=0.01, decay_rate=0.9, eps=1e-8): if cache is None: cache = {} for p, g in zip(params, grads): key = id(p) if key not in cache: cache[key] = np.zeros_like(g) # Update the moving average of squared gradients. cache[key] *= decay_rate cache[key] += (1 - decay_rate) * g ** 2 # Perform parameter update with RMSProp rule. p -= lr / (np.sqrt(cache[key]) + eps) * g return params, cache ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值