神经网络中的优化方法

106 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1. Mini-batch decent方法

1.1. Batch vs. mini-batch

Batch:利用矢量化编程的方法,对整个训练集运用梯度下降法。梯度每下降一小步,都要处理整个训练集。这样的效率比较慢。 Mini-batch:将训练集拆分为更小的训练集,成为小批量训练集(mini-batch) Mini-batch t: X{t},Y{t}X^{\{t\}},Y^{\{t\}} 对每个mini-batch都进行一次完整的前向和反向传播过程,当对所有的mini-batch都进行了前向和反向过程后,我们称完成了对训练集的一次遍历**(epoch)**。 Batch gradient descent,原则上cost应该是单调下降(除非learning rate太大了);Mini-batch gradient descent,整体趋势下降,但是局部是振荡的。

1.2. Choosing mini-batch size

  • 如果mini-batch size=m: 等价于batch gradient descent,一般可以收敛到全局最小值点;
  • 如果mini-batch size=1:等价于stochastic gradient descent,不一定收敛到全局最小值点,一般会在该点处振荡。 如果训练集较小(<2000),就使用batch gradient descent;否则,可以选择64到512之间(2的幂数)的mini-batch size。确保可以放入CPU/GPU的内存中

2. 指数加权平均方法(exponentially weighted averages)

图2.1 指数加权平均例子-寻找温度趋势
v0=0v1=0.9v0+0.1θ1v2=0.9v1+0.1θ2v3=0.9v2+0.1θ3(2-1)\begin{aligned} v_0&=0\\ v_1&=0.9v_0+0.1\theta_1\\ v_2&=0.9v_1+0.1\theta_2\\ v_3&=0.9v_2+0.1\theta_3\\ \vdots\\ \tag{2-1} \end{aligned}

第t天的指数平均值的通项公式:

vt=βvt1+(1β)θt=(1β)(θt+βθt1++βkθtk++βt1θ1)(2-2)\begin{aligned} v_t&=\beta v_{t-1}+(1-\beta)\theta_t \\ &=(1-\beta)\left(\theta_t+\beta\theta_{t-1}+\cdots+\beta^{k}\theta_{t-k}+\cdots+\beta^{t-1}\theta_{1}\right) \\ \tag{2-2} \end{aligned}

近似公式:

vt11β days temperature(2-3)v_t\approx \frac{1}{1-\beta}\ days'\ temperature\tag{2-3}

如图2.2所示,当β\beta增大时,曲线向右平移(绿线);β\beta减小时,曲线振荡加剧(黄线),

图2.2 β大小对曲线形状的影响 ### 2.1. Bias Correction(偏差修正) 原因:$v_0=0$导致初始阶段的点估计不准 解决方法:用$\frac{v_t}{1-\beta^t}$代替$v_t$

3. Gradient descent with momentum(动量梯度下降)

背景问题:当目标函数的等高线为图3.1所示时,梯度下降的过程中可能会发生振荡:

图3.1 梯度下降振荡的例子> Momentum: On iteration t:   Compute $dw,db$ on current mini-batch.
vdw=βvdw+(1β)dwvdb=βvdb+(1β)dbw:=wαvdw;b:=bαvdb(3-1)\begin{aligned} v_{dw}&=\beta v_{dw}+(1-\beta)dw \\ v_{db}&=\beta v_{db}+(1-\beta)db \\ w&:=w-\alpha v_{dw};\\ b&:=b-\alpha v_{db}\\ \tag{3-1} \end{aligned}

采用前面提到的指数加权平均可以使梯度的下降过程更平滑。 一般β\beta取0.9就好,而且实际中一般不用修正偏差,因为迭代几步后偏差就自动减小很多了。

4. RMSprop(Root Mean Square prop,均方根传递)

On iteration t:   Compute dw,dbdw,db on current mini-batch.

sdw=βsdw+(1β)dw2sdb=βsdb+(1β)db2w:=wαdwsdw;b:=bαdbsdb(4-1)\begin{aligned} s_{dw}&=\beta s_{dw}+(1-\beta)dw^2 \\ s_{db}&=\beta s_{db}+(1-\beta)db^2 \\ w&:=w-\alpha \frac{dw}{\sqrt{ s_{dw}}};\\ b&:=b-\alpha \frac{db}{\sqrt{ s_{db}}}\\ \tag{4-1} \end{aligned}

垂直方向除以一个较大的数,水平方向除以一个较小的数(假设b是垂直方向,w是水平方向)。为了防止分母出现零的情况,可以在分母加上一个小的ϵ\epsilon

5. Adam优化算法

Adam的本质是将动量和RMSprop结合起来。 vdw=0,sdw=0.vdb=0,sdb=0.v_{dw}=0,s_{dw}=0.v_{db}=0,s_{db}=0. On iteration t:   Compute dw,dbdw,db on current mini-batch.

vdw=β1vdw+(1β1)dwvdb=β1vdb+(1β1)dbsdw=β2sdw+(1β2)dw2sdb=β2sdb+(1β2)db2Vdwcorrected=vdw/(1β1t),Vdbcorrected=vdb/(1β1t)Sdwcorrected=sdw/(1β2t),Sdbcorrected=sdb/(1β2t)w:=wαVdwcorrectedSdwcorrected;b:=bαVdbcorrectedSdbcorrected(5-1)\begin{aligned} v_{dw}&=\beta_1 v_{dw}+(1-\beta_1)dw \\ v_{db}&=\beta_1 v_{db}+(1-\beta_1)db \\ s_{dw}&=\beta_2 s_{dw}+(1-\beta_2)dw^2 \\ s_{db}&=\beta_2 s_{db}+(1-\beta_2)db^2 \\ V_{dw}^{corrected}&=v_{dw}/\left(1-\beta_1^t\right),V_{db}^{corrected}=v_{db}/\left(1-\beta_1^t\right)\\ S_{dw}^{corrected}&=s_{dw}/\left(1-\beta_2^t\right),S_{db}^{corrected}=s_{db}/\left(1-\beta_2^t\right)\\ w&:=w-\alpha \frac{V_{dw}^{corrected}}{\sqrt{ S_{dw}^{corrected}}};\\ b&:=b-\alpha \frac{V_{db}^{corrected}}{\sqrt{ S_{db}^{corrected}}}\\ \tag{5-1} \end{aligned}

超参数: α\alpha:人工调整 β1:0.9\beta_1:0.9(dw)(dw) β2:0.999\beta_2:0.999(dw2)(dw^2) ϵ\epsilon:10810^{-8}

6. 学习率衰减(learning rate decay)

图6.1 固定学习率导致不能完全收敛的示意图 解决方法:让学习率$\alpha$逐渐下降。 下降的形式:
  • α=11+decayrate  epochnum\alpha=\frac{1}{1+decay-rate\ *\ epoch-num}
  • α=0.95epochnumα0\alpha=0.95^{epoch-num}\cdot\alpha_0
  • α=kepochnumα0\alpha=\frac{k}{\sqrt epoch-num}\alpha_0
  • ...