导语
为什么越来越多人不用搜索引擎,而开始直接问AI?
因为搜索引擎给你的是网页。
AI给你的,看起来像是直接答案。
但很少有人继续追问:
当AI看起来什么都懂的时候,它到底在干什么?
事实上,在回答你的问题之前,它先把你的语言拆成了一张巨大的数字表。
更意外的是,两千年前的中国人,也在做一件非常相似的事情。

Roger Hart在《The Chinese Roots of Linear Algebra》(《线性代数的中国根源》)中认为,《九章算术》中的盈不足与方程术,已经展现出与现代线性代数高度相似的结构化求解思想,那就是把复杂关系排成结构,再对结构进行整体操作。他还把“方程术”与现代线性方程组求解、高斯消元以及某些行列式式样计算联系起来。当今天的人惊叹AI时,我们很可能正在隔空惊叹一场两千年前就开始的数学革命……

01

AI时代绕不开的数学骨架
为什么是矩阵

对人来说,我们看到的是一句完整的话,对模型来说,一句话会先被切分成一个个词元,再被映射成一串数字编号。这一步很重要,因为机器不会先像人一样“默读一句话”,再直接理解含义,它会先把语言拆成一个个可处理的单位。然后,每个词元会在嵌入矩阵中找到自己对应的一行,变成一个高维向量。

线性代数中的矩阵以及转置矩阵示意
接下来,无论是注意力机制,还是层与层之间的信息传播,本质上都在围绕这些词元向量做矩阵乘法、加权、映射与更新。从内在思想上说,AI 处理语言的第一步,就是“把语言排成结构”。
神经网络里一层又一层的信息传递,本质上往往就是输入矩阵、参数矩阵、输出矩阵之间的大规模运算。

矩阵在神经网络中的运算示意图
很多人一听“矩阵”,第一反应就是头大,像大学课堂,像公式推导,像一堆横平竖直又很冰冰凉凉的数字。
矩阵的本事,说穿了其实很朴素,那就是它特别擅长把很多个量之间同时发生的关系,整整齐齐地排起来,整体计算。形式变了,工具变了,但“先整理关系,再进入运算”的核心思想并没有变。
02

中国古人是怎么
把现实世界“排成数阵”的

一说中国古代数学,很多人先想到的是圆周率、祖冲之、勾股定理……这些当然重要,但如果只停在这些“名片式成果”上,反而会错过更深的一层。

MIT教授Gilbert Strang在课堂讲“消除法”
中国古代数学真正厉害的地方,不只是某个答案算得早、某个数值算得准,更有古人很早就开始思考一个极现代的问题,那就是当一个现实问题里不止一个未知量、不止一个条件,而且这些条件还必须同时成立时,该怎么办?这就是线性方程组的问题,也是现代线性代数最核心的入口之一。

算筹用法示意图。算筹是算盘发明之前中国最重要的计算工具。算筹的计数法遵循十进位制,以纵横两种排列方式来表示1-9的数目,表示多位数时,个位用纵式。十位用横式,百位用纵式,千位用横式,以此类推,遇零则置空。
很多人小时候都做过或者接触过“鸡兔同笼”,如题笼中若干鸡兔,共若干个头、若干只脚,问鸡兔各多少。小时候觉得这就是一道很单纯的奥数题,现在再看,才会发现它真正让人觉得有意思的地方,还在于它一下子把我们带进了一个全新的数学世界,讲述了未知量不止一个,条件也不止一个,而且这些条件还同时成立的故事。
鸡和兔作为故事的外壳,其中头和脚才是约束关系的本质变量。会不会解这道题是一回事,能不能从这道题里看见“多未知量、多条件约束”的结构,把其抽象出来,是另一回事。

今有雉兔同笼,上有三十五头,下有九十四足。问雉兔各几何?答曰:雉二十三,兔一十二。术曰:上置三十五头,下置九十四足,半其足,得四十七,以头减足,余一十二,即兔数;以兔减头,余二十三,即雉数——《孙子算经》
中国古代算数更有趣的是,它还继续往前走,去追问有没有一种通用方法,能把这一类问题统统纳入其中?答案是,有的。而这把钥匙之一,就是“盈不足”。再往前,就是《九章算术》里的“方程术”。“盈”,就是多出来的,“不足”,就是少掉的。两个朴素的生活词,进入《九章算术》,它们立刻变成了一把漂亮得惊人的数学钥匙。
现实中,这类问题可以说到处都是,比如说大家一起买东西,按一种标准出钱会剩,按另一种标准出钱会缺,真实价格到底是多少?某种混合分配里,按一种假设算会多,按另一种假设算会少,真实比例到底是什么?征收、分配、交易,只要出现“多”和“少”,背后就可能埋着一个可解的结构。我们说的再直接点再提升一点,古人在抓住偏差,利用偏差,把真实关系一步步逼出来。在这个两千多年前总结的方法里,多出来的部分不是麻烦,少掉的部分也不是错误,它们恰恰是通向答案的线索,这件事很神奇。

用算筹摆出的表示多元约束的筹式和现代方法列出的三元一次方程进行对比
Hart 在他的研究中明确指出,《九章算术》中的盈不足可用现代的双假设、线性插值或简单线性关系来解释,方程术则更接近现代线性方程组的阵列化求解。“方程”术还能处理的问题,是更本质的具有n个条件、n个未知量的问题。这些问题不仅停留在脑子里面,还得摆到算板上,用算筹等方式,二维地呈现出来,再通过交叉相乘、遍乘、消去等操作推进求解。也就是说,中国古人在发展一套能基于二维阵列形式的数学工具,来处理一类问题的方法。
古人虽然可能没有说出某个现代名词,从事实记载来看,其实已经做出了极接近现代结构化计算的事情。盈不足的算法在用偏差找寻真实,方程术体现的是中国古人把复杂世界摆成可计算秩序的一种早期智慧。
03

两千年前的算法
到今天依然能看懂

前面我们说了那么多的“盈不足”、“方程术”这些词,不禁让人想问,这么古老的东西,现在还能用吗?到底怎么用?
鸡兔同笼
现在我们先用现代经典的解二元一次的方法来进行《孙子算经》中“鸡兔同笼”问题的解答。

左为算筹表示,右为现代方程表示
我们先翻译一下原文。用头数表示的是:
鸡 + 兔 = 35(只)
用半足数来表示就是:
鸡 + 2兔 = 47(只)
两者一减:
(鸡 + 2兔)-(鸡 + 兔)= 12(只)
得到:
兔 = 12(只)
进而再用总头数减去兔的数量:
鸡 = 35 - 12 = 23(只)
进而得到鸡23只,兔12只。
按照“盈不足”的方法重新解答这个问题,“盈不足比例流转”的过程如下:
全按鸡算,得到“不足”:
94 - 35 × 2 = 24(只)
全按兔算,得到“盈”:
35 × 4 - 94 = 46(只)
盈与不足相加:
24 + 46 = 70(只)
这个70是什么?它其实等于:
35 ×(4 - 2)
也就是 35 个动物,如果从“全是雉”整体推到“全是兔”,总足数最多会增加 70 足。真实情况在这 70 足的区间中落在哪里,就由“不足 24”和“盈 46”共同决定。
兔的比例由“不足”决定:
兔数 = 35 × 24 ÷(24 + 46)= 12(只)
鸡的比例由“盈”决定:
鸡数 = 35 × 46 ÷(24 + 46)= 23(只)
这就非常接近 Hart 书中对“盈不足”类问题的现代解释。书中在分析“Rice for Coins”时指出,古人会先把原问题转化为“盈不足”问题:先做一个极端假设得到“盈”,再做另一个极端假设得到“不足”,最后用 d + e 作为总的偏差区间,用 d 和 e 分配总量。书中给出的形式就是类似 x1=b1d/(d+e)、x2=b1e/(d+e) 这样的比例反推。我们再通过现在的两个小例子感受一下。
外卖

想象一下,几个人一起点外卖。最后大家想 AA,但订单里有满减、配送费、红包、包装费,算起来有点乱。于是有人先粗略试了两种分摊方式:
如果每人收 18 元,最后会多出 4 元。
如果每人收 17 元,最后又少 3 元。
问:这单外卖到底有几个人拼?实际一共花了多少钱?
这其实就是一个现代版“盈不足”。
按照古法,人数这样算:
人数 =(盈 + 不足)÷ 两种分摊标准之差
也就是:
(4 + 3)÷(18 - 17)= 7(人)
所以,一共有 7 个人拼单。
总价怎么算?
交叉相乘:
17 × 4 = 68(元)
18 × 3 = 54(元)
相加:
68 + 54 = 122
再除以两种分摊标准之差:
122 ÷(18 - 17)= 122(元)
所以,这单外卖实际花了 122 元。是不是很快,不用打草稿,不用在大脑中消元思考,这可能就是基于古代即刻贸易,发展而来的一种快速且准确的方法。
充电

再来看一个更现代的例子:新能源车充电。现在很多充电站会有峰谷电价。白天高峰时段贵一点,夜间谷时便宜一点。假设某个充电站的价格是:
峰时电价:1.2 元/度。
谷时电价:0.6 元/度。
你这个月在这个充电站一共充了 50 度电,总共花了 39 元。
问:峰时大概充了多少度?谷时大概充了多少度?
这题如果直接列方程,当然可以。
但我们按“盈不足”的思路来,会更直观。
第一步,假设 50 度电全是在峰时充的。
峰时每度 1.2 元。
50 度就是:
50 × 1.2 = 60(元)
可你实际只花了 39 元。
说明“全按峰时算”,多算了:
60 - 39 = 21(元)
这就是“盈”。
第二步,假设 50 度电全是在谷时充的。
谷时每度 0.6 元。
50 度就是:
50 × 0.6 = 30(元)
可你实际花了 39 元。
说明“全按谷时算”,少算了:
39 - 30 = 9(元)
这就是“不足”。
到这里,原本的充电费用问题,已经被我们改写成了一个现代版“盈不足”问题:
全按贵的算,多 21 元。
全按便宜的算,少 9 元。
那么峰时充了多少度?
峰时电量 = 总电量 × 不足 ÷(盈 + 不足)
也就是:
50 × 9 ÷(21 + 9)= 15(度)
谷时电量就是:
50 - 15 = 35(度)
所以,你这个月大约有 15 度电是在峰时充的,35 度电是在谷时充的。
检查一下:
峰时 15 度,每度 1.2 元,花 18 元。
谷时 35 度,每度 0.6 元,花 21 元。
一共 39 元,正好对上。
这道题的现实意义很强。
如果你知道自己这个月大概有 15 度电是在峰时充的,就可以继续算一个省钱小账:如果下个月尽量把这 15 度电移到谷时充,每度电可以省:
1.2 - 0.6 = 0.6(元)
最多可以省:
15 × 0.6 = 9(元)
观星

外卖、充电,都是生活里的账。
但同一种思想,一旦放到星空里,就会变得更加壮观。我们不妨想象一个简化的古代观星场景。
一位观星者连续记录一颗行星在天空中的位置。这里的“位置”,可以先简单理解为它相对于某条参考线的角度。真实天文学当然远比这复杂,但为了让大家看懂,我们先把问题压成一个入门版模型。
如果这颗星每天都以完全相同的速度移动,那么只需要两个量:初始位置和每天移动量。可真实天空没那么规整,行星的视运动可能一会儿快一点,一会儿慢一点。哪怕只是做一个简化近似,我们也可能需要再加一个量:速度变化的影响。
于是,我们用一个方程思想构造的现代简化模型来描述它:
位置 = 初始位置 + 每天移动量 × 时间 + 速度变化项 × 时间²
这里有三个未知量:
现在,观星者记录到三天的数据:
第 0 天:这颗星在 100 度的位置。
第 1 天:这颗星在 100.9 度的位置。
第 2 天:这颗星在 102.0 度的位置。
此部分感兴趣的读者可以尝试进行过程推导的尝试,答案先放到这里:
第 3 天,这颗星大约会在 103.3 度的位置。
上面就是简单列举了中国古算法有趣内容的冰山一角。从地上的鸡兔,到天上的星辰,再到今天大模型里的词元矩阵,人类一直在练习同一种能力。
把看似纷乱的世界,摆成可以计算的秩序。
04

从一根算筹
到一场智能革命

《九章算术》的“盈不足”和“方程术”,展示了古人如何把现实问题转写为可计算的数量关系,并在算板上操作这些关系。今天的大模型,同时展示了同一种精神在数字时代的延续。

物理学家费曼在采访中讲述自己对于“认识”事物的小故事
费曼在那段关于“鸟的名字”的采访片段中,回忆说,有孩子问他:“你知道那是什么鸟吗?”他回答说完全不知道那是什么鸟。对方告诉他,那是棕喉鸫,还说:“你爸爸什么都没教你。”费曼实际上知道那只鸟的名字,不过父亲教给了他更重要的东西。父亲没有只告诉他这只鸟在不同语言里叫什么,而是引导他去观察这只鸟本身。
也正因为如此,今天重新讲述算筹、方程术与中国古代数学,不只是为了在历史中寻找一个“比谁更早”的答案,更是为了在新时代重新确认一种文化自信:中华文明并不只是留下了诗词、器物和典章,也留下了理解世界、组织世界、计算世界的方法。
今天最前沿的智能革命,提醒我们技术会不断更新。而中国古代算筹所呈现的结构智慧,则提醒我们,文化的根脉从未远去,在将来也会依旧存在。它不是停在博物馆里的旧物,而是仍能照亮今天、支撑未来的一种精神底气。
今天最前沿的那束光,早在中国古代的算筹上,就已在闪烁。
参考资料
[1]https://jhupbooks.press.jhu.edu/title/chinese-roots-linear-algebra
[2]https://ctext.org
[3]https://mathshistory.st-andrews.ac.uk
[4]https://mathworld.wolfram.com/GaussianElimination.html
[5]https://www.cambridge.org/core/books/science-and-civilisation-in-china
[6]https://www.cnki.net
END
【转载请注明来源:北京怀柔公众号】
来源:中科院物理所
编辑:胡赛男
