目 录
摘要....
第一章:梯度下降法算法原理解析....
1.1. 梯度下降算法的浅层解析....
1.2. 梯度下降算法中的重要概念....
1.3. 梯度下降算法原理详解....
第二章:梯度下降法分类与对比....
2.1. 批量梯度下降(SGD)....
2.2. 随机梯度下降(SGD)....
2.3. 小批量梯度下降(MBGD)....
第三章:总结....
3.1 梯度下降算法存在的问题....
3.2 梯度下降法优化算法的简介....
摘 要
梯度下降法是一种求解最优化的算法。其中心思想是沿着目标函数梯度的方向更新参数值以希望达到目标函数最小。机器学习在学习简单的线性回归时,常常使用最小二乘法求解损失函数的最小值。但在绝大多数情况下,损失函数都是非线性的,并且较为复杂。所以梯度下降法也常被用在机器学习领域。目前,许多优秀的算法都是在梯度下降算法的启发下诞生,如AdaGrad、RMSProp、Momentum等等,在后文中,我们会以机器学习的简单实例对梯度下降法进行详细解析,通过两种方式解释原理公式,分别是代数法和矩阵法。代数法不需要对线性代数基础,便于理解。但因为机器学习中输入数据大多为向量或张量(多维矩阵),所以这里也提供了矩阵法进行公式解析,需要线性代数的基础知识。
第一章:梯度下降法原理解析
1.1梯度下降算法的浅层解析(深入浅出的理解,有些专业名词在这一节只需混个眼熟即可,1.2中就会通过前后呼应的方式进行解析。)
在浅析梯度下降法时,我们可以想象我们深处高山上的某一处位置,而梯度下降法,就是帮助我们到达山底的方法。当我们不知道自身所处在山的具体位置时,我们可以通过查看最陡峭的下坡路寻找到最快到达山底的路,每走一段距离,我们将重新测试山坡的梯度。通过迭代的方式(反复测量和行走)直到到达山底,显然这是下山的最短路径。通过这个生动的例子,在机器学习中我们可以将初始位置当作是输入到预测函数的初始值,同时也对应损失函数上的某个起始点。山体的陡峭程度则是梯度,对应于损失函数的导数或偏导数。以测量最陡路径次数作为迭代次数,那么在一次迭代中所走的下坡路的路径则与学习率密切相关(后面会有公式)。通过一定次数的迭代,当我们走到山脚时,如果此山峰只有山脚这一个低谷,那么这个山脚就对应于损失函数的最小值。如下图所示。所以梯度下降法的目的就是寻找到损失函数的最小值。
如果损失函数是凸函数,那么最小值对应的就是山脚,但从图中不难看出,我们认为的最小值有可能只是极小值之一,也称局部最优点,就比如是在一个局部的山峰低处,而不是山脚。解决的方法属于较为复杂的梯度下降法的衍生算法,本文会在总结部分进行简单说明。
1.2 梯度下降法中的重要概念(与上文1.1的相呼应)
在本文详细讲解梯度算法之前,我们先了解梯度算法中的一些常见的重要概念。
1.3 梯度下降算法原理详解
本文将用代数法和和向量法(矩阵法)两种方式解析梯度下降算法。
1.3.1 代数法:
第一步:确认预测函数。本例设定的预测函数为Y (X1.X2,……XN)= W1X1 + W2X2……WNXN +B(其中W为模型参数)。如果加入特征项B,此处B的作用如预测函数作用中所描述此处我们就可以将预测函数归结为Y=。
第二步:确认损失函数。确定了预测函数之后,此处使用均方损失函数。在该训练数据集给定的情况下,损失函数的大小仅与参数Wi,B有关。所以我们设置损失函数为。其中Yi表示预测值,Y表示标准值。在1/2N中,1/2目的在于对L进行求导是使得导数的系数为1,因为N代表输入个数并且已知,所以此处1/2N是求损失函数损失数值的平均值。
第三步:初始化参数。上式中我们设置初始化参数Wi设置为1,步长为0.1。这些参数会在后续的迭代中不断进行优化。
第四步:进行梯度下降计算。
1.3.2 向量法(矩阵法):
向量法的基本思路与代数法基本相同,但此处输出,输入,参数(权重),截距项均为矩阵(向量)。相对于代数法,矩阵法的公式更加简介,也更容易理解。
第一步:确认预测函数:预测函数可设置为。我们假设线性回归模型输出的形状大小为Y∈Rn*1
。样本特征值X∈Rn*k
。权重形状大小W∈Rk*1
。偏置项B∈R1
。
第二步:确认损失函数:此处我们将代数方法中的损失函数进行向量化。。将上式中特征矩阵X上增加一个全为1的列向量,并且定义为
。所以损失函数即可化简为
。此处
。
第三步:进行梯度计算:将化简后的损失函数求梯度,即求偏导数可得:令偏导数为0可解出:θ
=
。最后我们进行一次迭代之后的参数更新,
。同理,迭代的停止条件为输入值在误差允许的范围之内。
第二章:梯度下降法的分类与对比
在1.3.1中使用梯度下降法求解损失函数的最小值的时候,m为传入的样本数。本文将以传入函数的样本数为变量将梯度下降法分为最基本的三种情况。三种情况分别为批量梯度下降(Batch Gradient Descent,BGD)、随机梯度下降(Stochastic Gradient Descent, SGD)、小批量梯度下降(Mini-Batch Gradient Descent, MBGD)。
2.1批量梯度下降
批量梯度下降法在每次都使用训练集中的所有样本来更新参数,代数法表达式为:。
优点:
(1)每次迭代过程是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。
(2)通过数据集所有样本确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。
缺点:
(1)当样本数目 m 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。
从迭代的次数上来看,BGD迭代的次数相对较少。其迭代的收敛曲线示意图可以表示如下:
2.2随机梯度下降法
随机梯度下降法每次迭代随机选取一个样本带入计算,使得每次迭代计算所耗费的时间较短。代数法表达式为。
优点:
(1)每次迭代带入参数少,迭代更新参数的速度大大加快。
缺点:
(1)因为每次迭代更新参数时所选的样本数量为1,导致精度下降。即使是凸函数也难以找到最优解。
(2)难以并行实现
2.3小批量梯度下降法
小批量梯度下降法则是在每次迭代中传入固定小批量的样本,这也是梯度下降法中使用较为广泛的一种方法,它介于批量梯度下降算法与随机梯度下降算法之间。现在通常将它们简单地成为随机(stochastic)方法。对于深度学习模型而言,人们所说的“随机梯度下降, SGD”,其实就是基于小批量(mini-batch)的随机梯度下降。
优点:
(1)计算速度比批量梯度下降算法快,每次迭代时传入部分样本进行参数的更新。
(2)在小批量选取样本时,我们可以将对参数更新影响效果较为相近的样本分为等价类,舍弃部分贡献较小的样本。
(3)每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。
缺点:
(1)在迭代的过程中,因为噪音的存在,学习过程会出现波动。因此,它在最小值的区域徘徊,不会收敛。
(2)BATCH SIZE选择不当会影响收敛结果。
其收敛曲线示意图如下:
第三章 总结篇
3.1 梯度下降法存在的问题
梯度下降法简单有效,适用范围广,但也并非完美无缺。比如在开篇时举例中提到的问题,当损失函数不是凸函数时,梯度下降法法所寻找的可能是极小值,也就是局部最优点。还有一个较为凸出的问题,就是学习率的设定,也就是步长的选择。如果学习率设定过大,计算结果会在迭代中的坐标轴上反复横跳。学习率设置过小又会产生较大的计算量。
3.2梯度下降法优化算法的简介
(1)AdaGrad ——动态学习率
该算法的思想是独立地适应模型的每个参数:具有较大偏导数的参数相应有一个较大的学习率,而具有小偏导数的参数则对应一个较小的学习率。这种方法的一个问题是频繁更新参数的学习率有可能会过小,以至逐渐消失。为了解决这个问题,又涌现出RMSProp ——优化动态学习率算法,以及不需要设置参数的AdaDelta算法,还有融合了RMSProp算法和AdaDelta算法的Momentum算法。
(2)RMSProp
RMSProp算法主要解决了AdaGrad中学习率过度衰减的问题。RMSProp 通过使用指数衰减平均(递归定义)以丢弃遥远的历史,使其能够在找到某个“凸”结构后快速收敛;
(3)Momentum——动量算法
动量算法,故名思意就是在寻找全局最优点的时候为点加上动量,是一种带动量的SGD方法。在SGD中,如果我们将下山的人比喻成纸团,那么纸团的质量小,碰撞到山壁时来回震荡较大,并且到达半山腰的平地时速度容易降为0而停止运动。Momentum算法就是在SGD的基础上将纸团换成铁球,那么铁球在下山的过程中因为碰撞所受到的震荡较小,在遇到平地时因为动量较大,离开平地继续下降的机率大大提升。
参考文章:
梯度下降法 —— 经典的优化方法 - 知乎
深入浅出--梯度下降法及其实现 - 简书
梯度下降算法原理讲解——机器学习_Arrow and Bullet-CSDN博客_梯度下降法
梯度下降法原理及小结 - 早起的小虫子 - 博客园 (cnblogs.com)
梯度下降(Gradient Descent)小结 - 刘建平Pinard - 博客园
基于PaddlePaddle2.0-构建线性回归模型 - 飞桨AI Studio - 人工智能学习与实训社区