吴恩达Coursera深度学习课程 deeplearning.ai (2-2) 优化算法--课程笔记

相关课件:https://download.csdn.net/download/haoyutiangang/10495508

2.1 Mini-batch 梯度下降法

原因: 大数据集时,执行一次循环时间很长,梯度下降很慢;

mini-batch 是指将大数据集 n分成一系列小数据集m,每计算一个小数据集就执行一次梯度下降,这样一次大数据集的计算可以下降n/m 次,从而增加梯度下降的速度。

  • 执行一次小数据集为一次 mini-batch
  • 执行一次大数据集为一次 epoch

mini-batch 使用上角标{i}表示,例如 Z i Z^{i} Zi表示第一个 mini-batch中的 Z

2.2 理解 mini-batch 梯度下降法

mini-batch梯度: 小幅震动,总体下降

  • batch梯度下降:
    • 对所有m个训练样本执行一次梯度下降,每一次迭代时间较长;
    • Cost function 总是向减小的方向下降。
  • 随机梯度下降:
    • 对每一个训练样本执行一次梯度下降,但是丢失了向量化带来的计算加速;
    • Cost function总体的趋势向最小值的方向下降,但是无法到达全局最小值点,呈现波动的形式。
  • Mini-batch梯度下降:
    • 选择一个1 < size < m的合适的size进行Mini-batch梯度下降,可以实现快速学习,也应用了向量化带来的好处。
    • Cost function的下降处于前两者之间。
选择 mini-batch 的大小
  • 小数据集(m<2000) 选用 batch 梯度下降
  • 大数据集选取:2^6, 2^7, 2^8, 2^9, 2^10 (都尝试一下选用最优的
  • Mini-batch的大小要符合CPU/GPU内存,且为2幂次。

2.3 指数加权平均

为了介绍下面的优化算法,需要先理解指数加权平均,又叫指数加权移动平均。

image

公式:
v t = β v t − 1 + ( 1 − β ) θ t v_t = \beta v_{t-1} + (1-\beta)\theta_t vt=βvt1+(1β)θt
β \beta β 为对过去的权重,1- β \beta β 为对当前值的权重,组合为移动加权平均。

结果大体相当于平均了近 1/(1- b e t a beta beta) 天的值, 例如 β \beta β = 0.95 相当于平均了近20天的值

2.4 理解指数加权平均

一般来说有
( 1 − ε ) 1 / ε = 1 e (1-\varepsilon)^{1/\varepsilon} = \frac{1}{e} (1ε)1/ε=e1
上文说 β \beta β = 0.9 则 ε \varepsilon ε = 1 - 0.9 = 0.1 也就是 0. 9 10 = 1 / e 0.9^{10} = 1/e 0.910=1/e, 经过10天左右权重下降到1/e,所以大体平均了 1 / ε = 1 / ( 1 − β ) 1/\varepsilon = 1/(1-\beta) 1/ε=1/(1β) 天的数值。

  • 指数加权平均算法仅需要一行代码,一个 catch 来保存上次计算的结果即可。
  • 如果直接用前几天的平均数则需要保存几个 catch, 运算也较为复杂。

2.5 指数加权平均的偏差修正

由于加权平均的执行的前期,历史几天的数据不足(比如第一天执行时就没有之前几天的历史数据), 所以会造成前期数值很小的情况。

  • 偏差修正
    v t = β v t − 1 + ( 1 − β ) θ t v t = v t 1 − β t \begin{aligned} v_t &amp;= \beta v_{t-1} + (1-\beta)\theta_t \\ v_t &amp;= \frac{v_t}{1-\beta^t} \end{aligned} vtvt=βvt1+(1β)θt=1βtvt
    经过修正后,前期的值不在变得很小,并且后期修正逐渐趋向于1, 从而和不修正的后期重合。

实际过程中,一般直接忽略前期偏差的影响,不用修正偏差。

2.6 动量(Momentum)梯度下降法

Momentum:计算梯度的指数加权移动平均v,用这个值来更新参数。

image

梯度下降如上图蓝线所示,梯度下降过程中有纵向波动,由于这种波动的存在,我们只能采取较小的学习率,否则波动会更大。

而使用动量梯度下降法(指数加权平均)后,经过平均,相当于抵消了上下波动,使波动趋近于零(如图中红线所示),这样就可以采用稍微大点的学习率加快梯度下降的速度。

算法实现

v d W = β &ThinSpace; v d W + ( 1 − β ) d W W : = W − α &ThinSpace; v d W v d b = β &ThinSpace; v d b + ( 1 − β ) d b b : = b − α &ThinSpace; v d b \begin{aligned} v_{dW} &amp;= \beta \, v_{dW} + (1-\beta)dW \\ W &amp;:= W -\alpha\,v_{dW} \\ \\ v_{db} &amp;= \beta \, v_{db} + (1-\beta)db \\ b &amp;:= b -\alpha\,v_{db} \\ \end{aligned} vdWWvdbb=βvdW+(1β)dW:=WαvdW=βvdb+(1β)db:=bαvdb

2.7 RMSprop(root mean square prop)

另一种抵消波动加快梯度下降的算法

利用 S 来更新参数

S d W = β 2 &ThinSpace; S d W + ( 1 − β 2 ) d W 2 W : = W − α &ThinSpace; S d W S d W + ε S d b = β 2 &ThinSpace; S d b + ( 1 − β 2 ) d b 2 b : = b − α &ThinSpace; S d b S d b + ε \begin{aligned} S_{dW} &amp;= \beta_2 \, S_{dW} + (1-\beta_2)dW^2 \\ W &amp;:= W -\alpha\,\frac{S_{dW}}{\sqrt{S_{dW}+\varepsilon}} \\ \\ S_{db} &amp;= \beta_2 \, S_{db} + (1-\beta_2)db^2 \\ b &amp;:= b -\alpha\,\frac{S_{db}}{\sqrt{S_{db}+\varepsilon}} \\ \end{aligned} SdWWSdbb=β2SdW+(1β2)dW2:=WαSdW+ε SdW=β2Sdb+(1β2)db2:=bαSdb+ε Sdb

  • 与 Momentum 区别:平方后的指数加权平均,更新参数时再开方
  • 为了与 Momentum 的参数 β \beta β ( β 1 \beta_1 β1) 相区分,这里使用 β 2 \beta_2 β2
  • ε \varepsilon ε 的出现是防止除数为0,一般 ε = 1 0 − 8 \varepsilon = 10^{-8} ε=108 即可

2.8 Adam 优化算法

Adam: adaptive moment estimation.

Adam = Momentum(表示第一距) + RMSprop(表示第二矩)

i n i t i a l i z a t i o n : &ThickSpace; V d w = 0 , V d b = 0 , S d W = 0 , S d b = 0 V d W = β 1 &ThinSpace; V d W + ( 1 − β 1 ) d W V d b = β 1 &ThinSpace; V d b + ( 1 − β 1 ) d b 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 S d W = β 2 &ThinSpace; S d W + ( 1 − β 2 ) d W 2 S d b = β 2 &ThinSpace; S d b + ( 1 − β 2 ) d b 2 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 W : = W − α &ThinSpace; 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 − α &ThinSpace; V d b c o r r e c t e d S d b c o r r e c t e d + ε \begin{aligned} initialization: \;&amp;V_{dw} = 0, V_{db} = 0, S_{dW} = 0, S_{db} = 0 \\ \\ V_{dW} &amp;= \beta_1 \, V_{dW} + (1-\beta_1)dW \\ V_{db} &amp;= \beta_1 \, V_{db} + (1-\beta_1)db \\ &amp;V_{dW}^{corrected} = \frac{V_{dW}}{1-\beta_1^t} \\ &amp;V_{db}^{corrected} = \frac{V_{db}}{1-\beta_1^t} \\ \\ S_{dW} &amp;= \beta_2 \, S_{dW} + (1-\beta_2)dW^2 \\ S_{db} &amp;= \beta_2 \, S_{db} + (1-\beta_2)db^2 \\ &amp;S_{dW}^{corrected} = \frac{S_{dW}}{1-\beta_2^t} \\ &amp;S_{db}^{corrected} = \frac{S_{db}}{1-\beta_2^t} \\ \\ W &amp;:= W -\alpha\,\frac{V_{dW}^{corrected}}{\sqrt{S_{dW}^{corrected}+\varepsilon}} \\ b &amp;:= b -\alpha\,\frac{V_{db}^{corrected}}{\sqrt{S_{db}^{corrected}+\varepsilon}} \end{aligned} initialization:VdWVdbSdWSdbWbVdw=0,Vdb=0,SdW=0,Sdb=0=β1VdW+(1β1)dW=β1Vdb+(1β1)dbVdWcorrected=1β1tVdWVdbcorrected=1β1tVdb=β2SdW+(1β2)dW2=β2Sdb+(1β2)db2SdWcorrected=1β2tSdWSdbcorrected=1β2tSdb:=WαSdWcorrected+ε VdWcorrected:=bαSdbcorrected+ε Vdbcorrected

超参数的选择
  • α \alpha α: 需要进行调试
  • β 1 \beta_1 β1: 推荐 0.9,dW 的加权平均
  • β 2 \beta_2 β2: 推荐 0.999, d W 2 dW^2 dW2 的加权平均
  • ε \varepsilon ε: 推荐 1 0 − 8 10^{-8} 108,防止除数为0

2.9 学习率衰减

我们采用 mini-batch 算法时,设置一个固定的学习率 α \alpha α, 由于样本缺失会造成一定幅度的波动,很难收敛,会在最低点附近波动。

如果设置一个较小的学习率,则起初下降太慢。

为了下降快起初学习率可以比较大,为了收敛学习率应该逐渐变小,这就是学习率衰减。

学习率衰减的实现

epoch: 一次样本的全集,多个 mini-batch

epoch_num: 第几次 epoch

  • 常用
    α = 1 1 + d e c a y _ r a t e ∗ e p o c h _ n u m &ThinSpace; α 0 \alpha = \frac{1}{1+decay\_rate*epoch\_num}\,\alpha_0 α=1+decay_rateepoch_num1α0

  • 指数衰减
    α = 0.9 5 e p o c h _ n u m &ThinSpace; α 0 \alpha = 0.95^{epoch\_num}\,\alpha_0 α=0.95epoch_numα0

  • 其他
    α = k e p o c h _ n u m &ThinSpace; α 0 \alpha = \frac{k}{epoch\_num}\,\alpha_0 α=epoch_numkα0

  • 离散衰减
    α = 1 2 α 0 \alpha = \frac{1}{2} \alpha_0 α=21α0

  • 手动衰减

    • 数据量小时,感觉下降慢了,自己手动修改 α \alpha α

2.10 局部最优的问题

低维情况下可能出现多个极小值,也就是局部最优解。

高维情况下出现极小值的概率很小,因为极小值要求每个参数的导数在这里都是极小值,比如20000维,导数为0时都是极小值的概率很小 2 − 20000 2^{-20000} 220000,更大可能出现部分极小值部分极大值的情况,我们称为鞍点。

  • 几乎不可能陷入局部最小值点,更多是鞍点
  • 处于鞍点的平稳区会减缓梯度下降速度,利用 Adam 等算法可以得到改善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值