泰勒展开和大模型:小白也能懂的局部近似

从函数、斜率、导数和二次近似开始,递归拆解泰勒展开是什么,再连接到梯度下降、损失函数、二阶优化、量化和大模型训练里的局部近似思想。

先给一句不绕的答案:

泰勒展开,就是在一个点附近,用一串更简单的加减乘除,去近似一个复杂函数。

它和大模型有关系,但不是那种“Transformer 本质上就是泰勒展开”的关系。更准确地说:

大模型训练里的很多核心动作,都依赖同一种思想:复杂函数太难整体看清,就先在当前位置附近看它会怎么变。泰勒展开正是这套“局部近似”思想最经典的数学语言。

这篇会尽量按小白友好的方式递归拆开。遇到复杂词,不直接往前冲,先把它拆成更小的词:

  • 讲泰勒展开前,先讲什么是函数。
  • 讲导数前,先讲什么是斜率。
  • 讲梯度前,先讲“一个方向上的变化”和“很多方向上的变化”。
  • 讲大模型前,先讲参数、损失函数、训练步到底是什么。
  • 讲 Hessian 这种看着吓人的词前,先讲“斜率的斜率”。

如果只想先抓住主线,记住这句话就够:

泰勒展开 = 已知当前位置 + 已知附近变化趋势,于是估算附近的函数值。

先把“函数”这个词放平

数学里说“函数”,听起来像课本黑话。先别想复杂。

函数就是一台输入输出机器。

你给它一个东西,它吐出另一个东西。比如:

f(x)=x2f(x) = x^2

这台机器的规则是:输入一个数,把它平方后输出。

输入 xx输出 f(x)f(x)
11
24
39
10100

所以 f(3)=9f(3)=9 的意思不是神秘符号,只是在说:

把 3 塞进这台叫 ff 的机器,输出是 9。

再看一个稍微像现实的函数:

f(x)=2x+1f(x) = 2x + 1

输入 10,输出 21。输入 100,输出 201。它像一台“乘 2 再加 1”的机器。

大模型也可以先粗暴理解成一个超级复杂的函数。你输入一段文字,它输出下一个词的各种可能性。

比如你输入:

今天天气很好,我想去

模型可能给出:

下一个词可能性
公园0.32
散步0.20
吃饭0.08
机场0.01

这里“可能性”也叫概率。概率就是“这件事发生的机会有多大”,0.32 可以粗略读成 32%。

所以,先把大模型降维成一句人话:

大模型是一台很大的函数机器:输入文字,输出下一个 token 的概率。

这里的 token 可以先理解成“模型眼里的文字小块”。一个 token 可能是一个汉字、一个词的一部分、一个英文单词、一个标点,也可能是更奇怪的小片段。模型并不直接看“人类觉得自然的词”,它看的是被切碎后的编号。

再把“近似”这个词放平

泰勒展开最重要的词不是“展开”,而是“近似”。

近似就是不求完全一样,只求在当前用途下足够接近。

比如你问:

北京到上海大概多远?

别人回答:

大概 1000 公里。

这不是精确测量,但对“要不要坐飞机”这种问题已经够用。

再比如地图。世界是圆的,地形有高低,城市有复杂道路。但你打开手机地图时,看到的是一张被压平、被简化、被抽象过的图。它不是世界本身,却能帮你找路。

泰勒展开做的事情也类似:

原函数可能很复杂,但在某个点附近,我们用一条直线、一条抛物线,或者更高阶的多项式当“局部地图”。

这里又冒出两个词:直线、抛物线。

直线很好理解,就是像尺子边缘那样笔直的线。它的公式通常长这样:

y=ax+by = ax + b

抛物线就是 x2x^2 这种弯弯的线,比如:

y=x2y = x^2

为什么数学喜欢用直线、抛物线来近似复杂函数?因为它们便宜。便宜不是钱便宜,而是计算便宜、理解便宜。

  • 直线只需要知道“高度”和“斜率”。
  • 抛物线再多知道一点“弯曲程度”。
  • 更高次的多项式继续加入更细的弯曲信息。

复杂函数像一座真实山脉,细节很多。泰勒展开像是在你脚下附近画一张小地图。它不保证整座山都画准,但会努力把你脚下这一小片画准。

flowchart LR
  A["复杂函数"] --> B["选一个点 a"]
  B --> C["看这个点的高度"]
  B --> D["看附近往哪边升、往哪边降"]
  B --> E["看弯曲程度"]
  C --> F["局部近似"]
  D --> F
  E --> F

斜率:先别急着说导数

泰勒展开最常见的第一项,是“斜率”。如果斜率没懂,导数、梯度、反向传播都会变成连环黑话。

斜率就是:往右走一步,高度变多少。

想象你在爬山。

  • 往前走 1 米,高度升高 0.2 米,坡比较缓。
  • 往前走 1 米,高度升高 2 米,坡很陡。
  • 往前走 1 米,高度降低 1 米,你在下坡。

这就是斜率。

用数学写,就是:

斜率=高度变化横向变化\text{斜率} = \frac{\text{高度变化}}{\text{横向变化}}

比如一条线从点 (1,2)(1, 2) 到点 (3,8)(3, 8)

  • 横向从 1 到 3,变化是 2。
  • 高度从 2 到 8,变化是 6。
  • 斜率就是 6/2=36 / 2 = 3

人话:

横向每增加 1,高度大约增加 3。

现在看函数 f(x)=x2f(x)=x^2

x=3x=3x=4x=4

  • f(3)=9f(3)=9
  • f(4)=16f(4)=16
  • 横向变化是 1
  • 高度变化是 7

所以这段平均斜率是 7。

x=3x=3x=3.1x=3.1

  • f(3)=9f(3)=9
  • f(3.1)=9.61f(3.1)=9.61
  • 横向变化是 0.1
  • 高度变化是 0.61

平均斜率是 0.61/0.1=6.10.61 / 0.1 = 6.1

x=3x=3x=3.01x=3.01,斜率会更接近 6。

你会看到一个现象:

x=3x=3 越近,平均斜率越接近 6。

这个“无限靠近时的斜率”,就是导数。

导数:某一点的瞬时斜率

导数就是某一点上的瞬时斜率。

“瞬时”这个词也别怕。汽车仪表盘上显示 60 km/h,就是瞬时速度。它不是说你过去一整小时刚好开了 60 公里,而是说:如果你维持这一刻的速度,接下来一小时会走 60 公里。

导数也是同样的想法:

如果函数在这一刻保持当前变化趋势,往右走一点点,输出大概会变多少?

对于 f(x)=x2f(x)=x^2,它的导数是:

f(x)=2xf'(x) = 2x

f(x)f'(x) 读作“f 撇 x”,意思是 ffxx 这个位置的斜率。

所以在 x=3x=3 处:

f(3)=2×3=6f'(3)=2 \times 3 = 6

人话:

x=3x=3 附近,xx 每增加 1,f(x)f(x) 大约增加 6。

注意这里有“大约”。因为 x2x^2 是弯的,斜率会变。你从 3 走到 4,斜率不再一直是 6,而是在路上慢慢变大。但如果你只从 3 走到 3.01,变化很小,把斜率当成 6 就很准。

这就是泰勒展开的第一层直觉:

在足够近的地方,弯曲的函数可以先当作一条直线。

一阶泰勒展开:先用直线近似

现在终于可以写第一个泰勒公式了:

f(x)f(a)+f(a)(xa)f(x) \approx f(a) + f'(a)(x-a)

这个公式看着抽象,我们把每一块拆开:

  • aa:你已经站着的那个点,也叫展开点。
  • xx:你想估算的新位置。
  • f(a)f(a):当前位置的高度。
  • f(a)f'(a):当前位置的斜率。
  • xax-a:你从当前位置走了多远。
  • f(a)(xa)f'(a)(x-a):按当前斜率估算,高度会变化多少。

所以整句公式的人话是:

新位置的高度 ≈ 当前高度 + 当前斜率 × 走出去的距离。

f(x)=x2f(x)=x^2 来手算。

我们在 a=3a=3 附近估算 f(3.1)f(3.1)

已知:

f(3)=9f(3)=9 f(3)=6f'(3)=6 xa=3.13=0.1x-a=3.1-3=0.1

代入一阶近似:

f(3.1)9+6×0.1=9.6f(3.1) \approx 9 + 6 \times 0.1 = 9.6

真实值是:

3.12=9.613.1^2 = 9.61

差了 0.01,很近。

但如果估算 f(4)f(4)

f(4)9+6×1=15f(4) \approx 9 + 6 \times 1 = 15

真实值是 16,误差变大了。

这说明一阶泰勒展开有一个很重要的边界:

它是局部近似。离展开点越近,通常越准;离得越远,可能越不准。

这句话后面讲大模型训练时会反复出现。

二阶泰勒展开:把“弯曲程度”也加进去

一阶近似只看斜率。问题是很多函数是弯的。

弯是什么意思?不是“线条不好看”,而是:

斜率自己也在变化。

比如 f(x)=x2f(x)=x^2

  • x=1x=1,斜率是 2。
  • x=3x=3,斜率是 6。
  • x=10x=10,斜率是 20。

越往右,坡越陡。

“斜率变化得有多快”也可以用一个数表示,这个数叫二阶导数。

先递归拆一下:

  • 一阶导数:函数值变化得有多快。
  • 二阶导数:一阶导数变化得有多快。
  • 人话:坡度本身变快还是变慢。

对于 f(x)=x2f(x)=x^2

f(x)=2xf'(x)=2x f(x)=2f''(x)=2

f(x)f''(x) 读作“f 两撇 x”,表示二阶导数。

现在二阶泰勒展开来了:

f(x)f(a)+f(a)(xa)+12f(a)(xa)2f(x) \approx f(a) + f'(a)(x-a) + \frac{1}{2}f''(a)(x-a)^2

继续拆:

  • 第一项 f(a)f(a):当前高度。
  • 第二项 f(a)(xa)f'(a)(x-a):按当前斜率走出去。
  • 第三项 12f(a)(xa)2\frac{1}{2}f''(a)(x-a)^2:补上函数弯曲带来的误差。

为什么有个 12\frac{1}{2}?直觉上可以先这样记:

斜率不是一下子跳到新斜率,而是在路上慢慢变化,所以平均补偿要打个折。

更正式的推导以后可以单独讲,现在不需要卡在这里。

再算 f(x)=x2f(x)=x^2,在 a=3a=3 附近估算 f(4)f(4)

已知:

f(3)=9f(3)=9 f(3)=6f'(3)=6 f(3)=2f''(3)=2 xa=1x-a=1

代入:

f(4)9+6×1+12×2×12=16f(4) \approx 9 + 6 \times 1 + \frac{1}{2}\times 2 \times 1^2 = 16

这次刚好等于真实值。原因是 x2x^2 本来就是二次函数,二阶泰勒展开已经完整描述它了。

如果函数更复杂,比如 sinx\sin xexe^x、神经网络里的激活函数,二阶不一定完全够,但二阶已经比一阶知道得更多。

完整泰勒展开:把越来越细的变化都加上

完整的泰勒展开长这样:

f(x)=f(a)+f(a)(xa)+f(a)2!(xa)2+f(a)3!(xa)3+f(x)=f(a)+f'(a)(x-a)+\frac{f''(a)}{2!}(x-a)^2+\frac{f'''(a)}{3!}(x-a)^3+\cdots

先不要被它吓住。它只是在重复同一个模式:

  • 第 0 层:当前位置多高。
  • 第 1 层:当前往哪个方向变,变多快。
  • 第 2 层:变化速度本身怎么变。
  • 第 3 层:变化速度的变化速度又怎么变。
  • 后面继续递归。

这里的 2!2!3!3! 叫阶乘。

阶乘也不复杂:

3!=3×2×1=63! = 3 \times 2 \times 1 = 6 4!=4×3×2×1=244! = 4 \times 3 \times 2 \times 1 = 24

它在公式里负责调整每一阶的权重,让这串近似在数学上对齐。

现在把完整公式翻译成人话:

如果我知道函数在 aa 点的高度、斜率、弯曲程度、更高层的弯曲变化,那么我就可以用这些局部信息,拼出 aa 附近的函数样子。

这就是泰勒展开。

最经典的小例子:用多项式近似 exe^x

exe^x 是一个很常见的函数。这里的 ee 是一个固定数字,大约等于 2.718。你不用先理解它的全部来源,只要知道 exe^x 在概率、增长、深度学习里经常出现。

a=0a=0 附近,exe^x 的泰勒展开是:

ex=1+x+x22!+x33!+x44!+e^x = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \frac{x^4}{4!} + \cdots

现在拿 x=0.1x=0.1 试一下,只用前四项:

e0.11+0.1+0.122+0.136e^{0.1} \approx 1 + 0.1 + \frac{0.1^2}{2} + \frac{0.1^3}{6}

逐步算:

  • 11
  • 0.10.1
  • 0.12/2=0.01/2=0.0050.1^2/2 = 0.01/2 = 0.005
  • 0.13/6=0.001/60.0001670.1^3/6 = 0.001/6 \approx 0.000167

加起来:

1.1051671.105167

真实的 e0.1e^{0.1} 大约是 1.10517,非常接近。

但如果 xx 很大,只取前几项就不一定够。还是那句话:

泰勒展开通常先保证局部准确,不保证远处随便用也准。

从一个变量到很多变量:大模型开始出现

前面我们一直用一个输入 xx。但大模型不是只有一个旋钮,它有很多参数。

参数是什么?

参数就是模型内部可以被训练改变的数字。

一个很小的模型可能只有几个参数。一个大模型可能有几十亿、几百亿、上万亿个参数。每个参数都像一个小旋钮,训练就是不断调整这些旋钮,让模型预测更准。

如果只有一个参数,我们可以把损失函数画成一条曲线。

如果有两个参数,可以把损失函数想成一张山地地图。

如果有上亿个参数,我们画不出来,但数学上还是同一件事:每组参数对应一个损失值。

这里又出现了“损失函数”。

先拆开:

  • 损失:模型错得有多离谱。
  • 函数:输入一组参数,输出一个数。
  • 损失函数:衡量“这组参数让模型错多少”的机器。

训练模型时,我们想让损失变小。人话就是:

模型现在预测得不好,我们调整参数,让它下次错少一点。

如果把损失想成山的高度,训练就是找低谷。参数是你在地图上的位置,损失是当前位置的海拔。

梯度:很多方向上的斜率合在一起

一个变量时,斜率告诉你往左还是往右会升高。

很多变量时,方向就多了。

假设你站在山坡上:

  • 往东走,高度升得快。
  • 往西走,高度降得快。
  • 往南走,高度变化不大。
  • 往东北走,可能更陡。

这时候一个数字不够描述所有方向。我们需要一组数字,分别记录每个参数方向上的斜率。这组数字就叫梯度。

梯度就是很多个斜率组成的向量。

再拆“向量”:

向量可以先理解成一串数字,也可以理解成一个带方向的箭头。

比如:

(3,2,0.5)(3, -2, 0.5)

这就是一个三维向量。放到训练里,它可以表示:

  • 第 1 个参数往上调一点,损失增加很快,斜率 3。
  • 第 2 个参数往上调一点,损失反而降低,斜率 -2。
  • 第 3 个参数影响较小,斜率 0.5。

如果梯度某一项是正数,说明这个参数增大时损失会上升。那我们就应该把它往反方向调小。

如果梯度某一项是负数,说明这个参数增大时损失会下降。那我们就可以把它调大。

这就是梯度下降的直觉。

梯度下降:一阶泰勒展开在训练里的影子

梯度下降的公式常写成:

wnew=wηL(w)w_{\text{new}} = w - \eta \nabla L(w)

先拆符号:

  • ww:模型参数,很多数字组成的一大串。
  • L(w)L(w):当前参数下的损失。
  • L(w)\nabla L(w):损失函数在当前参数处的梯度。
  • η\eta:学习率,也就是每一步迈多大。
  • wneww_{\text{new}}:更新后的参数。

人话:

看看当前位置哪个方向让损失上升最快,然后往反方向走一小步。

为什么这和泰勒展开有关?

因为一阶泰勒展开在说:

L(w+Δw)L(w)+L(w)ΔwL(w+\Delta w) \approx L(w) + \nabla L(w)\cdot \Delta w

这里出现了点乘 \cdot。继续拆。

点乘就是“对应位置相乘,然后加起来”。

比如:

(2,3)(4,5)=2×4+3×5=23(2, 3)\cdot(4, 5)=2\times4+3\times5=23

在训练里,点乘可以粗略理解成:

参数变化方向和梯度方向有多一致。

如果你沿着梯度方向走,损失大概率会上升。因为梯度方向本来就是“上坡最快”的方向。

如果你沿着负梯度方向走,损失大概率会下降。负梯度就是“下坡最快”的方向。

所以梯度下降不是拍脑袋,它背后的局部理由就是:

在当前位置附近,损失函数可以先用一阶泰勒展开近似;按这个局部近似,往负梯度方向走能让损失下降。

但注意“一小步”很重要。如果步子太大,你就离开了这个局部近似可靠的范围。学习率太大时,训练会震荡甚至崩掉,原因就藏在这里。

反向传播:不是泰勒展开,但在算泰勒需要的一阶信息

大模型训练里还有一个核心词:反向传播。

先别把它想复杂。

训练一次大概分三步:

  1. 前向传播:把输入喂给模型,算出预测。
  2. 计算损失:比较预测和正确答案,得到“错多少”。
  3. 反向传播:从损失往回算,找出每个参数对错误负多少责任。

“每个参数对错误负多少责任”,数学上就是每个参数的导数,也就是梯度里的每一项。

所以反向传播不是泰勒展开本身。它更像是:

高效计算一阶泰勒展开所需斜率信息的算法。

没有这些斜率,梯度下降就不知道该往哪边走。

二阶信息:不只知道坡度,还想知道坡会怎么变

一阶梯度只告诉你“当前位置往哪边下坡”。

但它不知道一个问题:

前面是平缓长坡,还是马上变陡的悬崖?

这就是二阶信息的价值。

在一个变量里,二阶导数告诉你斜率怎么变。

在很多变量里,二阶信息会变成一个矩阵,叫 Hessian。

先拆“矩阵”:

矩阵就是一张数字表格。

比如:

[1234]\begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}

它有 2 行 2 列。矩阵可以表示很多关系,比如“第一个方向和第二个方向如何互相影响”。

Hessian 矩阵记录的是:

每个参数方向的斜率,如何随着其他参数变化而变化。

如果梯度是一张“哪里下坡”的箭头图,Hessian 就更像一张“地形弯曲程度”的地图。

多变量二阶泰勒展开常写成:

L(w+Δw)L(w)+L(w)Δw+12ΔwHΔwL(w+\Delta w)\approx L(w)+\nabla L(w)\cdot \Delta w+\frac{1}{2}\Delta w^\top H\Delta w

这行公式很硬,我们只读人话版:

  • L(w)L(w):当前位置的损失。
  • L(w)Δw\nabla L(w)\cdot \Delta w:按当前坡度估计,走一步损失怎么变。
  • 12ΔwHΔw\frac{1}{2}\Delta w^\top H\Delta w:补上地形弯曲带来的影响。

为什么大模型训练不直接完整使用 Hessian?

因为太大。

假设一个模型有 1000 亿个参数,也就是 101110^{11} 个参数。Hessian 要记录“每个参数和每个参数之间的二阶关系”,规模大约是:

1011×1011=102210^{11} \times 10^{11} = 10^{22}

也就是一百亿亿级别的表格项。这已经不是“多占一点内存”的问题,而是完全不可承受。

所以现代大模型训练主要依赖一阶梯度,再用 Adam、Adafactor 这类优化器做一些更聪明的步长调整。这里要说清楚:Adam 不是完整二阶泰勒方法,它主要利用梯度的一阶矩和二阶矩。

再拆这句话:

  • 一阶矩:梯度最近大概往哪个方向。
  • 二阶矩:梯度最近波动有多大,或者某些维度是不是经常很大。

它不是在显式保存完整 Hessian,但它也在回答类似的工程问题:

每个方向应该迈多大步,才不容易失控?

大模型到底哪里和泰勒展开有关

现在可以认真回答开头的问题:泰勒展开和大模型有关系吗?

有,但要分三层。

第一层:训练优化里的局部近似

大模型训练时,损失函数极其复杂。我们不可能把整个损失曲面完整看清。

每一步训练只能问一个局部问题:

在当前参数附近,往哪个方向走,损失可能变小?

这个问题正是一阶泰勒展开擅长回答的。

所以,梯度下降的基本逻辑可以理解为:

用一阶泰勒展开看清脚下一小片地形,然后往下坡方向迈一步。

第二层:二阶优化和误差分析

如果我们还想知道“这一步会不会太大”“某个参数改动是不是危险”“压缩模型会造成多大损失”,一阶信息有时不够。

这时二阶泰勒展开会出场,至少作为分析工具。

比如模型量化。

量化是什么?

量化就是把模型里的高精度数字,换成更省空间的低精度数字。

比如原来一个参数是:

0.1234560.123456

量化后可能变成:

0.120.12

这样会省内存、加快推理,但也会带来误差。问题是:

哪些参数改一点无所谓,哪些参数改一点会让模型变差很多?

这就像在山谷里移动。如果某个方向很平,挪一点高度变化不大。如果某个方向很陡或者弯得很厉害,挪一点损失就可能升高很多。

二阶泰勒展开可以帮助估算这种“改动带来的损失变化”。一些量化、剪枝、压缩方法会使用类似的二阶敏感度思想。当然,具体工程实现不一定完整计算 Hessian,因为完整 Hessian 太贵,通常会做近似。

第三层:大模型工程里的“近似文化”

大模型太大,很多地方都靠近似活着:

  • 训练时,不用全量数据算真实梯度,而是用一小批样本估计梯度。
  • 推理时,用低精度数字加速计算。
  • 微调时,不一定改所有参数,可以只改一小部分参数。
  • 压缩时,尝试删掉或合并影响较小的部分。

这些不全是泰勒展开,但背后常有同一个问题:

复杂系统整体太贵,我能不能只看局部、只看主要变化、只保留最重要的信息?

泰勒展开不是所有近似方法的父亲,但它是理解这类问题的一把基础钥匙。

也要说清楚:大模型不是“泰勒展开堆出来的”

这里必须防一个误区。

Transformer、大模型、注意力机制、词向量、矩阵乘法、激活函数,这些东西不是“泰勒展开的直接应用”。

泰勒展开更像一副眼镜。它帮你理解:

  • 为什么梯度能指导训练。
  • 为什么学习率不能太大。
  • 为什么局部有效不等于全局有效。
  • 为什么二阶信息有价值但太贵。
  • 为什么压缩和量化要关心“参数扰动造成多大损失”。

但如果有人说:

大模型的智能来自泰勒展开。

这就太跳了。

更准确的说法是:

大模型是由神经网络结构、海量数据、优化算法、算力系统和训练目标共同产生的复杂工程结果。泰勒展开是理解其中“局部优化”和“误差近似”的基础数学工具之一。

一个完整类比:夜里下山

把大模型训练想成夜里下山。

你站在一座大山上,目标是走到谷底。整座山太大,天太黑,你看不到全局地图。你只有脚边一小块地形信息。

一阶信息像什么?

你用脚感觉哪边是下坡。

这就是梯度。

二阶信息像什么?

你还感觉地面是不是越来越陡、是不是马上要弯、是不是这边看着下坡但很快会翘起来。

这就是曲率,也就是二阶信息。

学习率像什么?

你每一步迈多大。

步子太小,走得慢。步子太大,可能摔出去,甚至越过谷底冲到另一边。

泰勒展开像什么?

你根据脚下这一小片地面,临时画出一张小地图,然后按这张小地图决定下一步。

这张小地图在脚下附近通常有用,但它不是整座山的真实地图。

为什么“小步快跑”常常比“一步到位”靠谱

现在你能理解深度学习训练里的一个基本事实:

模型不是一次算出最优参数,而是一步一步改出来的。

原因很简单:局部近似只在局部可靠。

如果你用一阶泰勒展开看当前位置附近,它只告诉你“小范围内往哪边可能更好”。它不能保证你沿这个方向走 100 公里还更好。

所以训练通常是:

  1. 用当前一小批数据算损失。
  2. 反向传播算梯度。
  3. 根据梯度更新一小步。
  4. 到新位置后重新计算。
  5. 重复很多很多次。

这就是把很多张局部小地图拼成一条下山路线。

再递归拆一个常见黑话:损失曲面

文章里多次说“损失曲面”。它听起来很抽象。

先看一个参数:

  • 横轴是参数大小。
  • 纵轴是损失。
  • 画出来是一条曲线。

再看两个参数:

  • 左右方向是第一个参数。
  • 前后方向是第二个参数。
  • 高度是损失。
  • 画出来像一张地形表面。

这就是损失曲面。

大模型有很多很多参数,没法画成三维图。但我们仍然沿用“曲面”这个词,表示:

参数空间里每个位置都有一个损失值,这些损失值组成了一个极高维地形。

“高维”也可以拆:

维度就是需要几个数字才能描述一个位置。

平面位置需要两个数字,比如经度和纬度。空间位置需要三个数字,比如长、宽、高。大模型参数位置可能需要几百亿个数字,所以叫高维。

用一句话串起来

现在把所有概念串成一条链:

  1. 大模型有很多参数。
  2. 一组参数会产生一个损失。
  3. 训练想让损失变小。
  4. 损失函数太复杂,看不清全局。
  5. 泰勒展开告诉我们,可以先在当前位置附近做局部近似。
  6. 一阶近似需要梯度,梯度告诉我们局部下坡方向。
  7. 二阶近似需要曲率,曲率告诉我们地形弯得多厉害。
  8. 真实训练主要靠一阶梯度反复小步更新,二阶思想常用于分析、近似优化和压缩。

压缩成一句:

大模型训练不是拿到完整地图再规划路线,而是不断用局部近似决定下一步。泰勒展开就是“局部近似”这件事的数学原型。

小白自测

1. 泰勒展开是在干什么?

用一个点附近的信息,估算函数在附近的样子。最简单是一阶直线近似,再往上可以加入二阶弯曲信息。

2. 为什么说它是“局部”的?

因为它围绕某个展开点工作。离这个点越近,通常越可靠;离得太远,局部地图可能失真。

3. 导数和梯度有什么区别?

一个变量时,导数就是这一点的斜率。很多变量时,每个方向都有一个斜率,把这些斜率放成一串,就是梯度。

4. 梯度下降为什么往负梯度方向走?

一阶泰勒展开告诉我们,梯度方向是局部上升最快的方向;反过来,负梯度方向就是局部下降最快的方向。

5. 大模型是不是直接等于泰勒展开?

不是。大模型本身是神经网络和训练系统的复杂组合。泰勒展开主要帮助我们理解训练优化、局部近似、二阶信息和压缩误差分析。

最后记住三句话

第一,泰勒展开不是玄学,它就是:

当前值 + 当前变化趋势 + 弯曲修正 + 更高阶修正。

第二,它和大模型最核心的连接是:

训练大模型时,我们无法看清完整损失地形,只能依靠当前位置附近的变化信息一步步下降。

第三,所有局部近似都要尊重边界:

局部有效,不代表全局有效;步子越大,越要怀疑近似还准不准。

如果以后你再看到导数、梯度、Hessian、二阶优化、量化误差、损失曲面这些词,可以先把它们都拉回同一个画面:你站在一座看不清全貌的山上,用脚下这一小块地形,决定下一步往哪里走。