zoukankan      html  css  js  c++  java
  • 直观理解梯度,以及偏导数、方向导数和法向量等(转载)

    写在前面

    梯度是微积分中的基本概念,也是机器学习解优化问题经常使用的数学工具(梯度下降算法),虽然常说常听常见,但其细节、物理意义以及几何解释还是值得深挖一下,这些不清楚,梯度就成了“熟悉的陌生人”,仅仅“记住就完了”在用时难免会感觉不踏实,为了“用得放心”,本文将尝试直观地回答以下几个问题,

    • 梯度与偏导数的关系?
    • 梯度与方向导数的关系?
    • 为什么说梯度方向是上升最快的方向,负梯度方向为下降最快的方向?
    • 梯度的模有什么物理意义?
    • 等高线图中绘制的梯度为什么垂直于等高线?
    • 全微分与隐函数的梯度有什么关系?
    • 梯度为什么有时又成了法向量?

    闲话少说,书归正传。在全篇“作用域”内,假定函数可导。

    偏导数

    在博文《单变量微分、导数与链式法则 博客园 | CSDN | blog.shinelee.me》中,我们回顾了常见初等函数的导数,概括地说,

    导数是一元函数的变化率(斜率)。导数也是函数,是函数的变化率与位置的关系。

    如果是多元函数呢?则为偏导数

    偏导数是多元函数“退化”成一元函数时的导数,这里“退化”的意思是固定其他变量的值,只保留一个变量,依次保留每个变量,则NN元函数有NN个偏导数。

    以二元函数为例,令z=f(x,y)z=f(x,y),绘制在3维坐标系如下图所示,

    z = f(x, y)

    在分别固定yy和xx的取值后得到下图中的黑色曲线——“退化”为一元函数,二维坐标系中的曲线——则偏导数zx∂z∂x和zy∂z∂y分别为曲线的导数(切线斜率)

    partial derivative x

    partial derivative y

    由上可知,一个变量对应一个坐标轴,偏导数为函数在每个位置处沿着自变量坐标轴方向上的导数(切线斜率)

    Partial derivative

    方向导数

    如果是方向不是沿着坐标轴方向,而是任意方向呢?则为方向导数。如下图所示,点PP位置处红色箭头方向的方向导数为黑色切线的斜率,来自链接Directional Derivative

    Directional Derivative

    方向导数为函数在某一个方向上的导数,具体地,定义xyxy平面上一点(a,b)(a,b)以及单位向量u⃗ =(cosθ,sinθ)u→=(cos⁡θ,sin⁡θ),在曲面z=f(x,y)z=f(x,y)上,从点(a,b,f(a,b))(a,b,f(a,b))出发,沿u⃗ =(cosθ,sinθ)u→=(cos⁡θ,sin⁡θ)方向走tt单位长度后,函数值zz为F(t)=f(a+tcosθ,b+tsinθ)F(t)=f(a+tcos⁡θ,b+tsin⁡θ),则点(a,b)(a,b)处u⃗ =(cosθ,sinθ)u→=(cos⁡θ,sin⁡θ)方向的方向导数为:

    =====ddtf(a+tcosθ,b+tsinθ)∣∣∣t=0limt0f(a+tcosθ,b+tsinθ)f(a,b)tlimt0f(a+tcosθ,b+tsinθ)f(a,b+tsinθ)t+limt0f(a,b+tsinθ)f(a,b)txf(a,b)dxdt+yf(a,b)dydtfx(a,b)cosθ+fy(a,b)sinθ(fx(a,b),fy(a,b))(cosθ,sinθ)ddtf(a+tcos⁡θ,b+tsin⁡θ)|t=0=limt→0f(a+tcos⁡θ,b+tsin⁡θ)−f(a,b)t=limt→0f(a+tcos⁡θ,b+tsin⁡θ)−f(a,b+tsin⁡θ)t+limt→0f(a,b+tsin⁡θ)−f(a,b)t=∂∂xf(a,b)dxdt+∂∂yf(a,b)dydt=fx(a,b)cos⁡θ+fy(a,b)sin⁡θ=(fx(a,b),fy(a,b))⋅(cos⁡θ,sin⁡θ)

    上面推导中使用了链式法则。其中,fx(a,b)fx(a,b)和fy(a,b)fy(a,b)分别为函数在(a,b)(a,b)位置的偏导数。由上面的推导可知:

    该位置处,任意方向的方向导数为偏导数的线性组合,系数为该方向的单位向量。当该方向与坐标轴正方向一致时,方向导数即偏导数,换句话说,偏导数为坐标轴方向上的方向导数,其他方向的方向导数为偏导数的合成

    写成向量形式,偏导数构成的向量f(a,b)=(fx(a,b),fy(a,b))∇f(a,b)=(fx(a,b),fy(a,b)),称之为梯度

    梯度

    梯度,写作f∇f,二元时为(zx,zy)(∂z∂x,∂z∂y),多元时为(zx,zy,)(∂z∂x,∂z∂y,…)。

    我们继续上面方向导数的推导,(a,b)(a,b)处θθ方向上的方向导数为

    ==(fx(a,b),fy(a,b))(cosθ,sinθ)|((fx(a,b),fy(a,b))||1|cosϕ|f(a,b)|cosϕ(fx(a,b),fy(a,b))⋅(cos⁡θ,sin⁡θ)=|((fx(a,b),fy(a,b))|⋅|1|⋅cos⁡ϕ=|∇f(a,b)|⋅cos⁡ϕ

    其中,ϕϕ为f(a,b)∇f(a,b)与u⃗ u→的夹角,显然,当ϕ=0ϕ=0即u⃗ u→与梯度f(a,b)∇f(a,b)同向时方向导数取得最大值最大值为梯度的模|f(a,b)||∇f(a,b)|,当ϕ=πϕ=π即u⃗ u→与梯度f(a,b)∇f(a,b)反向时方向导数取得最小值,最小值为梯度模的相反数。此外,根据上面方向导数的公式可知,在夹角ϕ<π2ϕ<π2时方向导数为正,表示u⃗ u→方向函数值上升,ϕ>π2ϕ>π2时方向导数为负,表示该方向函数值下降。

    至此,方才有了梯度的几何意义

    1. 当前位置的梯度方向,为函数在该位置处方向导数最大的方向,也是函数值上升最快的方向,反方向为下降最快的方向;
    2. 当前位置的梯度长度(模),为最大方向导数的值。

    等高线图中的梯度

    在讲解各种优化算法时,我们经常看到目标函数的等高线图示意图,如下图所示,来自链接Applet: Gradient and directional derivative on a mountain

    Kl27an.png

    图中,红点为当前位置,红色箭头为梯度,绿色箭头为其他方向,其与梯度的夹角为θθ。

    将左图中z=f(x,y)z=f(x,y)曲面上的等高线投影到xyxy平面,得到右图的等高线图。

    梯度与等高线垂直。为什么呢?

    等高线,顾名思义,即这条线上的点高度(函数值)相同,令某一条等高线为z=f(x,y)=Cz=f(x,y)=C,CC为常数,两边同时全微分,如下所示

    dz===fxdx+fydy(fx,fy)(dx,dy)dC=0dz=∂f∂xdx+∂f∂ydy=(∂f∂x,∂f∂y)⋅(dx,dy)=dC=0

    这里,两边同时全微分的几何含义是,在当前等高线上挪动任意一个极小单元,等号两侧的变化量相同f(x,y)f(x,y)的变化量有两个来源,一个由xx的变化带来,另一个由yy的变化带来,在一阶情况下,由xx带来的变化量为fxdx∂f∂xdx,由yy带来的变化量为fydy∂f∂ydy,两者叠加为zz的总变化量,等号右侧为常数,因为我们指定在当前等高线上挪动一个极小单元,其变化量为0,左侧等于右侧。进一步拆分成向量内积形式,(fx,fy)(∂f∂x,∂f∂y)为梯度,(dx,dy)(dx,dy)为该点指向任意方向的极小向量,因为两者内积为0,所以两者垂直。自然不难得出梯度与等高线垂直的结论。

    更进一步地,梯度方向指向函数上升最快的方向,在等高线图中,梯度指向高度更高的等高线

    隐函数的梯度

    同理,对于隐函数f(x,y)=0f(x,y)=0,也可以看成是一种等高线。二元时,两边同时微分,梯度垂直于曲线;多元时,两边同时微分,梯度垂直于高维曲面。

    即,隐函数的梯度为其高维曲面的法向量

    有了法向量,切线或切平面也就不难计算得到了。令曲线f(x,y)f(x,y)上一点为(a,b)(a,b),通过全微分得该点的梯度为(fx,fy)(fx,fy),则该点处的切线为fx(xa)+fy(yb)=0fx(x−a)+fy(y−b)=0,相当于将上面的微分向量(dx,dy)(dx,dy)替换为(xa,yb)(x−a,y−b),其几何意义为法向量垂直切平面上的任意向量。

    小结

    至此,文章开篇几个问题的答案就不难得出了,

    • 偏导数构成的向量为梯度;
    • 方向导数为梯度在该方向上的合成,系数为该方向的单位向量;
    • 梯度方向为方向导数最大的方向,梯度的模为最大的方向导数;
    • 微分的结果为梯度与微分向量的内积
    • 等高线全微分的结果为0,所以其梯度垂直于等高线,同时指向高度更高的等高线
    • 隐函数可以看成是一种等高线,其梯度为高维曲面(曲线)的法向量

    以上。

  • 相关阅读:
    动态规划解按摩师的最长预约时间
    C#中WinForm的Tab键顺序调整顺序
    内网穿透工具对比FRP+NPS+Zerotier与NAT服务器测试
    " " 和 ' ' 混用拼接html字符串,且含有事件,事件中有参数
    HAProxy在Windows下实现负载均衡与反向代理
    react 导入src外部的文件 Relative imports outside of src/ are not supported.
    11_实例
    C#删除指定目录下文件(保留指定几天前的日志文件)
    【转】系统创建定时执行任务bat批处理删除指定N天前文件夹的文件
    mariadb导如数据异常------Error Code: 1153
  • 原文地址:https://www.cnblogs.com/ganxiang/p/12838394.html
Copyright © 2011-2022 走看看