小奥的学习笔记

  • Home
  • Learning & Working
    • Speech Enhancement Notes
    • Programming language
    • Computer & DL
    • MOOC
  • Life
    • Life Time
    • Thinking & Comprehension
    • Volunteer
    • Plan
    • Travel
  • Footprints
  • GuestBook
  • About
    • About Me
    • 个人履历
    • 隐私策略
  1. 首页
  2. Study-notes
  3. Computer & DL
  4. Deep Learning
  5. 正文

吴恩达深度学习课程DeepLearning.ai笔记(2-2)

2018年2月11日 1553点热度 0人点赞 0条评论

1. Mini-batch 梯度下降法

对整个训练集进行梯度下降法的时候,我们必须处理整个训练数据集,然后才能进行一步梯度下降,即每一步梯度下降法需要对整个训练集进行一次处理,如果训练数据集很大的时候,处理速度就会非常慢。如果我们每次训练的时候只训练一小部分,则我们的算法速度会执行的更快。而处理的这些一小部分训练子集即称为Mini-batch。

整个算法的过程如图所示:

1518336484130087.jpg

图1

接下来对不同size情况下性能进行比较:

(1)batch梯度下降: 

·        对所有m个训练样本执行一次梯度下降,每一次迭代时间较长;

·        Cost function 总是向减小的方向下降。

(2)随机梯度下降: 

·        对每一个训练样本执行一次梯度下降,但是丢失了向量化带来的计算加速;

·        Cost function总体的趋势向最小值的方向下降,但是无法到达全局最小值点,呈现波动的形式。

(3)Mini-batch梯度下降: 

·        选择一个1<size<m 的合适的size进行Mini-batch梯度下降,可以实现快速学习,也应用了向量化带来的好处。

·        Cost function的下降处于前两者之间。

Mini-batch大小选择原则:

(1)如果训练集比较小(≤2000),可以采用batch算法。

(2)训练集比较大(如)时可采用mini-batch。

(3)mini-batch选择应该符合CPU/GPU的性能要求。

2. 指数加权平均

指数加权平均的关键函数:

设当前参数为:θ1,θ2,…, θt,则:

vt=βvt−1+(1−β)θt

当β=0.9时,指数加权平均最后的结果如图2中红色线所示;

当β=0.98时,指数加权平均最后的结果如图2中绿色线所示;

当β=0.5时,指数加权平均最后的结果如下图2中黄色线所示。

1518336568122890.jpg

图2

在计算当前时刻的平均值,只需要前一天的平均值和当前时刻的值,所以在数据量非常大的情况下,指数加权平均在节约计算成本的方面是一种非常有效的方式,可以很大程度上减少计算机资源存储和内存的占用。

指数加权平均的偏差修正

在我们执行指数加权平均的公式时,当β=0.98时,我们得到的并不是图3中的绿色曲线,而是下图中的紫色曲线,其起点比较低。

原因:

v0=0v1=0.98v0+0.02θ1=0.02θ1v2=0.98v1+0.02θ2=0.98×0.02θ1+0.02θ2=0.0196θ1+0.02θ2

如果第一天的值为如40,则得到的v1=0.02×40=8,则得到的值要远小于实际值,后面几天的情况也会由于初值引起的影响,均低于实际均值。

1518336613102055.jpg

图3

为了解决这个问题,我们可以做以下修正:

使用vt/(1−βt)

在使用偏差修正后我们得到了绿色的曲线,在初始阶段,由于有了偏差修正,所以能够得到比原来图像更好的结果。随着t逐渐增大,βt接近于0,即分母接近于1,所以后面绿色的曲线和紫色的曲线逐渐重合了。

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

动量梯度下降的基本思想与指数加权平均类似,但是它是计算梯度的指数加权平均数,并利用该梯度来更新权重。

我们在利用动量梯度下降法来最小化函数时,每一次迭代都是一种上下波动,如果无法做好限制,就会出现幅度比较大,这会降低梯度下降进行的速度。

我们希望我们的梯度下降能够在纵轴方向缓慢一点,横轴上速度快一点,这里我们就可以采用动量梯度下降算法就可以实现这个目的。

算法的过程如下所示:

On iteration t:

Compute dw, db on the current mini-batch

vdW= βvdW+1-βdW

vdb = βvdb + 1 -βdb

W = WavdW, b=b-avdb

这里我们用到的超参数有α和β,其中β=0.9。


4. RMSprop

除去上面的动量梯度下降算法,还有一种叫做RMSprop算法可以加快梯度下降,这个算法类似于上面的算法。

该算法计算过程如图4所示。

1518336685103477.jpg

图4

可以看出来,这个算法确实类似于3中的算法,只不过是在每一步中的dw和db都分别做了平方,然后在最后减去的时候也做了处理。

5. Adam 优化算法

Adam 优化算法就是将 Momentum 和 RMSprop 结合起来形成的一种适用于不同深度学习结构的优化算法。

其算法过程如下所示,在这里借助参考文章里面的书写来表示:

1518336713700303.jpg

图5

这里面用到的超参数如下:

α:需要调试

β1& β2:可以调试,但是一般不用调试,β1默认为0.9,β2默认为0.999

ε推荐值为10-8

6. 学习率衰减

要实现学习率衰减,有以下几种方法:

(1)α=(1/1+decay_rate*epoch_num)·α0

(2)α=0.95epoch_num·α0

(3)α=(k/epoch_num)·α0

(4)离散下降

7. 局部最优问题

在低维度的情形下,我们可能会想象到一个Cost function 如左图所示,存在一些局部最小值点,在初始化参数的时候,如果初始值选取的不得当,会存在陷入局部最优点的可能性。

但是,实际上如果我们建立一个神经网络,由于维度较高,通常梯度为零的点并不是如左图中的局部最优点,而是右图中的鞍点。

1518336755390158.jpg

图6

我们这样考虑,假设参数维度为2000。那么,若是局部最优点,则要求在该点所有参数都必须是凹函数的凹点,概率为0.52000,所以概率非常低。故在高维度情况下,梯度为0多位鞍点。

在高维度情况下,若要解决这个问题,可以利用如Adam等算法进行改善。


本笔记基于DEEPLEARNING.AI中Andrew Ng课程笔记整理而成,部分内容参考了http://blog.csdn.net/koala_tree/article/details/78199611内容,在此对其表示感谢~

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 人工智能 吴恩达 神经网络
最后更新:2018年2月11日

davidcheung

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

搜索
欢迎关注我的个人公众号
最新 热点 随机
最新 热点 随机
DEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架 奥地利匈牙利九日游旅程 论文阅读之Study of the General Kalman Filter for Echo Cancellation 小奥看房之鸿荣源珈誉府 杭州往返旅途及西溪喜来登和万怡的体验报告 2022年的第一篇碎碎念
奥地利匈牙利九日游旅程小奥看房之鸿荣源珈誉府论文阅读之Study of the General Kalman Filter for Echo CancellationDEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架
WordPress风格—Brown World(个人修改版) 计算机组成原理笔记第二章 吴恩达深度学习课程 DeepLearning.ai 编程作业(2-1)Part.2 A very interesting View 初四第一次月考技术分析 An English eBooks download website
标签聚合
高中 生活 鸟哥的linux私房菜 Java Python 算法 python学习 linux 学习 leetcode
最近评论
davidcheung 发布于 5 个月前(02月09日) The problem has been fixed. May I ask if you can s...
tk88 发布于 5 个月前(02月07日) Hmm is anyone else having problems with the pictur...
cuicui 发布于 8 个月前(10月20日) :wink:
niming 发布于 10 个月前(09月19日) 同级校友,能刷到太巧了
davidcheung 发布于 2 年前(08月16日) 我得找一下我之前整理的word文档看一下,如果找到了我就更新一下这篇文章。
Nolan 发布于 2 年前(07月25日) 您的笔记非常有帮助。贴图不显示了,可以更新一下吗?
davidcheung 发布于 3 年前(06月19日) 到没有看webrtc的代码。现在主要在看我们公司的代码了。。。只是偶尔看一看webrtc的东西。。。
aobai 发布于 3 年前(03月13日) gain_change_hangover_ 应该是每三个block 只能够调整一次,这样保证每帧...
匿名 发布于 5 年前(12月30日) 烫
小奥 发布于 5 年前(12月12日) webRTC里面的NS本身我记得就是在C++里面呀

COPYRIGHT © 2025 小奥的学习笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19003234号-1

鲁公网安备37120202000100号