Q37: 分析泰勒展开 f(x)≈f(a)+f′(a)(x−a) 的截断误差上界
泰勒展开与截断误差是啥?
泰勒展开是用多项式近似表示函数的方法,一阶泰勒展开 f(x)≈f(a)+f′(a)(x−a) 用线性项近似原函数。但它忽略了高阶项,这些被忽略的部分就是截断误差。从几何角度看,这相当于用函数在 a 点的切线近似函数曲线,曲线与切线的偏差就是误差。
分析推导过程
根据泰勒定理,若 f(x) 在包含 a 的区间内二阶可导,则 (
介于 a 与 x 之间)。截断误差
。若能确定
在区间 [a,x] 上的最大值 M,则误差上界为
。例如,对于
,
,在区间 [0,x] 上
,因此误差上界为 。
在 LLM 中的使用
- 激活函数的快速近似:LLM 中激活函数(如 GELU、Swish)计算复杂,推理时可用泰勒展开加速。例如,对 GELU(x) 在某点 a 附近用
近似,通过误差上界评估精度损失,在速度与精度间平衡。
- 模型量化中的函数逼近:量化时需将高精度激活值映射到低精度。如用泰勒展开近似非线性变换,根据误差上界调整参数,确保量化误差不显著影响模型性能。
- 参数调试的快速估算:调试 LLM 时,临时修改某层参数,可用泰勒展开预估输出变化。通过误差上界判断是否需进一步精细计算,提升调试效率。
代码示例:
import math
import numpy as np
def f(x):
return math.exp(x)
def taylor_approx(x, a):
return f(a) + f'(a) * (x - a)
f_prime = lambda x: math.exp(x) # \( f'(x) = e^x \)
x = 0.5
a = 0
approx = taylor_approx(x, a)
actual = f(x)
error = actual - approx
M = math.exp(x) # \( f''(x) = e^x \) 在 \([0, x]\) 的最大值
upper_bound = (M / 2) * (x - a) ** 2
print(f"真实值: {actual:.6f}, 近似值: {approx:.6f}, 实际误差: {error:.6f}")
print(f"误差上界: {upper_bound:.6f}")
代码解释:以 为例,在 a=0 处一阶泰勒展开为 1+x。计算 x=0.5 时,真实值
,近似值 1.5,实际误差 0.148721。根据
,误差上界为
,实际误差小于上界,验证了分析的合理性。
Q38: 推导数值积分(如梯形法)的误差项 
梯形法与误差项是啥?
梯形法是用梯形面积近似积分 的方法。将区间 [a,b] 分成 n 段,每段宽
,用梯形面积之和近似积分。误差项
描述了这种近似与真实积分的差距,反映了区间长度、分段数和函数二阶导数对误差的影响。
分析推导过程
将区间 [a,b] 分为 n 个小区间 ,对每个小区间,真实积分
与梯形近似
的误差为
。利用泰勒展开
(ξ 介于
与 x 之间),对展开式积分后减去梯形近似,可得
。对 n 个小区间求和,利用介值定理(存在 ξ 使
),总误差
。
在 LLM 中的使用
- 注意力权重的积分计算:在连续空间注意力模型中,计算注意力权重
时,若解析解难以获取,可用梯形法近似。通过误差项公式调整 n,如处理长文本时,根据 f′′(x) 增大 n,确保注意力计算精度。
- 归一化常数的近似计算:训练生成模型(如 VAE)时,计算归一化常数
可用梯形法。例如,在图像生成模型中近似高维分布积分,根据误差项控制 n,平衡计算量与精度。
- 动态计算资源分配:根据输入文本长度动态调整 n。短文本用较小 n(快速计算),长文本用较大 n(保证精度),利用误差项公式指导 n 的选择,优化计算资源。
代码示例:
import numpy as np
def trapezoidal_rule(f, a, b, n):
h = (b - a) / n
x = np.linspace(a, b, n + 1)
y = f(x)
integral = (h / 2) * (y[0] + 2 * np.sum(y[1:n]) + y[n])
return integral
def f(x):
return np.exp(x)
def f_second_deriv(x):
return np.exp(x)
a, b = 0, 1
n = 10
approx_integral = trapezoidal_rule(f, a, b, n)
actual_integral = np.exp(1) - np.exp(0) # \( \int_0^1 e^x dx = e - 1 \)
error = actual_integral - approx_integral
# 假设 \( \xi = 0.5 \) 计算理论误差项
theoretical_error = -((b - a) ** 3 / (12 * n ** 2)) * f_second_deriv(0.5)
print(f"近似积分: {approx_integral:.6f}, 真实积分: {actual_integral:.6f}, 实际误差: {error:.6f}")
print(f"理论误差项: {theoretical_error:.6f}")
代码解释:用梯形法计算 ,n=10 时近似积分约为 1.727272,真实积分 e−1≈1.718282,实际误差 0.008990。假设 ξ=0.5,理论误差项为
(取绝对值后与实际误差量级一致),验证了梯形法误差项的推导与应用。