泰勒展开(Taylor Expansion)

1. 泰勒展开是什么?(通俗理解)

一句话概括 :泰勒展开是一种用多项式函数近似任意复杂函数的方法。

直观类比 :想象你站在一座山的某个位置(点 a a a),你只能感知到脚下的坡度(一阶导数)和地面的弯曲程度(二阶导数)。泰勒展开就是利用这些局部信息,预测如果你往前走一小步( x − a x-a x−a),海拔会变成多少

  • 一阶泰勒展开(线性近似) :只考虑"坡度",认为地面是直线。

    f ( x ) ≈ f ( a ) + f ′ ( a ) ( x − a ) f(x) \approx f(a) + f'(a)(x-a) f(x)≈f(a)+f′(a)(x−a)

  • 二阶泰勒展开(抛物线近似) :既考虑"坡度",又考虑"弯曲程度"(凹凸性),认为地面是抛物线。

    f ( x ) ≈ f ( a ) + f ′ ( a ) ( x − a ) + 1 2 f ′ ′ ( a ) ( x − a ) 2 f(x) \approx f(a) + f'(a)(x-a) + \frac{1}{2}f''(a)(x-a)^2 f(x)≈f(a)+f′(a)(x−a)+21f′′(a)(x−a)2

核心结论:阶数越高,近似越精确,但计算量也越大。


2. 为什么要用二阶泰勒展开?(在机器学习中的意义)

在 GBDT 和 XGBoost 中,我们不是直接去拟合原始数据 y y y,而是去优化一个损失函数 L ( y ^ ) L(\hat{y}) L(y^),其中 y ^ \hat{y} y^ 是模型的预测值。

  • 一阶方法(传统 GBDT) :只用梯度 g = L ′ g = L' g=L′。相当于"用直线去逼近损失函数",只知道下降方向,不知道下降速度,容易走弯路。

  • 二阶方法(XGBoost) :同时用梯度 g = L ′ g = L' g=L′ 和海森矩阵 h = L ′ ′ h = L'' h=L′′。相当于"用抛物线去逼近损失函数",既知道方向,又知道曲率,能一步跨到抛物线的底部(牛顿法思想),收敛更快、更稳。


3. 完整的数值推导案例(手算对比)

我们选一个复杂但好算的函数 f ( x ) = e x f(x) = e^x f(x)=ex,在 a = 0 a = 0 a=0 处展开(因为 e 0 = 1 e^0 = 1 e0=1,导数全是 1)。

目标 :分别用一阶和二阶泰勒展开近似 f ( 0.2 ) = e 0.2 f(0.2) = e^{0.2} f(0.2)=e0.2 的真实值。

3.1 准备数据

  • 展开点: a = 0 a = 0 a=0
  • 真实值: e 0.2 ≈ 1.221402758 e^{0.2} \approx 1.221402758 e0.2≈1.221402758
  • 函数值: f ( 0 ) = e 0 = 1 f(0) = e^0 = 1 f(0)=e0=1
  • 一阶导: f ′ ( x ) = e x ⇒ f ′ ( 0 ) = 1 f'(x) = e^x \Rightarrow f'(0) = 1 f′(x)=ex⇒f′(0)=1
  • 二阶导: f ′ ′ ( x ) = e x ⇒ f ′ ′ ( 0 ) = 1 f''(x) = e^x \Rightarrow f''(0) = 1 f′′(x)=ex⇒f′′(0)=1

3.2 一阶泰勒展开(线性近似)

公式:

f ( x ) ≈ f ( a ) + f ′ ( a ) ( x − a ) f(x) \approx f(a) + f'(a)(x-a) f(x)≈f(a)+f′(a)(x−a)

代入 a = 0 , x = 0.2 a=0, x=0.2 a=0,x=0.2:

e 0.2 ≈ 1 + 1 × ( 0.2 ) = 1.2 e^{0.2} \approx 1 + 1 \times (0.2) = 1.2 e0.2≈1+1×(0.2)=1.2

结果 : 1.2 1.2 1.2

误差 : ∣ 1.2214 − 1.2 ∣ = 0.0214 |1.2214 - 1.2| = 0.0214 ∣1.2214−1.2∣=0.0214


3.3 二阶泰勒展开(抛物线近似)

公式:

f ( x ) ≈ f ( a ) + f ′ ( a ) ( x − a ) + 1 2 f ′ ′ ( a ) ( x − a ) 2 f(x) \approx f(a) + f'(a)(x-a) + \frac{1}{2}f''(a)(x-a)^2 f(x)≈f(a)+f′(a)(x−a)+21f′′(a)(x−a)2

代入 a = 0 , x = 0.2 a=0, x=0.2 a=0,x=0.2:

e 0.2 ≈ 1 + 1 × 0.2 + 1 2 × 1 × ( 0.2 ) 2 e^{0.2} \approx 1 + 1 \times 0.2 + \frac{1}{2} \times 1 \times (0.2)^2 e0.2≈1+1×0.2+21×1×(0.2)2

= 1 + 0.2 + 0.5 × 0.04 = 1 + 0.2 + 0.02 = 1.22 = 1 + 0.2 + 0.5 \times 0.04 = 1 + 0.2 + 0.02 = 1.22 =1+0.2+0.5×0.04=1+0.2+0.02=1.22

结果 : 1.22 1.22 1.22

误差 : ∣ 1.2214 − 1.22 ∣ = 0.0014 |1.2214 - 1.22| = 0.0014 ∣1.2214−1.22∣=0.0014


3.4 直观对比表

方法 近似公式 近似值 误差 精度提升
真实值 e 0.2 e^{0.2} e0.2 1.2214 - -
一阶(切线) 1 + 0.2 1 + 0.2 1+0.2 1.2 0.0214 基准
二阶(抛物线) 1 + 0.2 + 0.02 1 + 0.2 + 0.02 1+0.2+0.02 1.22 0.0014 提升 15 倍 🚀

图示理解

  • 一阶近似是用一条直线去"贴"曲线,在远离 a = 0 a=0 a=0 时误差迅速放大(因为曲线是弯的,直线是直的)。
  • 二阶近似考虑了曲线的"弯度"(凸性),用抛物线去贴合,在 x = 0.2 x=0.2 x=0.2 处依然非常精准。

4. 在 XGBoost / GBDT 中的实际映射(核心)

在 XGBoost 中,我们不是展开 e x e^x ex,而是展开损失函数 L L L。假设当前预测值为 y ^ ( t − 1 ) \hat{y}^{(t-1)} y^(t−1),我们要加入一棵新树 f t ( x ) f_t(x) ft(x),即新的预测值变成 y ^ ( t − 1 ) + f t ( x ) \hat{y}^{(t-1)} + f_t(x) y^(t−1)+ft(x)。

把 f t ( x ) f_t(x) ft(x) 看作是一个"小增量" Δ \Delta Δ,我们对损失函数做二阶泰勒展开:

L ( y ^ + Δ ) ≈ L ( y ^ ) + L ′ ( y ^ ) ⋅ Δ + 1 2 L ′ ′ ( y ^ ) ⋅ Δ 2 L(\hat{y} + \Delta) \approx L(\hat{y}) + L'(\hat{y}) \cdot \Delta + \frac{1}{2} L''(\hat{y}) \cdot \Delta^2 L(y^+Δ)≈L(y^)+L′(y^)⋅Δ+21L′′(y^)⋅Δ2


4.1 对应到你的 GBDT 推导(平方损失)

在之前的 GBDT 案例中,我们使用了损失函数 L = 1 2 ( y − y ^ ) 2 L = \frac{1}{2}(y - \hat{y})^2 L=21(y−y^)2。

  • 一阶导数(梯度): g = ∂ L ∂ y ^ = y ^ − y g = \frac{\partial L}{\partial \hat{y}} = \hat{y} - y g=∂y^∂L=y^−y(之前算出的残差是 y − y ^ y - \hat{y} y−y^,符号相反,本质一样)
  • 二阶导数(海森矩阵): h = ∂ 2 L ∂ y ^ 2 = 1 h = \frac{\partial^2 L}{\partial \hat{y}^2} = 1 h=∂y^2∂2L=1

XGBoost 的具体操作

  1. 计算每个样本的 g i g_i gi 和 h i h_i hi。
  2. 构建树时,分裂增益公式为:
    G a i n = 1 2 G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ − γ Gain = \frac{1}{2} \left \\frac{G_L\^2}{H_L + \\lambda} + \\frac{G_R\^2}{H_R + \\lambda} - \\frac{(G_L+G_R)\^2}{H_L+H_R+\\lambda} \\right - \gamma Gain=21HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2−γ
  3. 叶子节点权重为:
    w j = − G j H j + λ w_j = -\frac{G_j}{H_j + \lambda} wj=−Hj+λGj

这与只用一阶导的 GBDT 有什么区别?

  • 传统 GBDT 的叶子权重是残差的平均值(只看 g g g),步长是固定的。
  • XGBoost 的叶子权重公式里有 H H H(二阶导),相当于根据该节点的"曲率"自动调节步长 。如果曲率大( H H H 大),说明损失函数很陡,步子就迈小一点;如果曲率小( H H H 小),步子就迈大一点。这就是二阶方法比一阶方法收敛快的原因。

5. 终极总结

概念 数学表达 物理意义
一阶泰勒展开 f ( x ) ≈ f ( a ) + f ′ ( a ) ( x − a ) f(x) \approx f(a) + f'(a)(x-a) f(x)≈f(a)+f′(a)(x−a) 切线近似曲线(只看斜率)
二阶泰勒展开 f ( x ) ≈ f ( a ) + f ′ ( a ) ( x − a ) + 1 2 f ′ ′ ( a ) ( x − a ) 2 f(x) \approx f(a) + f'(a)(x-a) + \frac{1}{2}f''(a)(x-a)^2 f(x)≈f(a)+f′(a)(x−a)+21f′′(a)(x−a)2 抛物线近似曲线(斜率 + 弯曲度)
在 GBDT 中 只算梯度 g g g 知道该往哪走,但不知走多大步
在 XGBoost 中 算梯度 g g g + 海森矩阵 h h h 既知道方向,又知道步长,收敛更快

一句话记住

二阶泰勒展开 = 一阶泰勒展开 + "曲线修正项" 。在 XGBoost 中,这个修正项( h h h 二阶导)让模型能够自适应地调整学习步长,从而比传统 GBDT 更快地逼近最优解。

相关推荐
YXXY3135 小时前
FloodFill算法
算法
OPEN-F5 小时前
C++入门教程:数组、字符串与指针入门
数据结构·c++·算法
故七月5 小时前
生成式引擎优化(GEO)的底层逻辑与产业实践
大数据·人工智能·机器学习
林森lsjs5 小时前
零基础吃透二叉树:定义、遍历与高频算法 —数据结构柒
java·开发语言·数据结构·算法·二叉树
船厂电气自动化ai大模型5 小时前
AI大模型与数学·第56课 快速傅里叶变换FFT:DFT高效优化算法,图像、音频、扩散模型工程加速核心工具
数据结构·人工智能·深度学习·算法·机器学习
203号居民5 小时前
【无标题】LeetCode hot 100 —54. 螺旋矩阵
算法
ai产品老杨5 小时前
越界检测算法接入 AI 视频分析平台的流程与误报优化指南
人工智能·算法·音视频
bluesky9612225 小时前
malloc 和 realloc C/C++
c语言·c++·算法
M78佐菲6 小时前
Linux学习笔记:进程回收、exec函数簇与线程
linux·笔记·学习·算法
故七月6 小时前
让AI“看见”好服务——生成式引擎优化(GEO)的底层逻辑与产业实践
大数据·人工智能·机器学习