骚话一下:
今天是2020年10月2号,继续学习。本文依然是《CNN架构》的延续博文,重点介绍优化的新的梯度下降算法。

一:梯度下降的种类
说到梯度下降的方法,确实是求最优解的比较好的途径了,一步一步通过迭代到达最优解,之前在机器学习的博文里面,我们也是学习到了梯度下降的很多运用场景。
今天我们来说一下,我们之前学习的梯度下降的算法,我们还有哪些优化的方式。梯度下降有是三个种类。
1)批量梯度下降(Batch Gradient Descent)
简单理解就是每一次迭代,都是根据所有的样本计算更新参数的。

也就是在计算偏导数的时候,会把所有的样本都用上。等所有的样本都进行完运算后再对参数进行更新。在网络层度很深,且数据量大的时候,收敛特别慢,而且比较容易导致梯度消失或者梯度爆炸。

2)随机梯度下降(Stochastic Gradient Descent)
这个呢,就是每次计算一个样本的输出,直接进行参数更新,也不用管别的参数,这样做的好处就是训练快速,省去了等待很多样本的计算时间。

在迭代过程中由于太随机了,可能每次收敛的时候偏差比较大,就是方向偏差比较大,容易陷入局部最优解,不能快速得到最优解。想象成,Batch梯度下降太慢了,但是基本上方向比较平滑,大概率不会错方向。随机梯度下降呢,太随意了,每一次迭代,下降的方向可能有很大偏差,主方向不怎么平滑,一直在在抖动。跌跌撞撞到了某个最小值,还可能不是最优解。

3)小批量梯度下降(Mini-batch Gradient Descent)
上面所述的两个下降方式都太极端了,一个在每次迭代用了所有的样本,一个在每次迭代仅仅用了一个样本,因此Mini-batch就是每次只用一部分样本,也不是全部,取一部分,在以上两个极端的情况取一个比较中和一些的方式。
比如取N个样本在每次的迭代,N<M。

如下的内容全是学习自Andrew Ng的深度学习视频。截图也是来自于此视频!!!。
如下的内容全是学习自Andrew Ng的深度学习视频。截图也是来自于此视频!!!。
如下的内容全是学习自Andrew Ng的深度学习视频。截图也是来自于此视频!!!。

二:指数加权平均

我们先来看个统计学上的计算方式,名叫做指数加权平均。
先来看个例子,Andrew在视频中用天气的举例。横轴为日期,纵轴为温度。

很明显我们会发现这个图像采点的走向有一定的趋势,但是存在很大的波动,也就是朝着某个大方向走势前进,像一个半圆的走势,只是由于波动,每一天都变得确定,如果我们想预测某一天的气温大概的估计值(测量值村子波动),也就是想拟合一下这些数据,给每天一个估计值,怎么做呢?

指数移动加权平均法,是指各数值的加权系数随时间呈指数式递减,越靠近当前时刻的数值加权系数就越大,越远离当前时刻的数值加权系数就越小。

简单解释下,也就是为了每一天的估计值,都是用的是之前的值加上当前的测量值,乘以加权系数得到,至于为什么叫做指数呢,我们如果把V_(t-1)不断替换到V_(t-n)就会发现历史数据的加权值是呈指数的。这个公式怎么来描述上述这些图像点的趋势呢?我们还是举一个例子观察。

现在我们描绘这个公式的值过程,红色线即是公式的估计值。

可以看出来,红色的线就是我们的公式所描述的预测值的话,波动小很多,也就是噪声降低很多,相对平滑,反应总的趋势走向更加明显。也就是说对原来的数据起到了某种平滑的作用,不再有很大波动干扰。

我们观察到与β加权的是历史数据,与(1-β)加权的当前测量值,也就是说β越大,历史数据占得比重越大,反之β越小,历史数据占得比重越小。如果我们假设β变化的情况,会怎么样呢?看下下面的三个举例。
当 β = 0.9 时,指数加权平均最后的结果如图红色线所示,代表的是最近 10 2天的平均温度值;
当 β = 0.98 时,指结果如图绿色线所示,代表的是最近 50 天的平均温度值;
当 β = 0.5 时,结果如下图黄色线所示,代表的是最近 2 天的平均温度值;

从图中那个可以看出来,β值越大,历史比重越大,图像的估计值也就是越平滑,但是也有缺点就是出现了延迟拟合,β值越小,历史数据的比重越小,越接近当前值,拟合程度很好,但是波动大,噪声大。因此,需要取值一个合适的β值。

指数加权平均,还有一个好处就是,只用记住上一次的值状态值是多少,不用记录特别多的历史数据,而且计算量也减少了很多。相比于普通的算术平均加权,明显有存储量和计算量的优势的哈。

三:EMA偏差修正

上一章节讲解了指数加权平均和作用,假如β = 0.98,我们希望得到的是图中绿色的线,但是很不幸,如果我们按照初始值等于0的情况估计的话,在最开始的几个点内其实曲线是图中紫色的那条线,也就是在开始的几个点的处理方式会有和元数据较大的偏差,这叫做“冷启动”的问题,怎么解决呢?

当 t很小时,分母很小,假设t是从t=1开始的,可以很好的放大到当前的测量的数值;当 t很大时,分母的数值趋于1,退化到了没有偏差因子的式子,对当前数值几乎没有影响,也不影响指数加权。这样就拟合到了绿色那条线。成功解决了冷启动的问题。

学数学是多么有用的事情,解决这样的问题都是用的基本的数学知识。

EMA 主要是被应用在动量优化算法中,比如Adam算法中的一阶矩和二阶矩都采用了上面修改后的EMA算法。

四:动量梯度下降(momentum Gradient Descent)

Momentum 梯度下降法,就是计算了梯度的指数加权平均数,并以此来更新权重,它的运行速度几乎总是快于标准的梯度下降算法。怎么快呢?举个例子,我们朝着梯度减少的方向一步一步走,下网走到谷底,标准的学习的梯度下降算法不关心,历史数据,只顾眼前的测量值,那么很容易出现一些波动,噪声的干扰,也就是跌跌撞撞地走向谷底。运用了指数加权平均后,引入了历史数据的影响,或许更加清楚大致反向的位置,减少跌跌撞撞地幅度,路线变得平滑,因此,少走了很多弯路,自然,速度也就快了。

这也是在上一章节为什么花了那么多篇幅讲解指数加权的作用的原因,是可以被运用到梯度下降算法中解决实际问题的。

Therfore,我们来看看指数加权怎么运用到梯度下降的呢?也就是这这一章节要讲解的动量梯度下降算法。

先来看看标准的梯度下降过程:

我们的梯度下降的方向就是红色的点点,目标是明确的,路径确实曲折的,这里的山路十八弯,这里的,,,,,,,。每一步走的都很曲折,但是总体的方向就是朝着红色点进发的,多少弯路啊这。

于是我们希望减少这些弯路,或者说,每一步有更大的方向分量朝着红色点,更小的方向分量是朝着无关方向,也就是梯度下降的方向更为专注。

来了来了,这就是得用到指数加权了,我们先看过程,改造后的梯度下降算法。

我们来看看效果图:

图中的红色线就是新的迭代曲线,我们发现到达红色终点,迭代次数变少了,方向变得小波动了,训练速度也加快了很多,这就是动量梯度下降的好处。

五:RMSprop算法(root mean square prop)
这是个啥?还是对梯度下降的优化算法了啦。

更新过程中,分子仍然是偏导数测量值,分母做了变化。S_dθ的作用也是那个全局变量,存储上一次的加权值。

是的你没看错,是求当前测量值的平方(看清楚不是J(θ)的平方)再进行指数加权。在更新的时候,用当前测试纸除以加权后的值的平方根,效果如下:

请注意我为了做区分,用了不同的符号表示,下一章节有用的。

六:Adam算法(Adaptive Moment Estimation)

是的没错,这又是一个队梯度下降的优化算法,长期试验过程中,Momentum和RMSprop是很长时间来最经得住考研的优化算法,适合用于不同的深度学习结构。所以有人就有新的想法,何不将这俩的方法结合到一起形成新的算法呢?然后,Duang!!!,Adam算法产生了,从这里我们能看出来也许有时候一些小的优化就是一个很不错的创新,站在巨人的肩膀上向前看。

其实结合起来也不难看懂。主要需要看明白Momentum和RMSprop和EMA偏差修正即可看懂这个Adam

因为Adam结合上述两种优化算法的优点于一身,所以现在经常用的是Adam优化算法。

目前对梯度下降算法的优化到此为止,也基本上够用了,还有其他的一些分享且看后续,这一章节完了后我就做一个实践的例子,真正把我们学到的在Pytorch框架上用起来。

深度学习《CNN架构续篇 - 梯度下降的优化》相关推荐

  1. 深度学习之自编码器(4)变分自编码器

    深度学习之自编码器(4)变分自编码器 1. VAE原理  基本的自编码器本质上是学习输入 x\boldsymbol xx和隐藏变量 z\boldsymbol zz之间映射关系,它是一个 判别模型(Di ...

  2. 深度学习之自编码器(5)VAE图片生成实战

    深度学习之自编码器(5)VAE图片生成实战 1. VAE模型 2. Reparameterization技巧 3. 网络训练 4. 图片生成 VAE图片生成实战完整代码  本节我们基于VAE模型实战F ...

  3. 深度学习之自编码器AutoEncoder

    深度学习之自编码器AutoEncoder 原文:http://blog.csdn.net/marsjhao/article/details/73480859 一.什么是自编码器(Autoencoder ...

  4. 深度学习之自编码器(3)自编码器变种

    深度学习之自编码器(3)自编码器变种 1. Denoising Auto-Encoder 2. Dropout Auto-Encoder 3. Adversarial Auto-Encoder  一般 ...

  5. 深度学习之自编码器(2)Fashion MNIST图片重建实战

    深度学习之自编码器(2)Fashion MNIST图片重建实战 1. Fashion MNIST数据集 2. 编码器 3. 解码器 4. 自编码器 5. 网络训练 6. 图片重建 完整代码  自编码器 ...

  6. 深度学习之自编码器(1)自编码器原理

    深度学习之自编码器(1)自编码器原理 自编码器原理  前面我们介绍了在给出样本及其标签的情况下,神经网络如何学习的算法,这类算法需要学习的是在给定样本 x\boldsymbol xx下的条件概率 P( ...

  7. 【深度学习】 自编码器(AutoEncoder)

    目录 RDAE稳健深度自编码 自编码器(Auto-Encoder) DAE 深度自编码器 RDAE稳健深度自编码 自编码器(Auto-Encoder) AE算法的原理 Auto-Encoder,中文称 ...

  8. 深入理解深度学习——Transformer:编码器(Encoder)部分

    分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nada ...

  9. 深度学习之自编码器实现——实现图像去噪

    大家好,我是带我去滑雪! 自编码器是一种无监督学习的神经网络,是一种数据压缩算法,主要用于数据降维和特征提取.它的基本思想是将输入数据经过一个编码器映射到隐藏层,再通过一个解码器映射到输出层,使得输出 ...

  10. 深度学习:自编码器、深度信念网络和深度玻尔兹曼机

    最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来,欢迎大家关注我的 个人博客,以及我的github. 本文主要讲解有关自编码器.深度信念网络和深度玻尔兹曼机的相关知识. 一.自编码器 1. ...

最新文章

  1. spark-1.5.2集群安装
  2. Python中的split,rsplit,splitlines
  3. Spring 容器:三种方式解决 Resource leak: ‘applicationContext‘ is never closed 问题
  4. 作者:郑理,男,南京邮电大学计算机学院项目研究员。
  5. 线段树线段树的创建线段树的查询单节点更新区间更新
  6. Linux学习笔记(8)
  7. pytorch下载加载mnist数据集
  8. 电力-104规约实际测试1
  9. 分享一个蓝屏代码查询器
  10. HTML5+CSS3
  11. Linux下载工具photon,不限速、免配置的 Aria2 免费开源下载软件 Photon,替代迅雷的...
  12. PPT学习整理(四)表格
  13. 医学图像预处理之CT成像原理
  14. 心理正常与异常的区分_判断心理正常异常三原则
  15. JavaScript计算圆周率(解析几何+定积分)
  16. 如何查看自己的电脑是32位机器还是64位机器
  17. 深入详解python高级特性——函数柯里化(Currying)与反柯里化
  18. 高性能计算,云上见!
  19. Linux 磁盘管理
  20. Abbkine通用型免疫(共)沉淀试剂盒解决方案

热门文章

  1. POSIX规范-unbuffered I/O (文件I/O)
  2. Java Virtual Machine Garbage Collection浅析
  3. 计算二个日期经过几月又几天
  4. NGINX进程的基本操作和基础知识
  5. Oracle GoldenGate 详解
  6. ​​​​​​​ Centos7.6上用Cockpit安装oVirt
  7. Breeze:抢先体验Kubernetes 1.13.0高可用图形化部署
  8. PHP通知弹窗代码_公告弹窗
  9. 【Python】Python库之虚拟现实
  10. 【Python】基本统计值计算