13- 深度学习梯度下降算法优化 (基础知识) (深度学习)

知识要点

1. 梯度下降算法的三种方式:

  • 批量梯度下降法(batch),即同时处理整个训练集# 当样本数在2000 以下时使用
  • 小批量梯度下降法(Mini-Batch )每次同时处理固定大小的数据集# 当训练样本较大时使用
  • 随机梯度下降法(stochastic gradient descent), 每次随机选一个进行处理.

2.数据预处理的方式:

  • 指数加权平均(Exponentially Weight Average): S_{2} = 0.9 S_{1} + 0.1 Y_{2}
  • 动量梯度下降法(Gradient Descent with Momentum): 计算梯度的指数加权平均数,并利用该值来更新参数值。
  • RMSProp 算法: 是在对梯度进行指数加权平均的基础上,引入平方和平方根。
  • Adam算法: 将 Momentum 和 RMSProp 算法结合在一起。

3.学习率衰减:

  • 最常用的学习率衰减方法:  

  \alpha = \frac{1}{1 + decay\_rate * epoch\_num} * \alpha_0        # decay_rate为衰减率, epoch_num为迭代的次数

  • 指数衰减: \alpha = 0.95^{epoch\_num} * \alpha_0

 4.标准化处理:

  • x = \frac{x - \mu}{\sigma}        # μ为平均值,σ为标准差


梯度下降算法改进

1 梯度下降遇到的问题

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

优化遇到的问题:

  • 梯度消失或者梯度爆炸

  • 局部最优

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

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

  • 训练较大的神经网络、存在大量参数,并且成本函数被定义在较高的维度空间时,困在极差的局部最优基本不会发生。

  • 鞍点附近的平稳段会使得学习非常缓慢,而这也是需要后面的动量梯度下降法、RMSProp 以及 Adam 优化算法能够加速学习的原因,它们能帮助尽早走出平稳段。

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

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

  • Mini梯度下降法

  • 梯度下降算法的优化

  • 学习率衰减

2 梯度下降优化调整

参数初始化策略:

由于在 z={w}_1{x}_1+{w}_2{x}_2 + ... + {w}_n{x}_n + b 公式中,当输入的数量n较大时,如果每个的值都大一些,这样它们的和得到的也会非常大,所以会造成我们之前在第一部分最后一节当中介绍的。所以都会初始化比较小的值。

2.1 批梯度下降批次(Batch Gradient Descent)

  • 定义:批量梯度下降法(batch),即同时处理整个训练集
  • 定义:Mini-Batch 梯度下降法(小批量梯度下降法)每次同时处理固定大小的数据集
  • 种类:mini-batch 的大小为 1,即是随机梯度下降法(stochastic gradient descent), 每次随机选一个.

梯度下降优化影响:

  • batch 梯度下降法

    • 所有 m 个训练样本执行一次梯度下降,每一次迭代时间较长,训练过程慢

    • 相对噪声低一些,成本函数总是向减小的方向下降。

  • 随机梯度下降法(Mini-Batch=1):

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

    • 有很多噪声,需要适当减小学习率,成本函数总体趋势向全局最小值靠近,但永远不会收敛,而是一直在最小值附近波动。

          

因此,选择一个合适的大小进行 Mini-batch 梯度下降,可以实现快速学习,也应用了向量化带来的好处,且成本函数的下降处于前两者之间。

梯度下降批次选择 :

  • 如果训练样本的大小比较小,如m < 2000时,选择 batch 梯度下降法;

  • 如果训练样本的大小比较大,选择 Mini-Batch 梯度下降法。为了和计算机的信息存储方式相适应,代码在 mini-batch 大小为 2 的幂次时运行要快一些。典型的大小为2^6, 2^7, 2^8 ​,mini-batch 的大小要符合 CPU/GPU 内存。

3 梯度下降算法

3.1 指数加权平均

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

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

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

S_t = \begin{cases} Y_1, &t = 1 \\ \beta S_{t-1} + (1-\beta)Y_t, &t > 1 \end{cases}

其中​Y_{t}为 t 下的实际值,​S_{t}为​下加权平均后的值,​\beta为权重值。

上图的红线中,​\beta为0.9, 那么第一天的温度,第二天的温度,第三天的温度计算为 S_{1} = Y1

  •  S_{2} = 0.9 S_{1} + 0.1 Y_{2}
  • S_{100} = 0.9 S_{99} + 0.1 Y_{100}

假设就100天,那么合并的结果: S_{100} = 0.1 Y_{100} + 0.1 * 0.9 Y_{99} + 0.1 * {(0.9)}^2 Y_{98} + {...}

下图中,当取权重值 β=0.98 时,可以得到图中更为平滑的绿色曲线。​{\color{Red} \beta}越大相当于求取平均利用的天数越多,曲线自然就会越平滑而且越滞后。这些系数被称作偏差修正。

3.2 动量梯度下降法

动量梯度下降(Gradient Descent with Momentum)是计算梯度的指数加权平均数,并利用该值来更新参数值。动量梯度下降法的整个过程为:

  • S_{dW^{[l]}} = \beta S_{dW^{[l-1]}} + (1 - \beta) dW^{[l]}
  • S_{db^{[l]}} = \beta S_{db^{[l-1]}} + (1 - \beta) db^{[l]}
  • W^{[l]} := W^{[l]} - \alpha S_{dW^{[l]}}
  • b^{[l]} := b^{[l]} - \alpha S_{db^{[l]}}

使用动量梯度下降时,通过累加过去的梯度值来减少抵达最小值路径上的波动,加速了收敛,因此在横轴方向下降得更快,从而得到图中红色或者紫色的曲线。当前后梯度方向一致时,动量梯度下降能够加速学习;而前后梯度方向不一致时,动量梯度下降能够抑制震荡

我们可以这样形象的理解,小球在向下运动过程中会有加速度,导致越来越快,由于β的存在使得不会一直加速运行。

3.3 RMSProp 算法

RMSProp(Root Mean Square Prop)算法是在对梯度进行指数加权平均的基础上引入平方和平方根

  •  s_{dw} = \beta s_{dw-1} + (1 - \beta)(dw)^2
  • s_{db} = \beta s_{db-1} + (1 - \beta)(db)^2
  • w := w - \alpha \frac{dw}{\sqrt{s_{dw} + \epsilon}}
  • b := b - \alpha \frac{db}{\sqrt{s_{db} + \epsilon}}

其中 ​\epsilon 是一个非常小的数,防止分母太小导致不稳定, 当 dw 或​ db 较大时,(dw)^{2}, (db)^{2}会较大,进而 s_dw ​也会较大,最终使得 ​\frac{db}{\sqrt{s_{db} + \epsilon}} 等结果变得非常小。

最终RMSProp 有助于减少抵达最小值路径上的摆动,并允许使用一个更大的学习率 α,从而加快算法学习速度。

3.4 Adam算法

Adam 优化算法(Adaptive Moment Estimation,自适应矩估计)Momentum(动量) 和 RMSProp 算法结合在一起。

假设用每一个 mini-batch 计算 dW、db,第t次迭代时:

  • v_{dW} = \beta_1 v_{dW-1} + (1 - \beta_1) dW
  • v_{db} = \beta_1 v_{db-1} + (1 - \beta_1) db
  • v^{corrected}_{dW^{[l]}} = \frac{v_{dW^{[l]}}}{1 - (\beta_1)^t}
  • s_{dW} = \beta_2 s_{dW} + (1 - \beta_2) {(dW)}^2
  • s_{db} = \beta_2 s_{db} + (1 - \beta_2) {(db)}^2
  • s^{corrected}_{dW^{[l]}} = \frac{s_{dW^{[l]}}}{1 - (\beta_2)^t}

其中l为某一层,t为移动平均第次的值:

Adam 算法的参数更新:

        

3.5 Adam算法参数

Adam 优化算法有很多的超参数:  tf.train.AdamOptimizer(learning_rate=0.001, beta1=0.9, beta2=0.999,epsilon=1e-08, name='Adam')

注:β1、β2、ϵ 通常不需要调试

  • 学习率α:需要尝试一系列的值,来寻找比较合适的

  • β1:常用的缺省值为 0.9

  • β2:Adam 算法的作者建议为 0.999

  • ϵ:Adam 算法的作者建议为epsilon的默认值1e-8

4 梯度下降其他优化

4.1 学习率衰减方法

如果设置一个固定的学习率 α:

  • 缺点:  在最小值点附近,由于不同的 batch 中存在一定的噪声,因此不会精确收敛,而是始终在最小值周围一个较大的范围内波动。

  • 解决方法:  如果随着时间慢慢减少学习率 α 的大小,在初期 α 较大时,下降的步长较大,能以较快的速度进行梯度下降;而后期逐步减小 α 的值,即减小步长,有助于算法的收敛,更容易接近最优解。

最常用的学习率衰减方法:

{\color{Red} \alpha = \frac{1}{1 + decay\_rate * epoch\_num} * \alpha_0}

其中,decay_rate为衰减率(超参数),epoch_num 为将所有的训练样本完整过一遍的次数。

还有一种指数衰减 :

{\color{Red} \alpha = 0.95^{epoch\_num} * \alpha_0}

对于大型的数据模型,需要使用这些方式去自动进行学习率衰减。而一些小型网络可以直接手动进行调整.

4.2 标准化输入

对网络输入的特征进行标准化,能够缓解梯度消失或者梯度爆炸

  • 标准化公式:  {\color{Red} x = \frac{x - \mu}{\sigma}}       # μ为平均值,σ为标准差

这个公式其实与特征工程中的处理是一样的,标准化的目的是所有特征的平均值为0,标准差为1。这属于机器学习基本的内容不过多进行叙述。

        

这样的话,对于梯度下降无论从哪个位置开始迭代,都能以相对较少的迭代次数找到全局最优解。可以加速网络的学习。

理解这个原理,其实还是最初的这样的公式: z={w}_1{x}_1+{w}_2{x}_2 + ... + {w}_n{x}_n + b

如果激活函数的输入X近似设置成均值为 0,标准方差为 1,神经元输出 z 的方差就正则化到1了。虽然没有解决梯度消失和爆炸的问题,但其在一定程度上确实减缓了梯度消失和爆炸的速度

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值