常见的优化算法
全局最优
每次迭代都需要把所有的样本都送入,这样的好处是每次迭代都顾及了全部的样本,做的是全局最优化。
随机的从样本中抽出一个样本进行梯度的更新
针对梯度下降法训练速度慢的缺点,提出了随机梯度下降算法,随机梯度下降算法是从样本中随机抽出一组,训练后按梯度更新一次,然后再抽取一组,再更新一次,在样本量极其大的情况下,可能不用训练完所有的样本就可以获得一个损失值在可接受范围之内的模型了。
找一波数据计算梯度,使用均值更新参数
SGD相对来说要快得多,但是也有存在问题,由于单个样本的训练可能带来很多噪声使得SGD并不是每次迭代都向着整体优化方向,因此在刚开始训练时可能收敛的很快,但是训练一段时间后就会变得很慢。在此基础上又提出了小批量梯度下降法,它是每次从样本中随机抽取一小批进行训练,而不是一组,这样既保证了效果又保证了速度。
对梯度进行平滑处理,防止振幅过大
mini-batch SGD算法虽然这种算法能够带来很好的训练速度,但是在到达最优点的时候并不能够总是真正到达最优点,而是在最优点附近徘徊。
另一个缺点就是mini-batch SGD需要我们挑选一个合适的学习率,当我们采用小的学习率的时候,会导致网络在训练的时候收敛太慢;当我们采用大的学习率的时候,会导致在训练过程中优化的幅度跳过函数的范围,也就是跳过最优点。我们所希望的仅仅是网络在优化的时候网络的损失函数有一个很好的收敛速度同时又不至于摆动幅度太大。
所以Momentum优化器刚好可以解决我们所面临的问题,它主要是基于梯度的移动指数加权平均,对网络的参数进行平滑处理的,让梯度的摆动幅度变得更小。
v = 0.8 v − 0.2 Δ w , Δ w 表示前一次的梯度 v=0.8v-0.2\Delta w,\Delta w表示前一次的梯度 v=0.8v−0.2Δw,Δw表示前一次的梯度
w = w − α v , α 表示学习率 w=w-\alpha v,\alpha 表示学习率 w=w−αv,α表示学习率
自适应学习率
AdaGrad算法就是将每一个参数的每一次迭代的梯度取平方累加后再开方,用全局学习率除以这个数,作为学习率的动态更新,从而达到自适应学习率的效果
g r a d i e n t = h i s t o r y g r a d i e n t + ( Δ w ) 2 gradient=history_{gradient}+(\Delta w)^2 gradient=historygradient+(Δw)2
w = w − α g r a d i n e t + δ Δ w , δ 为小常数,为了数值稳定大约设置为 1 0 − 7 w=w-\frac{\alpha }{\sqrt{gradinet}+\delta }\Delta w , \delta 为小常数,为了数值稳定大约设置为 10^{-7} w=w−gradinet+δαΔw,δ为小常数,为了数值稳定大约设置为10−7
让步长越来越小
Momentum优化算法中,虽然初步解决了优化中摆动幅度大的问题,为了进一步优化损失函数在更新中存在摆动幅度过大的问题,并且进一步加快函数的收敛速度,RMSProp算法对参数的梯度使用了平方加权平均数。
g r a d i e n t = 0.8 ∗ h i s t o r y g r a d i e n t + 0.2 ∗ ( Δ w ) 2 gradient=0.8*history_{gradient}+0.2*(\Delta w)^2 gradient=0.8∗historygradient+0.2∗(Δw)2
w = w − α g r a d i n e t + δ Δ w w=w- \frac{\alpha}{\sqrt{gradinet}+\delta }\Delta w w=w−gradinet+δαΔw
动量法+RMSprop,学习率能够自适应,梯度的振幅不会过大
Adam(Adaptive Moment Estimation)算法是将Momentum算法和RMSProp算法结合起来使用的一种算法,能够达到防止梯度的幅度过大,同时还能够加快收敛速度
a. 需要初始化梯度的累积量和平方累积量
v w = 0 , s w = 0 v_w=0,s_w=0 vw=0,sw=0
b. 第 t 轮训练中,我们首先可以计算得到 Momentum 和 RMSProp 的参数更新
v w = 0.8 v + 0.2 Δ w , M o m e n t u m 计算的梯度 v_w=0.8v+0.2\Delta w,Momentum计算的梯度 vw=0.8v+0.2Δw,Momentum计算的梯度
s w = 0.8 ∗ s + 0.2 ∗ ( Δ w ) 2 , R M S P r o p 计算的梯度 s_w=0.8 * s+0.2*(\Delta w)^2,RMSProp 计算的梯度 sw=0.8∗s+0.2∗(Δw)2,RMSProp计算的梯度
c. 对其中的值进行处理后,得到
w = w − α s w + δ v w w=w-\frac{\alpha }{\sqrt{s_w} +\delta }v_w w=w−sw+δαvw