深度学习之学习笔记(八)—— 梯度下降法

梯度下降法(Gradient Descent)

通过第五章《神经网络的学习(训练)》和第七章《损失函数》的介绍,我们已经知道,神经网络通过不断迭代在学习时寻找最优参数(权重和偏置)。这里所说的最优参数是指损失函数取最小值时的参数。但是一般而言,损失函数很复杂,参数空间很庞大,很难采用数学方程方法来直接求解损失函数 Loss 的最小值,而是采用极限无限逼近的方法(也就是我们所说的梯度下降法)。假设:位于三维空间里的任意一个点都可以找到与之相切的平面,在高维的情况下也能找到超平面与其相切。那么在相切平面上的任意一个点都有多个方向,但只有一个方向能使该函数值上升最快,这个方向我们称之为梯度方向,而这个梯度方向的反方向就是函数值下降最快的方向,这就是梯度下降的过程。

 

为了比较形象地解释梯度这个概念,我们先复习一下跟梯度相关的几个数学概念。

方向

什么是方向?

函数 f(x, y) = \frac{x^2+y^2}{2} 在这个方向上的图像(投影):

 

方向导数

我们知道在一元函数中A点的导数是A点切线的斜率

函数 f(x, y) = \frac{x^2+y^2}{2} 的A点在这个方向上也是有切线的,其切线的斜率就是方向导数

 

梯度(Gradient)

很显然,A点不止一个方向,而是360度都有方向:

梯度是一个矢量,其方向上的方向导数最大(意味着在这个方向上,函数的值增加最快。从图形上看,就是函数图形在某点最“陡峭”的方向)。其大小正好是此点的最大方向导数。

直观的图形如下图所示:

与梯度正交的方向是函数变化率为 0 的方向。

 

梯度的计算公式

我们用三维空间(三元函数)来举例简化说明梯度的计算公式。

在三维空间中,怎么表示一个向量 \vec{a}=(a_x, a_y, a_z) 的方向?我们通常是用方向余铉来表示:




函数 f 在向量 \vec{a} 这个方向上的方向导数定理及其计算公式如下:

若函数 f(x, y, z) 在点 M_1=(x_1, y_1, z_1) 处可微,\cos \alpha, \cos \beta, \cos \gamma 为 向量\vec{a} 方向的方向余铉,则函数 f(M) 在点 M_1 处沿 \vec{a} 方向的方向导数必存在,且满足:

\frac{d\,f}{d\,a} = \frac{\partial f}{\partial x}\cos \alpha + \frac{\partial f}{\partial y}\cos \beta+\frac{\partial f}{\partial z}\cos \gamma


证明(过程比较繁琐,可忽略):

设动点 M 的坐标为 M(x_1+\Delta x, y_1+\Delta y, z_1+\Delta z ), 记 \rho =\overline{M_1M} = \sqrt{(\Delta x)^2+(\Delta y)^2+(\Delta z)^2}

若当 M\rightarrow M_1 时,

\frac{d\, f}{d \,a}=\lim_{M\rightarrow M_1}\frac{f(M)-f(M_1)}{\overline{MM_1}}=\lim_{\rho \rightarrow 0} \frac{f(x_1+\Delta x, y_1+\Delta y, z_1+\Delta z ) - f(x_1, y_1, z_1)}{\rho }

由于函数 f(x, y, z) 在点 M_1=(x_1, y_1, z_1) 处可微,根据可微函数的增量公式 ,有

f(M)-f(M_1) =f_x(x_1,y_1,z_1)\Delta x + f_y(x_1,y_1,z_1)\Delta y +f_z(x_1,y_1,z_1)\Delta z + o( \rho)

 于是,\frac{f(M)-f(M_1)}{\overline{MM_1}}=\frac{\partial f}{\partial x} \cdot \frac{\Delta x}{\rho } + \frac{\partial f}{\partial y} \cdot \frac{\Delta y}{\rho } + \frac{\partial f}{\partial z} \cdot \frac{\Delta z}{\rho } + \frac{o(\rho)}{\rho}, 取极限有

\frac{d\, f}{d \,a}=\lim_{M\rightarrow M_1}\frac{f(M)-f(M_1)}{\overline{MM_1}}=\lim_{\rho \rightarrow 0} ( f_x\cdot \frac{\Delta x}{\rho } + f_y\cdot \frac{\Delta y}{\rho } + f_z\cdot \frac{\Delta z}{\rho } + \frac{o(\rho)}{\rho})

=\frac{\partial f}{\partial x} \cos \alpha + \frac{\partial f}{\partial y} \cos \beta + \frac{\partial f}{\partial z} \cos \gamma


\frac{d\,f}{d\,a} = \frac{\partial f}{\partial x}\cos \alpha + \frac{\partial f}{\partial y}\cos \beta+\frac{\partial f}{\partial z}\cos \gamma = \nabla f(x) \cdot \vec{a^{\circ}}

其中,

grad\, f = \nabla f(x) = \left ( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z} \right ), 称为梯度,它是由全部变量的偏导数汇总而成的向量

\vec{a^{\circ}} = (\cos \alpha, \cos \beta, \cos \gamma)  是向量 \vec{a} 的单位方向余铉

 

\nabla f(x) \cdot \vec{a^{\circ}} = \left | \nabla f(x) \right |\cdot \cos \theta, 其中 \theta 为向量 \vec{a} 方向与梯度方向的夹角:

  • 当 \theta = 0 时,向量 \vec{a} 方向与梯度方向相同,函数 f 的增长最快
  • 当 \theta = \pi 时,向量 \vec{a} 方向与梯度方向相反,函数 f 的减少最快
  • 当 \theta = \frac{\pi }{2} 时,向量 \vec{a} 方向与梯度方向正交,函数 f 的变化率为0


 

梯度下降法{\color{Red} \bigstar \bigstar \bigstar \bigstar \bigstar }

梯度下降法的通俗类比就是“盲人下山”。假设一个盲人被困在山上,需要从山上下来(即找到山的最低点,也就是山谷)。但他是单独一个人,因此他必须利用自己周围的信息去找到下山的路径。这个时候,梯度下降法就是一个下山的好办法。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的方向,然后朝着山的高度下降的地方走,然后每走一段距离,都反复采用这个方法,最后就能成功的抵达山谷。

© davidionut / iStock / Getty Images Plus

山谷位置就是函数的局部极小值点或全局最小值点。根据之前的场景假设,最快的下山的方式就是找到当前位置最陡峭的方向,然后沿着此方向向下走,对应到函数中,就是找到给定点的梯度 ,然后朝着梯度相反的方向,就能让函数值下降的最快!所以,我们重复利用这个方法,反复求取梯度,最后就能到达局部极小值点或全局最小值点,这就类似于我们下山的过程。

 

在三维空间或高维空间在三维上的投影的梯度下降法:

 

我们在《神经网络的学习(训练)》一章中介绍过神经网络的训练步骤:

  1. 随意(一般采用随机方式)初始化一组权重 \vec{w} (其中包含偏置w_b
  2. 根据一组输入数据特征 \vec{x}样本)、权重 \vec{w}激活函数f,计算输出y,其中y = f (x_1w_1 + x_2w_2 + \cdot \cdot \cdot + x_{n-1}w_{n-1} + w_b)
  3. 根据输出y,以及样本预期值y^\phi(标签),计算\vec{w}的调整值 \Delta \vec{w}\Delta \vec{w} = \eta (y^\phi - y) \vec{x}
  4. 根据上一步计算出来的调整值 \Delta \vec{w},调整 \vec{w} :\vec{w} = \vec{w} + \Delta \vec{w}
  5. 对一组样本反复迭代执行步骤(1)-(4),直到得到一组满意的权重\vec{w}为止

其中第3步计算权重的调整值时,有一个参数 \eta,是指学习率或叫作步长。通过 \eta 来控制下山每一步走的距离,以保证不要走得太快,错过了最低点。同时也要保证不要走的太慢,导致等到天黑野兽出没了,还没有走到山下。所以 \eta 的选择在梯度下降法中往往是很重要的!\eta 不能太大也不能太小。太小导致迟迟走不到最低点,太大导致错过最低点! 

我们想要走到山下,道路有千万条,但总有一条可以让我们以最快的速度下山。当然,这里的最快速度仅仅作用在当前的位置点上,也就是说在当前位置A我们选择一个方向往山下走,走了一步之后到达了另外一个位置B,然后我们在B位置计算梯度方向,并沿该方向到达位置处C,重复这个过程一直到终点。但是,如果我们把走的每一步连接起来构成下山的完整路线,这条路线可能并不是下山的最快最优路线。
原因是什么?可以用一句古诗来解释:“不识庐山真面目,只缘身在此山中。”因为我们在山上的时候是不知道山的具体形状的,因此无法找到一条全局最优路线。那我们只能关注脚下的路,将每一步走好,这就是梯度下降法的原理。

关于梯度下降的具体优化算法有很多种,我们将在后面的《与学习(训练)相关的技巧》中详细介绍。下一章我们先介绍误差反向传播法

 

 

References:

马同学:如何直观形象的理解方向导数与梯度以及它们之间的关系?

Introduction to Gradient Descent Algorithm (along with variants) in Machine Learning

遇见数学:修订【方向导数, 梯度向量和切平面】图解高等数学 -下 12

博客园:直观理解梯度,以及偏导数、方向导数和法向量等

徐小湛的博客:可微函数的增量公式  

博客园:梯度下降讲解(举例场景+数学分析)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值