现在位置: 首页 > AI 数学基础 > 正文

泰勒展开 -- 用多项式逼近任意函数

任何光滑函数,在一点附近都可以用多项式来近似。

一阶泰勒展开是梯度下降的基础,二阶展开引出牛顿法。本章了解即可,无需深究推导细节。


概念解析

一阶泰勒 = 线性逼近(梯度下降的基础)

\[ f(x) \approx f(a) + f'(a)(x - a) \]

这就是「在 a 点画一条切线,用切线值近似函数值」。

二阶泰勒 = 考虑曲率

\[ f(x) \approx f(a) + f'(a)(x - a) + \frac{f''(a)}{2}(x - a)^2 \]

加入二阶项后能捕捉函数的「弯曲」程度——这就是牛顿法的思想。

重要函数的展开式

函数x=0 处的展开
\( e^x \)\( 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots \)
\( \sin x \)\( x - \frac{x^3}{3!} + \frac{x^5}{5!} - \cdots \)

梯度下降只用一阶信息(方向)。牛顿法用二阶信息(曲率),收敛更快但计算代价高。


生活例子

估算 sin(0.1):sin(0)=0,sin'(0)=cos(0)=1。一阶近似:0 + 1×0.1 = 0.1。

真实值约 0.0998——只用加法和乘法就得到了高精度近似。


Python 动手实践

实例

import numpy as np

x0 = 0.5
true_val = np.sin(x0)
print(f"sin({x0}) 的泰勒近似 vs 真实值 {true_val:.8f}:")

# 手动计算前几项泰勒展开
import math
approx = 0.0
for n in range(6):
    if n % 2 == 1:  # 偶数项为0
        coef = (-1)**((n-1)//2) / math.factorial(n)
        approx += coef * x0**n
        err = abs(approx - true_val)
        print(f"  {n}项: {approx:.8f}  误差: {err:.2e}")

输出:

sin(0.5) 的泰勒近似 vs 真实值 0.47942554:
  1项: 0.50000000  误差: 2.06e-02
  3项: 0.47916667  误差: 2.59e-04
  5项: 0.47942708  误差: 1.54e-06

AI 中的应用场景

梯度下降 = 一阶泰勒近似

梯度下降假设损失函数在局部可以用一阶泰勒展开近似(线性近似)。沿负梯度方向走一步,相当于在一阶近似下做最优更新。这就是为什么梯度下降需要小学习率——学习率太大就超出了线性近似成立的区间。

牛顿法 = 二阶泰勒优化

如果加上二阶项(用到 Hessian 矩阵),可以在局部用二次函数精确近似损失,一步跳到二次近似的最优点。理论上收敛更快,但 Hessian 矩阵是参数量的平方大小——百万参数模型需要万亿级的 Hessian,计算和存储都不现实。

XGBoost 的目标函数

XGBoost 每轮迭代用损失函数的二阶泰勒展开来近似目标,同时用到一阶梯度和二阶 Hessian(在 XGBoost 中叫 hess)。相比只用一阶梯度的 GBDT,收敛更快且更稳定。这是二阶信息在工业级 ML 中最成功的应用。