梯度下降法(Gradient Descent)
通过第五章《神经网络的学习(训练)》和第七章《损失函数》的介绍,我们已经知道,神经网络通过不断迭代在学习时寻找最优参数(权重和偏置)。这里所说的最优参数是指损失函数取最小值时的参数。但是一般而言,损失函数很复杂,参数空间很庞大,很难采用数学方程方法来直接求解损失函数 的最小值,而是采用极限无限逼近的方法(也就是我们所说的梯度下降法)。假设:位于三维空间里的任意一个点都可以找到与之相切的平面,在高维的情况下也能找到超平面与其相切。那么在相切平面上的任意一个点都有多个方向,但只有一个方向能使该函数值上升最快,这个方向我们称之为梯度方向,而这个梯度方向的反方向就是函数值下降最快的方向,这就是梯度下降的过程。
为了比较形象地解释梯度这个概念,我们先复习一下跟梯度相关的几个数学概念。
方向
什么是方向?
函数 在这个方向上的图像(投影):
方向导数
我们知道在一元函数中A点的导数是A点切线的斜率
函数 的A点在这个方向上也是有切线的,其切线的斜率就是方向导数:
梯度(Gradient)
很显然,A点不止一个方向,而是360度都有方向:
梯度:是一个矢量,其方向上的方向导数最大(意味着在这个方向上,函数的值增加最快。从图形上看,就是函数图形在某点最“陡峭”的方向)。其大小正好是此点的最大方向导数。
直观的图形如下图所示:
与梯度正交的方向是函数变化率为 0 的方向。
梯度的计算公式
我们用三维空间(三元函数)来举例简化说明梯度的计算公式。
在三维空间中,怎么表示一个向量 的方向?我们通常是用方向余铉来表示:
函数 在向量 这个方向上的方向导数定理及其计算公式如下:
若函数 在点 处可微, 为 向量 方向的方向余铉,则函数 在点 处沿 方向的方向导数必存在,且满足:
证明(过程比较繁琐,可忽略):
设动点 的坐标为 , 记 ,
若当 时,
由于函数 在点 处可微,根据可微函数的增量公式 ,有
于是,, 取极限有
其中,
, 称为梯度,它是由全部变量的偏导数汇总而成的向量。
是向量 的单位方向余铉
, 其中 为向量 方向与梯度方向的夹角:
- 当 时,向量 方向与梯度方向相同,函数 的增长最快
- 当 时,向量 方向与梯度方向相反,函数 的减少最快
- 当 时,向量 方向与梯度方向正交,函数 的变化率为0
梯度下降法()
梯度下降法的通俗类比就是“盲人下山”。假设一个盲人被困在山上,需要从山上下来(即找到山的最低点,也就是山谷)。但他是单独一个人,因此他必须利用自己周围的信息去找到下山的路径。这个时候,梯度下降法就是一个下山的好办法。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的方向,然后朝着山的高度下降的地方走,然后每走一段距离,都反复采用这个方法,最后就能成功的抵达山谷。
© davidionut / iStock / Getty Images Plus
山谷位置就是函数的局部极小值点或全局最小值点。根据之前的场景假设,最快的下山的方式就是找到当前位置最陡峭的方向,然后沿着此方向向下走,对应到函数中,就是找到给定点的梯度 ,然后朝着梯度相反的方向,就能让函数值下降的最快!所以,我们重复利用这个方法,反复求取梯度,最后就能到达局部极小值点或全局最小值点,这就类似于我们下山的过程。
在三维空间或高维空间在三维上的投影的梯度下降法:
我们在《神经网络的学习(训练)》一章中介绍过神经网络的训练步骤:
- 随意(一般采用随机方式)初始化一组权重 (其中包含偏置)
- 根据一组输入数据特征 (样本)、权重 、激活函数,计算输出,其中
- 根据输出,以及样本预期值(标签),计算的调整值 :
- 根据上一步计算出来的调整值 ,调整 :
- 对一组样本反复迭代执行步骤(1)-(4),直到得到一组满意的权重为止
其中第3步计算权重的调整值时,有一个参数 ,是指学习率或叫作步长。通过 来控制下山每一步走的距离,以保证不要走得太快,错过了最低点。同时也要保证不要走的太慢,导致等到天黑野兽出没了,还没有走到山下。所以 的选择在梯度下降法中往往是很重要的! 不能太大也不能太小。太小导致迟迟走不到最低点,太大导致错过最低点!
我们想要走到山下,道路有千万条,但总有一条可以让我们以最快的速度下山。当然,这里的最快速度仅仅作用在当前的位置点上,也就是说在当前位置A我们选择一个方向往山下走,走了一步之后到达了另外一个位置B,然后我们在B位置计算梯度方向,并沿该方向到达位置处C,重复这个过程一直到终点。但是,如果我们把走的每一步连接起来构成下山的完整路线,这条路线可能并不是下山的最快最优路线。
原因是什么?可以用一句古诗来解释:“不识庐山真面目,只缘身在此山中。”因为我们在山上的时候是不知道山的具体形状的,因此无法找到一条全局最优路线。那我们只能关注脚下的路,将每一步走好,这就是梯度下降法的原理。
关于梯度下降的具体优化算法有很多种,我们将在后面的《与学习(训练)相关的技巧》中详细介绍。下一章我们先介绍误差反向传播法。
References:
马同学:如何直观形象的理解方向导数与梯度以及它们之间的关系?
Introduction to Gradient Descent Algorithm (along with variants) in Machine Learning
遇见数学:修订【方向导数, 梯度向量和切平面】图解高等数学 -下 12