2018年9月版本
Week 6
小批量梯度下降 Mini-batch Gradient Descent (MGD)
- 使用向量化算法,我们可以同时计算m个实例的相关数据
- 但是在m非常大的情况下,这一过程仍然会非常慢
- 对于梯度下降,在每一次迭代中,完整地处理一次数据将变得非常麻烦,整体达到最优变得不太实际
- mini-batch,即对于整个巨大的数据集,将其拆分成更小的训练集,称之为小批量训练集
- 对每一个小集,记为 X { t } X^{\{t\}} X{t},对应的y也进行类似处理
- 规定一个小集内含有 m x m_x mx个实例,那么一个小集 X { t } X^{\{t\}} X{t}的维数为 n x × m x n_x \times m_x nx×mx,对应 Y { t } Y^{\{t\}} Y{t}的维数为 1 × m x 1 \times m_x 1×mx
- 相应的,对原始的GD算法是为一个大的batch上的GD操作(BGD)
MGD的具体操作
-
针对每一组小集:
- 使用一组小集进行正向传播(注意输入是 X { t } X^{\{t\}} X{t})
- 针对这个小集计算代价函数(注意 m m m现在是 m x m_x mx)
- 针对这个小集进行梯度下降操作
- 更新参数
-
遍历(epoch):对训练集完成一次遍历
-
在原始GD中,一次epoch只能实现一次步进,但是对于MGD,则可以实现 m m x \frac{m}{m_x} mxm次步进
-
由于不同组数据之间可能有些许不同,MGD的代价函数整体随迭代次数增加会逐渐下降,但是中间可能会出现大量的噪声
选择mini-batch的大小
- 若 m x = m m_x = m mx=m,MGD就是原始的BGD(数据量巨大,耗时长)
- 若 m x = 1 m_x=1 mx=1,MGD就变成了SGD(Stochastic Gradient Descent,随机梯度下降)(失去了向量化加速的机会,且很难收敛)
- 因此,应当选择一个介于1和m之间的一个位置(耗时较短,同时能够很快地收敛,噪声较SGD小)
- 选择方式:
- 对于一个比较小(小于2000)的训练集:直接使用BGD
- 一般的mini-batch大小:2的6次方到2的9次方(或其他2的次方)
- 应当确保一组小集的内容可以被加载到内存中
指数加权平均 Exponentially Weighted Averages
- V t = β V t − 1 + ( 1 − β ) θ t , V 0 = 0 V_t=\beta V_{t-1} + (1-\beta)\theta_t ,\; V_0=0 Vt=βVt−1+(1−β)θt,V0=0
- 在这里,可以认为 V t V_t Vt大约是前 1 1 − β \frac{1}{1-\beta} 1−β1项的平均值
偏差修正 Bias Correction
-
直接使用EWA可能出现起点过低的情况(对 t = 1 t=1 t=1,就是一个非常不准确的值)
-
解决方法:使用 V t 1 − β t \frac{V_t}{1-\beta^t} 1−βtVt代替 V t V_t Vt
-
在计算初期,该方法能够有效矫正偏差,并在后期逐渐消除影响( β t \beta^t βt会趋近于0),有助于还原数值,同时辅助前期进行更加精确的估计
动量梯度下降 Gradient Descent with Momentum
- 比传统GD更快
- 基本思想:使用梯度的指数加权平均更新权重
- 在第t次迭代中:
- 计算当前mini-batch的dW和db
- 计算 V d W = β V d W + ( 1 − β ) d W V_{dW}=\beta V_{dW}+(1-\beta)dW VdW=βVdW+(1−β)dW以及 V b d = β V d b + ( 1 − β ) d b V_{bd}=\beta V_{db}+(1-\beta)db Vbd=βVdb+(1−β)db
- 使用 V d W V_{dW} VdW和 V d b V_{db} Vdb更新权重
- 整个过程就像是小球在碗内向下滚动,获得了一个动量,变得更快,但是存在摩擦(β)不至于无限加速
- 实践中,β常取值0.9
- 在使用GDM的时候,不需要考虑偏差矫正
均方根传递 Root Mean Square prop (RMSprop)
- 加速梯度下降
- 在第t次迭代中:
- 计算当前mini-batch的dW和db
- 计算 S d W = β S d W + ( 1 − β ) d W ∗ ∗ 2 S_{dW}=\beta S_{dW} + (1-\beta)dW**2 SdW=βSdW+(1−β)dW∗∗2(保存了导数平方的指数加权平均数)
- 计算 S d b = β S d b + ( 1 − β ) d b ∗ ∗ 2 S_{db}=\beta S_{db} + (1-\beta)db**2 Sdb=βSdb+(1−β)db∗∗2
- 更新参数 W : = W − α d W S d W + ϵ b : = b − α d b S b d + ϵ W:=W-\alpha \frac{dW}{\sqrt{S_{dW}}+\epsilon} \; b:=b-\alpha \frac{db}{\sqrt{S_{bd}}+\epsilon} W:=W−αSdW+ϵdWb:=b−αSbd+ϵdb
- 减弱垂直方向(b)的震荡,并适度放大水平方向(W)的震荡
- 此处的β和GDM不是一个参数
- ε是防止分母过于接近0出现除零问题
Adam优化算法
-
动量和RMSprop的结合
-
初始化: V d W = 0 , S d W = 0 , V d b = 0 , S d b = 0 V_{dW}=0,S_{dW}=0,V_{db}=0,S_{db}=0 VdW=0,SdW=0,Vdb=0,Sdb=0
-
在第t次迭代中:
-
计算当前mini-batch的dW和db
-
计算 V d W = β 1 V d W + ( 1 − β 1 ) d W , V d b = β 1 V d b + ( 1 − β 1 ) d b V_{dW}=\beta_1 V_{dW} + (1-\beta_1) dW,\;V_{db}=\beta_1 V_{db} + (1-\beta_1) db VdW=β1VdW+(1−β1)dW,Vdb=β1Vdb+(1−β1)db
-
计算 S d W = β 2 S d W + ( 1 − β 2 ) d W ∗ ∗ 2 , S d b = β 2 S d b + ( 1 − β 2 ) d b ∗ ∗ 2 S_{dW}=\beta_2 S_{dW} + (1-\beta_2) dW**2,\;S_{db}=\beta_2 S_{db} + (1-\beta_2)db ** 2 SdW=β2SdW+(1−β2)dW∗∗2,Sdb=β2Sdb+(1−β2)db∗∗2
-
需要偏差校正 V d W c o r r e c t e d = V d W 1 − β 1 t , V d b c o r r e c t e d = V d b 1 − β 1 t V_{dW}^{corrected}=\frac{V_{dW}}{1-\beta_1^t},\;V_{db}^{corrected}=\frac{V_{db}}{1-\beta_1^t} VdWcorrected=1−β1tVdW,Vdbcorrected=1−β1tVdb
-
还要在S上进行校正 S d W c o r r e c t e d = S d W 1 − β 2 t , S d b c o r r e c t e d = S d b 1 − β 2 t S_{dW}^{corrected}=\frac{S_{dW}}{1-\beta_2^t},\;S_{db}^{corrected}=\frac{S_{db}}{1-\beta_2^t} SdWcorrected=1−β2tSdW,Sdbcorrected=1−β2tSdb
-
更新参数 W : = W − α V d W c o r r e c t e d S d W c o r r e c t e d + ϵ , b : = b − α V d b c o r r e c t e d S d b c o r r e c t e d + ϵ W:=W-\alpha \frac{V_{dW}^{corrected}}{\sqrt{S_{dW}^{corrected}}+\epsilon},\;b:=b-\alpha \frac{V_{db}^{corrected}}{\sqrt{S_{db}^{corrected}}+\epsilon} W:=W−αSdWcorrected+ϵVdWcorrected,b:=b−αSdbcorrected+ϵVdbcorrected
-
-
α需要自行进行调整,β1通常取0.9,β2建议取0.999,ε常取1e-8
-
Adam意取“自适应矩估计”(Adaptive Moment Estimation),两个β分别为一阶矩和二阶矩
学习率衰减 Learning Rate Decay
-
使用mini-batch时,由于噪声和固定的α,梯度下降最终可能会在最小值徘徊而不收敛
-
一种思路:随着训练不断深入,逐渐减小α,让梯度下降无限逼近最小值点
-
学习率设定 α : = 1 1 + d e c a y r a t e × e p o c h α 0 \alpha:=\frac{1}{1+decayrate \times epoch}\alpha_0 α:=1+decayrate×epoch1α0
-
其他方法 α : = 0.9 5 e p o c h α 0 \alpha:=0.95^{epoch}\alpha_0 α:=0.95epochα0
-
其他方法 α : = k e p o c h α 0 \alpha:=\frac{k}{\sqrt{epoch}}\alpha_0 α:=epochkα0
-
其他方法 α : = k t α 0 \alpha:=\frac{k}{\sqrt{t}}\alpha_0 α:=tkα0
-
其他方法,α以离散的阶梯递减,不同的t阶段使用上一阶段值的一半
局部最优解 Local Optima
- 鞍点(Saddle Point):一些参数局部最小,但一些参数局部最优的情况
- 停滞区(Plateaus):降低学习速度,指导数长时间接近0的一段区域
- 被局部最优解困住的情况一般很少出现在大量参数的模型中