今天讲解的内容是梯度下降算法中的数学原理。其中包括导数、多元函数、偏导数和梯度。接下来我们逐一进行讲解。
导数
首先来看导数。一个函数在某一点的导数描述了这个函数在这一点附近的变化率。
例如,图1表示赛跑时,运动员的速度v随时间t变化的曲线。如果希望得到速度变化的快慢,需要画出加速度a随时间t变化的曲线。速度变化越快,加速度越大,速度变化越慢,加速度越小。
具体的,前5秒速度增加的快,加速度就大,5秒到10秒之间,速度基本不变,加速度趋近于0,最后几秒冲刺,速度随着时间增加而变大,加速度也随之变大。这里加速度a就等于速度v对时间t的求导,也是速度v随时间t变化的曲线上的变化率。
这样的例子还有很多。
例如,速度描述一段时间内路程变化的快慢,即速度是路程对时间的导数。功率描述一段时间内做功的快慢,即功率是功对时间的导数。导数计算有很多公式,这里只讲解梯度下降算法中使用到的幂函数求导公式。
y等于x的阿尔法次方的导数是阿尔法乘x的阿尔法减1次方。Y对x求导记做y’ (读作y撇),也可以写成dy/dx (读作y对x的微分)。
例如,y=x的平方的导数是2x,y=x的3次方的导数是3倍的x平方,y=x的导数是1,y=常数C的导数是0。
如果函数有系数,求导时先忽略系数,求导之后再乘系数即可。例如y=3x^2的导数是3乘以2x等于6x。
如果函数是多项式,求导时分别对每一项求导,每一项之间的符号不变。例如函数y=3x^3-2x^2+x+6,对每一项求导,结果是9x^2- 4x+1。
关于导数的几何意义,函数在某点的导数是该点处切线的斜率。例如函数y=x^2,导数为2x,当x=1时,导数值为2。即在(1,1)处的切线斜率为2。
多元函数
再来看多元函数。回顾最开始提出的问题,已知房屋的面积,估计成交价格。这里价格只取决于面积,面积为自变量,价格为因变量。因变量的值只取决于一个自变量的函数,称为一元函数。y=x^2,y=2x^2+x+1,这些都是一元函数。
在表示一元函数时,一般写成f(x),g(x)的形式,其中f和g表示对应关系。
实际情况中,决定某件事情的因素可能不止一个。
例如,除了面积,价格可能还依赖于地理位置、交通等因素。所以这些因素也可以成为自变量。自变量不止一个的函数被称为多元函数。通常我们用f(x, y, z)或g(x, y)等形式表示多元函数,例如,f(x, y, z)=xy+yz+zx是一个三元函数,g(x, y)=x^2+y^2是一个二元函数。
一元函数的图像可以在平面直角坐标系中表示,x表示自变量,y表示因变量。二元函数的图像需要有三个坐标轴,x轴和y轴表示两个自变量,z轴表示因变量。每一对自变量x、y都对应一个因变量z,是空间中的一个点。将这些点连接起来是一个曲面。图中表示了f(x, y)=x^2+y^2的图像。
那么多元函数的导数如何来求呢?这就引出了偏导数。
偏导数
导数是函数值关于自变量的变化率,多元函数中有多个自变量,关于某个自变量的变化率就是多元函数对这个自变量的偏导数。
例如,房价和面积,地理位置和交通三个因素相关,那么当地理位置和交相通时,价格关于面积的变化率就是价格对面积的偏导数,使用符号∂f(x,y,z)/∂x.表示多元函数(x,y,z)对自变量x的偏导数。那么,y和z的偏导数可以表示为∂f(x,y,z)/∂y和∂f(x,y,z)/∂z。
计算关于某个变量的偏导数时,将其他变量看作常数,按照求导法则计算该变量的导数。
例如,二元函数f(x,y)=x^2+ y^2+2xy+3y。计算关于x的偏导数时,将y看作常数,对x求导。其中,x^2的导数是2x,2xy的导数是2y,y^2+3y是常数,导数是0,所以结果为2x+2y。求y的偏导数时,将x看作常数,对y求导,结果是2y+2x+3。
梯度
最后来看梯度的概念和计算方法。函数在某一点处沿着不同的方向运动,函数值的变化率是不同的。梯度可以定义为一个函数的全部偏导数构成的向量,梯度向量的方向是函数值变化率最大的方向。也就是对于函数的某个特定点,它的梯度就表示从该点出发,函数值变化最为迅猛的方向。
使用符号▽表示某个函数的梯度。二元函数f(x, y),梯度是对x、y求偏导组成的二维向量。
三元函数g(x, y, z),梯度为对x,y,z求偏导组成的三维向量。n元函数f(θ1,θ2,…,θn) ,梯度是分别对n个自变量求偏导构成的n维向量。
例如,二元函数f(x, y)=x^2+y^2,梯度是 (2x, 2y),那么在点(1, 1)处的梯度向量为(2, 2),在点(1, 1)处沿该向量变化,函数值变化最快。
为方便观察,画出xOy平面,在点(1,1)位置,函数值为1的平方+1的平方=2。如果按照向量(-1, 0)的方向移动1个单位,到达(0,1) ,函数值为0^2+1^2=1,比f(1, 1)减小1。换一个方向,按照向量(1,0)的方向移动1,到达(2,1),函数值为2^2+1^2=5,比f(1, 1)增加3。
按照梯度方向(2, 2)移动1,大约到达(1.7,1.7),函数值为1.7^2 + 1.7^2 = 5.78,比f(1, 1)增加3.78。所以按照梯度方向移动,函数增长的最迅猛。
至此,梯度下降算法的数学原理就讲完了,我们下节课再见。喜欢动画讲编程的小伙伴,一定要三连加关注哦!你们的支持是动画讲编程课程研发团队最大的动力!