深度学习-梯度下降

目录

梯度下降算法

1.批量梯度下降法BGD(Batch Gradient Descent):

2.随机梯度下降SGD(stochastic gradient descent)

3.小批量梯度下降法MBGD(mini-batch Gradient Descent)

梯度下降算法的问题

改进的优化算法

动量法

AdaGrad

RMSProp

Adam

梯度下降算法

在训练和优化智能系统时,梯度下降是一种最重要的技术和基础。梯度下降的功能是:

通过寻找最小值,控制方差,更新模型参数,最终使模型收敛。

根据训练的数据个数不同,分为以下三种形式

1.批量梯度下降法BGD(Batch Gradient Descent):

Batch中文意思是一批,一组;

将计算整个数据集梯度,但只会进行一次更新

#全部样本大小Batch
for epoch in range(examples_size):
#举例 如共10000个样本
for epoch in range(10000):

优点:可以最大化的利用向量化计算的优势,来提升计算速度;是全局最优解

缺点:样本数多时,计算机速度慢,性能差

2.随机梯度下降SGD(stochastic gradient descent)

对每个训练样本进行参数更新,每次执行都进行一次更新,且执行速度更快。

优点:具有比较好的随机性,可以帮助我们跨越”鞍点“”问题

缺点:训练时间过长,收敛性不佳

鞍点
在二维数轴中,要求一条曲线的最值,通常求这条曲线导数为0的点;
但是在三维坐标,高维坐标中,存在一个点在一个方向上是最大值,在另一个方向是最小值,这样的点就是鞍点;形象地认为是马鞍中央的点

3.小批量梯度下降法MBGD(mini-batch Gradient Descent)

以上两种方法的折中,将全部的样本按照合适的大小(batch-size)分成多组(Iterations)

对每个批次中的n个训练样本只执行一次更新

#mini-Batch
for epoch in range(training_epochs):
    for i in range(total_batch):

区分Epoch,Batch-Size,Iterations

Epoch:训练周期,所有训练样本的一次前馈和反馈的过程。在实际训练过程中,由于训练样本的个数太大,因此经常将一个Epoch分成多个Batch,每个Batch训练一小部分的数据。

Batch-Size:一次前馈和反馈的训练样本数量

Iterations:迭代次数,即完成一次Epoch所需要的Batch个数,也可理解成内存嵌套的循环次数。每次迭代完成1次网络结构参数的更新

看了很多的文章,都是给了概念,但是不是很清晰,不如给个例子

一共有10000个样本,则完成1次epoch需要将10000个样本数据都运行一遍,如果1个batch的大小是10,那就需要10000/10=1000个iterations,也就是1000个batch,用代码表示就是

#举例:一共10000个样本,batch-size=10,则Iterations=10000/10=1000
for epoch in range(5):#这个5表示将所有的样本训练5次,与batch_size,iterations无关
    for i in range(1000):#一共有1000个batch

作者当初不懂的点就在于将epoch的循环次数当成batch_size,以为外层循环次数*内层循环次数需要等于样本个数,其实不是这样的,外层的epoch循环次数与batch_size,batch_numbers,iterations是无关的。

一般epoch的大小就是靠经验先蒙一个,运行看结果,当loss基本不变时,确定大概的epoch个数

梯度下降算法的问题

  • 一个方向上变化迅速而在另一个方向上变化缓慢
  • 局部最小处及鞍点处梯度为0,算法无法通过

如下图所示,小球的目标是走到底端笑脸处,但是小球在山壁间震荡,往谷底方向行进缓慢

 

改进的优化算法

动量法

目的:减少震荡,加速通往谷底

改进思想:利用累加历史梯度信息更新梯度

由于动量是矢量,既有方向又有长度,多次的叠加,在震荡方向上的速度就被抵消,几乎为0;而前进方向上的速度被叠加而逐渐加快。

动量法的优势:由于动量的存在,算法可以冲出局部最小点及鞍点,找到最优解

 

AdaGrad

自适应梯度法的一种

自适应梯度法是通过减小震荡方向步长,增大平坦方向步长来加速通往谷底方向

那如何区分震荡方向与平坦方向呢?

梯度幅度的平方较大的方向是震荡方向;梯度幅度的平方较小的方向是平坦方向。

AdaGrad将\frac{\varepsilon}{\sqrt{r}+\varepsilon }来代替学习率控制步长。梯度幅度大,也就是分母大,学习率小;反之梯度幅度小,学习率大。

AdaGrad方法的不足之处在于,随着训练时间的增长,累计梯度r的值变得很大,也就失去了调节的作用,步长会变得很小。

 

RMSProp

RMSProp也是自适应梯度方法

 

Adam

 Adam初期效果很好,但是最后可能效率升不上去了;要想效果好,最终还是要靠动量法+sgd手动调超参数。(虽然慢,但是效果好)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值