开始之前 · 第二张地图

学习的每一步
背后各有一块数学

这一章先摆好一条自己能走通的主线,再给每块数学配一个最小例子:变成数、猜、打分、找方向、拧一步、考新题。
每一站停下来问一件事:这里的数学到底在做什么。不需要先翻别的章节,也不强迫所有概念共用同一组数字。 这不是前置课,卡住了再翻回来就行。

先

先把本章的小实验摆出来

后面六站都在研究同一件事:拿一批带答案的数据,调整模型里的权重,让它对没见过的新数据也猜得准。这里用一个只有两个特征的小分类器把主线先摆出来。

输入x:一张小图片
[亮度, 有没有竖线]
→
两个特征x = [0.8, 1]
已经是一串可计算的数
→
两个权重w = [w亮, w竖]
z = w·x + b
→
猜与打分z → 概率 p
和答案比,得到损失

你可以把它想成一台只有两个旋钮的机器:两个特征各乘一个权重,再加上偏置 b,得到分数 z;分数再变成“像不像目标”的概率 p。数据还给出正确答案,损失函数把“猜得有多偏”压成一个数。后面说“点积、概率、损失、梯度、步长”,都在拆这条流水线的不同位置。

本章主线

上面这个两个特征的小分类器,会把表示、点积、概率、损失、梯度、更新和泛化串起来。

圈

数学只是这一圈的零件

学习是一圈六个站:变成数、猜、打分、找方向、拧一步、考新题。 数学的作用,就是给这六站各配一个零件。下面先看零件和站怎么对上,再一站一站打开。

点一块数学:看它撑着学习这一圈的哪几站,拿掉会卡在哪

🎯 三句话记住数学的作用

线性代数让数据能算(①②)。微积分让改进有方向(④⑤)。 概率与信息论让「猜得好不好」和「没见过的数据」能被量出来(③⑥)。

接下来六站逐个打开,每站固定回答三件事:卡在哪、数学做了什么、为什么这样够用又在哪不够, 接下来六站逐个拆开这条小分类器的流水线。

①

东西先变成一串数

卡在哪图片、文字、声音不是数,没法放进公式。
数学做的事线性代数:把一个东西写成一串数(向量),它就成了空间里的一个点。「像不像」变成「离得近不近、方向同不同」,再用范数这把尺来量。
一句直觉换成数,不是为了好看,是为了能量距离。
先把两步分开

把东西变成数字,叫表示或编码;拿这些数字做加、乘、距离和变换,才是线性代数在做的事。

线性代数不会自己把“猫”认成 49 个数。人或前面的编码器先规定:这张图片看像素,这句话先切成词再查向量;线性代数接手的,是已经排好的一串数。

现实里的东西2×2 灰度图
亮、暗、亮、暗
→
先做表示 / 编码[[1, 0],
 [0.8, 0.2]] → [1, 0, 0.8, 0.2]
→
线性代数接手和另一串数
做点积、距离、矩阵乘法

但“猫”不会自己带着一串数字。我们先要规定一种表示协议:用相机取多少像素、每个像素记录亮度还是 RGB、矩阵按什么顺序摊平。换一套协议,得到的向量就会不同;向量本身也不会自动保留“这是猫”的意义。

一个手写数字 1,怎样按约定变成向量

这是一个 5×5 的手写“1”:1 表示笔画所在的深色像素,0 表示背景。这里选择“逐行展开”,所以矩阵第一行接着第二行,得到右边那串数。

这一步有两个容易混在一起的词:矩阵是把数字按行列摆好,方便保留“谁挨着谁”;向量是一列数字,方便统一做点积和矩阵乘法。它们装的是同一批数字,只是排法不同。把矩阵打散会让通用的线性代数更方便,却可能丢掉像素的邻近关系,所以 CNN 会保留矩阵的格子,ViT 会先切成小块再变成向量。

文字不是像素:先编号,再查表

文字没有天然的“第几行第几列”。常见做法是先用分词器把句子切成词或词片段,再给每个片段一个整数编号;编号只是标签,305 不比 12 更“像猫”。真正拿来计算的向量,是用这个编号去一张可学习的表里查出来的那一行。

一句话我 喜欢 猫
→
切成片段我 | 喜欢 | 猫
→
查编号12 | 87 | 305
→
查表得到向量猫 → [0.21, −0.08,
0.44, 0.17, …]

这张表叫嵌入表:每一行对应一个词片段,每一列是一个可学习的坐标。训练会调整这些行,让出现在相似上下文里的词片段在向量空间里更接近;“猫”这个意义不是编号自带的,是训练把它写进了这一行数字里。

所以“文字变成数”至少有两层:编号让机器知道该查哪一行,向量才让点积、距离和矩阵乘法有意义。图片的像素、文字的嵌入,最后都能交给线性代数,但它们前面的表示协议完全不同(可继续看分词和向量嵌入)。

可选实验:一个数怎样展开成 8 个特征

这里不再解释图片或文字的编码,而是用一个数轴上的点 x 演示“同一个输入可以从多个角度写出来”。它先被表示成 8 个数,旋钮才有东西可乘。图片和文字讲清“表示”以后,再看这个更适合做数学实验的版本。 先看这一步最朴素的版本:把一张 7×7 的小图,直接按像素排成 49 个数(亮的记 1,暗的记 0)。再用最直接的办法比两张图:对应的像素逐个相乘再加起来,叫点积,除以两张图各自的“长度”,得到 0 到 1 的相似度。点积正式登场是在下一站。

表示实验:7×7 的数字 1,直接排成 49 个数

上面那个“相似度”,写成式子是下面这一条。把鼠标放到式子里的字母上,上方对应的图会亮。

🎬 自己验一遍

把「1 往右挪几格」拖到 1 或 −1:人一眼认出还是 1,但按像素直接比,它和原图的相似度比一个 7 还低。

这说明:光把东西排成数还不够,怎么排决定了「近」是不是你想要的近。 后面的词向量、卷积、ViT,做的都是让网络自己学出一种排法,使意思相近的东西真的靠在一起。

这里的“变成 8 个数”不是魔法,也不是把一个数字凭空复制 8 遍。贯穿本章的这个小例子里,x 本来就是一条数轴上的一个数;我们准备 8 个不同的“小镜头”,把 x 分别代进去。这样,后面的 8 个旋钮就能分别看原值、平方趋势、弯曲趋势……再把它们合起来画出弯的曲线。

先展开一格:x = 0.40 怎样算出前 4 个数

这 8 个“小镜头”在数学里叫一组特征;本例用的是一组互相配合的多项式(前几项写在图里)。所以 x=0.40 会得到 [1, 0.40, −0.26, −0.44, …]。它仍然只代表同一个 x,只是从 8 个角度把它写出来,方便后面的旋钮组合。

回到那一圈:8 个特征分别乘上 8 个旋钮,再加起来

“近”怎么量:范数与距离

上面一直说“离得近”,近要有一把尺。先要一把量“一串数有多大”的尺,叫范数,写作 ‖w‖。 最常用的两把:L2 是直线长度(各项平方相加再开方),L1 是各项绝对值相加(像出租车在街区里走的路程)。 两点之间的距离,就是它们之差的范数。余弦相似度的分母,用的也是 L2 长度(见向量嵌入)。

尺子不是只有量的用处。限定“范数不超过 r”,就是给旋钮划一个活动范围。下图的灰色椭圆是只看练习册时的“错”(圆心是只看数据的最好旋钮), 橙色形状是允许的范围,白点是范围内最好的旋钮。换一把尺,范围的形状就变了。

同一道限制,换一把尺子:范围的形状不同,选出来的旋钮也不同

🎬 自己验一遍

把 p 拖到 1:范围是个带尖角的菱形,白点正好落在尖角上,第二个旋钮被压成恰好 0,等于被关掉了。

拖到 2(圆):白点停在边上的某处,两个旋钮都不为 0,只是变小了。这就是正则化里“L1 能让旋钮变 0,L2 只能让它变小”的来由:尖角是 L1 的形状带来的。

高维里的“近”:随机两个方向几乎互相垂直

一个向量有几百上千个数时,空间的性质会变。直觉全部来自二维三维,到了高维要亲手量:随机挑两个方向,夹角到底多少度?

核心大图 · 量一下:随机两个方向,夹角到底多少度

每次拖动都真的生成 1000 组随机向量,真的算点积和夹角。 横轴是夹角,纵轴是有多少次落在这个角度。

🎬 自己验一遍

把维度 d 从 2 拖到 1000。看那根白色竖线(90°):

d = 2 时,夹角散布在整个 0°~180°;d = 1000 时, 几乎所有夹角都挤在 90° 附近——分布被压成了一根尖刺。

这就是高维最反直觉的一条:在那个世界里,「随机」约等于「正交」。 它解释的是:两个无关的东西,内积几乎是 0,所以一个高维向量里能同时放下很多互不干扰的方向;也解释了为什么高维里「距离」会失去区分度。
内积为什么能当相似度,是 ② 里那张箭头图的事:两个箭头越同向,点积越大。

为什么这样够用,又在哪不够

向量里的「近」有两把尺:距离(差多远)和夹角(方向同不同,② 里的点积箭头图)。 文字和图片没法直接量,所以先编号、再查表换成向量(见分词、向量嵌入)。 不够的地方就是上面那一幕:原始排法里的近不等于意思上的近,得靠训练把排法本身学出来。 高维里随机方向几乎互相垂直(上面那张夹角图),所以一个向量放得下上万种不同的东西而不打架。

后面哪些章是这一站的变体它换了怎样的「排法」
分词 · 词向量 · 向量嵌入词 → 编号 → 一行表 → 一个向量,训练让意思近的靠近
CNN · ViT图片不拉平成一长串,而是保留邻近关系 / 切块
视觉 tokenizer把连续的向量再量化回编号,代价是「最近邻」不可导
②

猜 = 点积,再折一下

卡在哪有了一串数,怎么变成一个预测?旋钮要怎么用?
数学做的事点积:每个旋钮是「我有多在乎这一项」,把输入和这组在乎程度对一遍。再加一次非线性的折,叠起来就能弯。旋钮排成的大矩阵,常常其实只有几个方向在起作用(低秩)。
一句直觉点积给出一条直线,折给出拐弯,一层层叠,直线就拼出了曲线。

点积:对应相乘,再相加

一根箭头可以用两个数记下来:从起点到箭头尖,横着走多少、竖着走多少,这就是它的横坐标 x、纵坐标 y;向右、向上记正数,向左、向下记负数。两根箭头做点积,就是横坐标乘横坐标、纵坐标乘纵坐标,最后把两项加起来。

把两根箭头的坐标配成两对:拖到夹角 90°,看两项怎样抵消

两根箭头垂直时,两项会刚好抵消,点积为 0;夹角小于 90° 时点积为正,大于 90° 时为负。长度固定时,越同向点积越大;把 b 拉长也会放大点积,所以它同时受方向和长度影响。

回到“猜”:把 a 当输入、b 当两个权重,横坐标这一对就是“第一个特征 × 第一个权重”,纵坐标这一对就是“第二个特征 × 第二个权重”。加起来得到分数,再加偏置、经过激活函数,就接回本章开头的小分类器。

再看矩阵乘向量:一张表乘一排数 = 每一行和它各做一次点积

矩阵:一次做很多个点积

把很多个点积叠在一起,就是矩阵乘向量。画在平面上,矩阵是对整块平面的一次拉、转、压。

把很多个点积放在一起看:拖动四个数,看整个平面被怎么拉转压

① 两根彩色箭头=基向量的去向(也就是矩阵的两列)。 ② 方格变成的平行四边形=面积放大几倍就是行列式;变负说明翻了个面。 ③ 两条虚线=特征方向:只有这两个方向不会被转歪,只会被拉长。

🎬 自己验一遍

点「压扁」那个按钮:行列式会跑到 0,整个平面被压成一条线—— 这就是「秩塌陷」,也是 LoRA 那一章「低秩」说的事。

再点「翻面」:行列式变成负数,数值大小没变,但方向整个镜像了。 「行列式可以是负的」这件事,绝大多数教材只给公式不给画面。

这个小实验里的猜,就是 8 个数各自乘上旋钮、再加起来(一次点积)。点积本身永远只能画直线, 弯是从哪来的?下面拖「折的次数」,看一串折线怎么逼近一条弯曲线。

折几次,才能追上那条弯曲线

“点积 + 折”写成式子:每一段折线是一个“折”,旋钮 w 决定这一折有多陡。

🎬 自己验一遍

先点「只叠线性层」,再把层数拖到 100:线还是同一条直线,误差一点没变。矩阵乘加偏置,叠多少层都还是一次「拉一拉、转一转」。

切回「加一次折」,每多一个折点,误差就掉一截。弯,全是折出来的,这一站的名字里,「折」才是关键。

一张大表常常只有几个“图案”:低秩与奇异值分解

一个 20×20 的矩阵有 400 个数。如果它其实只是几个“竖条 × 横条”的图案叠在一起,这 400 个数里大部分是重复的。 奇异值分解(SVD)把任何矩阵拆成一串“图案 × 重要度”,重要度从大到小排。 只留前 k 个图案,就是秩 k 近似:存 k 对竖条和横条(共 k×40 个数)就够了。

只留前 k 个图案:左边是原矩阵,右边是用 k 个图案拼回来的

🎬 自己验一遍

从 k = 0 往右拖:k = 1 时误差还有 39%,k = 2 是 11%,k = 3 时掉到 2% 以内,只用了 120 个数;再往后加,右图几乎不再变,那些是噪声。

这张表是人造的:我们叠了三个图案再加了噪声,所以柱子在第 3 根之后突然掉下去。真实的权重矩阵不一定这么干净。 LoRA 赌的是:微调时要改的那部分近似低秩,所以只训练两个小矩阵就够了;自编码器的瓶颈层也是同一个想法。

为什么这样够用,又在哪不够

「线性变换 + 折」反复叠,原则上能逼近很多函数,这叫万能逼近。但它只保证存在这样一组旋钮: 不保证你找得到,不保证要多少个旋钮,更不保证它在没见过的数据上也对(那是 ⑥ 的事)。 上图的折线是等距折点的一种做法,不是最优的,真实网络的折点位置是训练出来的。 点积本身就是上一小块那张箭头图:两个箭头越同向,点积越大。

后面哪些章是这一站的变体它换了怎样的「猜」
感知机 · MLP · 激活函数点积 + 折,叠成多层;激活函数就是那个「折」
CNN同一个小模板在整张图上滑着做点积
注意力 · Transformer点积用来算「谁该看谁」,权重是现算的,不是固定旋钮
③

好模型 = 让真实结果不意外

卡在哪猜得「多差」,要变成一个数,训练才有东西可压;分类时,猜的本身就是一组概率。
数学做的事概率 + 信息论:先用 softmax 把模型的输出变成概率;一串结果的概率是逐项连乘;连乘太小,取负对数就是「意外程度」,这就是损失。
一句直觉训练 = 让已经发生的事,在模型眼里最不意外。

第一步:把分数变成概率(softmax)

网络最后一层算出来的是一组随便的数,可正可负,叫分数。要当概率用,必须都是正数、加起来等于 1。 softmax 的做法很直接:每个分数先取 exp(保证为正;而且分数每差 1,对应的数就差 e ≈ 2.7 倍,所以猫比狗高 1 分,猫的“份额”就是狗的 2.7 倍),再除以总和(保证加起来是 1)。

四个分数变成四个概率:拖一拖,看哪些量真的有影响

softmax 的式子,T 就是上面的“温度”。

🎬 自己验一遍

拖「全体加同一个数」:四根概率柱纹丝不动。只有分数之间的差有意义,这一条后面会用来解决数值溢出。

拖「温度」到 0.2:概率几乎全集中在最高分上,接近“直接选最大”;拖到 3:趋近平均。语言模型生成时调的“温度”就是它(文本生成与采样)。

第二步:一整串结果的概率,是逐项连乘

一句话的概率怎么算?不是去数这句话出现过几次,而是一个词一个词地问:“看到前面的,下一个词是它的概率多大”,再把每一步的概率连乘起来: p(整句) = p(词₁) · p(词₂ | 词₁) · p(词₃ | 词₁词₂) ·…。 竖线读作“在……的条件下”,叫条件概率;这个拆法叫链式分解。语言模型的“下一个词预测”就是这样;扩散模型每一步去一点噪声,也是同样的连乘结构。

一个只有 8 句话的迷你语言模型:每一步的概率,和整句乘起来的结果

🎬 自己验一遍

先看“我 爱 吃 苹果”,再看“苹果 吃 爱 我”:同样四个词,顺序一乱,整句概率掉了七八个数量级(读数里能看到)。开头和结尾也各算一步。乱序那句每一步只有百分之一二,连乘五次就是十亿分之一。

注意:这个迷你模型只看前一个词,真正的大模型看的是前面全部内容,但“逐步问、再连乘”的结构一样。连乘出来的数小得没法直接用,下面就是为什么要取对数。

第三步:连乘太小,取对数就成了“意外”

硬币抛了 13 次,9 次正面。「正面概率是 p」这个说法,对这批数据解释得有多好? 把每一次的概率乘起来,就是这个说法的似然。再取负对数、除以次数,就是“平均每次有多意外”。
单位提醒:取 e 为底的对数,单位叫奈特;取 2 为底,单位叫比特(后面的“暗号”那一小块用比特)。两者只差一个固定倍数(1 奈特 ≈ 1.44 比特),不影响谁更好。拖 p,再拖抛的次数,看乘出来的数发生了什么。

同一枚硬币,同样的 9/13 正面:似然和「平均意外」随 p 怎么变

把“逐项连乘取负对数”写成式子,就是训练里的损失:

🎬 自己验一遍

把抛的次数拖到最大:似然小到计算机的小数装不下(双精度最小约 10−308),但「平均意外」依然是个好好的、一眼能比大小的数。

两条曲线的最好点是同一个 p。取负对数没有改变「谁最好」,它只做了两件事:把连乘变成连加,把小到装不下的数变成能比的数。

第四步:给“意外”一个单位,再问模型和现实差多远(KL)

取了负对数,就能给“意外”一个单位:比特。你给朋友发天气预报,常出现的天气用短暗号,罕见的用长暗号,最省的平均长度就是熵。模型学偏了,相当于拿了一套不合适的暗号表,消息变长,多付的那部分比特叫 KL 散度。

核心大图 · 两排柱子,一条差额

这两排柱子在《损失函数》那一章还会再出现一次:交叉熵的主场在那里。 KL 散度的家在这里。KL 不对称:KL(p‖q) 和 KL(q‖p) 一般不相等, 各章里的哪个在前、哪个在后,决定了它惩罚的是哪种错。

🎬 自己验一遍

把「模型有多懂」拖到最右边:粉色差额条会真的归零。

再往回拖一点点:只要不是完全一致,KL 就立刻大于 0。 这就是为什么「差不多学对了」和「学对了」差得很远。

第五步:理论上对,计算机里要算稳(数值精度)

上面硬币那张图展示的是下溢:连乘的数小到装不下。softmax 还有上溢的问题:exp(100) 已经超出常用的 32 位浮点数能表示的最大值,变成“无穷大”,一除就成了无意义的 NaN。 办法正是 softmax 那张图里验过的性质(“全体加同一个数,概率不变”):全体减去最大的分数,概率不变,这样最大的那一项变成 exp(0) = 1,不会爆。取对数时同理(log-sum-exp 技巧)。

同样的四个分数,放大它们:直接算会崩,先减最大值就稳

🎬 自己验一遍

把“分数放大倍数”往右拖,最大分数一过 约 89(放大 30 倍时是 90):上面一行变成 NaN(无意义),下面一行丝毫不变。分数这么大并不罕见:训练刚开始的随机初始化、或者没做归一化的深层网络里都可能出现。

这里的上限是模拟的 32 位浮点(最大约 3.4×1038,即 exp 的参数不能超过约 88.7);混合精度训练里用的 16 位范围更小,更需要这个技巧(归一化层、初始化)。

为什么这样够用,又在哪不够

这条线有条件:模型输出的是一个归一化的概率;样本之间可以连乘;没有额外的惩罚项。加了惩罚项,就成了最大后验(MAP):除了“数据解释得好”,还要求旋钮符合一个事先的偏好(先验),例如“旋钮最好小一点”。正则化里的那场拔河,就是这个。 满足时,「最大似然 = 最小化平均意外 = 最小化交叉熵」是同一件事, 平方误差只是「误差服从固定方差的高斯」时的特例(⑥ 里的中心极限定理解释了高斯为什么常见)。 不是所有损失都这么来:铰链损失、GAN 的对抗目标、强化学习的期望回报、对比学习的目标,都套不进这一句。 「意外」的度量(比特、KL)就是上面那一小块。

后面哪些章是这一站的变体它换了怎样的「打分」
损失函数分类用交叉熵(概率的负对数),回归用平方误差(高斯的负对数)
文本生成与采样 · VAE输出就是一张概率表;VAE 多一项 KL,管住「潜空间」别跑偏
DPO · RLHF打分来自人的偏好,不再是「标准答案」;KL 项限制新模型别离旧的太远
④

几千亿个方向,一遍反向走完

卡在哪旋钮有几千亿个,每一个该往哪拧?逐个试一遍,一圈要等到天荒地老。
数学做的事微积分:导数是「旋钮动一点,错多少」;链式法则把一连串步骤的导数乘起来;反向传播是按这个顺序一遍把所有旋钮的导数都算出来。
一句直觉最后的错只有一个数,倒着走一遍,所有旋钮的方向一起出来。
可选实验:参数很多时,反向传播为什么省计算

「逐个试」就是:把一个旋钮拧一点点,重新算一遍错误,错误变化多少 ÷ 拧了多少,就是这个旋钮的导数(定义本身;⑤ 站里那张放大图讲了它为什么等于切线斜率)。参数越多,逐个试就越贵。 反向传播一遍走完,靠的是链式法则:整串变化的倍数,等于每一段的倍数相乘。先看成本,再看它和「逐个试」算出来的方向是不是一回事。

算出全部旋钮的方向,要付多少次「前向」

“逐个摇一摇”的定义,就是导数的近似:把旋钮拧一点点 ε,看错误变多少。

🎬 自己验一遍

把旋钮数从 8 一路拖到 1011:上面一根条跟着旋钮数一起长,下面一根纹丝不动。

下方那行读数是真算的:8 个旋钮,「逐个摇」和「链式法则」算出的方向一致到小数点后很多位。省下的不是精度,是时间。

为什么倒着走能行:每一段的放大倍数一路相乘

链式法则说:整串变化的倍数,等于每一段的倍数相乘。乘法有个后果:任何一段接近 0,整串就塌;每段都略大于 1,整串就炸。

核心大图 · 四个因子连乘,缺一个就断

拖任意一段的「局部导数」,看最下面那根总责任怎么变。 目标:让总责任不要变成 0。

🎬 自己验一遍

把任意一段拖到接近 0 —— 不管其他三段多大,总责任立刻塌到 0。

这就是「梯度消失」的完整机制,不需要任何公式: 二十层就是二十个数连乘,只要它们平均小于 1,乘到最后就没了。

反过来,把四段都拖到 1.4 左右 —— 总责任会指数级炸掉。这就是梯度爆炸。 残差连接、归一化、精心设计的初始化,全都是在跟这一根乘法链条做斗争。

为什么这样够用,又在哪不够

一个输出、海量输入的时候,从输出端往回走,每一步只做「向量乘矩阵」,总成本是一次前向的几倍; 代价是要记住前向时每一层的中间结果(显存就是花在这里)。 要小心两个常见说法:反向传播只负责算方向,不是整套学习,走多远是 ⑤ 的事; 它不是「把责任分摊」,而是沿路径把局部放大倍数乘起来,所以某一段接近 0,整串就塌了(上面那张连乘图能拖着看)。

后面哪些章是这一站的变体它换了怎样的「找方向」
梯度下降与反向传播全站完整推导的第一处
激活函数 · 初始化 · 归一化都在改那条乘法链上每一段的乘数,让它不塌、不炸
强化学习没有标准答案,方向来自「奖励」的估计(策略梯度),不是沿计算图的链式法则
⑤

顺着坡走,步子有上限

卡在哪知道了方向,走多远?为什么「只看脚下」就能走到低处?
数学做的事微积分:任何光滑曲线放大到足够近都是直线,所以脚下的坡在一小段内可信。步子多大,取决于曲线有多弯。方向本身常常是抽一小批样本估出来的。
一句直觉坡只在脚下一小段可信,步子超过那一小段,就会冲过头。

为什么“只看脚下”可信:放大到足够近,曲线就变直

任何光滑的曲线,放大到足够近都像一条直线(地球是圆的,你脚下那块却是平的)。“直线”是我们唯一真正会算的东西,所以沿坡走一小步是可信的。

核心大图 · 同一个函数,放大三次

三段画的是同一个函数,只是视野越缩越小。注意绿色虚线—— 它是那一点处的切线;放到最后,曲线和切线已经分不出来了。

🎬 自己验一遍

切到第 ③ 段,再拖动「放大的中心点」:每次放大后得到的那条「直线」,斜率都不一样。

那个斜率就是导数。「不同位置有不同的直线」这件事,就是「函数在变化」的严格说法。

可选实验:把“步长不能太大”算出来

这里切到数值实验室的 8 个旋钮:下面是它的「弯度」(海森矩阵的特征值),和不同步长下的 40 步训练。主线里的两个权重只是同一件事的最小版本。

拖步长:同一个问题,40 步之后错误变成多少(对数刻度)

“沿坡走一步”写成式子,右边是不会发散的步长上限:

🎬 自己验一遍

把步长一点点拖过 1 倍:错误从稳稳往下,变成来回震荡、越震越大。这个上限是算出来的,等于 2 ÷ 最弯方向的弯度。

再看左边:步长再小,曲线也下降得很慢。因为最平的方向弯度比最弯的小两百倍左右,最弯的方向限制步子,最平的方向决定要走多久。

走一步用的方向,其实是估出来的(小批量与蒙特卡洛)

真正的方向要把练习册里每一条的错都平均一遍。数据有几百万条,每走一步都算全部,太贵。 办法:每次随机抽一小把(一批),用这一把的平均当方向。算不动的平均,用随机样本的平均去代替,这种做法统称蒙特卡洛。 同一个想法还出现在 VAE 的采样、强化学习估计回报、扩散模型的训练目标里。

每批抽 b 条,重复 200 次:200 个“估出来的方向”落在哪

🎬 自己验一遍

批大小 = 1:200 个点散得很开,平均夹角余弦只有 0.35,方向几乎是乱的,但平均下来仍围着十字转,没有系统性偏向某边。

批大小 = 64:点缩成一团,余弦到 0.96。读数里能自己验:批大 64 倍,散布缩小约 8 倍(√64)。这条 1/√n 的规律,⑥ 会用另一个例子再讲一遍。

步子无限小,就是一条微分方程(ODE)

每一步是“新位置 = 旧位置 − 步长 × 方向”。如果把步长缩到无限小,一步一步连成一条光滑的线,这条线满足:位置变化的速度,等于当前位置处的方向, 写作 dw/dt = −∇L。这类“速度由当前位置决定”的方程叫常微分方程(ODE)。 梯度下降就是用欧拉法(每次沿当前方向直走一小段)去解它;前面那条“步子不能超过 2÷最弯方向的弯度”,就是欧拉法稳不稳的边界。

一个会旋转着缩进中心的系统:用 N 步欧拉法去走,和真实轨迹比

🎬 自己验一遍

把步数 N 一路往左拖:N 大时橙线贴着蓝色螺旋缩进去;拖到 21 附近,橙线不再缩,开始越转越远。这个边界是算出来的(步长 < 2λ÷(λ²+1)),和梯度下降里“步长 < 2÷弯度”是同一类现象。

扩散模型和流匹配生成图片,也是从噪声出发,沿着一个学出来的速度场解方程;“采样步数”就是这里的 N,更好的求解器能让 N 更小(一致性模型想一步到位)。 这里的系统是人造的线性例子,真实的速度场是网络学出来的,扩散里还带随机项。

为什么这样够用,又在哪不够

局部是直线,所以沿负梯度走一小步,错误一定下降;「一小步」多小,由弯度决定,这就是学习率要调的原因。 真实网络的弯度分布、以及「鞍点比局部极小更常见」(Dauphin 等 2014,是统计物理式的论证,不是定理)会让情况更复杂; Adam 之类的优化器就是在给每个方向配不同的步子(优化器谱系)。 「放大就变直」在不可导的点上不成立(比如 ReLU 在 0 处没有切线),上面那张放大图永远挑一个光滑的点给你看。

后面哪些章是这一站的变体它换了怎样的「拧一步」
优化器谱系带惯性、按方向自适应步长
初始化 · 归一化 · 超参怎么选让各方向的弯度别差太远,学习率才好选
⑥

练习册好,不等于考试好

卡在哪训练只看见了练习册,我们想要的是没见过的新题。凭什么前者能代表后者?
数学做的事统计:假设练习册和新题来自同一个整体,那么练习册上的平均错,就是新题平均错的一个估计。估计有多准,取决于点数(准的速度是 1/√点数)和这批点碰巧长什么样。
一句直觉这个估计只有在数据比旋钮多得多时才靠得住;旋钮多、数据少,练习册会说谎。
可选实验:参数多、数据少时,训练集为什么会骗人

这里仍是数值实验室的 8 个旋钮,这次变的是练习册有多厚。每个厚度重复 31 次(每次重新抽点),取中位数;这里直接解出每次最好的 8 个旋钮,不是一步步拧(所以 8 个点时能被 8 个旋钮完全穿过)。

数值实验室:练习册厚度 vs 练习册错误 / 新题错误(8 个旋钮固定)

🎬 自己验一遍

把厚度拖到最左(8 个点):8 个旋钮正好能把 8 个点全穿过去,练习册上的错是 0,新题上的错却很大。

慢慢加厚:蓝线上升、橙线下降,两条线最后贴到同一条灰线上。灰线是噪声决定的底,再好的模型也低不过它。

统计学在这里做的事:用一批样本,估计整体

本小节一条因果链:大数定律(会靠近)→ 中心极限定理(怎么靠近)→ 正态分布(靠近时的形状)

先把三个词说成人话。整体:所有可能遇到的题。样本:你手上这一批练习册。 期望:整体的平均错(比如平均错 1);方差:各题的错散得多开(有的题错 0.1,有的错 5,散得越开方差越大)。 统计学只回答一个问题:只看到样本,能对整体说什么,说得有多准。

样本越多,样本平均越准:每次抽 n 个,重复 500 次,看这 500 个平均散成多宽

🎬 自己验一遍

把 n 从 1 拖到 400:直方图变窄,也变得对称。读数里“实测的散布”和“理论 σ÷√n”会贴在一起。

想让估计准一倍,要多收四倍的数据,不是两倍。评测里的“误差棒”(评测与基准)、归一化和初始化里的“方差相加”,用的都是这一条。

这张图其实同时说了三件事

定理在上图里是哪一块说的是什么
大数定律直方图的中心(橙线)抽得越多,样本平均越靠近整体的平均。所以“练习册上的平均错”才能估计“新题的平均错”
中心极限定理直方图的宽度和形状样本平均怎么围着整体平均散开:宽度是 σ÷√n,形状越来越像钟。不管整体本身是什么形状(上图的整体是偏的),只要抽得够多、互相独立
正态分布最后那个钟形上面两条合起来的结果。“误差默认是高斯”并不是谁规定的,而是很多小原因加起来,必然长这样

换一个整体再看一遍:骰子

再换一个整体看一遍:下面是骰子。一个骰子是平的(1 到 6 每个概率一样);把很多个骰子的点数加起来,形状自己长成钟。 这是一次精确计算,不是模拟(把每个骰子的分布一次次卷积)。

核心大图 · 拖骰子个数,看形状自己长出来

柱状图是精确算出来的(把每个骰子的分布一次次卷积),不是模拟。 白色曲线是理论上的高斯分布。骰子越多,两者越贴合。

🎬 自己验一遍

把骰子数从 1 拖到 12,盯住两件事: ① 形状从平的变成钟形;② 白色理论曲线越来越和柱子重合。

一个误差往往是很多个小原因加起来的结果,所以它常常长成钟。

💡 在深度学习里这三件事干了什么

评测的误差棒用中心极限定理:取平均则除以 n,散布按 1/√n 缩小。 初始化和归一化里“方差被乘了几次”用的是方差相加:独立的随机量加起来,方差也相加。 “噪声默认是高斯”让平方误差等于最大似然(见 ③)。不成立的地方:这三条都要求样本互相独立;同一批训练数据里相关的样本越多,有效样本数越少,估计就没有看上去那么准。

可选实验:偏差与方差怎样出现在曲线上

用在旋钮上:换一批练习册,会晃多少(偏差与方差)

同样的道理用在旋钮上:换一批练习册,拧出来的旋钮就不一样。下面还是数值实验室这 8 个旋钮的曲线,同一条真实规律,每次抽一批新点重拧,一次画 12 条。

同一条规律,换 12 批练习册,12 套旋钮拧出 12 条曲线

换一批练习册会晃多少,写成式子。下面的读数只取了 x = 0.5 这一个点,所以是这一点的偏差² 和方差;完整的分解还有一项“噪声”,这里单独不看:

🎬 自己验一遍

点数在 8~12 时,12 条曲线乱飞:每条都穿过自己的练习册,彼此却差得很远。这就是方差大,也是此前新题错那么大的原因。

点数拖到 160:曲线挤成一束,而且贴着蓝线(x = 0.5 处晃动从 5.7 降到 0.04)。读数里的两个量:偏差是 30 批预测的平均偏离真值多少,方差(读数里取了平方根)是换一批会晃多少。点数多了,两个都趋近 0。 “过拟合”说的就是这种方差大;正则化是故意让旋钮受约束,换来方差下降,代价是引入一点偏差。

为什么这样够用,又在哪不够

「练习册 ≈ 新题」靠的是独立同分布这条假设:每个样本互不影响,且都来自同一个整体。一旦新题和练习册不是一个来源(或者抽样互相有关联),整个保证就没了(数据增强与迁移、评测)。 在旋钮比数据少时,上图就是经典讲法:正则化是给旋钮加约束。 但现代网络的旋钮常常远多于数据,仍能泛化,测试误差还会出现「双下降」, 这一块经典理论只能解释一部分,仍是研究前沿;本章只借这个小实验展示它为什么会出现。 高维直觉(① 里随机夹角那张图)解释的是另一件事:数据其实只住在高维空间里很薄的一层。

后面哪些章是这一站的变体它在管「考新题」的哪一环
过拟合与正则化旋钮多于数据时,给旋钮加约束
数据增强与迁移学习让练习册更厚、或借别处学来的底子
缩放定律 · 评测新题错误随规模怎么变;怎么量新题、量得准不准
噪

噪声:同一个“随机”,三种身份

卡在哪一路讲下来,噪声一直是要避开的东西(过拟合就是把噪声当规律)。可是 Dropout、小批量、扩散模型,都在故意引入随机。噪声到底是好是坏?
数学做的事概率:噪声是方差。同一份方差,来自哪里、有多大,决定它是敌人还是工具。
一句直觉要学的东西要稳,要走的路要松。数据里的噪声要被忽略,路上的噪声帮你别困在坑里,人为加的噪声是在“故意为难”模型。
身份它在哪它的作用怎么对待
① 数据里的噪声标签错、测量误差,本来就在数据里模型一旦把它当规律记住,就是过拟合(⑥)要被忽略:加数据、加约束
② 路上的噪声每次只抽一小批估方向,方向有抖动(⑤)有时帮忙(跳出窄谷),有时添乱(停不下来)用批大小和学习率调
③ 人为加的噪声Dropout、数据增强、扩散模型的加噪让模型别依赖任何一个具体细节;扩散里它是生成的原料是工具,要调幅度

身份二:路上的噪声,什么时候是好事

想象一条一维的山路,有两个坑。左边的坑又深又窄(训练集上最低),右边的坑稍浅但很宽。 训练集和真正的新题总有一点点差异(数据换一批,坑的位置会偏一点):窄坑一偏,你就掉到坑壁上去了;宽坑偏一点,仍在坑里。 下面让一个球从窄坑旁出发,每一步沿坡走,再加一点随机抖动(噪声)。拖噪声大小,看球最后停在哪。

噪声从 0 加到很大:球停在哪个坑,训练和“新题”各是多少

🎬 自己验一遍

噪声 0 到 0.4:球全都留在窄坑,训练分最高(−1.0),但在偏移后的“新题”上只有 −0.49,差了 0.5。

噪声到 0.6:几乎全都跑到宽坑,训练分降了(−0.70),新题分却升到 −0.69,两者几乎相等。这就是“噪声帮你泛化”的最小版本。

再往右拖到 3:噪声大到什么坑都留不住,训练和新题都接近 0。噪声太大,等于什么都没学。

这个“最小版本”能说明什么,不能说明什么

说法状态
Dropout、数据增强这样人为加的噪声能降低过拟合有明确证据,广泛使用(正则化、数据增强)
扩散模型把噪声当生成的原料事实,不是争议(扩散模型)
小批量噪声按 1/√B 下降,批越大方向越准有定论,上面⑤站的图自己能验
小批量噪声倾向于带你去平坦的极小值,平坦的泛化更好有理论和实验,但有争议:平坦度可以被“重新参数化”改变而不影响函数(Dinh 等 2017)。上图是人造的一维地形,只说明在这种地形上会这样,不能直接搬到真实网络
噪声能帮助逃离鞍点有理论(Ge 等 2015),实践中占多大作用不确定
SGD 的噪声本身起了正则化作用(“隐式正则”)研究前沿,没有定论

所以,“噪声是好的”这句话只在有条件时成立:噪声要有合适的大小,要加在对的位置,并且模型确实面对着“训练集和真实世界有差异”。 数据里的噪声永远要被忽略;而路上的、人为加的噪声,是你手里可以调的旋钮。

引

卡住时:六块数学,各在哪一站

读到别的章遇到不熟的数学,从这里反查。每块一句话,指回上面讲它的那一站;表里最后一列是哪些章用它。

一句话在哪一站讲你会在哪见到它
Ⅰ 放大到足够近,曲线就变直
微积分的起点:直线是唯一真正会算的东西
⑤ 顺着坡走 感知机 · MLP(每个神经元是局部线性 + 一次折)· 梯度下降 · 优化器(二阶方法看“坡怎么弯”)· 扩散 · 流匹配(连续时间的“一小步”)
Ⅱ 点积与矩阵
量两个东西有多像,一次做很多个点积;矩阵 = 拉转压
② 猜 感知机 · MLP · 词向量 · 向量嵌入 · 注意力 · Transformer · LoRA · 自编码器 · 机械可解释性
Ⅲ 链式法则
倒着走一遍,整串变化的倍数 = 每段倍数相乘
④ 找方向 反向传播(全站三处完整推导之一)· 激活函数 · 初始化 · 归一化(都在改这条乘法链的乘数)· RLHF · DPO(走的是另一条路,见④站)
Ⅳ 信息论:越来越不意外
熵、交叉熵、KL
③ 打分 损失函数 · 文本生成 · VAE(有一项 KL)· RLHF · DPO(KL 惩罚)。GAN 不能写成这个形式
Ⅴ 概率与统计
大数定律、中心极限、正态;期望、方差;独立同分布
⑥ 考新题 · ③ 打分 初始化 · 归一化(方差相加)· VAE · 扩散(高斯)· 评测(误差棒 1/√n)· 正则化(先验)
Ⅵ 高维不是低维的放大版
高维里随机两个方向几乎垂直
① 变成数 优化器(鞍点比极小值多,这是统计物理式的论证,不是定理)· 词向量 · 向量嵌入(无关的词内积几乎为 0)· 机械可解释性(叠加现象只在高维发生)

反过来查:读到哪一章,碰到哪块数学

拖到你正在读的那一章:左边亮着的,就是你已经碰到过的数学

起

卡住时怎么用这一章

你现在的状态怎么用这一章
刚开始,什么都不懂 花 5 分钟从头走一遍六站,每站只看那张能拖的图。然后直接去看第一章
读到某个符号或数学名词卡住了 上面的表里找到它在哪一站,翻过去看那一站的图和公式卡
想看懂论文 去符号速查:最常见的 12 个符号 + 全部记号,带搜索框
想系统补数学 这一页故意不够。它的定位是认路,不是教材
限

这条主线会骗你的地方

一圈六站是最常见的一条路,不是深度学习的全部。强化学习、GAN、对比学习、扩散模型,打分和找方向的方式都不完全套得进「负对数似然 + 反向传播」。
下面六块也是按「你会在哪儿用到」切的,不是数学自己的分法。 和 知识地图 一样:地图不是疆域。

它帮你的地方它会骗你的地方
把「微积分 / 线性代数 / 概率 / 信息论」这四个对新手毫无意义的名字, 换成四句能记住的话 这四条脉络是我们按「你会用在哪」切的,数学本身没有这个分法。 同一条定理常常同时属于两条——它不是一棵正经的分类树
每块开头一段话说清它在干什么,十秒钟抓住 那是挂点,不是定义。比如「导数」的严格定义要先讲极限, 这一页只提了两次、没有展开——它负责让你认得它,不负责让你证明它
每块都配一张能拖的图,拖一次比看十行公式管用 图是玩具规模:2×2 的矩阵、最多 1000 维的随机向量、几个骰子。 真实的权重是 768×768、上下文是几十万维—— 规模一变,有些结论要重新想
「放大就变直」让导数的直觉一秒到位 这是直觉,不是定义;而且它在不可导的点上直接不成立 (ReLU 在 0 处就没有切线)。正文那张图永远挑一个光滑的点给你看
每块末尾那张「你会在哪见到它」表,把符号和章节对上号 它只回答「在哪见过」,不回答「怎么推出来」。 全站只有三处完整推导(链式法则 · QKV · 交叉熵求导), 其余全是结论
一张点阵图 + 六块,随时回来查 它不适合从头读到尾。顺读下来的手感会是 「什么都讲了,又什么都没讲」——那是地图的正常手感,不是这一页没写好。 它是回查用的。

在正文里遇到不认识的符号或公式,翻回来查两分钟,然后回去,不要在这里停留。
真正要学进去,去每块末尾那几张表指向的章节:那里才是主场,这里只是地名。

阅

符号不认识?去符号速查

论文里最常见的 12 个符号和全部记号(每条都写了怎么念、什么意思、在图上是哪块), 连同一个搜索框,都在符号速查那一页。这一页只留一条最常用的约定:

🔤 所有论文都默认你知道的一条约定

斜体小写 x = 一个数(标量) ·  粗体小写 x = 一串数(向量) ·  粗体大写 X = 一张表(矩阵)

→

看不懂时回哪查

这一页是地图,不是教材。真的学进去,要去下面这几个来源。

想要什么去哪
看懂正文里的公式 本页对应那一块的「🧰 最小技能」卡(矩乘 / 导数 / 概率对数 / Σ)
某个具体符号不认识 → 符号速查,或正文里直接悬停
看懂公式怎么推出来的 全站只有三处完整推导:链式法则 · 注意力的 QKV · 交叉熵求导 ∂L/∂z = p − y
术语(不是符号)看不懂 术语索引(95 条),正文里悬停灰色术语名同样能弹卡
想系统补数学 这一页故意不够。四个来源见每块末尾的表格与各章「拓展阅读」
还是卡住了 多半是正文跳过了某一步,不怪你。把那句原文记下来,那是最重要的反馈

认完路,下一章《感知机》动手切第一刀。