2.2)深度学习笔记:优化算法

目录

1)Mini-batch gradient descent(重点)

2)Understanding mini-batch gradient descent

3)Exponentially weighted averages

4)Understanding exponetially weighted averages

5)Bias correction in exponentially weighted average

6)Gradient descent with momentum(重点)

7)RMSprop(重点)

8)Adam optimization algorithm(重点)

9)Learning rate decay

10)The problem of local optima

11)Summary


以下笔记是吴恩达老师深度学习课程第二门课第二周的的学习笔记:Optimization algorithms。笔记参考了黄海广博士的内容,在此表示感谢。 


深度学习难以在大数据领域发挥最佳效果的一个原因是:在巨大的数据集上进行训练速度很慢。而优化算法能够帮助快速训练模型,大大提高效率。本周,我们将讨论深度神经网络中的一些优化算法,通过使用这些技巧和方法来提高神经网络的训练速度。 

1)Mini-batch gradient descent(重点)

我们之前一直使用的梯度下降算法是同时处理整个训练集,在更新参数的时候使用所有样本来进行更新;即每一步梯度下降需要对整个训练集进行一次处理,如果训练数据集很大的时候,处理速度就会比较慢。这种梯度下降算法被称为 Batch Gradient Descent

为了解决批量梯度下降算法处理慢的问题,我们可以把训练样本划分为若干个子集,即 mini-batchs。然后在单一子集上进行神经网络训练,速度就会大大提升,这种梯度下降算法称为 Mini-batch Gradient Descent

吴恩达老师在课程里介绍:假设我们有 m=5000000 个训练样本,维度为 \left(n_{x}, m\right),将其分成 5000 个子集,每个子集含有 1000 个样本。我们将每个 mini-batch 记为X^{\{t\}},维度为 \left(n_{x}, 1000\right);相应的每个mini-batch的输出为 Y^{\{t\}},维度为 (1,1000)

针对每一个 Mini-batch,神经网络进行一次训练,包含前向传播,计算代价函数,反向传播。经过多次训练之后,所有m个训练样本都进行了梯度下降计算。对所有训练样本进行一次梯度下降计算,称为一个 epoch。


2)Understanding mini-batch gradient descent

我们先来看一下批量梯度下降和小批量梯度下降的成本曲线图:

可以看出,对于Batch梯度下降而言,Mini-batch梯度下降随着迭代次数增加,cost不是单调下降,而是存在噪声,出现噪声的原因可能是不同的Mini-batch之间存在差异。

我们来看看不同的Mini-batch大小带来的影响。下图为:Batch,Mini-batch,SGD梯度下降的影响:

batch 梯度下降法:

  • 对所有 m 个训练样本执行一次梯度下降,每一次迭代时间较长,训练过程慢
  • 相对噪声低一些,幅度也大一些;
  • 成本函数总是向减小的方向下降。

随机梯度下降法:

  • 对每一个训练样本执行一次梯度下降,训练速度快,但丢失了向量化带来的计算加速
  • 有很多噪声,减小学习率可以适当;
  • 成本函数总体趋势向全局最小值靠近,但永远不会收敛,而是一直在最小值附近波

不同的Mini-batch大小对梯度下降的影响是不同的,一般Mini-batch大小的选择建议是这样的:

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

3)Exponentially weighted averages

这一节我们介绍指数加权平均的概念。

如图所示,为伦敦城市的气温变化:

看上去,温度变化噪声很大,如果想看到气温的整体变化趋势,可以通过移动平均的方法对气温进行平滑处理。

设第t天与第t-1天的气温变化关系为:V_{t}=0.9 V_{t-1}+0.1 \theta_{t},经过处理后得到的气温如下图红色曲线所示:

这种方法称为指数加权平均法,一般形式为:V_{t}=\beta V_{t-1}+(1-\beta) \theta_{t},其中 \beta 决定了指数加权平均的天数,近似表示为:

\frac{1}{1-\beta},当 \beta 为0.9时,表示将前10天的数据进行指数加权平均,为0.98是,表示将前50天的数据进行指数加权平均。下图黄色和绿色曲线分别标识了 \beta=0.9 和 \beta=0.5 的指数加权平均结果。


4)Understanding exponetially weighted averages

指数加权平均公式的一般形式为:

V_{t}= \beta V_{t-1}+(1-\beta) \theta_{t}\\=(1-\beta) \theta_{t}+(1-\beta) \cdot \beta \cdot \theta_{t-1}+(1-\beta) \cdot \beta^{2} \cdot \theta_{t-2}+\cdots +(1-\beta) \cdot \beta^{t-1} \cdot \theta_{1}+\beta^{t} \cdot V_{0}

由公式可得,\theta_{t},\theta_{t-1}, \theta_{t-2}, \cdots, \theta_{1} 为原始数据, (1-\beta),(1-\beta) \beta,(1-\beta) \beta^{2}, \cdots,(1-\beta) \beta^{t-1} 类似于指数曲线,V_t的值就是这两个式子的点乘。

指数平均加权并不是最精准的计算平均数的方法,你可以直接计算过去 10 天或 50 天的平均值来得到更好的估计,但缺点是保存数据需要占用更多内存,执行更加复杂,计算成本更加高昂。

指数加权平均数公式的好处之一在于它只需要一行代码,且占用极少内存,因此效率极高,且节省成本


5)Bias correction in exponentially weighted average

上文中提到当β=0.98时,指数加权平均结果如下图绿色曲线所示。但是实际上,真实曲线如紫色曲线所示。

我们注意到,紫色曲线与绿色曲线的区别是,紫色曲线开始的时候相对较低一些。这是因为开始时我们设置V_0=0,所以初始值会相对小一些,直到后面受前面的影响渐渐变小,趋于正常。

修正这种问题的方法是进行偏移校正(bias correction),即在每次计算完后,进行下式处理:\frac{v_{t}}{1-\beta^{t}}。随着 t 的增大,β 的 t 次方趋近于 0。因此当 t 很大的时候,偏差修正几乎没有作用,但是在前期学习可以帮助更好的预测数据。在实际过程中,一般会忽略前期偏差的影响。


6)Gradient descent with momentum(重点)

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

V_{dW} = \beta V_{dW} + (1 - \beta) dW

V_{d b}=\beta V_{d b}+(1-\beta) d b

W=W-\alpha V_{d W}, b=b-\alpha V_{d b}

其中,将动量衰减参数 β 设置为 0.9 是超参数的一个常见且效果不错的选择。当 β 被设置为 0 时,显然就成了 batch 梯度下降法。


7)RMSprop(重点)

RMSprop是另外一种优化梯度下降速度的算法。每次迭代训练过程中,其权重W和常数项b的更新表达式为:

S_{dW} = \beta S_{dW} + (1 - \beta)(dW)^2

S_{db} = \beta S_{db} + (1 - \beta)(db)^2

W := W - \alpha \frac{dW}{\sqrt{S_{dW}}}b :=b-\alpha \frac{db}{\sqrt{S_{db}}}

下面简单解释一下RMSprop算法的原理,仍然以下图为例,为了便于分析,令水平方向为W的方向,垂直方向为b的方向。

RMSProp 有助于减少抵达最小值路径上的摆动,并允许使用一个更大的学习率 α,从而加快算法学习速度。并且,它和 Adam 优化算法已被证明适用于不同的深度学习网络结构。注意,β 也是一个超参数。

还有一点需要注意的是为了避免RMSprop算法中分母为零,通常可以在分母增加一个极小的常数ε:

W :=W-\alpha \frac{dw}{\sqrt{S_{dw}}+\varepsilon}, b :=b-\alpha \frac{d b}{\sqrt{S_d{b}}+\varepsilon}

其中,ε=10^{-8},或者其它较小值。


8)Adam optimization algorithm(重点)

Adam 优化算法(Adaptive Moment Estimation,自适应矩估计)基本上就是将 Momentum 和 RMSProp 算法结合在一起,

算法流程为,初始化:

W :=W-\alpha \frac{dw}{\sqrt{S_{dw}}+\varepsilon}, b :=b-\alpha \frac{d b}{\sqrt{S_d{b}}+\varepsilon}

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

V_{d W}=\beta_{1} V_{d W}+\left(1-\beta_{1}\right) d W, V_{d b}=\beta_{1} V_{d b}+\left(1-\beta_{1}\right) d b

S_{d W}=\beta_{2} S_{d W}+\left(1-\beta_{2}\right) d W^{2}, S_{d b}=\beta_{2} S_{d b}+\left(1-\beta_{2}\right) d b^{2}

一般使用 Adam 算法时需要计算偏差修正:

V^{corrected}_{dW} = \frac{V_{dW}}{1-{\beta_1}^t}V^{corrected}_{db} = \frac{V_{db}}{1-{\beta_1}^t};

\\S^{corrected}_{dW} = \frac{S_{dW}}{1-{\beta_2}^t} \\S^{corrected}_{db} = \frac{S_{db}}{1-{\beta_2}^t}

所以,更新 W、b 时有:

W := W - \alpha \frac{V^{corrected}_{dW}}{​{\sqrt{S^{corrected}_{dW}} + \epsilon}}b := b - \alpha \frac{V^{corrected}_{db}}{​{\sqrt{S^{corrected}_{db}} + \epsilon}}

Adam 优化算法有很多的超参数,其中

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

\beta_1:常用的缺省值为 0.9;

\beta_2:Adam 算法的作者建议为 0.999;

ϵ:不重要,不会影响算法表现,Adam 算法的作者建议为 $10^{-8}$;

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


9)Learning rate decay

如果设置一个固定的学习率 α,在最小值点附近,由于不同的 Mini-batch 中存在一定的噪声,因此不会精确收敛,而是始终在最小值周围一个较大的范围内波动。

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

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

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

其中,decay\_rate为衰减率(超参数),epoch\_num为将所有的训练样本完整过一遍的次数。 .

指数衰减方法:

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

其它方法:

\alpha = \frac{k}{\sqrt{epoch\_num}} * \alpha_0

除此之外,还可以设置α为关于t的离散值,随着t增加,α呈阶梯式减小。当然,也可以根据训练情况灵活调整当前的α值,但会比较耗时间。


10)The problem of local optima

在使用梯度下降算法不断减小cost function时,可能会得到局部最优解(local optima)而不是全局最优解(global optima)。之前我们对局部最优解的理解是形如碗状的凹槽,如下图左边所示。但是在神经网络中,local optima的概念发生了变化。准确地来说,大部分梯度为零的“最优点”并不是这些凹槽处,而是形如右边所示的马鞍状,称为saddle point。也就是说,梯度为零并不能保证都是convex(极小值),也有可能是concave(极大值)。特别是在神经网络中参数很多的情况下,所有参数梯度为零的点很可能都是右边所示的马鞍状的saddle point,而不是左边那样的local optimum。


-

鞍点(saddle)是函数上的导数为零,但不是轴上局部极值的点。当我们建立一个神经网络时,通常梯度为零的点是上图所示的鞍点,而非局部最小值。减少损失的难度也来自误差曲面中的鞍点,而不是局部最低点。因为在一个具有高维度空间的成本函数中,如果梯度为 0,那么在每个方向,成本函数或是凸函数,或是凹函数。而所有维度均需要是凹函数的概率极小,因此在低维度的局部最优点的情况并不适用于高维度。

结论:

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

值得一提的是,上文介绍的动量梯度下降,RMSprop,Adam算法都能有效解决plateaus下降过慢的问题,大大提高神经网络的学习速度。


11)Summary

本周我们学习深度学习中的优化算法

  • Mini-batch梯度下降算法,动量梯度下降算法,RMSprop算法和Adam算法
  • 还介绍了学习率衰减局部最优等问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apollo进阶课程⑱丨Apollo感知之旅——传感器标定

目录 传感器标定 标定的目的 传感器标定算法 标定案例解析 3D标定间制作 Cmaera-to-Camera外参标定 Lidar-to-Camera外参标定 Lidar-to-Lidar外参标定 Lidar内参标定 Lidar-to-GPS外参标定 自然场景的Lidar-to-Camera外参标定 自然场景的Bifocal Camera外参标定 C…

一步步编写操作系统 15 CPU与外设通信——IO接口,下

既然都说到IO接口了,不知道各位有没有疑问,cpu是怎样访问到IO接口呢?肯定得有个链路吧?什么?有隐约听到有同学开玩笑说:cpu用无线访问其它设备。哈哈,不知道各位听说过没有,无线的终…

Telnet端口连接Linux服务器失败

在ubuntu写了个服务器端口号是666 ,ip地址是192.168.96.129 在windows用telnet无法连接上 首先检查windows telnet服务是否打开 Windows 10操作系统上使用telnet命令(图文)_时间-CSDN博客_windows使用telnet命令 测试网络是否通:…

重磅 | 完备的 AI 学习路线,最详细的资源整理!

本文转自微信公众号:Datawhale(强烈推荐) 原创: AIUnion Datawhale 今天 【导读】 本文由知名开源平台,AI技术平台以及领域专家:Datawhale,ApacheCN,AI有道和黄海广博士联合整理贡献…

Windows/Linux 下使用telnet发送消息

Windows下使用telnet 1.首先打开cmd命令行连接上服务器端口 连不上可以参考这篇 Telnet端口连接Linux服务器失败_m0_46480482的博客-CSDN博客 telnnt <ip地址> <端口号> 2. 连接成功后&#xff0c;会发现是一片黑的 按住 ctrl ] 可以招出提示 输入 &#x…

Apollo进阶课程⑲丨Apollo感知之旅——感知算法

目录 点云感知 启发式方法&#xff1a;NCut 深度学习方法&#xff1a;CNNSeg 视觉感知 CNN检测 CNN分割 后处理 红绿灯感知 基于深度学习的红绿灯感知模块 Radar感知 超声波感知 原文链接&#xff1a;进阶课程⑲丨Apollo感知之旅——感知算法 感知是自动驾驶的第一环…

动手学PaddlePaddle(0):新版本PaddlePaddle安装

目录 0.引言 1.环境 2.Windows下安装 安装Python 安装PaddlePaddle 0.引言 今天介绍如何安装新版本的PaddlePaddle&#xff0c;现在最新版的PaddlePaddle是指Fluid版&#xff0c;Fluid可以让用户像Pytorch和TensorFlow Eager Execution一样执行程序&#xff0c;也就是说P…

一步步编写操作系统 18 操作显卡,显存,显示器 下

接上回&#xff0c;大家看下显卡各种模式的内存分布。 各外部设备都是通过软件指令的形式与上层接口通信的&#xff0c;显卡&#xff08;显示适配器&#xff09;也不例外&#xff0c;所以它也有自己的bios。位置是0xC0000到0xC7FFF。显卡支持三种模式&#xff0c;文本模式、黑白…

VMware 安装VMware Tools

想要在linux和windows之间复制粘贴&#xff0c;把之前一直没有下的vmwaretools的下载过程记录一下。 1.左上角菜单 ->虚拟机 ->安装 vmware tools (我已经点过了所以是取消安装) 2.桌面多了一个VMware tools &#xff0c;点进去看一下位置&#xff0c;复制一下tar.gz的文…

Apollo进阶课程⑳丨Apollo感知之旅——机器学习与感知的未来

目录 1机器学习 可解释性是否需要 其它算法 2感知的未来 Sensor迭代 深度学习仿真数据AI芯片 智能交通设施 3思考 原文链接&#xff1a;进阶课程⑳丨Apollo感知之旅——机器学习与感知的未来 自动驾驶感知中的机器学习最大问题在于系统对模块的要求与普通的机器学习不同…

一步步编写操作系统 19 改进MBR,直接操作显卡

到目前为止&#xff0c;说了一部分有关显存的内容&#xff0c;这对于一般的输出来说已经足够了&#xff0c;下面咱们可以尝试写显存啦。我们将之前MBR改造一下&#xff0c;保留滚屏的操作&#xff0c;只修改有关输出的部分。即把通过bios的输出改为通过显存&#xff0c;你会发现…

Apollo进阶课程㉑丨Apollo规划技术详解——Basic Motion Planning and Overview

原文链接&#xff1a;进阶课程㉑丨Apollo规划技术详解——Basic Motion Planning and Overview 运动规划&#xff08;Motion Planning&#xff09;就是在给定的位置A与位置B之间为机器人找到一条符合约束条件的路径。这个约束可以是无碰撞、路径最短、机械功最小等。具体的案例…

ROS机器人导航仿真(kinetic版本)

准备工作&#xff1a; ubuntu 16.04系统;ROS kinetic版本;ROS包turtlebot,导航包rbx1,模拟器arbotix&#xff0c;可视化rviz 1、安装ubuntu 16.04系统与安装ROS kinetic版本自行百度安装。一下链接可作为参考。 http://blog.csdn.net/weicao1990/article/details/52575314 2…

1.深度学习练习:Python Basics with Numpy(选修)

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization 目录 1 - Building basic functions with numpy 1.1 - np.exp(), sigmoid function 1.2 - Sigmoid gradient …

一步步编写操作系统 20 x86虚拟bochs一般用法 上

bochs一般用法 bochs是一个开源x86 虚拟机软件。在它的实现中定义了各种数据结构来模拟硬件&#xff0c;用软件模拟硬件缺点是速度比较慢&#xff0c;毕竟全是软件来模拟&#xff0c;您想&#xff0c;虚拟机还要在软件中模拟各种中断&#xff0c;能不慢吗。不过它的功能非常强…

2.3)深度学习笔记:超参数调试、Batch正则化和程序框架

目录 1&#xff09;Tuning Process 2&#xff09;Using an appropriate scale to pick hyperparameters 3&#xff09;Hyperparameters tuning in practice: Pandas vs. Caviar 4&#xff09;Normalizing activations in a network&#xff08;重点&#xff09; 5&#xf…

2.深度学习练习:Logistic Regression with a Neural Network mindset

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ You will learn to: Build the general architecture of a learning algorithm, including: Initializing para…

JVM内存区域详解

Java中虚拟机在执行Java程序的过程中会将它所管理的内存区域划分为若干不同的数据区域。下面来介绍几个运行时数据区域。 一、程序计数器 1.1 简述 程序计数器&#xff08;Program Counter Register&#xff09;是一块较小的内存空间&#xff0c;它的作用可以看做是当前线程所…

3.深度学习练习:Planar data classification with one hidden layer

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ You will learn to: Implement a 2-class classification neural network with a single hidden layerUse unit…

一步步编写操作系统 11 实模式下程序分段的原因

cpu中本来是没有实模式这一称呼的&#xff0c;是因为有了保护模式后&#xff0c;为了将老的模式区别开来&#xff0c;所以称老的模式为实模式。这情况就像所有同学坐在同一个教室里&#xff0c;本来没有老同学这一概念&#xff0c;但某天老师领着一个陌生人进入教室并和大家宣布…