【吴恩达深度学习笔记】2.2 优化算法Optimization algorithms

第二门课 改善深层神经网络:超参数调试、正则化以及优化(Improving Deep Neural Networks:Hyperparameter tuning,Regularization and Optimization)

2.1Mini-batch梯度下降(Mini-batch gradient descent)

优化算法将加快神经网络的运行,加快训练模型。深度学习没有在大数据领域发挥最大的效果,我们可以利用一个巨大的数据集训练神经网络,但这样训练速度很慢,使用快速的优化算法可以大大提高效率。

把训练集分割成小一点的子集训练,这些子集取名为mini-batch。若有500万个样本的训练集,每个子集中只有1000个样本,把 x ( 1 ) x^{(1)} x(1) x ( 1000 ) x^{(1000)} x(1000)取出称为第一个子训练集即mini-batch,称为 X { 1 } X^{\{1\}} X{1} x ( 1001 ) x^{(1001)} x(1001) x ( 2000 ) x^{(2000)} x(2000)称为 X { 2 } X^{\{2\}} X{2},直到 X { 5000 } X^{\{5000\}} X{5000} Y Y Y也做同样的处理,把 y ( 1 ) y^{(1)} y(1) y ( 1000 ) y^{(1000)} y(1000)称为 Y { 1 } Y^{\{1\}} Y{1},直到 Y { 5000 } Y^{\{5000\}} Y{5000}。mini-batch的数量 t t t组成了 X { t } X^{\{t\}} X{t} Y { t } Y^{\{t\}} Y{t} X { t } X^{\{t\}} X{t} Y { t } Y^{\{t\}} Y{t}的维数分别为 ( n x , 1000 ) (n_x,1000) (nx,1000) ( 1 , 1000 ) (1,1000) (1,1000)

batch梯度下降法即之前讲的梯度下降算法,指同时处理全部 X X X Y Y Y训练集,mini-batch梯度下降法每次同时处理单个的mini-batch X { t } X^{\{t\}} X{t} Y { t } Y^{\{t\}} Y{t}。mini-batch梯度下降(在单个mini-batch上计算)的一次迭代快于梯度下降的迭代。如果你有一个丢失的训练集,mini-batch梯度下降法比batch梯度下降法运行地更快。注意:矢量化不适用于同时计算多个mini-batch。

在训练集上运行mini-batch梯度下降法,运行 f o r   t   i n   r a n g e ( 1 , 5000 ) for\space t \space in\space range(1,5000) for t in range(1,5000),每次处理1000个样本,因为子集的规模是1000,在for循环中对 X { t } X^{\{t\}} X{t} Y { t } Y^{\{t\}} Y{t}执行一步梯度下降法:

i n p u t :   X { t } = A [ 0 ] input:\space X^{\{t\}}=A^{[0]} input: X{t}=A[0]

前向传播( l ∈ [ 1 , l ] l\in [1,l] l[1,l]):

Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ] Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]} Z[l]=W[l]A[l1]+b[l]

A [ l ] = g [ l ] ( Z [ l ] ) A^{[l]}=g^{[l]}(Z^{[l]}) A[l]=g[l](Z[l])

运用正则化计算成本函数 J J J L ( y ^ ( i ) , y ( i ) ) L(\hat y^{(i)},y^{(i)}) L(y^(i),y(i))指来自 X { t } X^{\{t\}} X{t} Y { t } Y^{\{t\}} Y{t}的样本):

J { t } = 1 1000 ∑ i = 1 l L ( y ^ ( i ) , y ( i ) ) + λ 2 ∗ 1000 ∑ l ∥ w [ l ] ∥ F 2 J^{\{t\}}=\frac{1}{1000}\sum^l_{i=1}L(\hat y^{(i)},y^{(i)})+\frac{\lambda}{2*1000}\sum_l\|w^{[l]}\|^2_F J{t}=10001i=1lL(y^(i),y(i))+21000λlw[l]F2

反向传播计算 J { t } J^{\{t\}} J{t}梯度

更新参数:

W [ l ] : = W [ l ] − α d W [ l ] W^{[l]}:=W^{[l]}-\alpha dW^{[l]} W[l]:=W[l]αdW[l]

b [ l ] : = b [ l ] − α d b [ l ] b^{[l]}:=b^{[l]}-\alpha db^{[l]} b[l]:=b[l]αdb[l]

2.2理解Mini-batch梯度下降法(Understanding Mini-batch gradient descent)

在这里插入图片描述
使用mini-bratch梯度下降法并不是每次迭代都是下降的,成本函数 J { t } J^{\{t\}} J{t}只和 X { t } X^{\{t\}} X{t} Y { t } Y^{\{t\}} Y{t}有关,每次迭代都在训练不同的样本集或者说是训练不同的mini-bratch,其成本函数图像整体走向朝下,但是存在噪声。

需要确定mini-bratch的大小, m m m为训练集大小,极端情况下

  • 若mini-bratch=m,即bratch梯度下降法,其成本函数曲线相对噪声小,下降幅度大,若训练样本大,单次迭代耗时长。
  • 若mini-bratch=1,称为随机梯度下降法,每个样本都是独立的mini-bratch,其成本函数曲线存在很多噪声,最终会靠近最小值,有时也会方向错误,永远无法收敛。通过减小学习速率,噪声会有所减小,整体效率低。

实际要取合适的mini-bratch尺寸,若训练集很小(m<2000)直接使用batch梯度下降法,若训练集很大,一般取mini-bratch为64到512,是2的 n n n次方。

2.3指数加权平均数(Exponentially weighted averages)

加权平均数: v t = β v t − 1 + ( 1 − β ) θ t v_t=\beta v_{t-1}+(1-\beta)\theta_t vt=βvt1+(1β)θt,其中 β \beta β是超参数, θ t \theta_t θt是新加入的数据, v t − 1 v_{t-1} vt1是上一个加权平均数。计算时可视 v t v_t vt 1 ( 1 − β ) \frac{1}{(1-\beta)} (1β)1的平均数,如 β = 0.9 \beta=0.9 β=0.9,这是十个数据的平均值,若 β \beta β增大,平均数据曲线会波动很小,更加平坦。因为 β \beta β增大相当于给之前的数据加了太多权重。统计学中指数加权平均数被称为指数加权移动平均数。

下图中蓝色点代表数据,当 β = 0.98 \beta=0.98 β=0.98时均值曲线为绿线,当 β = 0.9 \beta =0.9 β=0.9时均值曲线为红线,当 β = 0.5 \beta=0.5 β=0.5时均值曲线为黄线。在这里插入图片描述

2.4理解指数加权平均数(Understanding exponentially weighted averages)

β = 0.9 \beta=0.9 β=0.9,有下列公式: v 100 = 0.9 v 99 + 0.1 θ 100 v_{100}=0.9v_{99}+0.1\theta_{100} v100=0.9v99+0.1θ100

v 99 = 0.9 v 98 + 0.1 θ 99 v_{99}=0.9v_{98}+0.1\theta_{99} v99=0.9v98+0.1θ99

v 98 = 0.9 v 97 + 0.1 θ 98 v_{98}=0.9v_{97}+0.1\theta_{98} v98=0.9v97+0.1θ98

⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ······

v 100 v_{100} v100展开: v 100 = 0.1 θ 100 + 0.1 × 0.9 θ 99 + 0.1 × ( 0.9 ) 2 θ 98 + 0.1 × ( 0.9 ) 3 θ 97 + . . . v_{100}=0.1\theta_{100}+0.1×0.9\theta_{99}+0.1×(0.9)^2\theta_{98}+0.1×(0.9)^3\theta_{97}+... v100=0.1θ100+0.1×0.9θ99+0.1×(0.9)2θ98+0.1×(0.9)3θ97+...

这些 θ \theta θ之前的所有系数相加为1或者逼近1,称为偏差修正

0. 9 10 ≈ 0.35 ≈ 1 e 0.9^{10}\approx0.35\approx\frac{1}{e} 0.9100.35e1 β 1 1 − β ≈ 1 e \beta^{\frac{1}{1-\beta}}\approx\frac{1}{e} β1β1e1,通过10个数据,曲线的高度下降到相当于峰值的 1 e \frac{1}{e} e1

实际执行中,要将 v θ v_\theta vθ初始化为0,然后拿到第 t t t个数据,把 v v v更新为 v : = β v θ + ( 1 − β ) θ t v:=\beta v_{\theta}+(1-\beta)\theta_t v:=βvθ+(1β)θt

指数加权平均数公式的新数据代入公式进行覆盖,所有其占用极少内存,但是需要保存所有最近的数据和过去数据的总和就要占用更多的内存,执行更加复杂,计算成本也更高。

2.5指数加权平均的偏差修正(Bias correction in exponentially weighted averages)

偏差修正可以让平均数运算更加准确。由于初始化时 v 0 = 0 v_0=0 v0=0,导致 v 1 = ( 1 − β ) θ 1 v_1=(1-\beta)\theta_1 v1=(1β)θ1,得到的数会小很多,前几个数据估测不准。

在估测初期,使用 v t 1 − β t \frac{v_t}{1-\beta^t} 1βtvt代替 v t v_t vt。例如第二个数据的估测值为 v 2 1 − β 2 = β ( 1 − β ) θ 1 + ( 1 − β ) θ 2 1 − β 2 \frac{v_2}{1-\beta^2}=\frac{\beta(1-\beta)\theta_1+(1-\beta)\theta_2}{1-\beta^2} 1β2v2=1β2β(1β)θ1+(1β)θ2,也即 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2的加权平均数,并去除了偏差。随着 t t t的增大, β t \beta^t βt接近0,所以当 t t t很大时,偏差修正基本没作用。

机器学习中大部分人不在乎初期得到偏差的估测,继续计算后面部分,若你关注初期时的偏差可以使用偏差修正。

2.6动量梯度下降法(Gradient descent with Momentum)

动态梯度下降算法(Momentem)运行速度总是快于标准的梯度下降法,基本思想是计算梯度的指数加权平均数,利用该梯度更新权重。
在这里插入图片描述

假如你想优化成本函数,函数形状如图,红点表示最小值位置,利用梯度下降法的得到蓝色曲线,上下波动减慢了梯度下降的速度。若使用较大的学习率得到紫色曲线,结果可能会偏离函数范围。为了避免摆动过大需要使用较小的学习率。而我们想纵轴上使用小的学习率减小摆动,横轴上使用大的学习率加快学习,由此使用动量梯度下降法。
在这里插入图片描述

2.7均方根(RMSprop)

RMSprop(root mean square prop)算法可以加速梯度下降。实现步骤: S d W = β S d W + ( 1 − β ) d W 2 S_{dW}=\beta S_{dW}+(1-\beta)dW^2 SdW=βSdW+(1β)dW2

S d b = β S d b + ( 1 − β ) d b 2 S_{db}=\beta S_{db}+(1-\beta)db^2 Sdb=βSdb+(1β)db2

W : = W − α d W S d W W:=W-\alpha\frac{dW}{\sqrt{S_{dW}}} W:=WαSdW dW

b : = b − α d b S d b b:=b-\alpha\frac{db}{\sqrt{S_{db}}} b:=bαSdb db

其中 d W 2 dW^2 dW2 d b 2 db^2 db2是指对整个微分进行平方

2.8Adam优化算法(Adam optimization algorithm)

Adam(Adaptive Moment Estimation)优化算法将MomentumRMSprop结合起来。

初始化: 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 t t次迭代中,使用当前的mini-bratch计算 d W , d b dW,db 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_1v_{dW}+(1-\beta_1)dW,\space v_{db}=\beta_1v_{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,\space S_{db}=\beta_2 S_{db}+(1-\beta_2)db^2 SdW=β2SdW+(1β2)dW2, Sdb=β2Sdb+(1β2)db2

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^{corrected}_{dW}=\frac{v_{dW}}{1-\beta_1^t},\space v^{corrected}_{db}=\frac{v_{db}}{1-\beta_1^t} vdWcorrected=1β1tvdW, vdbcorrected=1β1tvdb

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^{corrected}_{dW}=\frac{S_{dW}}{1-\beta_2^t},\space S^{corrected}_{db}=\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^{corrected}_{dW}}{\sqrt{S^{corrected}_{dW}+\epsilon}},\space b:=b-\alpha\frac{V^{corrected}_{db}}{\sqrt{S^{corrected}_{db}+\epsilon}} W:=WαSdWcorrected+ϵ VdWcorrected, b:=bαSdbcorrected+ϵ Vdbcorrected

Momentum β 1 \beta_1 β1的缺省值为0.9,这是 d W dW dW的移动加权平均值(第一矩)

Adam β 2 \beta_2 β2的缺省值为0.999,这是 d W 2 dW^2 dW2 d b 2 db^2 db2的移动加权平均值(第二矩)

ϵ \epsilon ϵ取值多少不重要,通常为 1 0 − 8 10^{-8} 108

2.9学习率衰减(Learning rate decay)

学习率衰减可以加快学习算法,指随时间慢慢减少学习率。慢慢减少 α \alpha α的本质在于,在学习初期能承受较大的步伐,但当开始收敛的时候小一些的学习率能让步伐小一些。

α = 1 1 + d e c a y r a t e ∗ e p o c h n u m α 0 \alpha=\frac{1}{1+decayrate*epochnum}\alpha_0 α=1+decayrateepochnum1α0

decay-rate为衰减率,是超参数,epoch-num为代数, α 0 \alpha_0 α0为初始学习率。

其他学习率衰减方法:

  • 指数衰减 α = 0.9 5 e p o c h − n u m α 0 \alpha=0.95^{epoch-num}\alpha_0 α=0.95epochnumα0
  • α = k e p o c h − n u m \alpha=\frac{k}{\sqrt{epoch-num}} α=epochnum k
  • α = k t α 0 \alpha=\frac{k}{\sqrt{t}}\alpha_0 α=t kα0 t t t为mini-bratch的数字)
  • 离散下降(discrete stair cease)的学习率:一段时间后学习率减少一半,一段时间后又减少一半,一段时间后又减少一半

2.10局部最优的问题(The problem local optima)

在这里插入图片描述
灵魂画家哈哈哈哈:
在这里插入图片描述
事实上你不太可能困在极差的局部最优中,条件是你在训练较大的神经网络,存在大量参数,并且成本函数被定义在较高的维度空间。

平稳段是一个问题,这样使得学习十分缓慢,这也是像Momentum或是RMSprop,Adam这样的算法,能够加速学习算法的地方。在这些情况下,更成熟的优化算法,如Adam算法,能够加快速度尽早往下走出平稳段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值