zoukankan      html  css  js  c++  java
  • 梯度(转)

    1. 基本概念

        方向导数:是一个数;反映的是f(x,y)在P0点沿方向v的变化率。

        偏导数:是多个数(每元有一个);是指多元函数沿坐标轴方向的方向导数,因此二元函数就有两个偏导数。

        偏导函数:是一个函数;是一个关于点的偏导数的函数。

        梯度:是一个向量;每个元素为函数对一元变量的偏导数;它既有大小(其大小为最大方向导数),也有方向。

    2. 方向导数

        反映的是f(x,y)在P0点沿方向v的变化率。

        例子如下:

        

        

    2.0 方向导数计算公式

          

    2.1 偏导数

         

    2.2 二元函数偏导数的几何意义

         

         

    2.3 偏导函数

         偏导数与偏导函数的关系:

        偏导数是偏导函数在指定点的函数值,因此在求偏导数时,也可先求出偏导函数,然后再将点代入偏导函数,从而求出函数在此点的偏导数。

         

    3. 全微分

       

        

    4. 梯度

          梯度是一个向量;既有大小,也有方向。

        

          

    4.1 几何意义

        函数z=f(x,y)在点P0处的梯度方向是函数变化率(即方向导数)最大的方向。

        梯度的方向就是函数f(x,y)在这点增长最快的方向,梯度的模为方向导数的最大值。

        

    转自:http://blog.csdn.net/myarrow/article/details/51332421

    刚接触梯度下降这个概念的时候,是在学习机器学习算法的时候,很多训练算法用的就是梯度下降,然后资料和老师们也说朝着梯度的反方向变动,函数值下降最快,但是究其原因的时候,很多人都表达不清楚。所以我整理出自己的理解,从方向导数这个角度把这个结论证明出来,让我们知其然也知其所以然~

    下面我一开始不提梯度的概念,完全根据自己的理解进行下文的梳理,一步一步推出梯度的来历:

    • 导数

    导数的几何意义可能很多人都比较熟悉: 当函数定义域和取值都在实数域中的时候,导数可以表示函数曲线上的切线斜率。 除了切线的斜率,导数还表示函数在该点的变化率

    将上面的公式转化为下面图像为:

    (来自维基百科)

    直白的来说,导数代表了在自变量变化趋于无穷小的时候,函数值的变化与自变量变化的比值代表了导数,几何意义有该点的切线。物理意义有该时刻的(瞬时)变化率...

    注意在一元函数中,只有一个自变量变动,也就是说只存在一个方向的变化率,这也就是为什么一元函数没有偏导数的原因。

    • 偏导数

    既然谈到偏导数,那就至少涉及到两个自变量,以两个自变量为例,z=f(x,y) . 从导数到偏导数,也就是从曲线来到了曲面. 曲线上的一点,其切线只有一条。但是曲面的一点,切线有无数条。

    而我们所说的偏导数就是指的是多元函数沿坐标轴的变化率.

    f_{x} (x,y)指的是函数在y方向不变,函数值沿着x轴方向的变化率

    f_{y} (x,y)指的是函数在x方向不变,函数值沿着y轴方向的变化率

    对应的图像形象表达如下:

    那么偏导数对应的几何意义是是什么呢?

    • 偏导数f_{x} (x_{0},y_{0} )就是曲面被平面y=y_{0}所截得的曲面在点M_{0}处的切线M_{0}T_{x}对x轴的斜率
    • 偏导数f_{y} (x_{0},y_{0} )就是曲面被平面x=x_{0}所截得的曲面在点M_{0}处的切线M_{0}T_{y}对y轴的斜率

    可能到这里,读者就已经发现偏导数的局限性了,原来我们学到的偏导数指的是多元函数沿坐标轴的变化率,但是我们往往很多时候要考虑多元函数沿任意方向的变化率,那么就引出了方向导数.

    • 方向导数

    终于引出我们的重头戏了,方向导数,下面我们慢慢来走进它

    假设你站在山坡上,相知道山坡的坡度(倾斜度)

    山坡图如下:

    假设山坡表示为z=f(x,y),你应该已经会做主要俩个方向的斜率.

    y方向的斜率可以对y偏微分得到.

    同样的,x方向的斜率也可以对x偏微分得到

    那么我们可以使用这俩个偏微分来求出任何方向的斜率(类似于一个平面的所有向量可以用俩个基向量来表示一样)

    现在我们有这个需求,想求出u方向的斜率怎么办.假设z=f(x,y)为一个曲面,p(x_{0} ,y_{0} )f定义域中一个点,单位向量u =cos	heta i+sin	heta j的斜率,其中	heta 是此向量与x轴正向夹角.单位向量u可以表示对任何方向导数的方向.如下图:

    那么我们来考虑如何求出u
方向的斜率,可以类比于前面导数定义,得出如下:

    f(x,y)为一个二元函数,u =cos	heta i+sin	heta j为一个单位向量,如果下列的极限值存在

    lim_{t 
ightarrow 0}{frac{f(x_{0}+tcos	heta ,y_{0}+tsin	heta )-f(x_{0},y_{0})}{t} } 此方向导数记为D_{u}f

    则称这个极限值是f沿着u方向的方向导数,那么随着	heta 的不同,我们可以求出任意方向的方向导数.这也表明了方向导数的用处,是为了给我们考虑函数对任意方向的变化率.

    在求方向导数的时候,除了用上面的定义法求之外,我们还可以用偏微分来简化我们的计算.

    表达式是D_{u}f(x,y)=f_{x}(x,y)cos	heta   +f_{y}(x,y)sin	heta  (至于为什么成立,很多资料有,不是这里讨论的重点)

    那么一个平面上无数个方向,函数沿哪个方向变化率最大呢?

    目前我不管梯度的事,我先把表达式写出来:

    D_{u}f(x,y)=f_{x}(x,y)cos	heta   +f_{y}(x,y)sin	heta

    A=(f_{x}(x,y) ,f_{y}(x,y)),I=(cos	heta ,sin	heta )

    那么我们可以得到:

    D_{u}f(x,y)=Aullet I=left| A 
ight| *left| I 
ight| cosalpha (alpha 为向量A与向量I之间的夹角)

    那么此时如果D_{u}f(x,y)要取得最大值,也就是当alpha 为0度的时候,也就是向量I(这个方向是一直在变,在寻找一个函数变化最快的方向)与向量A(这个方向当点固定下来的时候,它就是固定的)平行的时候,方向导数最大.方向导数最大,也就是单位步伐,函数值朝这个反向变化最快.

    好了,现在我们已经找到函数值下降最快的方向了,这个方向就是和A向量相同的方向.那么此时我把A向量命名为梯度(当一个点确定后,梯度方向是确定的),也就是说明了为什么梯度方向是函数变化率最大的方向了!!!(因为本来就是把这个函数变化最大的方向命名为梯度)

    我的理解是,本来梯度就不是横空出世的,当我们有了这个需求(要求一个方向,此方向函数值变化最大),得到了一个方向,然后这个方向有了意义,我们给了它一个名称,叫做梯度(纯个人理解~希望对大家理解有帮助)欢迎知友提出问题交流~

    转自:https://zhuanlan.zhihu.com/p/24913912

  • 相关阅读:
    JAVA-容器(5)-Map
    JAVA-容器(4)-Set
    数据脏读-非重复读-幻读
    JAVA-容器(3)-List
    JAVA-容器(2)-Collection
    JAVA-容器(1)
    Arrays排序
    JAVA-虚拟机(3)-调优
    zip解压缩
    rabbitMQ、activeMQ、zeroMQ、Kafka、Redis 比较
  • 原文地址:https://www.cnblogs.com/shixisheng/p/7143270.html
Copyright © 2011-2022 走看看