专题 · 22 环 · 2 环的主人不在馆里
人工智能
终点:你正在用的这个对话框
这条线几乎全部由十九世纪的线性代数与概率论、加上二十世纪的最优化与抽样拼成——而这些数学被发明的时候,没有一件是为了让机器学会什么。
缩略轴按先后排列,间距不表示年数;实心=馆里有他,空心=还没有。
- 1763
看见了结果,反推那个看不见的概率落在哪儿不确定
他死后两年,朋友普赖斯从遗稿里找出这一篇:一件事出现 p 次、落空 q 次,它的概率落在两个数之间的机会,是一条曲线下两块面积之比。今天的机器学习里,凡是「先有一个看法,看到数据就更新它」的做法——垃圾邮件过滤、贝叶斯优化调超参数、给模型的输出配上一个把握有多大——都是这个问题的后代;而那条通行的「贝叶斯公式」本身,是拉普拉斯 1774 年独立写成一般原理的。
- 1781
把一堆搬成另一堆,最省要花多少最优
他问的是运土:挖方与填方形状给定,哪一粒送到哪儿,总运费最小。1942 年康托罗维奇允许把一份拆开分送,这道题成了线性规划;这个「最小运费」今天叫瓦瑟斯坦距离,是衡量两个概率分布差多远的一把尺子——生成模型拿它比「造出来的样本」与「真样本」差多远,2017 年的瓦瑟斯坦生成对抗网络就是直接用它训练的。
- 1805
从一堆打架的数据里拟合一条线逼近
最小二乘就是今天说的线性回归,也是所有监督学习的原型:写下一个「错得多少」的函数,然后让它最小。两百年来换的只是函数的形状和参数的个数。
- 1838
一团状态跟着方程流,体积怎么变只看散度结构
刘维尔1809–1882《一团状态跟着方程走,面积只听一个数》
他证明:解对初值的那个行列式,变化率等于它自己乘上加速度对速度的偏导——不含那一项,体积就一丝不变。今天有两类生成模型直接踩在这上面:哈密顿蒙特卡洛靠「体积不变」省掉了雅可比行列式,接受率才算得出来;连续时间的归一化流与扩散模型的概率流算样本的似然,用的正是这条「对数体积的变化率等于散度」。
- 1844
一组数是任意多维空间里的一个量:线性无关、基与维数语言
他 1844 年那本书里,扩张不限于三维,级数可以一直升上去;1862 年的重写本把线性无关、基、交换定理与维数公式都写全了,1888 年皮亚诺照着它给向量空间写出了公理。今天一个词、一张图进了模型,先变成几百维里的一个向量;「这些特征是不是线性相关」「这一层的输出张得开几维」,问的都是他写下的那几件事。
- 1847
顺着最陡的方向往下走最优
他提出梯度法是为了解天文观测里的方程组,整篇短得只有两页。今天训练一个模型,跑的仍是这个办法——只是把「一步走多远」这件事研究了一百七十年。
- 1858
一方块数,当成一个可以相乘的量语言
在他之前,一方块系数只是一组线性方程的简写,行列式是从里面算出来的一个数。他把整块当成一个东西:可以相加、相乘、求逆,只是乘法不能随便交换次序。十五年后的奇异值分解拆的就是这样一个东西;今天神经网络的每一层,都是拿一个矩阵去乘一串数,训练就是改那个矩阵里的数。
- 1873
奇异值分解结构
贝尔特拉米1835–1900《任何矩阵都是:转一下、拉一下、再转一下》
把一个矩阵拆成三块,中间那块的对角元按大小排好——留下大的、扔掉小的,就是用最少的数字保住最多的信息。主成分分析、潜在语义分析、推荐系统、模型压缩,全是这一条的不同穿法。
- 1892
先定义面积,再定义积分语言
若尔当1838–1922《先说清什么叫面积,再说什么叫积分》
在他之前「一块集合有多大」是靠积分算出来的,而积分又要先知道小块的面积。他把顺序倒过来:用边长 r 的方格从内外两头夹,夹得拢就说这块集合可求积,那个共同的值就是它的面积。他的可加性只到有限个集合,勒贝格 1902 年换成可数个覆盖,测度论才立住——而四十一年后的「概率就是测度」正是接在这条路的末端。
- 1901
一堆互不相干的小量加起来,什么时候一定是钟形不确定
「加起来就是钟形」早就有人说过,可到底要什么条件才成立,是他定下来的:给各项的 2+δ 阶矩之和加一个上界,就够了。今天报一个模型的准确率带多宽的误差棒、一次 A/B 测试算不算显著、一次自助重抽的分位数靠不靠得住,底下都压着这一条;而它坏掉的时候——某一项大得压倒其余全体——极限就真的不是钟形。
- 1901
切值域的积分:期望从此是一个积分语言
他把积分的那一刀从定义域挪到值域:先问函数落在每一层里的那些点一共有多长,再加起来。这要求先给「一堆点有多长」一个定义,于是有了可数可加的测度。三十二年后柯尔莫哥洛夫把概率写成测度、把期望写成这种积分,序言第一段就说:在勒贝格的测度与积分论之前,这件事「本来是相当无望的」。模型训练里要最小化的「期望损失」,写开来就是它。
- 1906
下一步只取决于这一步不确定
他提出马尔可夫链是为了说明大数定律对不独立的随机变量也成立,而他挑的例子是《叶甫盖尼·奥涅金》前两万个字母的元音辅音交替。语音识别的隐马尔可夫模型、网页排序的 PageRank、现代统计的马尔可夫链蒙特卡洛、强化学习的马尔可夫决策过程,全从这里长出来。
- 1912–1922
把参数调到让已有的数据最说得通最优
费希尔1890–1962《样本已经在手,哪一组参数最说得通》
1912 年他提出:曲线的样子已知、参数待定时,取让这批观测出现的机会最大的那一组;1922 年给这个量起名「似然」,1925 年又写明它不是概率的同义词。今天训练一个模型,压低的交叉熵就是负的对数似然——换句话说,每一次梯度下降,都是在往他那座山的峰顶走。
- 1922
每一步都把距离缩一截,迭代就一定停在唯一的一点算法
他的博士论文把「反复代入」从具体的方程里抽了出来:空间完备、每一步都把任意两点的距离缩到 k 倍以内(k < 1),就一定有唯一的不动点,从哪儿出发都收敛到它,第 n 步的误差不超过 k 的 n 次方乘一个常数。强化学习里的值迭代正落在这条定理上:贝尔曼算子在「最大差」那把尺子下是一个压缩,缩小倍数就是折扣因子,所以一轮轮更新价值表一定收敛、而且收敛到唯一的最优价值——Q 学习的收敛证明也从这里起步。
- 1931
链走到连续时间,成了两条偏微分方程不确定
柯尔莫哥洛夫1903–1987《链走到连续时间,就成了两条偏微分方程》
马尔可夫的链是一步一步走的;把时间与状态都放连续之后,刻画它的不再是矩阵而是两条抛物型方程——一条对终点求导(今天叫前向,也叫福克-普朗克),一条对起点求导(今天叫后向)。今天的扩散生成模型做的正是这件事:先按一条扩散过程把图像一步步加噪成纯噪声,再把这条过程倒着解回去,而倒着解写下来就是这两条方程。
- 1933
概率就是测度语言
柯尔莫哥洛夫1903–1987《那条圆上的分布,取决于你怎么切整个球》
《概率论基础》把概率论架在测度论上:样本空间、事件的 σ-代数、一个全可加的测度。在此之前概率是一门有用但说不清自己在讲什么的学问;在此之后它才成为数学的一支,随机过程、滤波、随机微分方程才有地基可站。连「已知 A 求 B 的概率」这句天天在用的话,也是在那本书第五章才被安顿好的——它不是对一条孤立的假设说的,而是对一整族分法说的。
- 1944
带噪声的微分方程,一条轨道一条轨道地解不确定
柯尔莫哥洛夫的两条方程管的是分布;他在一条条布朗轨道上定义了积分,写出了多一项的链式法则,随机微分方程从此可以逐轨道地解、逐步地推。扩散生成模型的两头都写成这种方程:往前,按 dx = f dt + g dB 把一张图一步步加噪成纯噪声;往回,解一条倒着走的随机微分方程,把噪声一步步还原成图——生成时那一步步,就是在数值地解它,最朴素的格式正是欧拉–丸山那条折线。
- 1946–1951
算不出来的,就按分布抽样本不确定
冯·诺依曼1903–1957《他要的不是真随机,是查得了账的假随机》
这一环连的是办法,不是某个具体算法。一旦概率有了测度这套语言,下一个问题就是怎么真算:高维的积分与求和没有闭式,唯一可行的路是按分布抽样本再平均。他把这条路做成了机器上的工序,连同算术造随机数的方子与他自己的舍选法。今天你从对话框里读到的每一个字,都是按一个概率分布抽出来的,抽它的那个伪随机数发生器正是这一支的后裔;贝叶斯推断里的马尔可夫链蒙特卡洛也走的这条路。
- 1948
把一种语言当成一个按概率吐字的信源语言
他把马尔可夫那串字母接着往下做:按零阶、一阶、二阶、词一级的统计依次生成文本,让人看着它从乱码变成几乎能读的句子。这就是 n 元语言模型的原型,也是「语言可以用一个概率分布来建模」这句话第一次被落到纸上。从这里到今天的语言模型,中间换过的只是这个分布用什么来参数化。
- 1950
把「机器能思考吗」换成一个能做的实验边界
图灵1912–1954《「机器能思考吗」——他把问题换掉了》
他认为原来那个问题太没意义,不值得讨论,于是换成模仿游戏。这篇文章里他还预料到了学习机器、遗传算法式的搜索,以及反对意见会从哪几个方向来。
- 1986
反向传播算法
鲁梅尔哈特、辛顿与威廉姆斯使它流行起来的那篇不在馆里
数学上它就是链式法则加上一点动态规划:从最后一层往回推,每一层的梯度都用后一层算好的结果,于是一次反向扫描就拿到全部参数的导数。这一条此前被不同的人各自写出来过好几次(林纳因马 1970、韦伯斯 1974),1986 年那篇的贡献是让它被看见。
- 2017
注意力结构
瓦斯瓦尼等八人《注意力就是你所需要的一切》不在馆里
让序列里每个位置直接与所有位置比较相似度,再按相似度加权求和——本质上是一串矩阵乘法,因此能在显卡上完全并行。今天所有大语言模型的骨架。它用到的数学一件也不新:内积、softmax、矩阵乘法。