先给一句不绕的答案:
泰勒展开,就是在一个点附近,用一串更简单的加减乘除,去近似一个复杂函数。
它和大模型有关系,但不是那种“Transformer 本质上就是泰勒展开”的关系。更准确地说:
大模型训练里的很多核心动作,都依赖同一种思想:复杂函数太难整体看清,就先在当前位置附近看它会怎么变。泰勒展开正是这套“局部近似”思想最经典的数学语言。
这篇会尽量按小白友好的方式递归拆开。遇到复杂词,不直接往前冲,先把它拆成更小的词:
- 讲泰勒展开前,先讲什么是函数。
- 讲导数前,先讲什么是斜率。
- 讲梯度前,先讲“一个方向上的变化”和“很多方向上的变化”。
- 讲大模型前,先讲参数、损失函数、训练步到底是什么。
- 讲 Hessian 这种看着吓人的词前,先讲“斜率的斜率”。
如果只想先抓住主线,记住这句话就够:
泰勒展开 = 已知当前位置 + 已知附近变化趋势,于是估算附近的函数值。
先把“函数”这个词放平
数学里说“函数”,听起来像课本黑话。先别想复杂。
函数就是一台输入输出机器。
你给它一个东西,它吐出另一个东西。比如:
这台机器的规则是:输入一个数,把它平方后输出。
| 输入 | 输出 |
|---|---|
| 1 | 1 |
| 2 | 4 |
| 3 | 9 |
| 10 | 100 |
所以 的意思不是神秘符号,只是在说:
把 3 塞进这台叫 的机器,输出是 9。
再看一个稍微像现实的函数:
输入 10,输出 21。输入 100,输出 201。它像一台“乘 2 再加 1”的机器。
大模型也可以先粗暴理解成一个超级复杂的函数。你输入一段文字,它输出下一个词的各种可能性。
比如你输入:
今天天气很好,我想去
模型可能给出:
| 下一个词 | 可能性 |
|---|---|
| 公园 | 0.32 |
| 散步 | 0.20 |
| 吃饭 | 0.08 |
| 机场 | 0.01 |
这里“可能性”也叫概率。概率就是“这件事发生的机会有多大”,0.32 可以粗略读成 32%。
所以,先把大模型降维成一句人话:
大模型是一台很大的函数机器:输入文字,输出下一个 token 的概率。
这里的 token 可以先理解成“模型眼里的文字小块”。一个 token 可能是一个汉字、一个词的一部分、一个英文单词、一个标点,也可能是更奇怪的小片段。模型并不直接看“人类觉得自然的词”,它看的是被切碎后的编号。
再把“近似”这个词放平
泰勒展开最重要的词不是“展开”,而是“近似”。
近似就是不求完全一样,只求在当前用途下足够接近。
比如你问:
北京到上海大概多远?
别人回答:
大概 1000 公里。
这不是精确测量,但对“要不要坐飞机”这种问题已经够用。
再比如地图。世界是圆的,地形有高低,城市有复杂道路。但你打开手机地图时,看到的是一张被压平、被简化、被抽象过的图。它不是世界本身,却能帮你找路。
泰勒展开做的事情也类似:
原函数可能很复杂,但在某个点附近,我们用一条直线、一条抛物线,或者更高阶的多项式当“局部地图”。
这里又冒出两个词:直线、抛物线。
直线很好理解,就是像尺子边缘那样笔直的线。它的公式通常长这样:
抛物线就是 这种弯弯的线,比如:
为什么数学喜欢用直线、抛物线来近似复杂函数?因为它们便宜。便宜不是钱便宜,而是计算便宜、理解便宜。
- 直线只需要知道“高度”和“斜率”。
- 抛物线再多知道一点“弯曲程度”。
- 更高次的多项式继续加入更细的弯曲信息。
复杂函数像一座真实山脉,细节很多。泰勒展开像是在你脚下附近画一张小地图。它不保证整座山都画准,但会努力把你脚下这一小片画准。
flowchart LR
A["复杂函数"] --> B["选一个点 a"]
B --> C["看这个点的高度"]
B --> D["看附近往哪边升、往哪边降"]
B --> E["看弯曲程度"]
C --> F["局部近似"]
D --> F
E --> F
斜率:先别急着说导数
泰勒展开最常见的第一项,是“斜率”。如果斜率没懂,导数、梯度、反向传播都会变成连环黑话。
斜率就是:往右走一步,高度变多少。
想象你在爬山。
- 往前走 1 米,高度升高 0.2 米,坡比较缓。
- 往前走 1 米,高度升高 2 米,坡很陡。
- 往前走 1 米,高度降低 1 米,你在下坡。
这就是斜率。
用数学写,就是:
比如一条线从点 到点 。
- 横向从 1 到 3,变化是 2。
- 高度从 2 到 8,变化是 6。
- 斜率就是 。
人话:
横向每增加 1,高度大约增加 3。
现在看函数 。
从 到 :
- 横向变化是 1
- 高度变化是 7
所以这段平均斜率是 7。
从 到 :
- 横向变化是 0.1
- 高度变化是 0.61
平均斜率是 。
从 到 ,斜率会更接近 6。
你会看到一个现象:
离 越近,平均斜率越接近 6。
这个“无限靠近时的斜率”,就是导数。
导数:某一点的瞬时斜率
导数就是某一点上的瞬时斜率。
“瞬时”这个词也别怕。汽车仪表盘上显示 60 km/h,就是瞬时速度。它不是说你过去一整小时刚好开了 60 公里,而是说:如果你维持这一刻的速度,接下来一小时会走 60 公里。
导数也是同样的想法:
如果函数在这一刻保持当前变化趋势,往右走一点点,输出大概会变多少?
对于 ,它的导数是:
读作“f 撇 x”,意思是 在 这个位置的斜率。
所以在 处:
人话:
在 附近, 每增加 1, 大约增加 6。
注意这里有“大约”。因为 是弯的,斜率会变。你从 3 走到 4,斜率不再一直是 6,而是在路上慢慢变大。但如果你只从 3 走到 3.01,变化很小,把斜率当成 6 就很准。
这就是泰勒展开的第一层直觉:
在足够近的地方,弯曲的函数可以先当作一条直线。
一阶泰勒展开:先用直线近似
现在终于可以写第一个泰勒公式了:
这个公式看着抽象,我们把每一块拆开:
- :你已经站着的那个点,也叫展开点。
- :你想估算的新位置。
- :当前位置的高度。
- :当前位置的斜率。
- :你从当前位置走了多远。
- :按当前斜率估算,高度会变化多少。
所以整句公式的人话是:
新位置的高度 ≈ 当前高度 + 当前斜率 × 走出去的距离。
拿 来手算。
我们在 附近估算 。
已知:
代入一阶近似:
真实值是:
差了 0.01,很近。
但如果估算 :
真实值是 16,误差变大了。
这说明一阶泰勒展开有一个很重要的边界:
它是局部近似。离展开点越近,通常越准;离得越远,可能越不准。
这句话后面讲大模型训练时会反复出现。
二阶泰勒展开:把“弯曲程度”也加进去
一阶近似只看斜率。问题是很多函数是弯的。
弯是什么意思?不是“线条不好看”,而是:
斜率自己也在变化。
比如 。
- 在 ,斜率是 2。
- 在 ,斜率是 6。
- 在 ,斜率是 20。
越往右,坡越陡。
“斜率变化得有多快”也可以用一个数表示,这个数叫二阶导数。
先递归拆一下:
- 一阶导数:函数值变化得有多快。
- 二阶导数:一阶导数变化得有多快。
- 人话:坡度本身变快还是变慢。
对于 :
读作“f 两撇 x”,表示二阶导数。
现在二阶泰勒展开来了:
继续拆:
- 第一项 :当前高度。
- 第二项 :按当前斜率走出去。
- 第三项 :补上函数弯曲带来的误差。
为什么有个 ?直觉上可以先这样记:
斜率不是一下子跳到新斜率,而是在路上慢慢变化,所以平均补偿要打个折。
更正式的推导以后可以单独讲,现在不需要卡在这里。
再算 ,在 附近估算 。
已知:
代入:
这次刚好等于真实值。原因是 本来就是二次函数,二阶泰勒展开已经完整描述它了。
如果函数更复杂,比如 、、神经网络里的激活函数,二阶不一定完全够,但二阶已经比一阶知道得更多。
完整泰勒展开:把越来越细的变化都加上
完整的泰勒展开长这样:
先不要被它吓住。它只是在重复同一个模式:
- 第 0 层:当前位置多高。
- 第 1 层:当前往哪个方向变,变多快。
- 第 2 层:变化速度本身怎么变。
- 第 3 层:变化速度的变化速度又怎么变。
- 后面继续递归。
这里的 、 叫阶乘。
阶乘也不复杂:
它在公式里负责调整每一阶的权重,让这串近似在数学上对齐。
现在把完整公式翻译成人话:
如果我知道函数在 点的高度、斜率、弯曲程度、更高层的弯曲变化,那么我就可以用这些局部信息,拼出 附近的函数样子。
这就是泰勒展开。
最经典的小例子:用多项式近似
是一个很常见的函数。这里的 是一个固定数字,大约等于 2.718。你不用先理解它的全部来源,只要知道 在概率、增长、深度学习里经常出现。
在 附近, 的泰勒展开是:
现在拿 试一下,只用前四项:
逐步算:
加起来:
真实的 大约是 1.10517,非常接近。
但如果 很大,只取前几项就不一定够。还是那句话:
泰勒展开通常先保证局部准确,不保证远处随便用也准。
从一个变量到很多变量:大模型开始出现
前面我们一直用一个输入 。但大模型不是只有一个旋钮,它有很多参数。
参数是什么?
参数就是模型内部可以被训练改变的数字。
一个很小的模型可能只有几个参数。一个大模型可能有几十亿、几百亿、上万亿个参数。每个参数都像一个小旋钮,训练就是不断调整这些旋钮,让模型预测更准。
如果只有一个参数,我们可以把损失函数画成一条曲线。
如果有两个参数,可以把损失函数想成一张山地地图。
如果有上亿个参数,我们画不出来,但数学上还是同一件事:每组参数对应一个损失值。
这里又出现了“损失函数”。
先拆开:
- 损失:模型错得有多离谱。
- 函数:输入一组参数,输出一个数。
- 损失函数:衡量“这组参数让模型错多少”的机器。
训练模型时,我们想让损失变小。人话就是:
模型现在预测得不好,我们调整参数,让它下次错少一点。
如果把损失想成山的高度,训练就是找低谷。参数是你在地图上的位置,损失是当前位置的海拔。
梯度:很多方向上的斜率合在一起
一个变量时,斜率告诉你往左还是往右会升高。
很多变量时,方向就多了。
假设你站在山坡上:
- 往东走,高度升得快。
- 往西走,高度降得快。
- 往南走,高度变化不大。
- 往东北走,可能更陡。
这时候一个数字不够描述所有方向。我们需要一组数字,分别记录每个参数方向上的斜率。这组数字就叫梯度。
梯度就是很多个斜率组成的向量。
再拆“向量”:
向量可以先理解成一串数字,也可以理解成一个带方向的箭头。
比如:
这就是一个三维向量。放到训练里,它可以表示:
- 第 1 个参数往上调一点,损失增加很快,斜率 3。
- 第 2 个参数往上调一点,损失反而降低,斜率 -2。
- 第 3 个参数影响较小,斜率 0.5。
如果梯度某一项是正数,说明这个参数增大时损失会上升。那我们就应该把它往反方向调小。
如果梯度某一项是负数,说明这个参数增大时损失会下降。那我们就可以把它调大。
这就是梯度下降的直觉。
梯度下降:一阶泰勒展开在训练里的影子
梯度下降的公式常写成:
先拆符号:
- :模型参数,很多数字组成的一大串。
- :当前参数下的损失。
- :损失函数在当前参数处的梯度。
- :学习率,也就是每一步迈多大。
- :更新后的参数。
人话:
看看当前位置哪个方向让损失上升最快,然后往反方向走一小步。
为什么这和泰勒展开有关?
因为一阶泰勒展开在说:
这里出现了点乘 。继续拆。
点乘就是“对应位置相乘,然后加起来”。
比如:
在训练里,点乘可以粗略理解成:
参数变化方向和梯度方向有多一致。
如果你沿着梯度方向走,损失大概率会上升。因为梯度方向本来就是“上坡最快”的方向。
如果你沿着负梯度方向走,损失大概率会下降。负梯度就是“下坡最快”的方向。
所以梯度下降不是拍脑袋,它背后的局部理由就是:
在当前位置附近,损失函数可以先用一阶泰勒展开近似;按这个局部近似,往负梯度方向走能让损失下降。
但注意“一小步”很重要。如果步子太大,你就离开了这个局部近似可靠的范围。学习率太大时,训练会震荡甚至崩掉,原因就藏在这里。
反向传播:不是泰勒展开,但在算泰勒需要的一阶信息
大模型训练里还有一个核心词:反向传播。
先别把它想复杂。
训练一次大概分三步:
- 前向传播:把输入喂给模型,算出预测。
- 计算损失:比较预测和正确答案,得到“错多少”。
- 反向传播:从损失往回算,找出每个参数对错误负多少责任。
“每个参数对错误负多少责任”,数学上就是每个参数的导数,也就是梯度里的每一项。
所以反向传播不是泰勒展开本身。它更像是:
高效计算一阶泰勒展开所需斜率信息的算法。
没有这些斜率,梯度下降就不知道该往哪边走。
二阶信息:不只知道坡度,还想知道坡会怎么变
一阶梯度只告诉你“当前位置往哪边下坡”。
但它不知道一个问题:
前面是平缓长坡,还是马上变陡的悬崖?
这就是二阶信息的价值。
在一个变量里,二阶导数告诉你斜率怎么变。
在很多变量里,二阶信息会变成一个矩阵,叫 Hessian。
先拆“矩阵”:
矩阵就是一张数字表格。
比如:
它有 2 行 2 列。矩阵可以表示很多关系,比如“第一个方向和第二个方向如何互相影响”。
Hessian 矩阵记录的是:
每个参数方向的斜率,如何随着其他参数变化而变化。
如果梯度是一张“哪里下坡”的箭头图,Hessian 就更像一张“地形弯曲程度”的地图。
多变量二阶泰勒展开常写成:
这行公式很硬,我们只读人话版:
- :当前位置的损失。
- :按当前坡度估计,走一步损失怎么变。
- :补上地形弯曲带来的影响。
为什么大模型训练不直接完整使用 Hessian?
因为太大。
假设一个模型有 1000 亿个参数,也就是 个参数。Hessian 要记录“每个参数和每个参数之间的二阶关系”,规模大约是:
也就是一百亿亿级别的表格项。这已经不是“多占一点内存”的问题,而是完全不可承受。
所以现代大模型训练主要依赖一阶梯度,再用 Adam、Adafactor 这类优化器做一些更聪明的步长调整。这里要说清楚:Adam 不是完整二阶泰勒方法,它主要利用梯度的一阶矩和二阶矩。
再拆这句话:
- 一阶矩:梯度最近大概往哪个方向。
- 二阶矩:梯度最近波动有多大,或者某些维度是不是经常很大。
它不是在显式保存完整 Hessian,但它也在回答类似的工程问题:
每个方向应该迈多大步,才不容易失控?
大模型到底哪里和泰勒展开有关
现在可以认真回答开头的问题:泰勒展开和大模型有关系吗?
有,但要分三层。
第一层:训练优化里的局部近似
大模型训练时,损失函数极其复杂。我们不可能把整个损失曲面完整看清。
每一步训练只能问一个局部问题:
在当前参数附近,往哪个方向走,损失可能变小?
这个问题正是一阶泰勒展开擅长回答的。
所以,梯度下降的基本逻辑可以理解为:
用一阶泰勒展开看清脚下一小片地形,然后往下坡方向迈一步。
第二层:二阶优化和误差分析
如果我们还想知道“这一步会不会太大”“某个参数改动是不是危险”“压缩模型会造成多大损失”,一阶信息有时不够。
这时二阶泰勒展开会出场,至少作为分析工具。
比如模型量化。
量化是什么?
量化就是把模型里的高精度数字,换成更省空间的低精度数字。
比如原来一个参数是:
量化后可能变成:
这样会省内存、加快推理,但也会带来误差。问题是:
哪些参数改一点无所谓,哪些参数改一点会让模型变差很多?
这就像在山谷里移动。如果某个方向很平,挪一点高度变化不大。如果某个方向很陡或者弯得很厉害,挪一点损失就可能升高很多。
二阶泰勒展开可以帮助估算这种“改动带来的损失变化”。一些量化、剪枝、压缩方法会使用类似的二阶敏感度思想。当然,具体工程实现不一定完整计算 Hessian,因为完整 Hessian 太贵,通常会做近似。
第三层:大模型工程里的“近似文化”
大模型太大,很多地方都靠近似活着:
- 训练时,不用全量数据算真实梯度,而是用一小批样本估计梯度。
- 推理时,用低精度数字加速计算。
- 微调时,不一定改所有参数,可以只改一小部分参数。
- 压缩时,尝试删掉或合并影响较小的部分。
这些不全是泰勒展开,但背后常有同一个问题:
复杂系统整体太贵,我能不能只看局部、只看主要变化、只保留最重要的信息?
泰勒展开不是所有近似方法的父亲,但它是理解这类问题的一把基础钥匙。
也要说清楚:大模型不是“泰勒展开堆出来的”
这里必须防一个误区。
Transformer、大模型、注意力机制、词向量、矩阵乘法、激活函数,这些东西不是“泰勒展开的直接应用”。
泰勒展开更像一副眼镜。它帮你理解:
- 为什么梯度能指导训练。
- 为什么学习率不能太大。
- 为什么局部有效不等于全局有效。
- 为什么二阶信息有价值但太贵。
- 为什么压缩和量化要关心“参数扰动造成多大损失”。
但如果有人说:
大模型的智能来自泰勒展开。
这就太跳了。
更准确的说法是:
大模型是由神经网络结构、海量数据、优化算法、算力系统和训练目标共同产生的复杂工程结果。泰勒展开是理解其中“局部优化”和“误差近似”的基础数学工具之一。
一个完整类比:夜里下山
把大模型训练想成夜里下山。
你站在一座大山上,目标是走到谷底。整座山太大,天太黑,你看不到全局地图。你只有脚边一小块地形信息。
一阶信息像什么?
你用脚感觉哪边是下坡。
这就是梯度。
二阶信息像什么?
你还感觉地面是不是越来越陡、是不是马上要弯、是不是这边看着下坡但很快会翘起来。
这就是曲率,也就是二阶信息。
学习率像什么?
你每一步迈多大。
步子太小,走得慢。步子太大,可能摔出去,甚至越过谷底冲到另一边。
泰勒展开像什么?
你根据脚下这一小片地面,临时画出一张小地图,然后按这张小地图决定下一步。
这张小地图在脚下附近通常有用,但它不是整座山的真实地图。
为什么“小步快跑”常常比“一步到位”靠谱
现在你能理解深度学习训练里的一个基本事实:
模型不是一次算出最优参数,而是一步一步改出来的。
原因很简单:局部近似只在局部可靠。
如果你用一阶泰勒展开看当前位置附近,它只告诉你“小范围内往哪边可能更好”。它不能保证你沿这个方向走 100 公里还更好。
所以训练通常是:
- 用当前一小批数据算损失。
- 反向传播算梯度。
- 根据梯度更新一小步。
- 到新位置后重新计算。
- 重复很多很多次。
这就是把很多张局部小地图拼成一条下山路线。
再递归拆一个常见黑话:损失曲面
文章里多次说“损失曲面”。它听起来很抽象。
先看一个参数:
- 横轴是参数大小。
- 纵轴是损失。
- 画出来是一条曲线。
再看两个参数:
- 左右方向是第一个参数。
- 前后方向是第二个参数。
- 高度是损失。
- 画出来像一张地形表面。
这就是损失曲面。
大模型有很多很多参数,没法画成三维图。但我们仍然沿用“曲面”这个词,表示:
参数空间里每个位置都有一个损失值,这些损失值组成了一个极高维地形。
“高维”也可以拆:
维度就是需要几个数字才能描述一个位置。
平面位置需要两个数字,比如经度和纬度。空间位置需要三个数字,比如长、宽、高。大模型参数位置可能需要几百亿个数字,所以叫高维。
用一句话串起来
现在把所有概念串成一条链:
- 大模型有很多参数。
- 一组参数会产生一个损失。
- 训练想让损失变小。
- 损失函数太复杂,看不清全局。
- 泰勒展开告诉我们,可以先在当前位置附近做局部近似。
- 一阶近似需要梯度,梯度告诉我们局部下坡方向。
- 二阶近似需要曲率,曲率告诉我们地形弯得多厉害。
- 真实训练主要靠一阶梯度反复小步更新,二阶思想常用于分析、近似优化和压缩。
压缩成一句:
大模型训练不是拿到完整地图再规划路线,而是不断用局部近似决定下一步。泰勒展开就是“局部近似”这件事的数学原型。
小白自测
1. 泰勒展开是在干什么?
用一个点附近的信息,估算函数在附近的样子。最简单是一阶直线近似,再往上可以加入二阶弯曲信息。
2. 为什么说它是“局部”的?
因为它围绕某个展开点工作。离这个点越近,通常越可靠;离得太远,局部地图可能失真。
3. 导数和梯度有什么区别?
一个变量时,导数就是这一点的斜率。很多变量时,每个方向都有一个斜率,把这些斜率放成一串,就是梯度。
4. 梯度下降为什么往负梯度方向走?
一阶泰勒展开告诉我们,梯度方向是局部上升最快的方向;反过来,负梯度方向就是局部下降最快的方向。
5. 大模型是不是直接等于泰勒展开?
不是。大模型本身是神经网络和训练系统的复杂组合。泰勒展开主要帮助我们理解训练优化、局部近似、二阶信息和压缩误差分析。
最后记住三句话
第一,泰勒展开不是玄学,它就是:
当前值 + 当前变化趋势 + 弯曲修正 + 更高阶修正。
第二,它和大模型最核心的连接是:
训练大模型时,我们无法看清完整损失地形,只能依靠当前位置附近的变化信息一步步下降。
第三,所有局部近似都要尊重边界:
局部有效,不代表全局有效;步子越大,越要怀疑近似还准不准。
如果以后你再看到导数、梯度、Hessian、二阶优化、量化误差、损失曲面这些词,可以先把它们都拉回同一个画面:你站在一座看不清全貌的山上,用脚下这一小块地形,决定下一步往哪里走。