略解深度学习优化策略

2023-10-09 10:50

本文主要是介绍略解深度学习优化策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、基本概念

二、梯度下降

三、牛顿法

四、随机梯度下降(SGD)

五、动量法


一、基本概念

常见的优化算法:SGD和Adam

梯度的简单解释:梯度可以理解为函数的导数,也可理解为函数的倾斜程度。函数图像水平时,函数的梯度消失。

凸函数:深度学习中出现的几乎所有优化问题都是非凸的。下面是对凸(convex)和非凸的一个介绍。

 由上图可以找到明显的规律是,第一个图形和后两个图形的明显区别,第一张图中的点线段部分出现在了图形外,而后两张线段都被包含在了图形内部。前者是非凸,后者是凸。继续看下面的图形。

上面三张图形,中间的是非凸函数,两边的是凸函数,具体来说就是函数上的任意两点连线的线段中间的点的纵坐标大于或者小于函数上中间点的纵坐标,这类函数就叫做凸函数。 

凸函数的性质:凸函数的局部最小值也是全局最小值。

优化函数:用于来对损失函数进行最小化优化,就是采取一种怎么样的策略使损失函数接近于最小值。优化函数的目标是为了最小化目标函数,深度学习的目标则是为了寻找合适的模型去解决一个指定的问题。对于训练和推理来说,优化主要是在训练阶段发挥作用,而深度学习的目标则是为了在推理阶段发挥作用,优化是为了较小训练误差,深度学习则是为了减小泛化误差。

经验风险:经验风险是训练数据集的平均损失。

风险:是整个数据群的预期损失。

深度学习的优化挑战:

1、局部最小值:对于非凸函数,则存在多个极值点,此时局部最小值和全局最小值是不一样的。

2、鞍点:鞍点指的是函数一阶导和二阶导均为0的点,此时虽然函数梯度消失,但既不是全局最小值也不是局部最小值。而到了这里优化可能会停止,这将导致优化过程失败。为了更加明白鞍点这个概念的由来,下面右图给出了一个三维空间的函数图像,其中红色的点就是鞍点,整个图像像极了马鞍。

3、梯度消失:梯度消失是最常遇见的问题,如果函数遭遇了梯度消失问题,那么函数的优化可能会趋于停滞。

二、梯度下降

梯度下降就是函数沿着趋向于梯度消失的方向进行优化,我们可以通过设置学习率来调整梯度下降的变化率。主要思想就是通过搜索方向(梯度消失的方向)和步长(学习率的大小)来对参数进行更新。

梯度下降的具体演示如下图所示。

由上图可知,起始点在右上角的那个点,沿着梯度下降的方向进行着优化,最终达到了函数的极小值点,在凸函数中,同样这也是函数的最小值点,也就是一个最优解。下面是两个不同学习率的优化解。

 上图第一张图片中由于学习率过大,导致优化的步幅较大,一直来回振荡了多次,仍然没有得到函数的最优解,而第二张图片中由于学习率国小导致在指定的步数中,函数仍然没有得到最优解。而在非凸的问题中却没有那么方便,例如下图。

 由上图可以看到,即使函数到了局部最小值的点,但是仍然没有获得一个全局的最优解。

三、牛顿法

前面我们介绍了梯度下降的方法,知道梯度下降是利用函数的一阶导求梯度,然后对函数进行极小值的优化。但是一阶导的学习率设置是非常困难的,如何自动确定一个合适的学习率是我们需要的。我们在高数中学习过利用一阶导二阶导直接求函数的极值点和该点的凹凸性来求解函数的极值点。牛顿法就是利用这个原理来进行的,这样可以大大加快收敛的速度。但是神经网络中的矩阵求导并不是我们手动操作的那么简单,对矩阵进行求逆的时间复杂度很高,且进行反向传播计算可能雪上加霜。且牛顿法对于非凸函数的求解很复杂,需要进行一定的预处理,这就是为什么梯度下降的方法更加收到欢迎的原因。虽然这个方法不能直接应用于深度学习,但它们为如何设计高级优化算法提供了有用的思维直觉。

四、随机梯度下降(SGD)

由于目标函数的计算是成批计算的,即计算所有的样本损失然后取平均值作为样本的一个平均损失。我们设置下面的目标函数,其中f_i(x)是关于索引i的训练样本的损失函数,则目标函数如下f(x) = \frac{1}{n}\sum _{i=1}^{n}f_i(x)

通过上面的目标函数,我们对每个样本进行梯度计算,可以得到梯度计算的公式如下,

\triangledown f(x)= \frac {1}{n}\sum _{i=1}^{n} \triangledown f_i(x)

如果使用梯度下降方法,则每个自变量迭代的计算代价为O(n),因此,当训练集数据比较多时,每次迭代的梯度下降计算代价将较高。

随机梯度下降在每次迭代的时候,对数据样本随机均匀采样一个索引i,并计算梯度\triangledown f_i(x)以更新x,这样每个批次迭代的时候只需要相当于对单个样本进行计算梯度最优值,这样大大加快了收敛所需要的时间。此外,随机梯度是对完整梯度的无偏估计,因为

\mathbb{E} \triangledown f_i(x) = \frac{1}{n} \sum_{i=1}^{n} \triangledown f_i(x)= \triangledown f(x)

这意味着,就平均而言,随机梯度是对梯度的良好估计。下面给出随机梯度下降的过程模拟。

 由上图可以看出,在其快要收敛到极值点时,由于采用的是随机梯度,所有每次快要收敛时会不停地震荡。即使经过更多次数的迭代,仍然会不停的震荡,因为一个样本的极值无法代表全体样本的极值点。我们唯一的选择时改变学习率,但是固定的学习率设置的太大或者时太小都会带来不利的影响,所以我们期望使用一个可以变化的学习率来进行步幅的调整。例如,在刚开始的时候,我们使用更大的学习率来快速接近极值点。在快接近极值点时,我们使用较小的学习率一步一步达到极值点,以防学习率过大振荡。

动态学习率

为了解决固定学习率带来的不利影响,我们推出了动态学习率。主要介绍一下几个调整学习率的策略:

\eta (t) = \eta _i \ if \ t_i \leq t\leq t_{i+1}   分段常数

\eta (t) = \eta _{0}\cdot e^{- \lambda t}                     指数衰减

    \eta (t) = \eta_{0}\cdot (\beta t+1)^{-\alpha }         多项式衰减

分段常数表示在某个阶段会将学习率设置为一个指定的值,指数衰减可以更积极的降低学习率的值,但是会导致算法过早的收敛停止。\alpha =0.5的多项式衰减时一个比较好用的做法,在凸优化中,这种速率表现良好。

随机梯度和有限样本

随机梯度下降时,我们每次抽取一个样本进行梯度下降,并且将所有的实例遍历了一遍。那么为什么不采用可替换采样呢?即采取有放回的方式,这种情况下,对n个样本执行n次随机抽样会导致样本被选择至少一次的概率为0.63,样本被恰好选择一次的概率为0.37。与无替换采样(即无放回)相比,方差增加且降低了数据的效率,所以随机梯度一般用无替换采样来操作的。

小批量随机梯度下降

前面说的梯度下降和随机梯度下降,每次分别用全部数据来计算梯度和每次使用一个样本来计算梯度皆是有利有弊。每当数据⾮常相似时,梯度下降并不 是⾮常“数据⾼效”。而由于CPU和GPU⽆法充分利⽤向量化,随机梯度下降并不特别“计算⾼效”。这暗⽰ 了两者之间可能有折中⽅案,这便涉及到小批量随机梯度下降(minibatch gradient descent)。

采用小批量随机梯度下降方法的原因一大部分是为了计算的效率,因为如果单纯使用随机梯度下降,那么过大的方差必然导致总体的收敛困难。如果采用总体的梯度下降,那么计算的成本较大。而采用了平均梯度的批量随机梯度下降则很好的对矩阵进行了加速。

五、动量法

对于多个变量有多个梯度的情况下,选取一个固定的学习率显然不是一个好的选择。因为在某些变量的梯度下选取一个固定的学习率可能会很快达到收敛,而在其他梯度下可能还没有达到收敛的状态或者收敛停滞。前面我们提到的动态学习率在同一时刻下仍然是一个固定的值,虽然说比始终固定值的学习率更好,但是仍然没有解决实际的问题。

为此提出了动量法,和之前不太一样的是,动量法考虑了前面更新状态时的梯度大小,将前面状态的梯度作为一个现在动量的因变量求得如今的梯度然后才对其进行更新。具体如下,

v_t\leftarrow \beta v_{t-1}+g_{t,t-1}

x_t\leftarrow x_{t-1}- \eta _t v_t

使用前面状态的动量和前面状的梯度求得现在的动量,然后根据得到的动量取更新权重参数。

这篇关于略解深度学习优化策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/172327

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份