学习目标
- 目标
- 了解深度学习遇到的一些问题
- 知道批梯度下降与MiniBatch梯度下降的区别
- 知道指数加权平均的意义
- 知道动量梯度、RMSProp、Adam算法的公式意义
- 知道学习率衰减方式
- 知道参数初始化策略的意义
- 应用
- 无
深度学习难以在大数据领域发挥最大效果的一个原因是,在巨大的数据集基础上进行训练速度很慢。而优化算法能够帮助我们快速训练模型,提高计算效率。接下来我么就去看有哪些方法能够解决我们刚才遇到的问题或者类似的问题
2.2.1 优化遇到的问题
- 梯度消失
- 局部最优
2.2.1.1 梯度消失
在梯度函数上出现的以指数级递增或者递减的情况分别称为梯度爆炸或者梯度消失。
假设g(z) = z, b^{[l]} = 0g(z)=z,b[l]=0,对于目标输出有:\hat{y} = W^{[L]}W^{[L-1]}...W^{[2]}W^{[1]}Xy^=W[L]W[L−1]...W[2]W[1]X
- 对于W^{[l]}W[l]的值大于 1 的情况,激活函数的值将以指数级递增;
- 对于W^{[l]}W[l]的值小于 1 的情况,激活函数的值将以指数级递减。
在计算梯度时,根据不同情况梯度函数也会以指数级递增或递减,导致训练导数难度上升,梯度下降算法的步长会变得非常小,需要训练的时间将会非常长。
2.2.1.2 局部最优
鞍点(saddle)是函数上的导数为零,但不是轴上局部极值的点。通常梯度为零的点是上图所示的鞍点,而非局部最小值。减少损失的难度也来自误差曲面中的鞍点,而不是局部最低点。
- 在训练较大的神经网络、存在大量参数,并且成本函数被定义在较高的维度空间时,困在极差的局部最优基本不会发生
- 鞍点附近的平稳段会使得学习非常缓慢,而这也是需要后面的动量梯度下降法、RMSProp 以及 Adam 优化算法能够加速学习的原因,它们能帮助尽早走出平稳段。
解决办法有多种形式,通常会结合一些形式一起进行
- 初始化参数策略(第一部分第四节提到)
- Mini梯度下降法
- 梯度下降算法的优化
- 学习率衰减
2.2.2 参数初始化策略(复习)
由于在z={w}_1{x}_1+{w}_2{x}_2 + ... + {w}_n{x}_n + bz=w1x1+w2x2+...+wnxn+b公式中,当输入的数量n较大时,如果每个w_iwi的值都小一些,这样它们的和得到的zz也会非常大,所以会造成我们之前在第一部分最后一节当中介绍的。所以都会初始化比较小的值。
2.2.3 批梯度下降算法(Batch Gradient Descent)
定义:批梯度下降法(btach),即同时处理整个训练集。
其在更新参数时使用所有的样本来进行更新。对整个训练集进行梯度下降法的时候,我们必须处理整个训练数据集,然后才能进行一步梯度下降,即每一步梯度下降法需要对整个训练集进行一次处理,如果训练数据集很大的时候,处理速度就会比较慢。
所以换一种方式,每次处理训练数据的一部分进行梯度下降法,则我们的算法速度会执行的更快。
2.2.3.1 Mini-Batch Gradient Descent
- 定义:Mini-Batch 梯度下降法(小批量梯度下降法)每次同时处理固定大小的数据集。
不同
- 种类:
- mini-batch 的大小为 1,即是随机梯度下降法(stochastic gradient descent)
使用 Mini-Batch 梯度下降法,对整个训练集的一次遍历(epoch)只做 mini-batch个样本的梯度下降,一直循环整个训练集。
2.2.3.2 批梯度下降与Mini-Batch梯度下降的区别
batch梯度下降法和Mini-batch 梯度下降法代价函数的变化趋势如下:
那么对于梯度下降优化带来的影响
2.2.3.3 梯度下降优化影响
- batch 梯度下降法:
- 对所有 m 个训练样本执行一次梯度下降,每一次迭代时间较长,训练过程慢;
- 相对噪声低一些,成本函数总是向减小的方向下降。
- 随机梯度下降法(Mini-Batch=1):
- 对每一个训练样本执行一次梯度下降,训练速度快,但丢失了向量化带来的计算加速;
- 有很多噪声,需要适当减小学习率,成本函数总体趋势向全局最小值靠近,但永远不会收敛,而是一直在最小值附近波动。
因此,选择一个合适的大小进行 Mini-batch 梯度下降,可以实现快速学习,也应用了向量化带来的好处,且成本函数的下降处于前两者之间。
2.2.3.4 大小选择
- 如果训练样本的大小比较小,如m\le2000m≤2000时,选择 batch 梯度下降法;
- 如果训练样本的大小比较大,选择 Mini-Batch 梯度下降法。为了和计算机的信息存储方式相适应,代码在 mini-batch 大小为 2 的幂次时运行要快一些。典型的大小为2^6, 2^7,2^8,2^926,27,28,29,mini-batch 的大小要符合 CPU/GPU 内存。
需要根据经验快速尝试,找到能够最有效地减少成本函数的值。
那么第二种方式是通过优化梯度下降过程,会比梯度下降算法的速度更快些