本文主要是介绍从变化率的角度认识一下梯度及在自变量的角度上认识梯度下降,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文内容
- 函数的回顾
- 方向导数的回顾
- 从变化率的角度认识一下向量
- 从变化率的角度认识一下梯度
- 梯度下降的另一种认识
一直以来我对于梯度这个更多是几何概念的物体和偏导数(变化率)的联系充满了困惑,最近重新学习线性回归,在复习梯度下降的时候,查阅了一些资料,重新在变化率的角度上认识了向量,充分理解了梯度和偏导数的联系。故根据一些感悟,书写此文,供大方之家批评指导
写在最前
最近在看《西学门径》,其中有朱光潜大师说过的一句话:“做学问光读不写不行。写就是要读得更认真一点,要把所读的在自己头脑里整理一番,思索一番,就会懂得较透些,使作者的思想经过消化,变成自己的精神营养”。 简单的语言,道出了深刻的道理,传授了宝贵的经验。做事必要踏踏实实,读完几篇晦涩的文章,一知半解是常有的事情,表面上很用功,然而,内心的收获却是非常微妙的,这个时候,很容易用表明上的功夫来安慰内心的空泛,造成欺骗自己,欺骗内心。这是读书没有用心。我觉得,朱光潜大师给出的这种方法是非常实用的一种方法。从研学上看,给了我们一种切实的方法;从做人做事上看,给了我们务实的精神和修心的原则。所谓务实,不肤浅于表面,所谓修心,不做违心事,不欺心。
在写这篇博客之前偶尔看到华为总裁任正非先生的一段话:“年轻人要扎实,做事才可能成功。年轻人要合作,每一个人的力量都是单薄的,只有合作才能共赢。年轻人要持续不断的努力,不要以为自己很聪明,今天搞这样,明天搞那样,这样可能青春就荒废了,扎扎实实做一件事情,可能很成功。” 青春短暂,我们能输的起,我们能踏踏实实做一件事,不怕输,无畏风雨。在这美好的年华里,我们应该不负韶光,不负生命,踏踏实实的敢做敢为。
读书偶有摘录和心得,写在最前,勉励自己。与下文无关
函数的重述
严谨而漂亮的数学公式是一种表达工具,短小精悍的公式携带了大量的信息和深邃的思想。然而,它便于流通,可不一定便于理解。我习惯于用自然语言表达数学概念的核心思想。
函数描述的是一个变量如何随另外其他变量变化,然后还要考虑变化快慢的问题,实际是怎么变的问题,这便是变化率。 无论是一元函数还是多元函数,无论是一阶导数还是高阶导数,都尽在这一句话中。
一元函数描述的是一个变量随另外一个变量的变化,这就是因变量和自变量,两个变量。变化率就是当自变量变化一定大小时,因变量应该以怎样的倍数变化。
多元函数描述的是一个变量随另外几个变量的变化,这时自变量有多个。我们仍然想要看一看变化率,就是某个自变量发送变化时,因变量该以怎样的倍数变化。这就是因变量对于该自变量的偏导数。在一元中,我们有因变量关于全部自变量的变化率。在多元中,我们仍然有希望找到因变量关于全部自变量的变化率,这就是方向导数。方向导数中有一个非常特殊的方向,那就是梯度的方向,梯度是一个向量,是一个非常特别的向量,在这个方向上,自变量发生变化时,因变量会发生最大的变化。其实梯度是所有的变化率的直接线性组合,没有进行缩放,后面会说明。
而一阶导数和高阶导数,都可以放在函数及其导数的概念上来认识。将 n − 1 n-1 n−1阶导数作为一个多元函数,那么 n n n阶导数就是该多元函数的导数。这方面的研究并不多。
方向导数回顾
现在,我们已经知道了多元函数在不同轴方向上的变化率,也就是因变量关于自变量的变化率。现在想要知道在任意方向上的变化率。任意方向可以通过轴方向进行线性组合得到,而变化率直接乘上去即可,因为如果将变化率看成是向量的长度的话,那么将变化率直接乘上去是正确的,在下一部分在详细介绍。现在以二元函数为例,如下图:
考虑一个单位圆,在单位圆中,我们可以用 [ c o s θ s i n θ ] \begin{bmatrix}cos\theta \\ sin\theta \end{bmatrix} [cosθsinθ]来表示任意方向。同样的,在这里,我们依然可以用这个向量来表示,有了任意方向,我们再乘上变化率,就得到了方向导数:
D u f ( x , y ) = f x ( x , y ) c o s θ + f y ( x , y ) s i n θ D_uf(x,y)=f_x(x,y)cosθ+f_y(x,y)sin\theta Duf(x,y)=fx(x,y)cosθ+fy(x,y)sinθ对它进行向量化:令 A = [ f x ( x , y ) f y ( x , y ) ] , H = [ c o s θ s i n θ ] A=\begin{bmatrix}f_x(x,y)\\f_y(x,y)\end{bmatrix},H=\begin{bmatrix}cos\theta \\ sin\theta\end{bmatrix} A=[fx(x,y)fy(x,y)],H=[cosθsinθ]于是我们得到: D u f ( x , y ) = A T H = ∣ A ∣ ∣ H ∣ c o s α D_uf(x,y)=A^TH=|A||H|cos\alpha Duf(x,y)=ATH=∣A∣∣H∣cosα其中 α \alpha α表示向量 A A A与向量 H H H的夹角。当方向导数取最大值的时候,也就是变化率最大的时候, α = 0 \alpha=0 α=0, A A A与 H H H平行,此时 ∣ H ∣ = 1 |H|=1 ∣H∣=1,所以此时的最大值就是 ∣ A ∣ |A| ∣A∣,方向就是向量 A = [ f x ( x , y ) f y ( x , y ) ] A=\begin{bmatrix}f_x(x,y)\\f_y(x,y)\end{bmatrix} A=[fx(x,y)fy(x,y)]的方向,我们重新给这个向量一个名称:梯度。
从变化率的角度认识一下向量
最常见的认识方式:分量
以二维平面为例:在平面 x o y xoy xoy中,在 x x x轴上,有单位向量 i i i,在 y y y轴上有单位向量 j j j。那么由这两个单位向量任意进行线性组合就可以得到平面内的所有向量。比如,在 x x x轴上有分量 2 i 2i 2i,在 y y y轴上有分量 3 j 3j 3j,那么得到的向量就是 2 i + 3 j 2i+3j 2i+3j,可以记作 a = [ 2 , 3 ] a=[2,3] a=[2,3]。
基于分量的一种方式:变化率
在一元函数中 y = 2 x y=2x y=2x的变化率是2。在上面的分量中, x = 2 i , y = 3 j x=2i,y=3j x=2i,y=3j,实际上 i , j i,j i,j都是表示是一种同样大小的"元",只不过是方向不同,它在一定程度上类似于参数方程 x = x ( t ) , y = y ( t ) x=x(t),y=y(t) x=x(t),y=y(t)。类比于一元函数, x x x对于 i i i的变化率是 2 2 2, y y y对于 j j j是变化率是 3 3 3(先忽略对矢量的考虑)。那么向量 a = [ 2 , 3 ] a=[2,3] a=[2,3]中的数据就是变化率向量在不同轴上的变化率。变化率本来就是基于分量考虑的,变化率也可以看做是分量的长度,如果这样的话,那么前面说到的直接乘上去是正确的。
可以这么认为:每个方向上的元向量的大小是同时变化,变化同等大小的。对于每个方向上的元向量,当其发生变化时,向量 a a a在 x x x方向上以变化率 2 2 2变化,在 y y y方向上以变化率 3 3 3变化。或者可以认为,向量 a a a是由元向量在 x x x方向上以变化率 2 2 2变化,在 y y y方向上以变化率 3 3 3变化而生成的。
从变化率的角度认识梯度
当在变化率的角度上看向量的时候,那么很自然就会认为梯度这个向量应该也是元向量在不同的轴上以该轴上的变化率变化而生成的。例如: F = 2 x + 3 y + 4 z = 0 F=2x+3y+4z=0 F=2x+3y+4z=0 在不同轴上的变化率: F x = 2 , F y = 3 , F z = 4 F_x=2,Fy=3,F_z=4 Fx=2,Fy=3,Fz=4。记不同轴上的元向量: i , j , k i,j,k i,j,k。那么梯度 ∇ = 2 i + 3 j + 4 k \nabla=2i+3j+4k ∇=2i+3j+4k,即: ∇ = [ 2 , 3 , 4 ] \nabla=[2,3,4] ∇=[2,3,4]
从这个角度看待梯度,我们能够将变化率和向量联系在一起,这样更容易去接受一个几何上的图形是由偏导数组成。
梯度下降的另一种认识
基于变化率认识了向量之后,我们更容易接受梯度跟偏导数的密切关系。梯度是一个向量,这个向量是对于因变量而言的,因为梯度的方向是因变量下降最快的方向,这个概念是立足于因变量的,如果我们立足于自变量重新命名这个概念的话,不妨叫做:极值点移动。
- 极值点是在函数取得局部最小值的时候对应的自变量的值。
- 之所以叫做是极值点而不是最值点,是因为梯度下降是会找到局部解,而不一定找到最优解。
- 移动是说自变量都移向这个值。
基于变化率对向量的认识,解决了我一直以来的困惑:为什么一个几何上的图形是有代数上的变化率组成,它们之间究竟有什么关系。
参考
[1] https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==&mid=2247483704&idx=1&sn=8f0c6e33ef84c26823e562be16bce684&chksm=ebb439ecdcc3b0fa4e9571deb33ccea62e42034c88db4e190633588307dce4a1e0c91ed2635c&scene=21#wechat_redirect
[2] https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/2.-partial-derivatives/part-b-chain-rule-gradient-and-directional-derivatives/session-35-gradient-definition-perpendicular-to-level-curves
这篇关于从变化率的角度认识一下梯度及在自变量的角度上认识梯度下降的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!