大多数深度学习算法都涉及某种形式的优化问题,而最常用的求解优化问题的方法就是梯度下降法。
对于梯度下降法我们都耳熟能详,
也知道梯度方向就是目标函数增加最快的方向
可是为什么呢,为什么是增加的方向,又为什么是最快?
为了搞清楚为什么,我们可以从方向导数入手。
首先,需要搞清楚以下几个概念:
导数、方向导数、偏导数、梯度
1.导数
导数是我们高中就接触到的,也是最熟悉的。它一般是针对一元函数而言的,比如函数, 它在某一点出的导数,表示的是函数在该点的变化快慢,也即变化率,
其符号的正负表示原函数的上升或者下降
其绝对值大小表示原函数上升或者下降的快慢。
由于一元函数只有一个方向,所以一般直接称为导数,而不说方向导数,因为方向都一样(只有正反的区别而已),但是当涉及到多元函数时,就需要使用方向导数了。
2.方向导数
当函数为二元或二元以上时,就涉及到多个方向,为了区分不同方向上的导数,就需要使用方向导数。我们以二元函数为例。
假设函数为,其在点处沿方向的方向导数定义为:
其中为向量的方向余弦,t为两点之间的距离。
上式也可以使用微分的形式表达如下
上述公式中,等式右侧两项中的前半部分之所以是
,
而不是
因为此时t趋向于0,其是由极限中的定义决定的。
一般地,当函数可微时,有
与导数一样,方向导数也表示函数在某一点处沿某个方向的变化率。
其符号的正负表示原函数的上升或者下降
其绝对值大小表示原函数上升或者下降的快慢。
3.偏导数
偏导数指的是对于多元函数,选定其中一个变量作为求导变量,其余变量视为常量,对选定变量进行求导所得到的方向导数。比如,函数对的偏导数为
4.梯度
梯度向量是指将函数分别对和求偏导得到的偏导数,以向量的形式写出来,即:
可总结如下:
导数:标量,针对一元函数而言
方向导数:标量,反映函数的变化率。
偏导数:标量,多元函数沿坐标轴方向上的方向导数。
梯度:向量,其元素为函数对各个变量的偏导数。
复习了以上四个概念后,我们重新看一下方向导数,
可以将方向导数使用梯度简写为如下形式:
其中为向量的单位向量,
也即是,函数在某一点处沿方向的方向导数为梯度方向与向量的内积,即:
我们知道,方向导数可以反应函数的变化快慢,
那么我们从(6)式中即可推导出为什么梯度方向是函数增加最快的方向。
当更新方向的方向与梯度方向一致时,方向导数取得最大值,且最大值为梯度的模(正数)。
由方向导数的物理意义是函数在某一点处沿着某一方向的变化率,
可知,其取最大值则表示,沿此方向函数变化最快
又因为其为正数,所以函数值会增加
至此,我们就明白为什么沿着梯度方向是函数增加最快的方向了。
这又跟梯度下降法有什么关系呢?
梯度下降法,是指在对目标函数进行更新时,沿着负梯度的方向会使得目标函数值下降最快,因此梯度下降法又称为最速下降法。
因为我们一般会把机器学习中的优化问题转化为求最小值问题,也即让目标函数不断下降。
因此,可通过沿目标函数的负梯度方向对目标函数进行更新即可实现以最快速度到达目标函数的极小值点,如果函数是凸函数,则可以到达函数的最小值点。