机器学习实战----梯度下降

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangyingjie09/article/details/80458381

       梯度下降是迭代法的一种。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。

       大多数的机器学习算法都涉及魔种形式的优化。优化指的是改变x以最小化或最大化某个函数f(x)的任务。我们把最小化或最大化的函数成为目标函数或规则。当我们对其进行最小化时,也把他们称为代价函数、损失函数或误差函数。假设一个函数y=f(x),其中x和y是实数。这个函数的导数为f'(x)。导数f'(x)代表f(x)在点x处的斜率。换句话说,它表明如何缩放输入的小变化才能在输出获得相应的变化。因此导数对于最小化一个函数很有用,因为它告诉我们如何改变x的略微地改善y 。我们可以将x往导数的反方向移动一小步来减少f(x)。这种技术称为梯度下降。


当f'(x)=0时,导数无法提供往哪个方向移动的信息。f'(x)=0的点称为临界点或驻点。一个局部极小值意味着这个点在f(x)小于所有邻近点,因此不可能通过移动无穷小的步长来减小f(x)。一个局部极大点意味着这个点的f(x)大于所有邻近点,一次不可能通过移动无穷小的步长增大f(x)。有些临界点(斜率为0的点)既不是最小点也不是最大点,这些点称为鞍点。

       使f(x)取得绝对最小值的点事全局最小点。函数可能只有一个全局最小点或存在多个全局最小点,还可能存在不是全部最优的全局极小点。我们优化的函数可能含有很多不是最优的全局极小点,或者还有很多很多处于非常平坦的区域内的鞍点。尤其是当输入多维的时候,所有这些将使优化变得困难。因此我们通常寻找使f最下的点,但这在任何形式意义下并不一定是最小。

       针对具有多维输入的函数,我们需要用到偏导数。偏导数衡量点x处只有xi增加时f(x)如何变化。梯度是相对一个向量求导的函数:f的导数是包含所有偏导数的向量,记为▽xf(x)。梯度的第i个元素是f关于xi的偏导数在多维情况下,临界点的梯度中所有元素都为0的点。在u(单位向量)的方向导数是函数f在u方向的斜率。就是方向导数是函数f(x+αu)关于α的导数(在α=0时取得)。使用链式法则,当a=0时,∂/∂αf(x+αu)=uTxf(x)。为了最小化f,找到使f下降最快的方向,计算方向导数:

minuTxf(x)=min||u||2||▽xf(x)||2cosθ。其中θ是u与梯度的夹角。将||u||2=1代入,并忽略与u的无关项,简化为mincosθ。这个u与梯度方向的相反时取得最小。梯度向量指向上坡,负梯度向量指向下坡。在负梯度方向上移动可以最小化f,被称为最速下降法或梯度下降法。最速下降建议点为x'=x-ε▽xf(x)。其中ε为学习率,是一个确定步长大小的正标量。我们可以通过集中不同的方法选择ε,普遍的梯度下降法的核心,是最小化目标函数 J(θ),其中θ是模型的参数,θ∈Rd。它的方法是,在每次迭代中,对每个变量,按照目标函数在该变量梯度的相反方向,更新对应的参数值。其中,学习率η决定了函数到达(局部)最小值的迭代次数。换句话说,我们在目标函数的超平面上,沿着斜率下降的方向前进,直到我们遇到了超平面构成的「谷底」。如果你不熟悉梯度下降法的话,你可以在这里找到一个很好的关于优化神经网络的介绍。方法是选择一个小常数。有时我们通过计算,选择是方向导数消失的步长。还有一种方法是根据几个ε计算    f(x-ε▽xf(x)),并选择其中能产生最小目标函数值的ε。这种策略为线搜索。

         最速下降在梯度的每一个元素为0时收敛。在某些情况下,我们也许能够避免运行该迭代算法,并通过求解方程直接跳过临界点。

      总结:梯度下降法的核心,是最小化目标函数 J(θ),其中θ是模型的参数。它的方法是,在每次迭代中,对每个变量,按照目标函数在该变量梯度的相反方向,更新对应的参数值。其中,学习率ε决定了函数到达(局部)最小值的迭代次数。换句话说,我们在目标函数的超平面上,沿着斜率下降的方向前进,直到我们遇到了超平面构成的「谷底」。


猜你喜欢

转载自blog.csdn.net/zhangyingjie09/article/details/80458381