吴恩达 深度学习系列--改善深层神经网络(2、优化算法)--05

改善深层网络之优化算法

1.Mini-batch 梯度下降(Mini-batch gradient descent)

  • 概念说明:随机梯度下降(Stochastic gradient descent):每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。
  • Batch 梯度下降(Batch gradient descent):遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。
  • Mini-batch 梯度下降(Mini-batch gradient descent):为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,一般取8,16,32,64,128,256,512,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。
    参考链接:https://blog.csdn.net/weixin_39502247/article/details/80032487
    看一下直观效果对比:
    在这里插入图片描述在这里插入图片描述

2.指数加权平均(exponentially weighted averges)

  • 指数加权平均(exponentially weighted averges),也叫指数加权移动平均,是一种常用的序列数据处理方式。

以吴恩达老师上课的例子说明:

在这里插入图片描述
直接看上面的数据图会发现噪音很多,这时,我们可以用 指数加权平均 来提取这组数据的趋势

1.计算公式: Vt​=βVt−1​+(1−β)θt
(1) Vt​表示计算的当天平均气温,Vt−1表示计算的前一天平均气温,θt​表示数据里当天气温值。
(2)β表示权值,一般取0.9。
(3)Vt​即计算的当天平均气温,β取0.9时,它近似了1/(1−β)=10 天的平均气温。

将计算后得到的 V_t 表示出来,就得到红色线的数值:
在这里插入图片描述
2.结论:可以看出,红色的数据比蓝色的原数据更加平滑,少了很多噪音,并且刻画了原数据的趋势。指数加权平均,作为原数据的估计值,不仅可以 1. 抚平短期波动,起到了平滑的作用,2. 还能够将长线趋势或周期趋势显现出来。

这里可以看出,V_t 是对每天温度的加权平均,之所以称之为指数加权,是因为加权系数是随着时间以指数形式递减的,时间越靠近,权重越大,越靠前,权重越小。

3.指数加权平均的数学原理:
在这里插入图片描述
大家可以参考这个朋友的简书,条例清晰,值得借鉴:
https://www.jianshu.com/p/41218cb5e099?utm_source=oschina-app

4.指数加权平均的偏差修正
偏差修正,可以让平均数运算更加准确。
在这里插入图片描述
有个办法可以修改这一估测,让估测变得更好,更准确,特别是在估测初期,也就是不用Vt,而用Vt/(1-βt),t就是现在的天数。你会发现随着t增加,接近于0,所以当t很大的时候,偏差修正几乎没有作用,在计算指数加权平均数的大部分时候,大家不在乎执行偏差修正,因为大部分人宁愿熬过初始时期,拿到具有偏差的估测,然后继续计算下去。如果你关心初始时期的偏差,在刚开始计算指数加权移动平均数的时候,偏差修正能帮助你在早期获取更好的估测。

3.动量梯度下降法(gradient descent with Momentum)

动量梯度下降法,运行速度几乎总是快于标准的梯度下降算法,简而言之,基本的想法就是计算梯度的指数加权平均数,并利用该梯度更新你的权重。
1.效果图:
蓝色表示常规的梯度下降算法,红色则是动量梯度下降法。在这里插入图片描述
2.具体算法:
在这里插入图片描述
所以你有两个超参数,学习率α以及参数β,β控制着指数加权平均数。β最常用的值是0.9。关于偏差修正,所以你要拿和除以,实际上人们不这么做,因为10次迭代之后,因为你的移动平均已经过了初始阶段。实际中,在使用梯度下降法或动量梯度下降法时,人们不会受到偏差修正的困扰。当然也可以把偏差修正加入其中,两者的效果都不错。

4.RMSprop(root mean square prop)

RMSProp使用指数衰减平均以丢弃遥远过去的历史,使其能够在找到凸碗装结构后快速收敛。–花书(p188)
算法:在这里插入图片描述
RMSProp算法对梯度计算了微分平方加权平均数。这种做法有利于消除了摆动幅度大的方向,用来修正摆动幅度,使得各个维度的摆动幅度都较小。另一方面也使得网络函数收敛更快。
要确保你的算法不会除以0,如果Sdw的平方根趋近于0怎么办?得到的答案就非常大,为了确保数值稳定,在实际操练的时候,你要在分母上加上一个很小很小的ε,ε是多少没关系,10-8是个不错的选择,这只是保证数值能稳定一些,无论什么原因,你都不会除以一个很小很小的数。所以RMSprop跟Momentum有很相似的一点,可以消除梯度下降中的摆动,包括mini-batch梯度下降,并允许你使用一个更大的学习率α,从而加快你的算法学习速度。

5.Adam 优化算法(Adam optimization algorithm)

有了上面两种优化算法,一种可以使用类似于物理中的动量来累积梯度,另一种可以使得收敛速度更快同时使得波动的幅度更小。那么讲两种算法结合起来所取得的表现一定会更好。Adam(Adaptive Moment Estimation)算法是将Momentum算法和RMSProp算法结合起来使用的一种算法。
1.算法:
在这里插入图片描述所以Adam算法结合了Momentum和RMSprop梯度下降法,并且是一种极其常用的学习算法,被证明能有效适用于不同神经网络,适用于广泛的结构。
2.超参数的选择:
本算法中有很多超参数,超参数α很重要,也经常需要调试,你可以尝试一系列值,然后看哪个有效。
超参数β1常用的缺省值为0.9,这是dW的移动平均数,也就是dW的加权平均数,这是Momentum涉及的项。
超参数β2Adam论文作者,也就是Adam算法的发明者,推荐使用0.999。这是在计算(dw)2以及(db)2的移动加权平均值。
关于ε,Adam论文的作者建议为10-8,但你并不需要设置它,因为它并不会影响算法表现。
为什么这个算法叫做Adam?Adam代表的是Adaptive Moment Estimation,β1用于计算这个微分(dw),叫做第一矩,β2用来计算平方数的指数加权平均数(dw)2,叫做第二矩,所以Adam的名字由此而来。

以上三种优化算法,大家可这个朋友的参考这篇博客:https://blog.csdn.net/willduan1/article/details/78070086

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

加快学习算法的一个办法就是随时间慢慢减少学习率,我们将之称为学习率衰减。慢慢减少学习率α的话,在初期的时候,学习率还较大,你的学习还是相对较快,但随着α变小,你的步伐也会变慢变小。所以慢慢减少的本质在于,在学习初期,你能承受较大的步伐,但当开始收敛的时候,小一些的学习率能让你步伐小一些。
学习率衰减的几种方法:
(1) α=α0/(1+decay_rate*epoch_num)
(2)α=α0 * (0.95epoch_num)
(3)α=α0 * k/epoch_num0.5 或者α0 * k/t0.5
(4)离散衰减
(5)手动衰减

7.局部最有问题(The problem of local optima)

在这里插入图片描述
如果你要创建一个神经网络,通常梯度为零的点并不是这个图中的局部最优点,实际上成本函数的零梯度点,通常是鞍点平稳段会减缓学习,平稳段是一块区域,其中导数长时间接近于0,如果你在此处,梯度会从曲面从从上向下下降,因为梯度等于或接近0,曲面很平坦,你得花上很长时间慢慢抵达平稳段的这个点。首先,你不太可能困在极差的局部最优中,条件是你在训练较大的神经网络,存在大量参数,并且成本函数J被定义在较高的维度空间。第二点,平稳段是一个问题,这样使得学习十分缓慢,这也是像Momentum或是RMSprop,Adam这样的算法,能够加速学习算法的地方。在这些情况下,更成熟的优化算法,如Adam算法,能够加快速度,让你尽早往下走出平稳段。
看一道例题:
在这里插入图片描述

作业链接:

https://gitee.com/saohuogun/wuendashenduxuexikechengzuoye/blob/master/02-%E4%BC%98%E5%8C%96%E7%AE%97%E6%B3%95%20%E7%BC%96%E7%A8%8B%E4%BD%9C%E4%B8%9A.zip

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值