本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
梯度下降算法是一种简单、有效、经典的求解最小值算法,
机器学习中通常需要求最小化损失函数时的参数的取值,因此经常使用梯度下降算法
本文介绍梯度下降算法的思想、实现流程和优缺点
本节讲解求解为什么需要使用梯度下降算法
为什么需要梯度下降算法
在单变量函数求取最小值问题中
我们通常只要令的导数为0,然后解出x就可以
然而,
在一般多元函数中,要求出最小值是非常困难的
虽然n个自变量,能求得n条偏导等式,
然而,只有这n条等式是线性方程组时,我们才有成熟的方法对其求解
如果是非线性方程,我们目前并没有成熟的求解方案
这也是为什么我们很喜欢构造线性问题,因为它能轻松求解
对于多元方程极小值问题,联立偏导方程求精确解的路子行不通,
我们的替代方案就是进行数值求解,梯度下降法就是其中常用方法之一
本节介绍梯度算法的思想及相关要点
梯度下降算法原理与思路
梯度下降算法的基本思想如下:
先取一个初始值,然后进行迭代
每次都往梯度的反方向调整(在一维中即导数的负方向)它
直到迭代条件终止(例如无法令的值下降,即达到局部最低点)
关于梯度下降法中一些补充说明
关于梯度的意义
在一元函数中,负梯度就是导数的反方向
在多元函数中,负梯度就是各个变量偏导数的反方向
它是函数下降最快的方向(即调整相同步长,负梯度能令f(x)下降最快),故也称为最速下降法
关于初始值
从算法原理,我们可以知道,
梯度下降法对 x 的初始化非常敏感
梯度下降法只能找到离初始值最近的局部极小值,
如果初始化不好,找到的结果也不好
PASS:往往是先随机初始化,然后多跑几次,看哪个结果好,就用哪一个
本节讲解梯度下降算法的具体算法流程
梯度下降算法流程图
梯度下降算法的流程图如下:
从梯度算法的流程图可以看到,梯度下降算法的步骤如下:
1. 先初始化x的值 (按个人经验初始化,或随机初始化,或设为0)
2. 计算 在处的梯度,令,(lr为学习率,可设为0.1)
3. 计算在处的梯度,令
4. ...如此类推....一直到满足迭代终止条件,最后一次的即为所要找的解。
迭代终止条件:达到迭代次数,或者 与变化不大,或者与变化不大
✍️简单的说,就是先初始化 ,然后按不断迭代就行
更具体的流程可以参考文章《梯度下降算法实例matlab》
本节讨论梯度下降算法中,负梯度的意义及学习率的相关内容
通些这些内容的补充,加深对梯度下降算法原理的理解
为什么按负梯度下降
《数学分析》中,负梯度方向是函数下降最快的方向,
即x=[2,3],如果梯度为[1,2],则x往[1,2]方向调整,能令函数f(x)下降最快的方向
(所谓最快,即调整同样的步长,该方向能令函数下降最快)
按负梯度下降,保证了调整方向的正确性
关于梯度下降算法的学习率
梯度下降算法为什么要设置学习率
目的是为了保证按梯度方向调整一定能下降。
梯度方向能下降是瞬时的,
如果调整步长过大,则不一定能保证函数能下降,
但只要调整步长足够小,函数就能下降(前提是梯度不为0)
所以,我们在调整时,加入学习率lr,以控制步长:
学习率的设置
要保证能下降,学习率就不能过大,
但学习率很小,每次迭代调整都很小,就需要迭代很多次。
为此,我们可以设定一个较中肯的学习率(例如,lr = 0.1)
自适应学习率
如果更智能一些,
在程序中把学习率改为自适应学习率:
如果本次迭代能令函数下降,我们把学习率调大些
如果次迭代不能令函数本下降,我们就把学习率调小些
或者更智能的设置,这就属于梯度下降法的拓展了
梯度下降法的优缺点
为进一步理解梯度下降算法原理,本节分析梯度下降法的优缺点
优点
(1)按负梯度调整,加上学习率的控制,则能保证x的调整,函数一定能下降。
(2)按负梯度下降,由于负梯度是下降最快的方向,在下降速度上更加有效。
缺 点
1. 无法跳出局部最优
遇到局部最优时,算法就停止,因为此时梯度为0
因此,该算法只能找到初始解的局部最优
对跳出局部完全无反抗能力
2. 要求连续可导
梯度算法要用到梯度,因此要求函数连续可导
对于不连续或不可导的,则不适用
3. 收敛速度慢
在梯度平缓处的迭代速度较慢,而极值附近一般都是相对较为平缓的,
因此梯度下降算法的收敛速度较为缓慢
以上就是梯度下降算法原理的全部内容了~
End