第八章 深度学习中的优化
2020-2-15 深度学习笔记8 - 深度学习中的优化1(与纯优化区别-基于梯度下降,神经网络优化-下降到足够小即可)
2020-2-16 深度学习笔记8 - 深度学习中的优化2(基本算法-梯度下降/动量,参数初始化策略)
自适应学习率算法(AdaGrad / RMSProp / Adam)
python实现参见https://blog.csdn.net/u012756814/article/details/79995133
目前最流行并且使用很高的优化算法包括SGD、具动量的SGD、RMSProp、具动量的RMSProp、AdaDelta和Adam。 此时,选择哪一个算法似乎主要取决于使用者对算法的熟悉程度(以便调节超参数)。
神经网络研究员早就意识到学习率
肯定是难以设置的超参数【在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据】之一,因为它对模型的性能有显著的影响。
损失通常高度敏感于参数空间中的某些方向,而不敏感于其他。 动量算法可以在一定程度缓解这些问题,但这样做的代价是引入了另一个超参数。
如果我们相信方向敏感度在某种程度是轴对齐的,那么每个参数设置不同的学习率,在整个学习过程中自动适应这些学习率是有道理的。
更好的学习率参数一方面可以加速收敛,一方面可以减小训练误差,本文主要介绍:AdaGrad 、RMSProp、Adam。它们都是增量(或者基于小批量)的算法,自适应模型参数的学习率。
- AdaGrad --梯度累加
W t + 1 = W t − η t + 1 1 t + 1 ∑ i = 0 t ( g i ) 2 d W t = W t − η ∑ i = 0 t ( g i ) 2 d W t W^{t+1}=W^t−\frac{\fracη{\sqrt{t+1}}}{\sqrt{\frac1{t+1}\sum^t_{i=0}(g^i)^2}}dW^t=W^t−\fracη{\sqrt{\sum^t_{i=0}(g^i)^2}}dW^t Wt+1=Wt−t+11∑i=0t(gi)2t+1ηdWt=Wt−∑i=0t(gi)2ηdWt
求和和开根号都是元素级别的
AdaGrad 为每个参数提供自适应的权重,如果某个梯度历史积累具有较大的梯度(调整已经比较大),那么给一个小的学习率(除以一个更大的值)。相反,如果某个梯度历史积累相对较小(调整不是很大),则给比较大的学习率,净效果是在较为平缓的方向取得比较大的进步,有助于逃离高原平台。但是从训练开始积累平方和可能会导致有效学习率过早和过量的减小。
- RMSProp–指数加权移动平均(丢弃时间过久的历史)
RMSProp 修改了AdaGrad梯度累加的方式,采用指数加权移动平均(丢弃时间过久的历史),多了一个超参数β,用以控制移动平均的长度范围。
on iteration t:
compute dW,db on the current mini-batch
S d w = β S d w + ( 1 − β ) ( d W t ) 2 S_{dw}=βS_{dw}+(1−β)(dW^t)^2 Sdw=βSdw+(1−β)(dWt)2
S d b = β S d b + ( 1 − β ) ( d b t ) 2 S_{db}=βS_{db}+(1−β)(db^t)^2 Sdb=βSdb+(1−β)(dbt)2
W t + 1 = W t − α d W t S d w + ϵ W^{t+1}=W^t−α\frac{dW^t}{\sqrt{S_{dw}+ϵ}} Wt+1=Wt−αSdw+ϵdWt
b t + 1 = W t − α d b t S d b + ϵ b^{t+1}=W^t−α\frac{db^t}{S_{db}+ϵ} bt+1=Wt−αSdb+ϵdb