【深度学习】嘿马深度学习系统性知识教程第4篇:深度学习进阶,2.2 梯度下降算法改进【附代码文档】

55 阅读1分钟

教程总体简介:循环神经网络、4.2 词嵌入与NLP、学习目标、4.3 seq2seq与Attention机制、总结、每日作业、5.1 生成对抗网络(GAN)、高级主题、5.2 自动编码器、在职高新课-深度学习、要求、目标、课程安排、环境要求、1.1 深度学习介绍、深度学习与神经网络、1.2 神经网络基础、1.3 浅层神经网络、1.4 深层神经网络、深度学习进阶、2.1 多分类与TensorFlow、5、得出每次训练的准确率(通过真实值和预测值进行位置比较、每个样本都比较)、2.2 梯度下降算法改进、2.3 深度学习正则化、2.4 BN与神经网络调优、卷积神经网络、3.1 图像数据与边缘检测、3.2 卷积神经网络(CNN)原理、3.3 经典分类网络结构、4.1 循环神经网络、课程内容总结

项目完整code和文档,小伙伴们---->git仓库


全套教程部分目录:

深度学习进阶

知道softmax回归的原理
应用softmax_cross_entropy_with_logits实现softamx以及交叉熵损失计算
应用matmul实现多隐层神经网络的计算
应用TensorFlow完成Mnist手写数字势识别

了解深度学习遇到的一些问题
知道批梯度下降与MiniBatch梯度下降的区别
知道指数加权平均的意义
知道动量梯度、RMSProp、Adam算法的公式意义
知道学习率衰减方式
知道参数初始化策略的意义

了解偏差与方差的意义
知道L2正则化与L1正则化的数学意义
知道Droupout正则化的方法
了解早停止法、数据增强法的其它正则化方式

知道常用的一些神经网络超参数
知道BN层的意义以及数学原理

2.2 梯度下降算法改进

学习目标

  • 目标

    • 了解深度学习遇到的一些问题
    • 知道批梯度下降与MiniBatch梯度下降的区别
    • 知道指数加权平均的意义
    • 知道动量梯度、RMSProp、Adam算法的公式意义
    • 知道学习率衰减方式
    • 知道参数初始化策略的意义
  • 应用

深度学习难以在大数据领域发挥最大效果的一个原因是,在巨大的数据集基础上进行训练速度很慢。而优化算法能够帮助我们快速训练模型,提高计算效率。接下来我么就去看有哪些方法能够解决我们刚才遇到的问题或者类似的问题

2.2.1 优化遇到的问题

  • 梯度消失

  • 局部最优

2.2.1.1 梯度消失

在梯度函数上出现的以指数级递增或者递减的情况分别称为梯度爆炸或者梯度消失

假设g(z)=z,b[l]=0g(z) = z, b^{[l]} = 0g(z)=z,b​[l]​​=0y^=W[L]W[L−1]...W[2]W[1]X\hat{y} = W^{[L]}W^{[L-1]}...W^{[2]}W^{[1]}X​y​^​​=W​[L]​​W​[L−1]​​...W​[2]​​W​[1]​​X

  • 对于W[l]W^{[l]}W​[l]​​
  • 对于W[l]W^{[l]}W​[l]​​

在计算梯度时,根据不同情况梯度函数也会以指数级递增或递减,导致训练导数难度上升,梯度下降算法的步长会变得非常小,需要训练的时间将会非常长。

2.2.1.2 局部最优

**鞍点(saddle)**是函数上的导数为零,但不是轴上局部极值的点。通常梯度为零的点是上图所示的鞍点,而非局部最小值。减少损失的难度也来自误差曲面中的鞍点,而不是局部最低点。

  • 在训练较大的神经网络、存在大量参数,并且成本函数被定义在较高的维度空间时,困在极差的局部最优基本不会发生
  • 鞍点附近的平稳段会使得学习非常缓慢,而这也是需要后面的动量梯度下降法、RMSProp 以及 Adam 优化算法能够加速学习的原因,它们能帮助尽早走出平稳段。

解决办法有多种形式,通常会结合一些形式一起进行

  • 初始化参数策略(第一部分第四节提到)

  • Mini梯度下降法

  • 梯度下降算法的优化

  • 学习率衰减

2.2.2 参数初始化策略(复习)

由于在z=w1x1+w2x2+...+wnxn+bz={w}_1{x}_1+{w}_2{x}_2 + ... + {w}_n{x}_n + bz=w​1​​x​1​​+w​2​​x​2​​+...+w​n​​x​n​​+bwiw_iw​i​​zzz

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≤2000m\le2000m≤2000
  • 如果训练样本的大小比较大,选择 Mini-Batch 梯度下降法。为了和计算机的信息存储方式相适应,代码在 mini-batch 大小为 2 的幂次时运行要快一些。典型的大小为26,27,28,292^6, 2^7,2^8,2^92​6​​,2​7​​,2​8​​,2​9​​

需要根据经验快速尝试,找到能够最有效地减少成本函数的值。

那么第二种方式是通过优化梯度下降过程,会比梯度下降算法的速度更快些

2.2.4 指数加权平均

**指数加权平均(Exponentially Weight Average)**是一种常用的序列数据处理方式,通常用在序列场景如金融序列分析、温度变化序列分析。

假设给定一个序列,例如北京一年每天的气温值,图中蓝色的点代表真实数据。

那么这样的气温值变化可以理解成优化的过程波动较大,异常较多。那么怎么平缓一些呢,这时候就要用到加权平均值了,如指数加权平均值。首先看一些效果。

这条红线怎么计算出来?通过指数加权的公式即:

无法显示

其中YtY_{t}Y​t​​StS_{t}S​t​​β\betaβ

上图的红线中,β\betaβ</sp