从导数到方向导数和梯度,一步步理解深度学习中的梯度下降算法

文章首发于慕课网原文地址,因csdn对数学公式支持更好故重新编辑整理发表于此,方便需要的读者阅读理解。

吴恩达的深度学习课程五门里已经学了四门,课后的编程练习也都跟着做了,在学习的过程中,时常忍不住去探究背后的数学原理,毕竟大学里也学过高等数学,概率论和线性代数这几门机器学习的必备数学课程,又考过研。虽然不是数学天才,但自认为对数学还是蛮感兴趣的,而吴恩达的这门课恰好相对弱化了数学理论,我就自己去翻书+Google学习了。最近偶然翻自己以前的笔记,看到写的关于梯度的概念的部分,感觉还是有些不清晰和遗忘的地方,梯度是梯度下降算法的基础,而梯度下降算法又是神经网络最基本的算法,于是我又花了一天的时间复习了一下。为了防止自己以后再遗忘,也希望对其他在初学的小伙伴们有帮助,我决定总结一下相关数学知识,这篇手记会从导数的概念开始,一步步引出梯度下降算法。

导数的定义

函数 y = f ( x ) y=f(x) y=f(x)在点 x 0 x_0 x0处的导数:

f ′ ( x 0 ) = l i m Δ x → 0 f ( x 0 + Δ x ) − f ( x 0 ) Δ x f'(x_0)=lim_{\Delta x \to 0}\frac{f(x_0+\Delta x)-f(x_0)}{\Delta x} f(x0)=limΔx0Δxf(x0+Δx)f(x0)

自变量 x x x x 0 x_0 x0处取得增量 Δ x \Delta x Δx时,相应的因变量取得增量 Δ y = f ( x 0 + Δ x ) − f ( x 0 ) Δy=f(x_0+Δx)-f(x_0) Δy=f(x0+Δx)f(x0),函数在x0处的导数就是 Δ y Δy Δy Δ x Δx Δx之比在 Δ x 0 Δx_0 Δx0时的极限,导数其实就是因变量y在点x0处的变化率,它反映了因变量随自变量的变化而变化的快慢程度。另一方面,从几何意义上来说,函数在一点的导数值就是过这一点的切线的斜率

根据导数的定义可以知道,当 f ′ ( x ) > 0 f'(x)\gt0 f(x)>0时, f ( x ) f(x) f(x)单调递增,减小 x x x可以减小 f ( x ) f(x) f(x),当 f ′ ( x ) < 0 f'(x)\lt0 f(x)<0时, f ( x ) f(x) f(x)单调递减,增大 x x x可以减小 f ( x ) f(x) f(x)。由此可知 f ( x − α f ′ ( x ) ) < f ( x ) ( 其 中 α > 0 ) f(x-αf'(x)) \lt f(x)(其中α>0) f(xαf(x))<f(x)(α>0),因此我们可以将x往导数的反方向移动一小步来减小f(x),即x:=x-αf’(x)。这就是梯度下降法

方向导数与神经网络中的梯度下降

在训练神经网络时,我们都是通过定义一个代价函数cost function),然后通过反向传播更新参数来最小化代价函数,深度神经网络可能有大量参数,因此代价函数是一个多元函数,多元函数与一元函数的一个不同点在于,过多元函数的一点,可能有无数个方向都会使函数减小。这样说可能不太直观,我们以日常生活中登山运动为例,当你下山的时候,可以走从山顶到山脚的一条直道,也可以走环山的路或者S型的路,显然环山的路和S型的路要绕着山走,花费的时间更长,路更平缓,而直道则更陡峭,下山的速度更快,花费的时间更短。引申到数学上,我们可以把山这样的曲面看作一个二元函数z=f(x,y),二元函数是多元函数里最简单的情形,也是易于可视化直观理解的。前面提到一元函数导数的几何意义是切线的斜率,对于二元函数,曲面上的某一点(x0,y0,z0)会有一个切平面,切平面上的无数条直线都是过这一点的切线,这些切线的斜率实际上就是过这一点的无数个方向导数的值,和一元函数一样,方向导数的值实际反映了多元函数在这一点沿某个方向的变化率。正如下山必然有一条最陡峭、最快的路径,方向导数也有一个最小值,在最小值对应的方向上,函数下降最快,而这个方向其实就是梯度的反方向。对于神经网络,在方向导数最小的方向更新参数可以使代价函数减小最快,因此梯度下降法也叫最速下降法。

偏导数的定义

上面对方向导数和梯度下降的解释偏感性,下面为了从数学上明确方向导数和梯度的概念,加深理解,我们先来看看偏导数的定义。

在一元函数中,导数表示了函数的变化率。对于多元函数,自变量不止一个,因变量与自变量的关系比一元函数复杂,我们先考虑多元函数关于其中一个自变量的变化率,这就引出了偏导数的概念。

还是以二元函数 z = f ( x , y ) z=f(x,y) z=f(x,y)为例,当 y y y固定为 y 0 y_0 y0 x x x x 0 x_0 x0处有增量 Δ x Δx Δx时,相应的函数有增量 f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) f(x_0+Δx,y_0)-f(x_0,y_0) f(x0+Δx,y0)f(x0,y0),那么:

l i m Δ x → 0 f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) Δ x lim_{\Delta x\to0}\frac{f(x_0+Δx,y_0)-f(x_0,y_0)}{Δx} limΔx0Δxf(x0+Δx,y0)f(x0,y0)

即为 z = f ( x , y ) z=f(x,y) z=f(x,y)在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)处对 x x x的偏导数,记为 f x ( x 0 , y 0 ) f_x(x_0,y_0) fx(x0,y0),对y的偏导数定义与之类似,记为 f y ( x 0 , y 0 ) f_y(x_0,y_0) fy(x0,y0)

方向导数与梯度

偏导数实际上反映了多元函数沿坐标轴方向的变化率,那么函数沿某一非坐标轴方向的指定方向的变化率如何衡量呢?

l l l x O y xOy xOy平面上以点 P 0 ( x 0 , y 0 ) P_0(x_0,y_0) P0(x0,y0)为起始点的一条射线, e l = ( c o s α , s i n α ) e_l=(cosα,sinα) el=(cosα,sinα)是与l同方向的单位向量,则射线l的参数方程为:
x = x 0 + t c o s α , y = y 0 + t s i n α ( t ≥ 0 ) x=x_0+tcosα,\\ y=y_0+tsinα (t≥0) x=x0+tcosαy=y0+tsinαt0

P ( x 0 + t c o s α , y 0 + t s i n α ) P(x_0+tcosα,y_0+tsinα) P(x0+tcosα,y0+tsinα) l l l上另一点,那么:

l i m t → 0 + f ( x 0 + t c o s α , y 0 + t s i n α ) − f ( x 0 , y 0 ) t lim_{t \to0^+}\frac{f(x_0+tcosα,y_0+tsinα)-f(x_0,y_0)}{t} limt0+tf(x0+tcosα,y0+tsinα)f(x0,y0)

f ( x , y ) f(x,y) f(x,y)在点 P 0 P_0 P0沿方向 l l l的方向导数,不难发现,函数 f ( x , y ) f(x,y) f(x,y) x x x y y y坐标轴方向的方向导数分别就是其关于x和y的偏导数,可以证明,函数f(x,y)的方向导数就等于:

f x ( x 0 , y 0 ) c o s α + f y ( x 0 , y 0 ) s i n α f_x(x_0,y_0)cosα+f_y(x_0,y_0)sinα fx(x0,y0)cosα+fy(x0,y0)sinα

这个式子其实可以看成是两个向量 ( f x ( x 0 , y 0 ) , f y ( x 0 , y 0 ) ) (f_x(x_0,y_0),f_y(x_0,y_0)) (fx(x0,y0),fy(x0,y0)) ( c o s α , s i n α ) (cosα,sinα) (cosα,sinα)的点积,根据点积的计算公式,假设上述两个向量的夹角为θ,上式可化为:

∣ ∣ ( f x ( x 0 , y 0 ) , f y ( x 0 , y 0 ) ) ∣ ∣ c o s θ ||(f_x(x_0,y_0),f_y(x_0,y_0))||cosθ (fx(x0,y0),fy(x0,y0))cosθ

向量 ( f x ( x 0 , y 0 ) , f y ( x 0 , y 0 ) ) (f_x(x_0,y_0),f_y(x_0,y_0)) (fx(x0,y0),fy(x0,y0))就是函数 f ( x , y ) f(x,y) f(x,y)在点 P 0 ( x 0 , y 0 ) P_0(x_0,y_0) P0(x0,y0)梯度,由此引出梯度的概念,梯度就是一个向量,这个向量的每个元素分别是多元函数关于每个自变量的偏导数。从上式可以看出,当θ=0时,方向导数的值最大,多元函数增加最快,也就是说梯度的方向就是函数增加最快的方向,当θ=π时,方向导数的值最小,多元函数减小最快,也就是在梯度相反的方向上,方向导数最小。

总结

  1. 导数、偏导数和方向导数衡量的都是函数的变化率;
  2. 梯度是以多元函数的所有偏导数为元素的向量,代表了函数增加最快的方向;
  3. 在梯度反方向上,多元函数的方向导数最小,函数减小最快,在神经网络中,在梯度反方向更新参数能最快使代价函数最小化,所以梯度下降法也叫最速下降法。

参考资料

  1. 高等数学 第六版 上下册 —— 同济大学数学系编 高等教育出版社
  2. 深度学习(花书)—— Ian GoodFellow
  3. 如何直观形象的理解方向导数与梯度以及它们之间的关系? —— 知乎

本作品采用知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。要查看该许可协议,可访问 http://creativecommons.org/licenses/by-nc-sa/4.0/ 或者写信到 Creative Commons, PO Box 1866, Mountain View, CA 94042, USA。

你可能感兴趣的:(机器学习,深度学习)