这是《机器学习中的数学基础》系列的第16篇,也是微积分的最后一篇。

在实际生活和工作中,我们经常希望用多项式来近似某点处的函数值,而泰勒级数就是干这个的。不过在正式介绍泰勒级数之前,我们先来看看高阶导数与函数的凹凸性。

那么什么是高阶导数?顾名思义,高阶导就是求了很多次导数。举个例子,函数y=x³的图像如下:

应用泰勒公式求各数的近似值(用泰勒级数来估计函数的近似值)(1)

图1

如图1所示,y的一阶导,也就是第一次求导,y'=3x²,表示图像的斜率。那如果我们对y'再进行求导呢?可以得到y''=6x,它的几何意义又是什么呢?一阶导我们表示的是函数值的变化率,那么二阶导就表示斜率的变化率。进一步,我们说,如果二阶导大于0,说明斜率是在一直增加的,此时函数是个凸函数;同理,二阶导小于0,斜率在一直减小,函数为凹函数。

既然说到了凹凸函数,我们就来看看它的定义(机器学习领域,可能与数学领域有所不同):

如果一个函数f是凸函数,那么其满足:f(tx (1-t)y)≤tf(x) (1-t)f(y),其中x、y为函数定义域上任意两点,t∈[0,1]。

可能看公式不容易那么理解,我们就来画个凸函数的图像吧:

应用泰勒公式求各数的近似值(用泰勒级数来估计函数的近似值)(2)

图2

如图2所示,我们首先来看tx (1-t)y,它保证了取值范围是在x、y之间。为什么呢?因为t∈[0,1],把t=0代入,得到y;把t=1代入,得到x。因此tx (1-t)y的取值在x与y之间。那么它对应的函数值自然就是:f(tx (1-t)y)。

下面我们看C点的值该如何求,我们再画一个图来说明:

应用泰勒公式求各数的近似值(用泰勒级数来估计函数的近似值)(3)

图3

如图3,我们做了一条平行于x轴的线段AE。很容易看出△ACD相似于△ABE,因此有CD/BE=AD/AE。其中,CD的长是我们要求的,BE的长为f(y)-f(x),AD的长为tx (1-t)y-x=(1-t)(y-x),AE的长为y-x。所以,我们有:

应用泰勒公式求各数的近似值(用泰勒级数来估计函数的近似值)(4)

约分化简可得CD=(1-t)f(y) (t-1)f(x)。但我们想知道C的值,只需再加上A点的函数值f(x)就可以了。因此,C点的值为(1-t)f(y) (t-1)f(x) f(x)=tf(x) (1-t)f(y)。Bingo!

我们再来观察图2,它是一个凸函数,那么它的斜率就是不断增加的,也就是说二阶导始终大于0.

  • 泰勒级数

有了以上的铺垫,我们来看如何近似函数在某点的值。比如sin(x)在x=0处的函数值sin(0)怎么来近似呢?

我们一般用多项式来估计,先上个二次多项式,f(x)=ax² bx c。然后再把sin(x)的图像画出来:

应用泰勒公式求各数的近似值(用泰勒级数来估计函数的近似值)(5)

我们现在想用f(x)=ax² bx c来近似逼近sin(0)的值,只需确定a、b、c三个参数的值就好了。

首先,这俩函数在0点的函数值得相等吧。也就是说,f(0)=sin(0),而sin(0)=0,f(0)=c,因此c=0.

然后,这俩函数在0点处的斜率得相同吧。也就是说,它们的一阶导相等,即f'(0)=sin'(0),而sin'(0)=cos(0)=1,f'(0)=2a*0 b=b,化简可得b=1.

最后,这俩函数在0点处的二阶导也应该相等,即f''(0)=sin''(0),而sin''(0)=0,f''(0)=2a,因此a=0.

综上,我们用来近似的函数f(x)=0*x² 1*x 0=x。我们说二次多项式中对sin(x)在x=0处最好的近似函数就是f(x)=x,把x=0代入就得到近似值是0。

观察我们上面的近似过程,可以得到下面的式子:

sin(x)≈sin(0) sin'(0)/1!*x sin''(0)/2!*x²

我们把它一般化,如果要近似任意函数f(x)在x=0处的值,可以表示为:

应用泰勒公式求各数的近似值(用泰勒级数来估计函数的近似值)(6)

如果我们想近似函数f(x)在任意一点x=x0处的值,那么可以表示为:

应用泰勒公式求各数的近似值(用泰勒级数来估计函数的近似值)(7)

泰勒级数的应用还有很多,这里就不一一展开了。这就是今天的全部内容,欢迎留言讨论。

,