这里是一则小广告:
关注作者请点击这里哦:zdr0
我的专栏里面不仅有学习笔记,也有一些科普文章,相信我的专栏不会让您失望哦~大家可以关注一下:数学及自然科学
-尽力写最好的讲义,尽力写最好的科普。
-最后在为自己宣传一下:最近本人受邀开通了头条号。头条号名称与本人的专栏名称一致,即“数学及自然科学”,邀请大家去关注一下哦,不胜感激!嘿嘿[搓搓手表示期待]~今后在知乎发布的文章也会发布在头条号哦~另外,头条号也会不定期的更新一些其他的新的文章呐!链接在下方
数学及自然科学的头条主页 - 今日头条(www.toutiao.com)www.toutiao.com
也可以直接扫码关注哦
在这篇文章中,我想来介绍一个在机器学习中非常重要的算法—梯度下降算法。
本文目录
-
高数知识复习
一元函数的导数
方向导数
偏导数
梯度
多元函数的极值问题(无约束)
凸函数
-
梯度下降算法
总注:
1.
:
的高阶无穷小。
一元函数的导数
函数
在点
处是
可导的,当
在
上存在的时候。其中
称为函数
在点
处的
导数。当函数
在
上的任意一点
都是可导的时候,称函数
在
上式可导的。这说明在
上,函数
的导数仍是自变量
的一个函数,称为函数
的
导函数,记作:
:一般我们所说的导数都指的是函数的导函数。
一元函数
在点
的导数的几何意义是:函数
在该点的切线斜率。
在一元函数的最后,来复习一下复合函数的求导法则。
设函数
在
处,和函数
在
处都是可导的,则函数
在
处是可导的,且其导数为:
该法则也称为链式法则。
方向导数
对于
,因为
是线性的,有:
则有:
其中矢量
是单位矢量,即
,这个
称为
方向,此时式
称为函数
在点
处的沿着
的
方向导数。记作:
偏导数
函数
在点
处的偏导数定义为:
其中:
矩阵:
梯度
可微函数
的梯度场是一个矢量场:
从而有:
式
也可以写为:
其中:
则由式
可得:
式
也表示了函数
沿方向
方向的变化。对于
有:
一个标量场
的梯度的意义是:标量场
的最快的变化方向。它垂直于
的水平集。
的水平集指的是
的点的集合。在这个集合上,显然有
,若忽略误差,则由式
可得:
多元函数的极值问题(无约束)
函数
的二阶偏导数定义为:
若其二阶偏导数连续,则:
该定理称为
定理。
设函数
二阶连续偏导。且在
中有一路径连结
和
,则有:
对于合适的
,有:
该定理为多元函数的
公式。
:这里只进行到的二阶近似,一般来讲已足够。
是必要条件。
函数
具有局部极值(局部极小值或局部极大值)的必要条件是:
这样的使
的内点
称为
稳定点。
是充分条件。
设函数
二阶连续偏导。并设
:
我们考察:
,即
是
正定的,则
在
处具有一个
严格极小值;
,即
是
负定的,则
在
处具有一个
严格极大值;
如果对于不同的
,
的
符号是不确定的,即
是
不定的,则
在
处
没有极值;
,即
是
半负定或半正定的,则该
判据不再适用。
其中,
是函数
的鞍点。
我们也可以使用所谓的
矩阵来判定多元函数的极值。
设函数
二阶连续偏导。则矩阵:
称为函数
的
矩阵。基于
矩阵的判定定理为:
必要条件
。
函数
具有局部极值(局部极小值或局部极大值)的必要条件是:
这样的使
的内点
称为
稳定点。
必要条件
+ 充分条件
。
设函数
二阶连续偏导,且设其稳定点为
,则:
是
的一个
极小值点,则
是
半正定的;
是
的一个
极大值点,则
是
半负定的;
是
正定的,则
是
的一个
严格极小值点;
是
负定的,则
是
的一个
严格极大值点;
是
不定的,则
是
的一个
鞍点。
我们可以使用
的
特征值的情况来判断
是函数的哪一种点。对于非退化情况
,有:
,则
是
的一个
严格极小值点;
,则
是
的一个
严格极大值点;
,则
是
的一个
鞍点。
其中,
是
的特征值。
有约束的多元函数的极值问题需要结合
乘子法进行讨论。
凸函数
函数
连续,若对于
,
,使得:
则称
是定义在
上的
凸函数,特别的,若:
则称
是定义在
上的
严格凸函数。
这说明在区间
上,函数
的图像总位于点
和点
连线下方。
梯度下降算法
本节中的梯度下降算法与机器学习中的梯度下降算法有点区别。意在通过本节理解机器学习中的梯度下降算法。
首先,我们先来看一个一元函数的例子。
设函数:
求函数的极值点。
对于这个问题,学习过高数的朋友表示太简单了,只要求导并令其导数等于零就可以了:
而函数
是
严格凸的,所以,
是函数
的极小值点。这样问题就解决啦!但是我们现在想要寻求另外一种算法,来求得函数
的极小值。这就是我们即将要介绍的
梯度下降算法。
在进行梯度算法之前,我们首先需要在函数的曲线上找到一个初始点,我们将这个初始点设为
就可以了,梯度下降算法的精髓就在于更新初始点,即每经过一次更新都会得到一个新的初始点。所以,我们的算法核心是这样的:
显然,式
是一个迭代式。老规矩,我来对式
中的每一项做一个说明:
-
:初始点。是已知的,迭代的过程中
处开始;
-
:学习率。这是机器学中的叫法,为了统一,这里我们姑且也就这样叫吧;
-
:函数
在点
处的导数;
-
:步长。同样是机器学习中的叫法;
-
:等号(或许应该叫赋值符号)。在机器学习中的梯度下降算法中使用符号
进行赋值,机器学习中的
代表判定等号两端是否相等,即输出是一个布尔类型的值。这一点需要特别注意!
-
:每次迭代后的新的初始点。
我们不妨以函数
为例来看看梯度下降法是如何运作的。
图片7.1:Example 7.1应用梯度下降算法。
首先选择初始点
,对应于
,即图片6.1中的点
,并假设学习率为
。下面开始第一次迭代:
此时,经由第一次迭代点
下降到点
,即
。步长为线段
在
轴上的投影。现在进行第二次迭代:
此时,经由第二次迭代点
下降到点
,即
。步长为线段
在
轴上的投影。现在进行第三次迭代:
此时,经由第三次迭代点
下降到点
,即
。步长为线段
在
轴上的投影。现在进行第四次迭代:
此时,经由第四次迭代点
下降到点
,即
。步长为线段
在
轴上的投影。现在进行第五次迭代:
此时,经由第五次迭代点
下降到点
,即
。步长为线段
在
轴上的投影......
我们发现随着迭代的继续,
越来越接近点
,即我们的极小值点。并且,我们发现随着迭代次数的增加,步长在逐渐减小。
这里有几个小问题:
如果初始点选在极小值点的左侧会怎样呢?
通过将初始点选择在极小值点的右侧的分析我们可以发现,函数
在极小值右侧的切线斜率总是大于零的,而且由于学习率
也是大于零的,所以步长
总是大于零的。则由式
可知,每一次迭代更新后的初始点都是迭代之前的初始点减掉一个正数,这意味着每次迭代更新后的初始点都小于迭代之前的初始点,在坐标轴上表现为更新后的初始点向
轴左侧移动,并逐渐接近我们的极小值点。而函数
在极小值左侧的切线斜率总是小于零的,所以步长
总是小于零的。则由式
可知,每一次迭代更新后的初始点都是迭代之前的初始点减掉一个负数(即加上一个正数),这意味着每次迭代更新后的初始点都大于迭代之前的初始点,在坐标轴上表现为更新后的初始点向
轴右侧移动,并逐渐接近我们的极小值点。
如果一开始的初始点就选在了极小值点
会怎样呢?
我们知道极小值点处的导数为
,则由式
可知步长
,进而:
这就意味着每一次迭代后的初始点都是极小值点。
学习率
的值会影响梯度下降法的收敛性吗?
答案是会的。我们来具体分析一下:
- 学习率
过小:则步长
受
的影响也会过小,这就意味着要进行很多次的迭代才能到达极小值点处,这样会使得梯度下降法的收敛速度变慢。
- 学习率
过大:则步长
受
的影响也会过大,这就意味着也许在某一次迭代之后由于步长过大从而越过极小值点,并且在越过之后不会再有机会回到极小值点,这就会导致梯度下降法不收敛。
综上所述,选择一个合适的学习率
是很重要的。
梯度下降算法对函数的选择有要求吗?
可运用梯度下降算法的函数一般是凸函数。
下面,我们再来看一个多元函数的例子。
设函数:
求函数
的极值点。
首先我们来求其稳定点,即:
再来求
:
由于
,所以,基于
的判据适用,且易知
是正定的,则由
的
可知,点
是
的严格极小值点。
图片7.2:f(x,y)=x^2+y^2图像。
与一元函数不同的是,多元函数的梯度下降算法必须将每个自变量都进行梯度下降,这一点很好理解,如果只对其中一个变量(比如只对
)进行梯度下降的话所得到的只是
分量上的最优解,所以,若想要求得全局最优解(即极小值点)就必须对所有自变量进行梯度下降。所以对于
,其梯度下降算法应该是:
需要特别注意的是:
必须是同时被更新的!因为如果先更新某一个参数,比如先更新
好了,那么在更新
的时候步长
中的
就是已经被更新过的了,这就会导致步长的变化无法预测。
式
中的参数含义与式
中的参数的含义一致。
对于一个凸函数
,那么它的梯度下降算法是怎样的呢?这是最一般的情况了,如果使用
表示第
个参数,则我们有:
其中,
,同理,所有的
也是同时被更新的。如果令
,则可将式
写为:
一元函数的
在这里同样适用。
我们同样可以使用多元函数的梯度下降法来分析一下
。
图片7.3:对Example 7.2使用梯度下降算法。
图片7.4:俯视图。
选择初始点
,即图片7.3中的点
,并假设学习率为
。下面开始第一次迭代:
此时,经由第一次迭代点
下降到点
,即
。步长为线段
在
平面上的投影。现在进行第二次迭代:
此时,经由第二次迭代点
下降到点
,即
。步长为线段
在
平面上的投影。现在进行第三次迭代:
此时,经由第二次迭代点
下降到点
,即
。步长为线段
在
平面上的投影......
由上分析可见,随着迭代次数的增加,我们的点
越来越趋于极小值点
。而且我们发现,在上述分析中,我们并没有用到第三个坐标
。实际上,我们在研究多元函数的梯度下降问题的时候函数所对应的坐标总是用不到的,所以,我们只考察函数的水平集(或者叫等势线、等高线)就可以了。比如对于一个二元函数来讲,它的水平集是所有的函数值等于常数的点的集合,即:
当
取不同的值的时候,
是
平面内的一族曲线。比如对于函数
,它的水平集:
当
取不同的值的时候表示的就是
平面内的一族圆。
在下一篇文章中,我们会开始机器学习中的梯度下降算法的讲解。