最早接触梯度下降算法是在学习逻辑回归(Logistic Regression),对于权重的迭代更新。当然运用梯度算法的地方远不止逻辑回归,该方法思路简单但适用范围很广,简单的线性回归(Linear Regression),以及最近在看的神经网络(Neural Network)都有涉及梯度算法,所以掌握该方法还是很有必要的,下面来看看吧。
梯度算法适用于求极值的问题,极值包括两种(极大值、极小值),所以一般求极大值我们使用梯度上升算法,求极小值我们使用梯度下降算法。两者思路方法一致,只是迭代更新时的更新方式相反,下面以梯度下降为例。
简述梯度下降思路:
首先这里引用吴老师的例子来简单说明:
如上图,想象一下你正站立在山顶的这座红色山上,在梯度下降算法中,我们要做的就是旋转360度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。当然初始位置点也会影响最终的结果,从上图就能知道。
以上便是梯度下降的思想,这里首先来了解以下什么是梯度?通俗一点来说,梯度就是某一函数在某点处的方向导数沿着该方向取得最大值,即函数在当前位置的导数。可以简述为该公式:
,线上相近两点做差,当
趋近于0(即
)时
值存在,则函数在此点可导,
为此处的导数。
梯度下降算法:
当我们的目标函数为凸函数时,便可以使用梯度下降算法来更新参数,梯度下降算法的公式应该比较熟悉了:
其中为自变量,也就是下降的坐标位置;
为学习因子,也就是我们下山的一个步长,该值不宜过大、过小;
就是该点在此处的梯度。
梯度下降算法的公式很简单。但是“沿着梯度的反方向(坡度最陡)”是人们的惯性思维,其本质原因是什么?为什么局部下降最快的方向就是梯度的负方向呢?下面用较为简洁通俗的讲解来阐述梯度下降算法的数学推导过程。
一阶泰勒展开式:
简单来说,泰勒展开式的核心思想就是利用函数的局部线性相似这个概念。以一阶泰勒展开式为例:
用上面的公式与图形来进行阐述,首先凸函数的某一小段
由上图的粉色曲线表示,其中红色直线为粉色曲线的近似线性拟合。该直线的斜率等于
函数在
处的导数。根据直线方程公式,很容易推导出
的近似表达式为上面的公式:
简述一下推导过程,定义线性公式,
表示在
处的导数,也就是梯度表示为
,接着可以带入点
,得到
值,从而得到了
,最后再带入点
便得到了上面的最终公式。
便是我们利用一阶泰勒展开式推导得出,而其中主要利用的数学思想就是曲线函数的局部线性拟合相似。
梯度下降数学原理:
在了解了一阶泰勒展开式后,又该如何去理解梯度下降算法呢?接下来的重点就是如何去推导出梯度下降算法。
从上面的推导首先我们知道了一阶泰勒公式如下:
其中的是一个趋近于0的极小矢量,其值的大小也就是前面提到的步长
,
是标量,
的单位向量可以用
来表示,所以得出如下公式:(即当前位置到下一个距离梯度 = 步长*单位方向)
这里值得注意的一点是不能太大,否则对应上面的局部线性近似就有很大偏差,而一阶泰勒也就不成立了。在实际的模型参数中该值也不能太小,否则收敛太慢,导致一个长时间的训练。所以这也是一个剑魔中需要不断调参后选择的一个参数。
接下来就是局部下降的重点了!!!局部下降中我们希望通过每一次的下降(即值的更新)使得目标函数
能够不断变小。所以上式中可以得到
,即函数:
上式中为标量且一般为正值,所以可以忽略得到:
上面的公式就是我们求得梯度下降最快方向的关键点!!!由于与
都是向量,且其中
表示当前位置的梯度方向,
表示下一步长的单位向量,也是需要我们计算的值,通过求得
,便可以通过
来求得
的值。
而此时的如何得出?首先
与
皆为向量,而两个向量在内积的情况下会出现那些结果:
其中(红)与
(蓝)都是向量,其中
表示两者的夹角。
和
的乘积如下:
从上式中可以得出与
都是可定值(即标量),一旦确定就只需要确定
的值然后得出结果,而
的取值为
,很显然取
是最好的结果,此时
取得最小值,保证最优化
(即此时为梯度下降最快)。下图观察
的周期性变化:
通过上面的公式引出的余弦知识,我们得出
取值
最优,也就是两个向量相反,从而得出
值(变化范围-1到1):
此时我们已经求出了最优解的,带入公式
:
由于上式的为可定值(标量),所以可以省略该值,简化为如下公式:
迭代中进行转化也就得到了最上面我们提出的梯度下降算法公式:
最终,通过详细的步骤说明经过一步一步的转化我们得到了上面权重系数的更新表达式。
总结一下:
首先上面我们提到了一阶泰勒展开式,通过局部线性相似的思想得到了位置与
的关系,再通过向量相乘最小化原理得到了
单位向量与此时位置梯度
的关系,最后通过公式的变化求出梯度下降算法更新公式。通过本篇详细的公式推导相信你已经不仅了解了梯度下降算法的使用,也了解了其中的数学原理。
最后感谢一下yangyang同学为本篇文章提供的一张样例图片