优化算法总结

<一年前看的,有的懂了有的没懂,但是没有做记录,现在什么也不记得了。今天同学问我是否有了解,原来我只记得这些算法的名字了。时刻提醒我好记性不如烂笔头,我要好好记录总结。>

梯度下降算法

模型参数 θ \theta θ
目标函数 J ( θ ) J(\theta) J(θ)
学习率 α \alpha α
梯度 g t = ∇ θ J t ( θ ) g_t =\nabla_{\theta} J_t (\theta) gt=θJt(θ)

对于一个待求解的问题,给定待优化的模型参数 θ \theta θ 和目标函数 J ( θ ) J(\theta) J(θ),算法通过沿着梯度 ∇ θ J ( θ ) \nabla_\theta J(\theta) θJ(θ)的相反方向来更新 θ \theta θ来最小化 J ( θ ) J(\theta) J(θ)。学习率 α \alpha α决定了每一个时刻更新的步长。

模型参数更新就是:

θ t = θ t − 1 − α ∇ θ J t ( θ ) \theta_t = \theta_{t-1} - \alpha \nabla_{\theta} J_t (\theta) θt=θt1αθJt(θ)

每一次迭代都会使用所有的样本进行梯度的更新,也被称作批量梯度下降。BGD (Batch Gradient Descent) ,缺点就是:当样本数目 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。

梯度下降算法相应的变种还有随即梯度下降 SGD,和小批量梯度下降。
随机梯度下降法不同于批量梯度下降,随机梯度下降是每次迭代随机采样一个样本来对参数进行更新,计算开销从O(n) 下降到O(1),使得训练速度加快。随机梯度下降,虽然提高了计算效率,但是由于随机性比较大,所以下降过程非常曲折。如何理解随即梯度下降

小批量梯度下降,是对批量梯度下降以及随机梯度下降的一个折中办法,我们选取一定数量的样本组成一个小批量样本,然后用这个小批量样本更新梯度。不仅可以减少计算开销,还能提高算法稳定性。batcha_size的选择带来的影响:
  (1)在合理地范围内,增大batch_size的好处:
    a. 内存利用率提高了,大矩阵乘法的并行化效率提高。
    b. 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
    c. 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
  (2)盲目增大batch_size的坏处:
    a. 内存利用率提高了,但是内存容量可能撑不住了。
    b. 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
    c. Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。
 参考: BGD,SGD,MBDGD的理解

Momentum

γ \gamma γ 动量项参数,表示上一时刻的动量保留程度,一般设为0.9。
η \eta η学习率,(此处学习率符号换成 η \eta η,是为了跟文章一致)
Momentum的引入为了解决SGD中容易陷入震荡的问题。用作者的话说就是加速SGD在正确的方向下降,并抑制震荡。
m t = γ m t − 1 + η ∇ θ J ( θ ) θ t = θ t − 1 − m t \begin{aligned} m_{t} &=\gamma m_{t-1}+\eta \nabla_{\theta} J(\theta) \\ \theta_t &=\theta_{t-1}-m_{t} \end{aligned} mtθt=γmt1+ηθJ(θ)=θt1mt
SGD-M的方法,实际上表明,参数的更新方向不仅由当前的梯度决定,也与此前累积的下降方向有关。这使得参数中那些梯度方向变化不大的维度可以加速更新,并减少梯度方向变化较大的维度上的更新幅度。由此产生了加速收敛和减小震荡的效果。

Adagrad

待补充

Adadelta

Adadelta 是Adagrad的延伸。

RMSprop

RMSprop是Hinton在课堂是提供的一种适应性学习速率方法,没有被发表过。Lecture 6e of his Coursera Class

为了进一步优化损失函数在更新中存在摆动幅度过大的问题,并且进一步加快函数的收敛速度,RMSProp算法也同样为了解决消失的学习率。学习速率 η \eta η除了梯度平方的指数衰减均值。
E [ g 2 ] t = 0.9 E [ g 2 ] t − 1 + 0.1 g t 2 θ t + 1 = θ t − η E [ g 2 ] t + ϵ g t \begin{aligned} E\left[g^{2}\right]_{t} &=0.9 E\left[g^{2}\right]_{t-1}+0.1 g_{t}^{2} \\ \theta_{t+1} &=\theta_{t}-\frac{\eta}{\sqrt{E\left[g^{2}\right]_{t}+\epsilon}} g_{t} \end{aligned} E[g2]tθt+1=0.9E[g2]t1+0.1gt2=θtE[g2]t+ϵ ηgt

NAG

待补充

Adam算法

算法全称为:Adaptive moment estimation。学习之前,先总结下即将出现的参数:
g t g_t gt梯度 g t = ∇ θ J t ( θ ) g_t =\nabla_{\theta} J_t (\theta) gt=θJt(θ)
β 1 \beta_1 β1, β 2 \beta_2 β2超参数,用于控制衰减速率 β 1 , β 2 ∈ [ 0 , 1 ) \beta_1,\beta_2 \in [0,1) β1,β2[0,1)
m t m_t mt, 梯度的指数移动平均,又可以称为一阶矩估计.
v t v_t vt,平方梯度的指数移动平均,又可以称为二阶矩估计。
α \alpha α,学习速率,或者称为步长因子,控制更新速度。
在Adam算法中,一阶矩估计和二阶矩估计的更新,都使用了指数移动平均的方法。
m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t mt=β1mt1+(1β1)gt
v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 vt=β2vt1+(1β2)gt2
超参数 β 1 , β 2 \beta_1, \beta_2 β1,β2取值很接近1。作者推荐值,一阶动量的衰减率 β 1 = 0.9 \beta_1=0.9 β1=0.9,二阶动量的衰减率 β 2 = 0.99 \beta_2=0.99 β2=0.99。第0步时,都使用0进行初始化。因此初始阶段,动量相当于偏向了0,因此,加入了一个偏置校正(bias-corrected)。注意,下式分母中,参数t,为 β 1 , β 2 \beta_1, \beta_2 β1,β2的t次方。
m ^ t = m t 1 − β 1 t \hat{m}_t = \frac{m_t}{1- \beta_1^t} m^t=1β1tmt
v ^ t = v t 1 − β 2 t \hat{v}_t = \frac{v_t}{1-\beta_2^t} v^t=1β2tvt
之后,再更新参数:
θ t = θ t − 1 − α m ^ t v ^ t + ϵ \theta_{t} = \theta_{t-1} - \alpha \frac{\hat{m}_t} { \sqrt{\hat{v}_t} + \epsilon} θt=θt1αv^t +ϵm^t
自己实现这个算法的时候,可以不直接使用上面的伪代码顺序。作者特意提到,可以通过如下的方式,提升算法的效率。本质上代入后是等价的。
α t = α ⋅ 1 − β 2 t / ( 1 − β 1 t ) θ t ← θ t − 1 − α t ⋅ m t / ( v t + ϵ ^ ) \begin{array}{c}\alpha_{t}=\alpha \cdot \sqrt{1-\beta_{2}^{t}} /\left(1-\beta_{1}^{t}\right) \\ \theta_{t} \leftarrow \theta_{t-1}-\alpha_{t} \cdot m_{t} /(\sqrt{v_{t}}+\hat{\epsilon})\end{array} αt=α1β2t /(1β1t)θtθt1αtmt/(vt +ϵ^)

优势总结:
1.直截了当地实现
2.高效的计算
3.所需内存少
4.梯度对角缩放的不变性(第二部分将给予证明)
5.适合解决含大规模数据和参数的优化问题
6.适用于非稳态(non-stationary)目标
7.适用于解决包含很高噪声或稀疏梯度的问题
8.超参数可以很直观地解释,并且基本上只需极少量的调参

参考:Adam论文

博客:深度学习最常用的学习算法:Adam优化算法
An overview of gradient descent optimization algorithms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值