梯度下降法(gradient descent)是求解无约束最优化问题的一种最常用的方法,具有实现简单的优点,梯度下降法是迭代算法,每一步都需要求解目标函数的梯度向量,下面我们来全方位的理解一下梯度下降法。

一、梯度下降法的理解

用一个通俗的例子来讲解一下梯度下降法,假设小明现在站在山顶上(下图中A点的位置),此时他接到电话有急事需要下山,但是山上的能见度很低,小明只可以根据周围的环境信息去确定一条下山的路线,那么如何才能最快的到达山脚下呢(图中F点的位置)?梯度下降法便能很好的解决这个问题,为了达到最快的下山速度,在每一个能见范围内小明需要寻找最陡的那条路去走,假设从A点的可见范围内最陡的路线是AB,那么小明就要先走AB这条路,后面的每一个点都是同理的直到到达山脚F点位置,此时我们便可以认为找到了一条最优的路线。

瞎聊机器学习——梯度下降法_机器学习

我们初步了解了一下小明需要用什么方法下山,但是在每一个能见度点(图中A-F点)如何去找到最陡的那条路呢?

最直观的方法便是我们用一个工具去测量能见度内的每一条路线的长度,但是如果测量全部的路线会变得麻烦又浪费时间,过少的测量又会导致选不出合适的路线,这就要求我们去选择一个合适的测量频率来保证省时又准确。

二、梯度下降法的数学意义

看完了上面的例子,我相信你已经对梯度下降法有了一个初步的认识,至少也应该大致明白了它的工作原理,下面我们从数学的角度上来说一下梯度下降法。

梯度

首先需要大家明确一个概念:梯度。

梯度是什么?

梯度在本质上是一个向量,它表示某一函数在该点的方向导数沿着该方向取得最大值(导数可以看做是某一点的斜率,引入到上述的下山问题,斜率最大时是不是就是最陡的下山方向呢?)。

在一个一元函数中我们可以很好地求出它的导数,在这里不在赘述,下面举个例子来分析一下多元函数的梯度。

定义一个函数如下:

瞎聊机器学习——梯度下降法_优化方法_02

\bigtriangledown J(\theta)=<\frac{\partial J}{\partial \theta_1},\frac{\partial J}{\partial \theta_2},\frac{\partial J}{\partial \theta_3}>=<-2,-3,4>

通过上面的式子我么可以看到多元函数的的梯度就是该函数对每个变量求偏导之后的向量表示。

梯度下降

通过上面简短的讲解,我们已经大致明白了梯度的含义以及计算方法,梯度下降法意在通过梯度得到使函数值下降最快的方向并沿着该方向进行迭代计算,也就是在给定初始值

瞎聊机器学习——梯度下降法_梯度下降_04

的条件下,不断的迭代,更新

瞎聊机器学习——梯度下降法_优化方法_05

的值,来进行目标函数的极小化,直至收敛,由于负梯度的方向才是使函数值下降最快的方向,所以我们每次迭代都以负梯度的方向来更新

瞎聊机器学习——梯度下降法_优化方法_05

的值,从而达到减小函数值的目的。

梯度下降法的表达式:

其中

表示进行一次迭代后的参数值;:=表示迭代;

瞎聊机器学习——梯度下降法_优化方法_07

表示学习率(可以看做是下山问题中的步长)我们不能一次下降过长的距离,所以要用学习率来控制这个距离;

瞎聊机器学习——梯度下降法_机器学习_08

就表示第i次迭代时的参数和梯度;式子中的符号来源于上文对负梯度作用的解释。

下面通过一个例子来说明一下梯度下降法:

有函数以及参数如下:

瞎聊机器学习——梯度下降法_梯度下降_09

使用梯度下降法进行迭代:

瞎聊机器学习——梯度下降法_梯度下降_10


这里举出了一个一元函数的例子,多远函数同理,我们先算出它的梯度再迭代进行参数更新即可,这里不再举例说明。

以上便是对梯度下降法的通俗理解方式以及其数学上的计算方法,后续将会更新梯度下降法的优化以及他们在代码上的实现。