梯度下降

梯度下降

梯度下降是机器学习优化中常用的算法,因为凸函数 (convex function) 沿着负梯度方向移动一定能够到达全局最小值 (global minimum),在实际应用中由于损失函数大多数情况下不能保证为凸函数,因此梯度下降法更可能在局部 (局部凸函数) 找到局部极小值 (local minimum).

什么是梯度

首先梯度 (gradient) 是一个向量,这样意味着梯度是有方向的. 在迭代过程中,通过沿着函数的负梯度方向慢慢移动,可以最快速的找到局部极小值. 而梯度的值本身是某一点的所有方向导数中值最大的一个.

为什么梯度是函数下降最快的方向

为了解释这个问题,首先需要明确方向导数和偏导数的概念. 其中方向导数是指在多位空间内对某一方向求导得出的导数,对于空间内某一点来说,其方向导数有很多个;偏导数是指函数沿着某一特定坐标轴方向的导数,也是函数沿着该方向的变化率.

对于空间内的一点来说,我们能够很容易的求得给个自变量所对应的偏导数,对于二元函数来说 : \[\nabla f = \left[ \begin{matrix} f_x(x,y) \\ f_y(x,y) \end{matrix} \right]\] 根据空间向量的知识可以很容易的知道:空间内任意方向都可以由一组不共线的向量组成 : \[D = f_xcos\theta + f_ysin\theta\]\(A=(f_x,f_y)\), \(I = (cos\theta, sin\theta)\),根据向量内积的公式可得 : \[A⋅I = |A|⋅|I|⋅cos\alpha\] 其中\(\alpha\)是向量\(A\)和向量\(I\)的夹角度. 由上面的公式可以看出,当\(cos\alpha\)值为1时,\(\alpha\)为0度 (也就是\(I\)\(A\)平行时),方向导数最大. 也就是说函数沿着与向量\((f_x, f_y)\)平行的反方向移动时,在局部的下降速度是最快的.

更新参数

有了梯度向量,我们在每次更新参数时就变得非常容易了,只要在每次迭代中向梯度方向移动就可以了 : \[w'_i = w_i - \alpha {\partial L \over \partial w_i }\]

0%