用泰勒级数来估计函数的近似值

https://www.toutiao.com/a6674020406308897293/

 

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

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

  • 高阶导数与函数的凹凸性

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

用泰勒级数来估计函数的近似值

图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所示,我们首先来看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,我们做了一条平行于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。所以,我们有:

用泰勒级数来估计函数的近似值

 

约分化简可得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)的图像画出来:

用泰勒级数来估计函数的近似值

 

我们现在想用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处的值,可以表示为:

用泰勒级数来估计函数的近似值

 

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

用泰勒级数来估计函数的近似值

 

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习人工智能,机器学习都离不开数学基础和编程知识。无论你是数据科学的初学者还是已经从事人工智能开发的有经验人员,这门课都适合于你。为什么这么说?首先人工智能和机器学习本质上就是算法,而算法就是数学及统计学以及编程的结合。当前市场上有许多开源的软件包如SKLEARN确实可以帮助没经验的或缺乏数学或算法基础的人实现机器学习模型及预测,但这些工具无法使你真正懂得算法的本质或来源,或者无法使你在不同场合下灵活运用及改进算法。记住,在实际工作中找到适合应用场景的解决方案是最难但是最重要的。但这离不开数学基础和算法理解。比如,线性回归是一类普遍的机器学习算法,所有的机器学习软件都有现成的方法实现模型,但如果在训练数据中加入几条新数据,那么新建立的模型和原来的模型有和联系或不同?再比如,为什么深度神经网络中的Sigmoid函数一般只用到输出层?神经网络的向后传播理论如何与泰勒展开和复合函数的偏导数联系在一起?人工智能中推荐系统和文字向量如何与矩阵的奇异分解以及特征向量联系?模型中对标签进行数据变换如何影响预测值?所有这些问题的答案,你都可以从本课中找到线索。本课系统地讲述了有关人工智能,机器学习背后的数学知识。特别指出,微积分和代数知识是本课的核心。统计学基础被安排在另外的课程中。除此之外,我在每一章节或主要知识点后都安排了各类程序以解释和回顾所学到的东西。最后要提到的是,这不是一门工程项目实践课。但我会另外专门安排有关人工智能,机器学习的实践课程
凸优化是指在给定的约束条件下,寻找一个凸函数的全局最小值的问题。一阶泰勒展开是一种常用的优化方法,它通过使用函数在某一点的一阶导数来近似函数的局部行为。 在Matlab中,可以使用优化工具箱来进行凸优化问题的求解。具体步骤如下: 1. 定义目标函数和约束条件。首先,需要定义一个目标函数和一组约束条件。目标函数是需要最小化的凸函数,约束条件可以是等式约束或不等式约束。 2. 创建优化问题对象。使用`optimproblem`函数创建一个优化问题对象,并将目标函数和约束条件添加到该对象中。 3. 求解优化问题。使用`solve`函数求解优化问题。可以选择不同的求解器和选项来获得最佳的求解结果。 4. 获取最优解。使用`x = result.x`来获取最优解。其中,`result`是求解结果的结构体,`x`是最优解的向量。 下面是一个示例代码,演示了如何在Matlab中进行凸优化问题的一阶泰勒展开: ```matlab % 定义目标函数和约束条件 f = @(x) x(1)^2 + x(2)^2; % 目标函数 g = @(x) x(1) + x(2) - 1; % 约束条件 % 创建优化问题对象 problem = optimproblem; x = optimvar('x', 2); % 定义优化变量 problem.Objective = f(x); % 设置目标函数 problem.Constraints.cons1 = g(x) <= 0; % 添加约束条件 % 求解优化问题 solver = 'fmincon'; % 使用fmincon求解器 options = optimoptions(solver, 'Display', 'iter'); % 设置求解选项 [result, fval] = solve(problem, 'Solver', solver, 'Options', options); % 获取最优解 x_opt = result.x; % 输出结果 disp('最优解:'); disp(x_opt); disp('最优目标函数值:'); disp(fval); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值