方向导数和梯度:从偏导数到最优化
方向导数和梯度:从偏导数到最优化
方向导数和梯度是微积分中的重要概念,在机器学习、深度学习等领域有着广泛的应用。例如,在优化算法中,梯度下降法就是基于梯度的概念来寻找函数最小值的。本文将从偏导数出发,逐步解释方向导数和梯度的概念及其关系。
今天我们来讨论一下什么是方向导数,什么是梯度,以及为什么沿着梯度的反方向移动会让函数值减小得最快。首先我们了解一下偏导数。偏导数的概念非常容易理解,例如下图,z=$x^{2}$+$y^{2}$,x与y形成的二维平面上,每个点(对应一组xy值)都能在z的函数图像上找到对应的投影点,这个点的高度就是z值的大小。z对x的偏导数就在保持变量y大小不变的情况下(粉色切面上y值均相等),沿着x轴的方向,z变化的值与x变化的值之比,也就是图一中切线的斜率。
图一:三维空间中某点处沿着x的偏导数方向的切线
反过来,我们也可以求出z对y的偏导数。然而,xy平面上的点也可以向着不同于x和y轴的方向移动,此时z值的变化率会各不相同,自然也不等于偏导数。如何求出在某点处让z值变化最快的方向?我们需要完成以下分析。
1. 定义方向导数
首先明确,随着xy平面上的点沿着一个方向变化一个单位,z的变化值应当定义为沿着该方向的方向导数,即沿着某个方向的导数。如图二所示,假设从A点向B点移动t个单位,即在x轴方向上移动了tcos $\theta $ 的距离,在y轴上移动了 tcos(\beta)的距离。当这个$\theta $ 等于0时,就是x的偏导数(当$\theta $ 等于90度时等于y的偏导数)。所以我们说偏导数是方向导数的一种特殊情况。
图二:沿某方向移动t个单位
2. 计算方向导数
由全微分公式
[\Delta Z = f_{x} \Delta x +f_{y} \Delta y + o((x^{2} + y^{2} )^{1/2} ) ]
可以推出,由x和y两个自变量组成的函数,其方向导数的计算公式为:
[f( x_{0} +tcos \alpha , y_{0} + tsin \alpha ) - f( x_{0} ,y_{0}) = f_{x} t cos \alpha + f_{y} t sin \alpha + o(t) ]
(因为在上例的移动过程中共移动了t个单位,x的变化量即为$ tcos \alpha$,y同理)
两边同时除t,我们就很自然地得到了以下的方向导数公式:
[(f( x_{0} +tcos \alpha , y_{0} + tsin \alpha ) - f( x_{0} ,y_{0}))/t = f_{x} cos \alpha + f_{y} sin \alpha ]
当t趋向于无穷小时,等号左侧即为我们要求的方向导数
3. 推导方向导数的最大值
数学中,我们把由 某个函数全部偏导数 组成的向量称为函数的梯度。在第二步中我们获得的这个公式,其意义是可以进一步将fx,fy两个偏导数抽离出来组成梯度,将cos $\alpha $ 和 cos $\beta $同样抽离出来,组成一个方向向量。这样方向导数就可以写成是梯度与方向导数的内积。根据我们的向量知识,两个向量的内积,即为方向向量投影到梯度向量上的长度,与梯度向量长度的乘积。由于在某一点处梯度向量是确定的,方向向量的长度也是固定的1,因此只有当方向向量与梯度向量共线时,也就是夹角(\alpha)为0时取到最大值。因此我们可以说,当我们沿着梯度方向移动一个点时,会获得最大的方向导数,也就是说此时函数值的变化程度最大。当我们想要尽可能减小函数值时,应该沿着梯度方向的反方向移动。
图三:方向导数的最值求解