Deeplearning.ai学习笔记-改善深层神经网络(三)-梯度下降优化


前言

这次学习的主题是深度学习,学习的第一门课程就是吴恩达的Deeplearning.ai项目课程。此系列笔记也是根据该深度学习课程整理而成。
该系列笔记是该课程中重点知识的罗列和自己的一些理解,可供正在学习此课程的同学作为参考,也是方便自己日后复习使用。
学习本课程需要有一点python基础、懂得Numpy库的基础使用,有高中的数学基础、懂得一点点矩阵、向量知识大致就可以了。这些知识可以到吴恩达的机器学习课程学习。

关于本篇笔记:这篇笔记是深度学习课程中第二课《改善深层神经网络》的第三篇笔记,主要是梯度下降的优化算法

梯度下降的优化算法

神经网络中对梯度下降的优化是很重要的一步!本篇笔记主要是从mini-batch、优化偏导数的算法、学习率这三个层面去优化梯度下降。优化偏导数的算法又具体分为Momentum、RMSprop和Adam。

优化基础知识

Exponentially weighted averages指数加权平均数

Deeplearning.ai学习笔记-改善深层神经网络(三)-梯度下降优化

这是其中一个计算平均数比较好的方法。V_t计算了前1/(1-\beta)的平均值。
因为当到了前面第1/(1-\beta)个时,它的权重减到了1/e,如果权重再低的话就不精确了。
它的弊端是:显然计算平均值的精确度没有直接累计和除以个数的方法精确
它的优势是:在计算过程中只用了一个变量不断覆盖,计算效率高

Deeplearning.ai学习笔记-改善深层神经网络(三)-梯度下降优化

偏差修正

Deeplearning.ai学习笔记-改善深层神经网络(三)-梯度下降优化

因为当在计算初期的几个值,因为第一个v_0=0,所以刚开始的几个值与实际值偏差较大,所以可以用:

vt=vt1βt

这个偏差修正可以在初期的时候获得与实际值差不多的值,在后期正常化后因为分母接近1所以也等于没有。

所以如果比较关心初期的情况就要加偏差修正,如果不关注初期情况就没有必要加

mini-batch

当训练集非常大时,在进行梯度下降中,如果每一次等大量的数据处理完,进行一次梯度下降,如此迭代,将会花费大量时间。

我们可以把m个数据分为k个mini-batch
k=1:随机梯度下降 每个点都是单独的mini-batch
缺点:失去了向量化带来的加速。
k=m:batch梯度下降
缺点:迭代时间太长

合适选择k的方法:

  1. 如果训练集较小:直接使用batch梯度下降
  2. 训练集较大,一般使用64-512的值,而且是2的n次方。也就是说一般是:64 128 256 512

Momentum梯度下降

这个梯度下降算法就是利用了指数加权平均。
指数加权平均算平均有个明显的好处是如果你不事先知道这些数的情况,而是想在这些数出现的过程中不断的更新平均值,指数加权平均是个不错的方法。
Deeplearning.ai学习笔记-改善深层神经网络(三)-梯度下降优化

Momentum梯度下降在每次迭代时不是一味的用dw来梯度下降,而是用指数加权平均在不停的计算dw的平均值,刚开始可能误差较大(运动幅度不明显),但是过了初期后将会明显的向理想最低点运动(不会向原来的梯度下降摆动幅度较大)

RMSprop

RMSprop和Momentum类似都运用了指数加权平均,它们的目的是减缓梯度下降时的不必要的摆动,从而让点更高效的向最低点移动。
同时在减缓了摆动之后也可以加大学习率来更快的移动。

RMSprop的思想是在使用原来的梯度下降的基础上对dw、db进行一些处理。
对于不想让其摆动的方向,如下图的db,就让db在梯度下降方程中除以一个较大的值,让db的更新非常有限。
对于想让其摆动的方向,如下图的dw,就让dw在梯度下降方程中除以一个较小的值,让dw的更新幅度加大。

而这个除的较大的值和较小的值就是指数加权平均的微变形:

Sdw=βSdw+(1β)dw2

Sdb=βSdb+(1β)db2

Deeplearning.ai学习笔记-改善深层神经网络(三)-梯度下降优化

Adam

Adam optimization algorithm

Adam算法就是结合了Momentum和RMSprop。具体过程见下图:Deeplearning.ai学习笔记-改善深层神经网络(三)-梯度下降优化

Adam算法中有许多超参数,如下:

Deeplearning.ai学习笔记-改善深层神经网络(三)-梯度下降优化

后三个基本都是图中默认的值,很少改变。
而最需要调整的就是学习率

学习率衰减

learning rate decay
为什么要学习率衰减?
因为刚开始的时候需要较大幅度的移动来更快的移向最低点。而当靠近最低点的时候需要学习率较低,避免幅度过大导致无法在最低点收敛。

学习率衰减有许多方法:大致分为利用epoch迭代次数来降低、手动降低、离散下降
Deeplearning.ai学习笔记-改善深层神经网络(三)-梯度下降优化

Deeplearning.ai学习笔记-改善深层神经网络(三)-梯度下降优化

前几行属于利用epoch迭代次数来降低
倒数第二行属于离散下降
最后一行的属于手动调整降低

局部最优的问题

什么是局部最优?
局部最优是在一个点各个维度方向梯度都为0,这就使得在该点梯度下降算法会结束。但是这个点又不是全局最低点。所以这个点就叫做局部最优点。

在梯度下降中不必担心如果出现局部最优问题。因为在深度学习里,大部分情况都是在高纬空间里,里面有大量的参数(高纬度),几乎不可能出现所有维度同时梯度为0的局部最优情况。
Deeplearning.ai学习笔记-改善深层神经网络(三)-梯度下降优化

更多的情况是这种马鞍情况,也就是部分维度梯度为0。在这种马鞍点下会使梯度下降速度变慢,这也是Adam等算法发挥作用明显的地方。