吴恩达深度学习专项课程2学习笔记/week2/Optimization Algorithms

Optimization algorithms

优化算法以加速训练。

Mini-batch gradient descend

  • Batch gradient descend:每一小步梯度下降否需要计算所有的训练样本。很耗时。
  • Mini-batch gradient descend:将训练集分为很多小的mini-batch,每一个epoch用到一个mini-batch的训练样本,进行一次梯度下降(向前传播,计算cost,向后传播)。训练速度会提升很多。

选择mini-batch的size

  • 如果size=1:随机梯度下降,过程会曲折反复,不收敛,在最优值附近徘徊(紫色线)。一个很大的缺点在于每次只处理一个样本,失去了向量化的提升效率的作用。

  • 如果size=m:批梯度下降,过程比较直接但是每步都很耗时。(蓝色线)

  • size适中,则可以既利用到向量化的作用,又每一步下降不需要耗时过长,因此效率较高。(绿色线)

size选择大致原则:

  • 如果训练集很小(如m <= 2000):Batch gradient descend
  • 如果训练集相对大,那么典型的mini-batch的大小如:64,128,256,512。考虑到计算机的内存,所以常用的mini-batch都是2的次方。
  • 确保mini-batch和计算机CPU/GPU的内存相适应。

mini-batch size是需要调整的超参数之一,尝试不同的值,然后选择一个最好的。

补充知识:Exponentially weighted averages(指数加权平均)

以每日温度的指数加权平均计算为例,每天的温度值如蓝色点所示,数据看起来噪声比较大,如下图。

我们计算数据的趋势,即温度的局部平均,使用指数加权平均。计算公式为:

\[v_t = \beta v_{t-1} + (1-\beta) \theta_t \]

其中,\(v_t\)表示t天温度的指数加权平均值,\(\theta_t\)表示当天的温度值,β是参数。

实际上,\(v_t\)可以看作约等于取前\(\frac {1}{1 - \beta}\)天的平均值。

例如取β = 0.9,我们得到红色的线;当取β = 0.98时,得到绿色线。注意到,当β的值很大(接近1)时,线条会更加的平滑,因为对更多的天数取了平均值,但是会有更多的延迟出现,因为计算过去的权重很大而当前的权重很小,对变化的适应更迟缓。而另一个极端值,如β = 0.5时,则得到噪声较大的黄色线。

对指数加权平均的理解

我们假设β = 0.9,对\(v_100\)进行展开,得到图中表达式,每天温度的权值指数衰减,且和近似为1,实际上可以看作是将原来的数据和一个指数衰减函数对应相乘。注意到\(0.9^{10} \approx 0.35 \approx \frac {1}{e}\),即10天以外的温度值的权重很小,因此可以近似看作只关心最近的前十天的平均值,这是一种经验之谈。

应用指数加权平均

Set v_θ = 0
Repeat
{
Get next θ_t
v_θ := βv_θ + (1-β)θ_t
}

虽然不是最准确的平均值,但是节省储存空间。

Bias correction

我们发现按照公式实际计算时候,如当取β = 0.98时,无法绿色线,而是紫色线,它的起始值很低,这是因为\(v_0 = 0\),而在起始的几天的权值都很低。

我们进行误差修正,用\(\frac{v_t}{1 - \beta^t}\)代替,可以帮助进行更好的估计。

(未完待续)

posted @ 2018-02-18 13:05  surimj  阅读(351)  评论(0编辑  收藏  举报