电力、芯片、软件、数据和模型,各自怎么一路长过来,又在哪里交汇。
1882 年到今天,往下读。直接看最近:2024 – 2026 ↓
拖动旋转 · 停在一颗星上看它的关联 · 点一下打开
1882 – 1955
电、计算和晶体管
电站把电送进楼里,交流电又把电送到远处;图灵问什么能算,冯·诺伊曼把程序放进存储器,贝尔实验室造出了晶体管。这些当时互不相干的事,后来成了计算机的地基。
- 珍珠街电站一座中心电站,用地下线路给好几栋楼送电。
- 尼亚加拉高压交流电让电站可以建在离用户很远的地方。
- 图灵机读写符号,加上有限条规则,就能说清什么叫计算。
- EDVAC 报告运算、控制、存储、输入、输出分开,指令也放进存储器。
- 晶体管贝尔实验室用一块半导体器件,放大了电信号。
- 信息论信息用比特来量,每条有噪声的线路都有传输上限。
- 图灵 1950把含糊的“机器能思考吗”,换成一个能检验的模仿游戏。
- 随机逼近每次结果都带随机性,照样能一点点调到目标。
- Metropolis 方法每次随机挪一个粒子:能量降了就接受,升了按概率接受。
- 磁芯存储磁芯靠磁化方向存一位,比静电存储管快,也好伺候。
- 动态规划不用排好整串决策,只要知道每个状态下该怎么做。
1956 – 1985
机器连成网,知识写成规则
集成电路把整块电路做进一块半导体,编程语言、磁盘和网络让计算机越来越好用。AI 在 1956 年起步,主流做法是把专家知识写成一条条规则。
- Dartmouth一份 1955 年的提案,把学习、语言、推理列成了研究问题。
- Logic Theory Machine靠经验法则决定往哪搜,把找证明写成机器能执行的规则。
- RAMAC 磁盘不用先给卡片排序,交易来一笔就能记一笔。
- FORTRAN照着数学公式写计算,机器指令交给翻译程序去生成。
- 感知机连线是随机的,靠强化,网络学会对同一刺激给出同样的反应。
- 集成电路不再一个个焊元件,整块电路做在同一块半导体上。
- Dijkstra每次先定下离出发点最近的点,不用把所有路径都列一遍。
- LISP用递归函数处理符号表达式,成了 AI 研究常用的语言。
- MOSFET硅上长一层二氧化硅,上面放电极,用电场开关电流。
- 卡尔曼滤波每来一个新测量,就按各自的误差修正一次状态估计。
- Atlas 虚拟内存程序员不用再自己在磁芯和磁鼓之间搬数据。
- 分组交换标准大小的消息块逐站存储转发,坏掉几个节点也能绕过去。
- System/360六个型号性能差约 50 倍,指令集却完全一样。
- Moore 1965每块电路最省钱的元件数,大约每年翻一倍。
- FFT拆成小变换,计算量从 N² 降到 N log N 量级。
- 低损耗光纤高锟算出:玻璃只要够纯,光信号就能传上百公里。
- 单晶体管 DRAM电容里的电荷代表一位,一个晶体管负责充放电。
- Model 85 缓存一块小而快的缓存放着正在用的数据,程序不用操心。
- Heuristic DENDRAL先按谱峰排除不可能的结构,再拿预测谱和实测谱比对。
- ARPANET第一次远程登录,只传出“lo”两个字母就崩了。
- Unix为了留住交互式编程,贝尔实验室做了一套新系统。
- 反向模式求导记下每步运算,再从结果倒着扫一遍,就知道每步对结果的影响。
- 关系模型存储方式换了,应用程序最好不用跟着重写。
- Intel 4004运算、寄存器和执行程序都在一颗芯片上,换个程序就换个用途。
- Shakey操作员只说目标,它自己看路、排计划、推箱子。
- C给 B 语言加上类型,Unix 内核从此不用汇编写。
- Dennard 缩放尺寸和电压一起按比例缩小,单位面积的功耗保持不变。
- MYCIN把领域知识写成一条条规则,还能解释自己为什么这样建议。
- Ethernet附近的计算机共用一根同轴电缆,撞车了就重发。
- EM 算法先估计缺的部分,再更新参数,两步交替直到收敛。
- BLAS厂商把这几个基础运算优化一次,上面所有数值库都受益。
- RISC少数几条简单指令做了大部分工作,那就把指令集做简单。
- Neocognitron提取特征的层和容忍位移的层交替堆叠,不用老师也能学。
- Hopfield 网络只给半条线索,网络也能落回整条记忆。
- TCP/IPARPANET 定下一天,从 NCP 切换到 TCP/IP。
- GNUStallman 宣布:要做一套人人能自由分享的系统。
- 闪存不用紫外线,也不用每位两个晶体管,按块一次擦掉。
- 贝叶斯网络每个节点只和邻居交换消息,整张图的判断仍然前后一致。
- WordNet同义词归成一组,组与组之间按上下位等关系相连。
1986 – 1997
从数据里学
程序开始从样本和奖励里自己调参数,反向传播、SVM、Q-learning 各走一条路。Web、Linux 和 arXiv 也在这时出现。
- 反向传播把输出的误差往回传,网络每一层都知道该怎么改。
- 台积电设计芯片不必自建晶圆厂,制造交给专门的代工厂。
- ALVINN不写看路规则,把图像直接喂给网络,让它说往哪转。
- HMM听到一串声音,反推背后最可能的那串隐藏状态。
- Web想用链接把 CERN 散落的文档、人和项目连在一起。
- GPL谁都能改、能卖,但发出去时得附上源代码。
- 混合专家一个门控网络决定每个样本交给哪几个专家网络。
- LinuxGNU 只差一个内核,Linux 公开源码,补上了这块。
- Python它的语法学 ABC,又能调用系统接口,还能用 C 扩展。
- arXiv论文投到一台服务器,订阅者收到通知,想看再取全文。
- Q-learning用眼前的奖励加上对后面的估计,一点点修正动作的价值。
- IBM 翻译模型不写规则,从约 178 万对英法句子里学出词的对应。
- Penn Treebank让程序先标词性和句法,人只管纠错,标得又快又齐。
- MPI并行程序有了共同的消息接口,不必再绑死在一家机器上。
- GroupLens看和你口味相近的人怎么打分,猜你会不会喜欢这篇帖子。
- Okapi BM25词出现越多分越高,但会饱和;文档越长,同样的词越不值钱。
- SVM分界线离两类样本都尽量远,留出一段间隔。
- LSTM给循环网络加上记忆和门控,前面的信息不容易丢。
- Sojourner地面只给目标,路上的障碍由它自己绕开。
- Deep Blue480 块象棋芯片一起搜,重赛赢了世界冠军。
1998 – 2011
数据和算力一起变大
互联网带来海量数据,难题变成在成千上万台会坏的机器上算。GPU 学会了通用计算,ImageNet 开始大规模标图。
- LeNet-5卷积、权重共享和下采样配在一起,认手写数字。
- Google 原型排序不只数关键词,还看谁链接了你、怎么描述你。
- Paxos有机器宕机、消息丢失,各份副本也不会给出矛盾的结果。
- BLEU数机器译文和人工译文有多少相同的词组,快而便宜。
- Xen把客户系统稍改一改,遇到特权操作就请 Xen 代办。
- 神经语言模型词向量和下一个词的概率一起学,没见过的句子也能估计。
- MapReduce程序员只写映射和归约,分片、调度、重跑都交给系统。
- LLVM一种通用的中间表示,让优化不再绑死在某一门语言上。
- SIFT照片拍远了、转了,同一个点也能对得上。
- NumPy把分成两派的 Python 数组库合成一个。
- Stanley无人干预,Stanley 最先跑完 2005 年的沙漠赛道。
- CUDA用扩展过的 C 写 GPU 程序,不必把计算伪装成画图。
- 差分隐私换掉任何一个人,公布的结果都几乎不变。
- Amazon EC2调一个接口,几分钟开出一台虚拟服务器,用多少付多少。
- UCT在搜索树里平衡两件事:多走看好的分支,也试试走得少的。
- 能耗比例性服务器闲下来,耗电也应该跟着降下来。
- PUE机房总耗电除以 IT 设备耗电,越接近 1 越省。
- Common Crawl免费公开的网页抓取数据,后来成了大模型训练语料的底子。
- RDMAP让机器直接读写对方公布的缓冲区,少复制、少占 CPU。
- Roofline把计算上限和内存带宽放在一起,看程序卡在哪一头。
- Fat-tree用许多一样的普通交换机,让上万台主机都能全速互通。
- 仓库级计算服务器、网络、供电和冷却,要当成一台机器来设计。
- ImageNet按 WordNet 的概念层次收集图片,再请人核验候选图。
- Netflix Prize给每个用户、每部电影各学一个向量,内积就是预测评分。
- Theano用 Python 写表达式,它自动求导,再编译成 C++ 或 CUDA。
- HDFS一台机器管目录,许多台机器存数据块,坏一台也不丢。
- AMD GCN换掉 VLIW,少靠编译器,图形和通用计算都顾得上。
- 22 纳米三栅晶体管电流通道竖成一道薄鳍,栅极从三面包住它。
2012 – 2015
深度网络起飞
AlexNet 在 ImageNet 上大幅领先,深度网络很快用到了语音、翻译和游戏上。训练框架和集群调度也跟着成熟。
- AlexNet不再手工设计图像特征,交给卷积网络自己学。
- 多列 GPU CNN几个用 GPU 训练的深度 CNN 一起投票,交通标志认得比人还准。
- Spark RDD数据留在内存里反复用,丢了就照着来历重算。
- 深度声学模型四个团队都发现:把 GMM 换成深度网络,语音识别更准。
- DQN神经网络直接看 Atari 游戏画面,估计每个动作值多少。
- word2vec把训练任务做简单,好用上大量文本学词向量。
- Seq2Seq先把输入编码,再生成输出,长短不一的序列都能学。
- 翻译里的 attention译每个词之前,先回头看原句的每个词,按需取用。
- 参数服务器参数分片存在服务器上,工作节点推梯度、拉新参数。
- Adam给每个参数分别记梯度和梯度平方的平均,各自定步长。
- GAN一个网络造样本,另一个网络辨真假,两边一起练。
- ResNet每组层只学“改多少”,再把原来的输入加回去。
- Borg在线服务和批处理混着跑,用不上的资源回收给批处理。
- Kubernetes 1.0调度、扩缩容和健康检查,都收到集群这一层来管。
- HBMDRAM 叠起来进了 GPU 封装,带宽靠宽接口和短连线。
- Faster R-CNN让网络自己提候选框,提框从约 2 秒降到约 10 毫秒。
- U-Net先缩小抓上下文,再放大还原位置,很少的图也能训好。
- TensorFlow运算、参数和更新都是图里的节点,由运行时分到各台机器上。
2016 – 2018
几条路同时展开
AlphaGo 赢了李世石,Transformer 和 BERT 改写了语言任务。专用芯片、新框架,还有给数据和模型写说明书的做法,都在这几年出现。
- 图卷积网络 GCN把节点特征和连接关系放在一起,标签很少也能分类。
- AlphaGo一个网络挑值得考虑的几步,另一个直接估胜率。
- 联邦学习训练数据不出手机,只把模型更新传回服务器。
- WaveNet直接生成声音波形,用感受野内的历史预测下一个采样点。
- GNMT中译英全部换成神经翻译,每天约 1800 万次。
- YouTube 深度推荐从几百万个视频里先挑出几百个,再按预计观看时长排序。
- SQuAD十万多道人写的阅读题,答案都得是原文里的一段。
- NVLinkGPU 之间有了专用通道,不必都挤在 PCIe 上。
- HNSW从稀疏的上层图往下层走,很快找到近似最近邻。
- GraphSAGE不再给每个节点存一份向量,改学一个从邻居算表示的函数。
- GAT用 attention 决定每个邻居占多大分量,再汇总信息。
- Transformer不用循环,通过 attention 连接序列中的位置。
- PPO用裁剪压住策略大幅更新的动力,实现起来也不难。
- VoltaV100 加入 Tensor Core,专门做矩阵乘加。
- TPU v1语音识别可能让数据中心翻倍,Google 自己做了推理芯片。
- 稀疏混合专家成百上千个专家网络待命,每个位置只挑几个来算。
- PyTorch张量运算写一句就执行一句,还能自动求导、用 GPU 加速。
- Ring-allreduce每块 GPU 只和相邻的卡收发小块数据,带宽不会挤在一处。
- 从人类偏好学习人只要比较两段行为哪段更好,模型就从中学出奖励。
- ELMo同一个词放进不同句子,得到的向量也不一样。
- BERT遮住句子里的词让模型猜,学到的表示再拿去做别的任务。
- SAC把最大熵和旧数据重用合在一起,学取值连续的动作。
- Datasheets数据为什么收集、怎么标注、能用在哪,都要写下来。
- Model Cards模型说明别只给一个总分,用途、表现和限制都要写清。
- Gender Shades深肤色女性错误率达 34.7%,浅肤色男性至多 0.8%。
- Horovod每张卡跑同一份程序,梯度在卡之间直接求平均。
- TVM把模型当程序来编译,自动给每种硬件生成算子代码。
- GLUE把九个语言理解任务放在一起考,取平均当总分。
- TPU v3 液冷每颗芯片 450 W,Google 为这代 TPU 改用液冷。
2019 – 2021
模型越做越大
数据、模型和算力一起往上加,GPT-3 看几个例子就能做新任务。AlphaFold 2 在蛋白质结构预测上往前迈了一大步。
- ZeRO不再让每张 GPU 都存一整份训练状态。
- Megatron-LM把每层的矩阵乘法切开,分到同一台机器的几张卡上。
- EUV 光刻改用 13.5 纳米的极紫外光,细线条一次就能印出来。
- RDNA它为游戏图形的效率,重新组织了计算单元。
- Hugging Face Transformers各家预训练模型收进一个库,一个调用就能加载。
- Triton程序员按“块”写计算,线程和内存的细节交给编译器。
- GPT-3在提示里放几个示例,模型就照着做,不用重新微调。
- 缩放定律损失随模型、数据和算力按幂律下降,可以提前算出来。
- RAG生成模型配一个文档索引,答案有出处,知识也能更新。
- ViT图像切成小方块排成序列,交给 Transformer 读。
- Diffusion从一团噪声出发,一步步去噪,最后生成样本。
- AlphaFold 2在 CASP14 上,它让蛋白质结构预测往前跨了一大步。
- Ampere A100矩阵单元能算更多精度,一颗 A100 最多能切成七份。
- CDNAAMD 把面向计算的架构从图形线里分出来,单独走。
- MMLU用 57 个学科的选择题,考模型预训练时学到了多少知识。
- Waymo在凤凰城,普通乘客可以叫到驾驶座上没人的车。
- Codex 与 Copilot拿 GitHub 代码训的模型,在编辑器里补整行、整个函数。
- CLIP要识别什么,用一句话描述就能定下来。
- LoRA在每层加低秩矩阵来训练,可训练参数少一万倍。
2022 – 2023
生成模型走向大众
Stable Diffusion 公开权重,ChatGPT 开放对话界面,让更多人直接用上生成模型。随着使用规模扩大,回答是否有用、服务能否又快又便宜,变得更受关注。
- InstructGPT用人写的示范和人标的偏好,调整语言模型怎么回答。
- ChatGPT打开网页就能聊天、追问,让更多人接触到语言模型。
- Stable Diffusion权重和代码都公开了,谁都能亲手试、亲手改。
- FlashAttention分块计算 attention,少在显存里搬中间结果。
- 思维链提示示例里写出推理过程,大模型的多步推理明显变好。
- HopperH100 把加速 Transformer 定成了架构目标。
- Whisper用 68 万小时带文字稿的网络音频训练,不微调也能用。
- LAION-5B大厂的图文数据不公开,它一口气公开了 58.5 亿对。
- DPO不另训奖励模型,直接用“哪个回答更好”的数据调模型。
- vLLM把 KV cache 切成小块,用多少分多少,少浪费显存。
- RT-2它把视觉语言预训练和机器人动作数据结合在一起。
- CDNA 3 与 MI300MI300A 把 CPU、GPU 封在一起,共享内存。
- Segment Anything点一个点或画一个框,模型就把那个物体抠出来。
- GraphCast算出 10 天的全球天气预报,一台 TPU 上不到一分钟。
2024 – 2026还在发生
想得更久,也开始动手
从 2024 年起,模型被教着在回答前多想一会儿:2025 年在数学奥赛上写出金牌线的证明,2026 年开始解决没人解开的问题。它们也开始读仓库、调工具,替人做完整件事,有的还能自己找出软件漏洞。算力和电力跟着成了要算的账,数据中心用电预计到 2030 年翻倍。
- o1用强化学习教模型先写一长串思路,再给答案。
- GRPO同一道题答几遍,拿它们互相比,省掉价值模型。
- Gemini 1.5上下文从 3.2 万词元拉到 100 万,研究里试到了 1000 万。
- DeepSeek-V3每个词只用到一小部分参数,整套训练用 FP8 跑完。
- MCP数据源做成 MCP 服务器,AI 应用当客户端,接一次就能通用。
- GB200 NVL7272 块 Blackwell GPU 用 NVLink 连成一体,装进一个液冷机柜。
- AlphaFold 3把蛋白质、DNA、RNA 和小分子放在一起,预测它们怎么结合。
- 诺贝尔奖物理奖颁给神经网络的奠基工作,化学奖颁给蛋白质设计与结构预测。
- Llama 3.1最大的 405B 版本也能下载权重,自己部署、自己微调。
- 欧盟 AI 法案分阶段生效;通用模型的提供者要留存训练和测试文档。
- DeepSeek-R1一份报告对照两种做法:直接上 RL,和先备数据再分阶段训。
- IMO4.5 小时内读题、写证明,6 道题做对 5 道。
- 编程 agent模型自己读仓库、改文件、跑测试,再交给人审。
- IEA《能源与 AI》2024 年数据中心用了全球约 1.5% 的电,到 2030 年预计翻倍。
- Genie 3输入一段文字,生成一个能实时走动的 720p 世界。
- 后训练配方SFT、DPO、PPO、GRPO 各有取舍,配方还在摸索。
- DeepSeek-V4改了注意力,长上下文的 KV cache 只剩一成;权重按 MIT 许可开放。
- TPU 8t 与 8i同一代 TPU 拆成两颗:一颗管训练,一颗管推理。
- AI 做数学研究通用推理模型推翻了 Erdős 问题上的一个猜想,Lean 替机器证明把关。
- 网络安全能力过线模型能自己找出并利用未知漏洞后,几家公司改了发布方式。
这个领域还没有节点。
珍珠街电站一座电站供一片街区
1882 年,纽约珍珠街电站开始给曼哈顿下城的一个街区供电。电从一座中心电站出发,经地下线路送进好几栋楼。这些楼用的是同一套直流电。
互补尼亚加拉
细节
留下的问题
它只供一个街区的直流电,离今天跨区域的交流电网还很远。
尼亚加拉把交流电送到远处
珍珠街的直流电只能送到附近几栋楼。1895 年,尼亚加拉瀑布的 Adams 水电站投入运行,用高压交流电把电送到远处,电站从此不必挨着用户。IEEE 把它记作交流电胜过直流电的关键一役。
互补珍珠街电站
细节
图灵机给“计算”下了定义
1936 年,图灵给“计算”下了一个精确的定义:读写符号,再加上有限条规则。按这个定义,一台通用机器能模拟其他机器。计算也有边界:有些数学问题,没有任何算法能解。
互补Transformer被借用于图灵 1950
细节
留下的问题
它回答能不能算,没回答算得多快。
图灵 1950用模仿游戏问机器能否思考
“机器能思考吗”这个问题太含糊,没法研究。1950 年,图灵把它换成模仿游戏:只靠文字交流,提问的人能不能分辨对面是人还是机器。文章还指出数字计算机是通用机器,并设想让机器像孩子一样学习。
借用图灵机
细节
EDVAC 报告把程序存进存储器
一台通用机器要做很长的计算,指令放在哪里?1945 年 6 月,冯·诺伊曼在 EDVAC 报告的草稿里把机器分成运算、控制、存储、输入和输出几部分,并把指令当作存储器要装的内容。这份草稿流传很广,影响了此后许多计算机的设计。
被借用于FORTRAN
细节
留下的问题
它是一份没写完的草稿,许多工程细节要等真正造机器时才解决。
晶体管用半导体放大信号
电话系统需要可靠的器件。1947 年,贝尔实验室做出点接触晶体管,用半导体器件放大电信号。它是为电话网造的,后来却成了计算机的基础。
被借用于22 纳米三栅晶体管被用于集成电路
细节
留下的问题
点接触晶体管和今天芯片里的 MOS 晶体管,结构差得很远。
信息论给信息找到一把尺子
1940 年代,没人说得清一条有噪声的线路能传多少信息。直觉上,想少出错只能多重复,越传越慢。Shannon 把信息量定义为做选择时的不确定性,叫熵,用比特计。他还证明,每条有噪声的信道都有容量 C:低于 C,编码得当,错误能任意少;高于 C,怎么编都不行。
细节
Shannon 自己举过例子。每秒发 1000 个符号,两种符号各占一半,噪声让每 100 个错 1 个。直觉答案是每秒 990 比特,可接收方不知道错在哪里。按他的算法,实际只有 919 比特每秒。
容量定理只证明好编码存在,没给造法。后来的编码一点点逼近这个界限。1993 年的 Turbo 码论文,标题就叫“接近 Shannon 极限”;1996 年,冷落多年的 LDPC 码被重新发现,在模拟里几乎和 Turbo 码一样接近极限。
留下的问题
熵只管有多少种可能,不管内容真不真、有没有用;噪声变了,容量还得重算。
来源 3
- Shannon · A Mathematical Theory of Communication, Bell System Technical Journal, July and October 1948 (reprint with corrections), Introduction, §§6–7, 9, 12–14
- Shannon · Prediction and Entropy of Printed English, Bell System Technical Journal, January 1951, §1
- MacKay and Neal · Near Shannon Limit Performance of Low Density Parity Check Codes, 1996 preprint for Electronics Letters, abstract and results
随机逼近带着噪声一步步找答案
有些实验只能一次次试。比如找让一半受试对象起反应的剂量,每次结果都带随机性,反应曲线长什么样也不知道。Robbins 和 Monro 的办法是:看上次的结果,把下次剂量往目标挪一点,步子逐次变小,比如 1/n。他们证明,在一定条件下,这样试下去,剂量会在概率意义下收敛到目标。
被用于缩放定律
细节
拿半数反应剂量来说。第 n 次给剂量 x_n,有反应,下次就降 a_n/2;没反应,就升 a_n/2。步长要满足两条:a_n 的平方加起来有限,a_n 本身加起来是无穷大。1/n 两条都满足。
后来的随机梯度下降(SGD)面对同一类问题:每步只用一个随机样本估梯度,方向带噪声,步长条件也一样。Bottou 2010 年在文本分类上做过对比:达到同样的测试错误率,SGD 用 1.4 秒,SVMLight 用了 23,642 秒。
留下的问题
它保证最终会收敛,却不告诉你要试多少次才够。
Metropolis 方法按概率决定走不走
从分子间作用力算压强,得对所有分子的位置积分。平面上几百个粒子,就是几百维的积分,网格法和随机撒点都不行。Metropolis 等五人改成每次随机挪一个粒子:能量降了就接受,升了按概率接受,否则退回原位。这样走下去,各构型的频率趋向正确的分布,直接平均即可。
被用于TVM
细节
接受规则可以拿数感受一下。能量升高 1 个 kT,接受的概率约 37%。升高 3 个 kT,只有约 5%。所以系统多半往低处走,偶尔也爬坡。被拒绝的移动也要计数,把原构型再记一次,否则有些状态会被算少。
1983 年,Kirkpatrick、Gelatt 和 Vecchi 把这套规则搬到优化上:用成本代替能量,先在高温下“熔化”,再慢慢降温,叫模拟退火。只接受改进的搜索容易困在局部最优,Metropolis 规则允许有控制地往上走几步。
留下的问题
它能证明最终会趋向正确的分布,却说不出要走多久。
来源 2
- Metropolis, Rosenbluth, Rosenbluth, Teller and Teller · Equation of State Calculations by Fast Computing Machines, Journal of Chemical Physics 21(6), June 1953, §§I–IV, VI
- Kirkpatrick, Gelatt and Vecchi · Optimization by Simulated Annealing, Science 220, 13 May 1983, introduction and statistical-mechanics section
动态规划把多步决策拆开算
排产、进货、换设备,都要连着做很多步决策,每一步都会改变后面的局面。老办法是列出所有决策序列逐个算,阶段和选择稍多,有时连当时的计算机都吃不消。Bellman 只要一条规则,说清每个状态下该怎么做。他用最优性原理写出递推方程,把大问题拆成一步步的小问题。
被借用于Q-learning
细节
差别能数出来。10 个阶段、每步 10 种选择,完整的决策序列有 10¹⁰ 种。Bellman 只问:从眼下的状态出发、还剩 N 步,最好能拿多少?第一步走到新状态后,剩下的最好结果就是还剩 N−1 步的答案,所以只需比较第一步的几种选择。
后来的强化学习直接借了这套框架。Watkins 和 Dayan 1992 年的论文说,Q-learning 可以看作异步的动态规划:它不用事先知道奖励和状态转移概率,靠一次次尝试,逐步改进每个状态下每个动作的估值。
留下的问题
每个可能的状态都要算出一个值;描述状态的变量一多,要算要存的东西也跟着变多。
磁芯存储用磁化方向存一位
1950 年代初,MIT 的 Whirlwind I 用静电存储管当内存,管子很难伺候,毛病反复出现。磁芯存储用小磁芯的磁化方向存一位,横竖导线按坐标选中它。1953 年 8 月和 9 月先后换上两组磁芯,存取时间从约 25 微秒降到 9 微秒,维护时间也少了。
细节
按坐标选中靠的是“半电流”。Forrester 的专利里,每根导线只通翻转所需电流的一半。只在一根通电导线上的磁芯,电流不够,不会翻转;横竖两根导线交叉处的那一个收到两份,才会翻转。
代价是读出会毁掉内容:读一个磁芯要把它翻转,原来的信息不另存就丢了。Whirlwind 的办法是读完马上写回去。写回产生的瞬态电流会干扰读出放大器,于是又设计了恢复更快的放大器。
留下的问题
读出后必须重写的麻烦还在,读写电路的干扰也得靠改进放大器来对付。
来源 6
- Project Whirlwind Summary Report No. 35, third quarter 1953, §§1, 3.1, 3.3 (bitsavers scan)
- Project Whirlwind Summary Report No. 37, first quarter 1954, introduction and §3.1 (bitsavers scan)
- Forrester · US Patent 2,736,880, filed 1951-05-11, granted 1956-02-28
- An Wang · US Patent 2,708,722, filed 1949-10-21, granted 1955-05-17
- Amdahl, Blaauw & Brooks · Architecture of the IBM System/360, April 1964, p. 96 and Figure 1
- Liptay · System/360 Model 85 cache, IBM Systems Journal 7(1), 1968, pp. 15–16
Dartmouth一群人聚到 AI 名下
1955 年,一份提案为第二年的 Dartmouth 项目列出了要研究的问题:学习、语言、推理。从这时起,一群研究者开始围绕 AI 这个名字组织工作。机器会不会有智能,这个问题早有人想过;新的是这个名字,和聚在它下面的这群人。
细节
留下的问题
当时好几条路线同时在走,没有哪条注定通向今天的大模型。
- 互补 · 信息论
香农在提案里写的那部分,是把信息论用到计算机和大脑模型上。
- 互补 · Logic Theory Machine
1956 年的 Dartmouth 会上,Newell、Shaw 和 Simon 介绍了他们写 Logic Theorist 用的表处理语言 IPL 2。
- 互补 · LISP
McCarthy 回忆,他想要一门做 AI 用的代数式表处理语言,这个念头起于 1956 年夏天的 Dartmouth 会议。
Logic Theory Machine用经验法则找证明
1956 年,Newell 和 Simon 在一份报告里写下一个系统的规格,用来寻找符号逻辑的证明。往哪个方向搜,由启发式决定,也就是一些经验法则。整个推理过程,被写成了计算机能实现的规则。
细节
留下的问题
报告主要写的是系统规格,还没讲它在计算机上怎么实现。
Heuristic DENDRAL把看谱经验写进程序
化学家要从质谱图倒推出分子结构。原来的 DENDRAL 算法能列全所有无环结构,但只按原子价拼图,不看实测数据。Heuristic DENDRAL 把看谱的经验写进程序:先按特征峰定下该有、不该有的片段,只生成合格结构;再预测每个候选的谱图,和实测谱比对排序。
互补MYCIN
细节
论文的例子是 3-辛酮。光按原子价能连出 790 种图,化学上稳定的无环结构有 698 种。程序看谱峰判断它是乙基酮,把醇、醚、醛和其他几种酮放进“不能有”的清单。最后只生成 3 个结构,正确的那个就在其中。
1984 年回顾时,Buchanan 和 Shortliffe 写道,MYCIN 借用了 DENDRAL 的经验,头一条就是产生式规则好用,也就是“如果……那么……”式的规则。
留下的问题
它只在少数几类分子上接近化学家,碰到环状结构就吃力,常给出好几个候选。
- 互补 · MYCIN
Buchanan 和 Shortliffe 说 MYCIN 脱胎于 DENDRAL,沿用了它编码知识的经验。
来源 3
- Buchanan, Sutherland & Feigenbaum · Heuristic DENDRAL, Machine Intelligence 4 (Edinburgh University Press, 1969), pp. 209–254 · scan in the NLM Joshua Lederberg Papers, introduction and §§1, 3.5, 6
- NLM catalog record for the same paper
- Buchanan & Shortliffe (eds.) · Rule-Based Expert Systems, 1984, chapter 1 (author-hosted)
MYCIN把专家知识写成规则
1975 年的系统报告里,MYCIN 把领域知识写成一条条规则。它能解释自己给出的建议,也能接收新加的规则。这种做法叫知识工程:把专家知道的东西,整理成机器能用的规则。它当时是一个研究系统。
细节
留下的问题
知识怎么持续维护,规则没覆盖到的情况怎么办,它都没解决。
贝叶斯网络在依赖图上传递信念
证据不确定时,推理容易前后矛盾。1985 年,Pearl 用一张依赖图表示变量之间的关系,让每个节点只和邻居传递消息,最后收敛到全局一致的信念。这成了概率图模型的基础。
细节
来源 4
- Pearl · Bayesian Networks: A Model of Self-Activated Memory for Evidential Reasoning, UCLA CSD-850017, April 1985
- Same paper · Cognitive Science Society proceedings, 1985
- Heckerman & Shortliffe · From Certainty Factors to Belief Networks, Artificial Intelligence in Medicine, 1992
- Smyth, Heckerman & Jordan · Probabilistic Independence Networks for Hidden Markov Probability Models, Neural Computation 9, 1997
分组交换把消息切成小块各自寻路
集中式或分层的网络,关键节点一坏就会断。1964 年,兰德公司的 Baran 提出分布式网络:消息切成标准大小的块,每个节点先存下再转发,按自适应路由绕开坏掉的节点和线路。十几年后的 Ethernet 论文,题目里就写着“分组交换”。
互补Ethernet
细节
留下的问题
每一跳都要存储再转发,延迟和拥塞留给了后来的协议去处理。
低损耗光纤用纯净玻璃把光送远
1960 年代的光纤只能把光信号传 20 米左右。1966 年,在英国 STL 工作的高锟算出:用最纯的玻璃,光信号能传 100 公里。四年后的 1970 年,第一根超纯光纤做了出来,2009 年他因此获得诺贝尔物理学奖。
互补Ethernet
细节
留下的问题
光纤解决了传输,路由和交换仍在电子设备里完成。
ARPANET远程登录另一台主机
1969 年 10 月,UCLA 的团队试着通过 ARPANET 登录斯坦福研究所的主机。第一次只传出“lo”就崩溃了,完整的登录后来才成功。远程登录让相隔很远的计算机能真正交互,跨机构共用计算资源也就有了试验的条件。
用到Dijkstra被借用于TCP/IP互补Ethernet
细节
留下的问题
第一次尝试只传出 “lo” 就崩了;那时它还只是研究网络,离大众用的互联网还很远。
- 用到 · Dijkstra
从 1979 年 5 月起,ARPANET 每个节点都用基于 Dijkstra 算法的最短路径优先来算路由。
Ethernet一根电缆大家共用
1976 年,Metcalfe 和 Boggs 发表论文,讲附近的计算机怎样共用一根同轴电缆收发数据包。什么时候发,由各台机器自己决定;两台撞上了,就各自重发。这样,局域网不需要一个中央控制器来安排每次发送。
细节
TCP/IP让不同网络说同一种话
为了把用不同通信技术的网络连起来,ARPANET 把 1983 年 1 月 1 日定为从 NCP 切换到 TCP/IP 的目标日期。有了共同的协议,远程登录、文件传输和邮件都能跨过原来的网络边界。1983 年的主机调查,记下了这些服务实际跑起来的情况。
细节
FORTRAN让程序照着公式写
1950 年代给 IBM 704 编程,得一条条手写机器指令。FORTRAN 团队说,解一道科学计算题,约三分之二的成本花在准备程序上。多数程序员也不信机器写的代码能和手写的一样快。FORTRAN 让人照着公式写,翻译程序生成机器码,代码效率是核心目标。
细节
论文里有个例子,作者自己也说说明不了太多。一位程序员上了一天 FORTRAN 课,用四小时写出 47 条语句。704 花六分钟,把它编译成约 1000 条机器指令。他估计手写要三天,调试还不算。
留下的问题
它只为 IBM 704 而写;在它之前已有别的公式翻译系统在运行,只是大多不追求优化。
- 借用 · EDVAC 报告
Backus 后来把 FORTRAN 这类语言叫作“冯·诺伊曼语言”:变量模仿存储单元,赋值模仿一次次取数和存数。
来源 5
- Backus et al. · The FORTRAN Automatic Coding System, 1957 Western Computer Proceedings, pp. 188–198
- Backus · FORTRAN session transcript, ACM History of Programming Languages conference, 1978
- MPI Forum: early standard scope, language bindings
- Harris et al. · Array programming with NumPy, arXiv v1, 2020-06-18, section on NumPy arrays
- Backus · Can Programming Be Liberated from the von Neumann Style?, 1977 Turing Award lecture, CACM 21(8), August 1978, §§3–4
LISP给符号推理一门语言
要让程序推理,就得处理符号,而不只是数字。1960 年 4 月,McCarthy 发表 LISP 的论文:用递归函数处理符号表达式,最早在 IBM 704 上为“建议接受者”实验而写。十年后,造 Shakey 机器人的团队仍把它当作主要编程工具。
细节
留下的问题
它方便写符号推理,数值计算还是交给 FORTRAN 这样的语言。
Unix一套能开发自己的系统
1969 年,贝尔实验室的一个团队想保住交互式的编程环境,就在 PDP-7 上做了一套系统,后来叫 Unix。文件系统、进程和命令解释器一点点长成一个能开发自身的环境。写程序和日常用工具,都在这同一套环境里。
互补C
细节
留下的问题
1969 年它才刚动工,连名字都还没有。
C用高级语言重写 Unix 内核
Unix 起初用汇编写。Thompson 做的高级语言 B 没有类型,数据全是机器字,在按字节寻址的 PDP-11 上处理字符和指针很别扭。Ritchie 从 1971 年起给 B 加字符类型、数组、指针和结构,改名叫 C。1973 年夏天,内核用 C 重写。
细节
看一个字符串就明白差别。B 只有“字”,几个字符打包塞进一个字里;想逐个处理,得调库函数拆开,处理完再装回去。C 有了 char 类型,第 i 个字符就是一个字节,可以直接读。
留下的问题
Ritchie 说 C 古怪、有缺陷:声明要由内向外读,数组和指针的关系常让初学者卡住。
- 互补 · Unix
C 与早期 Unix 同时发展;1973 年夏,PDP-11 上的 Unix 内核用 C 重写。
BLAS一套人人调用的基础运算
数值程序里反复出现同样的向量运算,每个库各写一遍,又慢又难移植。1979 年,Lawson 等人把它们定成一套标准子程序 BLAS,后来又扩展到矩阵与向量、矩阵与矩阵的运算。各家厂商针对自己的硬件优化同一套接口,LAPACK 这样的库就建在它上面。
细节
留下的问题
它只管基础运算,解方程、求特征值要靠上面的 LAPACK 等库。
GNU让软件可以自由分享
1983 年 9 月,Richard Stallman 宣布 GNU 计划,要做一套可以自由分享、和 Unix 兼容的系统。内核、编译器、编辑器和命令行工具都在计划里。目的是让大家协作时,不必再依赖禁止分享的软件。
互补GPL
细节
留下的问题
发公告时只有计划,没有现成的系统或编译器,真正动手要到 1984 年 1 月。
RAMAC 磁盘直接找到任意一条记录
穿孔卡片记账,要先人工分拣,再成批过机器,一个库存例子要过七台机器。难的是在大文件里直接改动单独一条记录。IBM 350 磁盘把 50 张金属盘叠在一根竖轴上,存取臂能移到任意一张盘的任意一道磁道。500 万个字符分成 5 万条记录,哪一条都能直接取出。
细节
Atlas 虚拟内存两层存储看起来像一层
快的磁芯存储小,慢的磁鼓大,程序员得自己决定什么时候把代码和数据搬进搬出。1962 年,曼彻斯特的 Atlas 让硬件和监控程序自动完成这件事,在用户看来只有一层存储,这就是虚拟内存。六十年后,vLLM 用同样的分页思路管理 KV cache。
被借用于vLLM
细节
留下的问题
要用的内容不在快存储里时,程序还是得停下来等慢存储。
单晶体管 DRAM晶体管加电容存一位
1967 年,Dennard 提交了一项专利,描述一种存储单元:一个晶体管控制一个电容的充放电,电容里的电荷就代表一位信息。每个单元用的器件少了,同一颗芯片上就能排下更密的存储阵列。
细节
Model 85 缓存硬件自己管快慢存储
处理器常要等慢速的主存。IBM System/360 Model 85 加了一块小而快的缓存,存放主存里正在用的内容。数据什么时候装入、什么时候替换,都由硬件自动完成,程序不用管这一层。
细节
留下的问题
缓存没命中时,还是得回主存去取。
- 用到 · System/360
Model 85 是 System/360 的一个型号。Liptay 写道,缓存的装入和替换必须不靠程序参与,因为 Model 85 要与 System/360 的其他型号兼容。
闪存一整块一起用电擦除
EPROM 要用紫外线擦除,能电擦的 EEPROM 每位又要两个晶体管。1984 年 12 月,东芝的舛冈富士雄在 IEDM 上发表闪存:用电把一整块存储单元一次擦掉。几年后又有了 NAND 闪存。
互补仓库级计算
细节
留下的问题
每个单元能擦写的次数有限,用久了会磨损。
集成电路把整个电路做进一块半导体
以前的电路由一个个分立元件和导线组装而成。1959 年,Kilby 申请的专利把电路的全部元件做进同一块半导体;同年 Noyce 的专利在氧化层上沉积金属引线,把元件连起来。Moore 1965 年的预测,讲的就是这种集成电路。
细节
MOSFET隔着氧化层用电场控制电流
1960 年 5 月,Kahng 申请专利:在硅上热生长一层二氧化硅,再在上面放电极,用电场控制下面的电流。这就是 MOSFET。后来的单管 DRAM 和 Dennard 的缩放规则,都建立在这种器件上。
细节
留下的问题
器件越做越小,漏电和发热越来越难控制。
System/360大小机器跑同一套程序
IBM 原有五条产品线,字长和十进制运算方式各不相同。1964 年的 System/360 把程序员看到的机器和具体实现分开:六个型号性能差约 50 倍,指令集却严格一致。内存和外设够用时,按手册写的程序大小型号都能跑。一个家族取代了原来五条产品线。
被用于Model 85 缓存互补RISC
细节
型号之间差多少?最小的 Model 30 每次从主存取 8 位,周期 2.0 微秒。最大的 Model 70 每次取 64 位,周期 1.0 微秒。16 个通用寄存器在 Model 30 上就放在主存里,程序员看到的却始终是同一组。
字符为什么用 8 位,不用 6 位?商业记录里数字出现的次数,是带字母数据的两倍多。一个十进制数字只占 4 位,存储、磁带和磁盘都更省。
留下的问题
它只保证合乎手册、不依赖执行时间的程序;IBM 旧机器上的程序不在保证之内。
来源 4
- Amdahl, Blaauw & Brooks · Architecture of the IBM System/360, IBM J. Res. Dev. 8(2), April 1964, pp. 87–96 and Figure 1 (course-hosted scan)
- Same paper · IEEE Xplore record, pp. 87–101
- IBM History · System/360 (launch date, product lines, IBM's account)
- Liptay · System/360 Model 85 cache, IBM Systems Journal 7(1), 1968, p. 15
Moore 1965最省钱的元件数年年翻倍
1965 年,集成电路刚用进商用计算机。一块电路里元件放得越多,每个越便宜;放太多,成品率下降,成本又回升,所以总有一个最省钱的数。Moore 指出,这个数大约每年翻一倍:当时约 50 个,到 1975 年会达到 65,000 个。他还预言了家用计算机。
细节
65,000 个元件放得下吗?Moore 算了笔账:按当时的公差,晶体管可以每隔千分之二英寸放一个,一英寸 500 个,一平方英寸 25 万个。65,000 个只占约四分之一平方英寸,用现有的光学工艺就够。这里的“元件”也包括电阻和二极管。
留下的问题
这是拿几年数据做的外推,Moore 自己也说,长期走势有点不确定。
- 用到 · 集成电路
Moore 1965 年的文章预测的就是集成电路:一块电路上最省钱的元件数会怎样增长。
Intel 4004把 CPU 做进一颗芯片
1971 年,Intel 4004 把四位运算器、寄存器和执行程序的功能做进了一颗 CPU 芯片。程序放在外面的存储器里。同一颗处理器,换一套程序,就能用在不同的控制设备上。
互补Moore 1965用到集成电路
细节
留下的问题
程序还得放在外部 ROM 里,它还算不上一台完整的单芯片计算机。
- 互补 · Moore 1965
Moore 在 2003 年的回顾报告里,把 4004 放在他集成度和处理器性能曲线上微处理器那一段的起点。
- 用到 · 集成电路
MCS-4 的发布广告把这套芯片组介绍为四颗新的集成电路。
Dennard 缩放越做越小,功率密度不变
MOSFET 要缩小,怎样缩才还能正常工作?1974 年,IBM 的 Dennard 等人给出一套比例规则:尺寸和电压一起按同一个比例缩小,器件更快,单位面积的功耗却不变。同样大小的芯片能放下更多电路,发热却不跟着变多。
用到MOSFET
细节
RISC用精简指令集造处理器
指令集越加越复杂,实际跑的却大多是几条简单指令:一个 IBM 360 编译器里,10 条指令就占了 80% 的执行。1980 年,Patterson 和 Ditzel 主张,单芯片的 VLSI 处理器应该围绕精简的指令集来设计。
细节
Dijkstra由近到远定下最短路
1959 年,Dijkstra 给出一种算最短路的顺序。每一步,从还没处理的点里挑出距离最短的那个定下来,再更新它邻居的距离。这样一点点往外推,不用把所有可能的路径都列一遍。
被用于ARPANET
细节
留下的问题
边的长度不能是负数,否则这个做法就不成立。
卡尔曼滤波边测量边修正估计
维纳滤波要求统计特性不变,算起来也麻烦。1960 年,卡尔曼换成状态空间的写法:每来一个新测量,就递推地更新一次状态估计和它的误差协方差,不用保存全部历史。它后来成了导航和机器人里的标准工具。
被用于Stanley
细节
留下的问题
原始形式假设系统是线性的、噪声是高斯的,非线性问题要另作近似。
FFT把大变换拆成小变换
直接算 N 点傅里叶级数要 N² 次运算,4096 个点就是 1600 多万次。Cooley 和 Tukey 沿用前人的思路:N 能分解成很多因子时,大变换能拆成一串小变换,运算量降到与 N log N 成正比。N 取 2 的幂时,还能在原数组里就地算完。
细节
拿 N = 1024 算:直接计算约 105 万次,新方法不到 20,480 次。差了约五十倍,N 越大差得越多。代价是结果的顺序被打乱:第 j 个结果,落在把 j 的二进制位倒过来的位置上。
FFTW 的作者在 2005 年写道,这个常用的自由软件库主要用的仍是 Cooley–Tukey 算法,但难点换了地方:拆分带来跳跃的内存访问,会妨碍缓存。所以 FFTW 实际测量多种拆法的运行时间,挑最快的那个。
留下的问题
N 是质数时这招帮不上忙;在今天的机器上,内存访问方式同样决定快慢。
反向模式求导倒着扫一遍得到每步的影响
一个算法要算成千上万步,每步都有一点舍入误差,结果会偏多少?1970 年,芬兰的 Linnainmaa 在硕士论文里给出办法:先记下每一步运算,再从结果倒着扫一遍,算出每一步对结果的影响。这就是今天的反向模式求导,神经网络的反向传播是它的一个特例。
互补反向传播
细节
留下的问题
每一步的中间值都得存下来,算得越长,占的内存越多。
- 互补 · 反向传播
Griewank 认为 Linnainmaa 1970 年的论文提出了今天所说的反向模式,并把神经网络的反向传播看作它的一个特例。
EM 算法数据缺一块也能做最大似然
数据有一部分看不到时,最大似然估计很难直接算。1977 年,Dempster、Laird 和 Rubin 给出通用做法:E 步按当前参数估计缺失部分,M 步据此更新参数,两步交替。HMM 的 Baum-Welch 训练是它的特例,IBM 的翻译模型也用它训练。
细节
留下的问题
每一步都不会变差,但可能停在局部最优,起点不好就会卡住。
关系模型把数据含义和存放方式分开
1970 年,Codd 在论文里用“关系”来描述共享的数据。他主张,应用程序不该依赖记录的物理顺序、索引或访问路径。这叫数据独立性:存储的组织方式变了,应用尽量不用跟着改。
互补RAMAC 磁盘
细节
后来有数据库直接跑起了机器学习。2012 年的 MADlib 在 PostgreSQL 和 Greenplum 里实现了回归和聚类,计算就在库里的数据旁边进行。
留下的问题
关系模型没有规定分布式事务、物理执行计划,也不管数据质量。
感知机让随机连线的网络学会分类
当时不少大脑模型借用开关电路,把回忆写成预先接好的线路。Rosenblatt 认为,这不适合连线随机、元件不完美的网络。1958 年他提出感知机:感光点连到随机连线的联想单元,再连到几个响应单元。被强化的联想单元“价值”升高,同一刺激再来,原来的响应更易胜出。
被借用于SVM互补Hopfield 网络
细节
设想一个只有两个响应的感知机,一个代表“方”,一个代表“圆”。图照到感光点上,点亮一部分联想单元;两个响应各自汇总,强的一方胜出,并压住对方。同类图形彼此相似时,没见过的新图也能以高于随机的概率归对类。
Rosenblatt 也写明了边界:具体的刺激它能学,可一旦要判断刺激之间的关系,比如“说出方块左边那个东西”,问题就变得极难。
留下的问题
它处理不了刺激之间的关系判断,Rosenblatt 自己也承认。
Neocognitron图形挪了位置也认得出
图形挪个位置,此前的识别网络就认不出了。1980 年,NHK 的福岛邦彦提出 Neocognitron:提取特征的层和容忍位移的层交替堆叠,不用老师标注,自己组织起来,图形换了位置、稍有变形也能认出。LeNet 论文提到,卷积加下采样的组合,Neocognitron 早已实现。
互补LeNet-5
细节
留下的问题
它不用反向传播这样的监督训练,每层靠专门设计的自组织规则来学。
Hopfield 网络凭残缺线索找回记忆
除了按地址取数据,能不能凭残缺内容找回完整记忆?1982 年,Hopfield 提出由二值单元组成的网络,用连接强度存储模式。在对称连接、无自连接等条件下,按规则逐个更新单元,能量不会增加。它可以从受损输入恢复记忆,也可能停在错误的稳定状态,并不保证每次都找对。
互补感知机
细节
模拟里,30 个单元存 5 条记忆。从离某条记忆不超过 5 位的状态出发,九成以上能回到它。给它两条记忆按六比四混合的输入,它多半直接给出占六成的那条,不像线性网络那样输出混合。
2024 年,Hopfield 和 Hinton 获得诺贝尔物理学奖。公告说,Hopfield 网络借用描述原子自旋的物理,让存好的图像处在能量低处;Hinton 以它为基础,发展出玻尔兹曼机。
留下的问题
它只会联想,学不出隐藏特征;存的记忆一多,就取不准了。
- 互补 · 感知机
Hopfield 拿自己的模型和感知机对照:强反向连接,单元异步更新。
来源 4
- Hopfield · Neural networks and physical systems with emergent collective computational abilities, PNAS 79(8), April 1982
- Same paper · CaltechAUTHORS PDF; model, storage rule, energy function, simulations, Discussion
- Same paper · PubMed Central record
- Royal Swedish Academy of Sciences · Nobel Prize in Physics 2024 press release, 2024-10-08
Shakey给它目标,它自己排步骤
1966 年 SRI 立项时,自动机大多靠几块简单的板载电路控制。SRI 想用大型计算机通过无线电指挥机器人,只给目标,不给步骤。Shakey 分层干活:STRIPS 排出动作顺序,PLANEX 执行并盯着进度,最底下是“推箱子”这类自带感知和纠错的动作。
细节
一次实验的任务,是用 2 号箱子把一扇门堵上。走到半路,实验者在它要经过的门前放了一只陌生箱子。摄像机看到路被挡,把箱子记进模型。PLANEX 没有从头重排,换了一组房间绕过去,照样把门堵上。
能这样绕,是因为 STRIPS 存下的计划带参数:不记“经过这几个房间”,记的是“从某个房间穿过一个中间房间,进到第三个房间堵门”。下一个任务是把那只箱子推开,它直接借用了这个计划的前四步。报告把这看作一种学习。
留下的问题
它只在几间专门布置的房间里活动,门和墙的位置都事先写进了模型。
WordNet把英语词按意思连成网
词典按字母排,意思相近的词散落各处。1985 年起,Princeton 的 Miller 等人编 WordNet:把英语名词、动词和形容词按意思归成同义词集,每个集合代表一个概念,再用上下位、部分与整体等关系把集合连起来。ImageNet 的类别树,用的就是 WordNet 的名词层级。
被用于ImageNet
细节
留下的问题
它是人工编的,收哪些词、怎么连,取决于编者的判断。
反向传播让误差一层层往回传
网络输出错了,深处哪些权重该改?反向传播把输出端的误差一层层往回传,据此调整每一层的权重。1986 年这篇代表作展示了:这样训练,网络中间层能自己学出内部特征,也就是隐藏表示。反向求导的办法更早就有,这篇论文让人看到它能学出什么。
细节
留下的问题
有了梯度,深网络照样难训,训好了也未必能用在新数据上。
混合专家让门控网络分派任务
用反向传播训练一个网络去做几种子任务,它们会互相干扰。1991 年,Jacobs、Jordan、Nowlan 和 Hinton 让几个专家网络分工:一个门控网络看输入,决定交给哪一个或哪几个专家,每个专家只学一部分样本。2017 年的稀疏 MoE 把这个想法放大到上千个专家。
细节
LSTM让循环网络记得更久
循环网络一步步读序列,读到后面,前面的信息很难留住。1997 年提出的 LSTM 加了一块专门的记忆状态,再配上门控,也就是控制信息进出的阀门。这样,相隔很远的信息也更容易学到。
细节
留下的问题
门控只是缓解,距离拉得足够长,照样可能忘。
HMM从声音反推看不见的状态
语音有长有短,变化也多,没法把每一帧声音拆开单独分类。Rabiner 1989 年的教程系统地介绍了 HMM:隐藏状态按概率相互转移,每个状态产生声音特征这样的观测。有了一整段观测,就能反推背后可能的过程。
细节
用它要分清三个问题:这段观测有多大可能,哪条状态路径最可能,参数怎么从数据里学。第一个要把所有路径加起来,第二个要找出最好的一条,第三个是估计参数,三种算法各不相同。
留下的问题
它假设下一个状态只看当前状态,算起来简单,能表达的依赖关系也就有限。
- 互补 · EM 算法
Rabiner 指出,HMM 的 Baum-Welch 重估计和 EM 算法是等价的。
IBM 翻译模型从双语句对里学词的对应
按直觉,翻译是先读懂原文,再换种语言说出来。IBM 的四位作者反过来问:看到一句法语,哪句英语最可能是它的“原文”?这拆成两件事:英语通不通顺,词和词怎么对应。后者不靠人写规则,从加拿大议会记录的约 178 万对英法句子里学出来。
细节
论文举过一个例子:英语 nodding 对应法语短语 faire signe que oui。Model 1 到 3 只把 nodding 连到 signe 和 oui 两个词,到了 Model 5,才连上整个短语。
后来的统计翻译常把词对齐当作中间一步。2003 年 Koehn 等人的短语翻译模型,先用训练 IBM 模型的工具 Giza++ 给语料做词对齐,再从结果里抽出成对的短语。
留下的问题
它不管词形变化,法语动词的几十种形式各学各的,也只试了英法一对语言。
- 用到 · EM 算法
IBM 的五个翻译模型用 EM 算法反复迭代来估计参数。
SVM把分界线画得离两边都远
SVM 分类时,找一条离两边样本都尽量远的分界线,这段距离叫间隔。1995 年这篇代表作,让它也能处理两类数据分不干净的情况。间隔、正则化和核方法合在一起,是统计学习自己的一套建模选择,算不上通往神经网络的过渡。
借用感知机
细节
Q-learning从奖励里学每个动作值多少
做了一个动作、拿到奖励,这个动作到底值多少?Q-learning 用眼前的奖励加上对后续价值的估计,来更新它的估值。1992 年的论文给出了收敛分析,针对的是表格情形:每个状态下的每个动作各记一个数。这个方法更早见于 Watkins 1989 年的博士论文。
细节
留下的问题
表格情形下的收敛条件,搬到深度网络上就不一定成立了。
- 借用 · 动态规划
论文把 Q-learning 称为增量式、异步的动态规划:不预先知道奖励和转移概率,而是从经验里逐步逼近动态规划要算的最优动作价值。它引用的是 Bellman 与 Dreyfus 1962 年的书,不是这篇 1954 年的文章。
Web用链接把分散的资料连起来
CERN 人来人往,资料又散在各处,信息常常就这么丢了。1989 年 3 月,Tim Berners-Lee 提出一个分布式超文本系统,也就是能顺着链接跳转的文档网络。文档和相关的人、项目、系统互相链接,跨团队找资料时,不用再挤进同一套目录层级。
细节
留下的问题
这还只是一份提案:没有网站上线,连万维网这个名字都还没有。
Linux补上自由系统缺的内核
1990 年代初,GNU 计划已写好大部分系统软件,唯独缺内核。1991 年,Linus Torvalds 公开了 Linux 源码,一个给 386 电脑用的免费内核,谁都能改。后来它改用 GNU 的许可,和 GNU 工具拼在一起,成了完整的自由操作系统。
细节
要分清三样东西:内核管进程、内存和设备;shell、编译器和 C 库跑在它上面;把这些配好、能直接安装的叫发行版。1991 年那版只有内核,发布说明自己写着,shell、编译器和库都得另找。
后来改许可时,还得等一起写代码的人同意,可见那时已经有别人参与。后面的故事里也常见到它:2004 年的 MapReduce 论文写道,Google 集群里的机器通常跑 Linux。
留下的问题
1991 年那版只有内核,要变得能用,得靠 GNU 的工具和许多贡献者。
来源 5
- Linus Torvalds: original Linux 0.01 release notes, 1991, kernel.org archive
- Linus Torvalds: Linux 0.12 release notes, license change, kernel.org archive
- GNU Project · Linux and the GNU System (the GNU project's account)
- Dean and Ghemawat · MapReduce, OSDI 2004, §3 execution environment
- NVIDIA GeForce 8800 technical brief, 2006-11-08, p. 14 on the CUDA SDK
Python让脚本语言能用 C 扩展
1980 年代末,Guido van Rossum 在 CWI 做分布式操作系统 Amoeba。管理它只能写 C 程序或 shell 脚本,都不顺手。他喜欢自己参与实现的 ABC 语言,可 ABC 没法扩展。他 1989 年底动手,1991 年 2 月公开。
被用于NumPy
细节
不少特点能找到出处:用缩进分组、内置高层数据类型,来自 ABC;异常来自 Modula-3,他说 Amoeba 里处理错误的经验让他格外看重异常。官方 FAQ 至今把“能用 C 或 C++ 扩展”列为它的基本特点。
后来的科学计算和机器学习正借了这种可扩展性。2019 年的 PyTorch 论文说,从 2014 年起,大多数深度学习框架都把 Python 接口当作必备。
留下的问题
它起初没打算做数值计算,快的数组运算得靠 C 写的扩展。
来源 5
- Python FAQ · Why was Python created in the first place?
- Python documentation · History of the software
- Guido van Rossum · A Brief Timeline of Python, 2009-01-20
- Harris et al. · Array programming with NumPy, arXiv v1, 2020-06-18, scientific Python ecosystem
- Paszke et al. · PyTorch, NeurIPS 2019, arXiv v1, §§2 and 5
MPI让并行程序说同一种话
并行程序靠消息在处理器之间传数据,以前常得绑在某一家机器的通信接口上。1994 年,MPI Forum 定下了一套共同的消息传递接口。它规定了点对点通信、一组进程一起参与的集体操作,以及 C 和 Fortran 怎么调用。
用到FORTRAN被用于HorovodRing-allreduce
细节
ALVINN让神经网络看路开车
当时的自动导航靠人写的图像处理程序,换了条件就容易出问题。CMU 的 Pomerleau 把摄像机和测距仪的低分辨率图像直接送进一个三层神经网络,让它输出往哪转。网络用 1200 张模拟道路图训练,装上试验车后,在校园林间小路上开过 400 米。
细节
输入很小,视频图只有 30×32 个点。输出是一排 45 个单元:中间代表直走,越往两边转得越急。有了逼真的模拟道路,反向传播半小时就训出一个还不错的跟路系统,传统方法调了好几个月才到相近水平。
1990 年的后续论文改成边看人开车边学。只看人开,网络学不会车偏了怎么拉回来,所以每张图像都在软件里平移、旋转出 14 张。网络每秒处理 25 张图,车速能开到试验车的上限,每小时 20 英里。
留下的问题
1988 年那版只在晴天的一条校园小路上实测过,遇到岔路方向会来回摆。
- 用到 · 反向传播
ALVINN 是一个三层的反向传播网络,用 1200 张模拟道路图,在 Warp 上的反向传播模拟器里训练。
来源 5
- Pomerleau · ALVINN: An Autonomous Land Vehicle in a Neural Network, NIPS 1988 proceedings record
- Same paper · PDF, architecture, training and performance, network representation, discussion
- CMU Robotics Institute · publication record (proceedings dated December 1989)
- Pomerleau · Rapidly Adapting Artificial Neural Networks for Autonomous Navigation, NIPS 1990, §§2–4
- Thrun et al. · Stanley, Journal of Field Robotics 2006, §5.2 on labels from human driving
Sojourner在火星上自己绕开障碍
1997 年 7 月 4 日,Sojourner 随 Pathfinder 在火星着陆。地面给它目标,它结合对地形和自身位置的感知,自己绕开障碍。传感器、移动和通信,全靠有限的机载算力撑着。
用到C
细节
Deep Blue用专用芯片把棋算得更深
下棋程序靠往后推几步、给局面打分来选着,可评估越细,搜得越慢。1996 年,Deep Blue 以 2:4 输给世界冠军卡斯帕罗夫。IBM 重新设计芯片,新机器用了 480 块象棋专用芯片,在关键变化上搜得更深。1997 年重赛,它以 3.5:2.5 获胜。
互补AlphaGo
细节
棋的知识大多是人放进去的。开局库约 4000 个局面,主要由特级大师 Joel Benjamin 手工整理;8000 多个评估特征的权重,也大多靠手调。
2016 年 AlphaGo 的论文拿它作对照:AlphaGo 评估的局面比它少几千倍,靠策略网络挑得更准、价值网络评得更准来弥补;Deep Blue 靠的是手写的评估函数。
留下的问题
它只会下国际象棋,评估固化在芯片里,新特征加不进去。
GPL让改过的程序也得能分享
许可太宽松时,别人可以把自由软件改一改、只发编译好的程序,再禁止分享。1989 年的 GPL 规定:谁都能复制、修改、分发,甚至收费。但分发时要附上源代码,并按同样的条款授权给所有人。
互补GNU
细节
条款写得很具体。只发编译好的程序时,要么附上完整源代码,要么附一份至少三年有效的书面承诺,只收分发成本就提供源码。所谓源代码,指的是改这个作品时首选的那种形式。
它也划了边界。和别的独立作品放在同一个存储介质上,只算“单纯聚合”,不会把对方拉进这份许可。程序写明适用“任何更新版本”的,使用者可以按新版办。
留下的问题
交源码的义务只在分发时才有,许可也不担保代码质量。
- 互补 · GNU
按 GNU 一方的说法,要让 GNU 软件不被改成专有软件,就需要相应的分发条款;GPL 是他们为大多数 GNU 软件采用的 copyleft。
来源 5
- GNU General Public License, version 1, February 1989 (gnu.org), preamble and §§0–7
- Stallman · The GNU Project, sections on the X Window System and copyleft (the GNU project's account)
- GNU General Public License, version 2, June 1991 (header)
- GNU General Public License, version 3, 29 June 2007 (header)
- Linus Torvalds: Linux 0.12 release notes, license change, kernel.org archive
arXiv预印本不用再寄复印件
1980 年代末,高能物理学者写完论文,只把复印件寄给一小批同行,非名校的年轻人常常看不到。1991 年,Los Alamos 的物理学家 Ginsparg 用一组脚本搭了个自动邮件服务器:作者把论文投给它,它存好并通知订阅者,想看全文再去取。
用到Web
细节
原本预计一年约 100 篇,头半年就收到 400 篇。旧稿本来要三个月后自动删除,可大家发现查它比在办公室翻复印件方便,删除程序一直没装,稿件从没删过。
Ginsparg 写到,欠发达国家的物理学者很快觉得自己终于“在圈里”了:新想法能及时读到,自己的论文也能被平等地读到。
留下的问题
审核只看切题和学术价值,放上去的论文没经过同行评审。
- 用到 · Web
最初是电子邮件服务器,几个月后加了 FTP;1993 年 Mosaic 浏览器出现后不久,也成了 Web 服务器。
来源 6
- Ginsparg · It was twenty years ago today..., arXiv v2, 2011-09-13
- arXiv · first submission, hep-th/9108001, 1991-08-14
- arXiv · About arXiv (founding, moderation, 2026 independence)
- arXiv · Content moderation is not peer review
- arXiv · Computer Science archive (CoRR), established 1998
- arXiv · Bahdanau et al. version history, v1 2014-09-01
Penn Treebank程序先标,人再改
统计方法要从真实文本里学语言规律,得先有标好词性和句法的语料,可纯人工标又慢又难统一。Penn Treebank 让程序先标,标注员只负责纠错和拼接。到 1992 年 11 月,词性标注已达约 489 万词次。其中约 288 万词次,还标了简化的句法树。
被用于ELMo
细节
论文做过对照实验:同样四位标注员,校对机器预标的文本,平均每千词 20 分钟;从头手标要 44 分钟。标注员之间的分歧率,校对是 4.1%,手标是 7.2%。
后来的句法分析研究常拿它当标准的训练和测试集。Collins 1997 年的分析器用树库的《华尔街日报》部分训练和测试。它的成分精确率是 88.1%,召回率 87.5%。
留下的问题
它的句法只有骨架,名词短语内部基本不分析;材料也以美式英语为主。
来源 3
- Marcus, Santorini and Marcinkiewicz · Building a Large Annotated Corpus of English: The Penn Treebank, Computational Linguistics 19(2), 1993, §§1–5 and Table 4
- Collins · Three Generative, Lexicalised Models for Statistical Parsing, ACL 1997, abstract and §4
- Zaremba, Sutskever and Vinyals · Recurrent Neural Network Regularization, arXiv v1, 2014-09-08, §4.1
GroupLens让口味相近的人互相推荐
1994 年前后,Usenet 已有 8000 多个新闻组,读者只能按内容和作者筛,或者靠版主把关。GroupLens 改看别人的评价:读者读完给帖子打 1 到 5 分。服务器先算谁和谁过去打分相近,再用口味相近的人的评分,预测你会给新帖打几分。
细节
论文举了个小例子。过去的打分里,Ken 和 Meg 完全同步,Ken 和 Lee 大体相反。一篇新帖,Meg 打了 5 分,Lee 打了 2 分。喜欢它的人和 Ken 口味一致,不喜欢的人和他相反,所以给 Ken 的预测是 4.56 分。
作者还设想过怎样比较算法:删掉评分矩阵里的一些分数,看谁猜得回来。2006 年起的 Netflix Prize 也是这样比的,藏起一部分已知评分,比谁猜得准。
留下的问题
没人评过的帖子它猜不了,新用户也得先攒一阵评分才有用。
来源 3
- Resnick, Iacovou, Suchak, Bergstrom & Riedl · GroupLens: An Open Architecture for Collaborative Filtering of Netnews, CSCW '94, pp. 175–186 · author-hosted copy, including Figure 5 and the prediction example
- Same paper · ACM DOI record
- Koren, Bell & Volinsky · Matrix Factorization Techniques for Recommender Systems, IEEE Computer 42(8), 2009 · section on recommender system strategies and Figure 1
Okapi BM25把词频和文档长度算进排序
检索系统要按相关程度给文档排序。Okapi 系统起初不管词出现几次、文档多长,作者后来发现这样会偏爱长文档。他们把词频和长度加进公式,1994 年又把两个变体合成带参数的 BM25:词出现越多分越高,但会饱和;文档越长,同样的词频得分越低。
细节
按论文常用的参数算一下。在平均长度的文档里,一个词出现 1 次得 1 分;出现 10 次,也只得 2.5 分。同样 10 次,放在两倍平均长度的文档里,只得约 2.22 分。
这个公式后来进了常用的开源搜索库:2016 年,Apache Lucene 把默认打分换成了 BM25。
留下的问题
它只数查询词出现几次、文档多长,不懂同义词,也不管词序。
来源 6
- Robertson, Walker, Jones, Hancock-Beaulieu & Gatford · Okapi at TREC-3, §§1, 3.2, 8–9 and Table 10 (PDF hosted by Microsoft Research)
- NIST · TREC proceedings index: TREC-3, Gaithersburg, November 2–4, 1994, NIST SP 500-225
- NIST TREC browser · TREC-3 proceedings, City runs citya1 and citya2
- Apache Lucene 6.0.0 changes · LUCENE-6789, default Similarity changed to BM25Similarity
- Apache archive · Lucene 6.0.0 release files, dated April 2016
- Brin & Page · The Anatomy of a Large-Scale Hypertextual Web Search Engine, 1998, on TREC and the Web
台积电只替别人造芯片
以前要做芯片,基本得自己有晶圆厂。1987 年,张忠谋创立台积电,只按客户的设计制造,自己不卖芯片,开创了纯代工模式。2022 年的 H100 就造在台积电的 4N 工艺上。
细节
留下的问题
设计和制造分开以后,最先进的工艺集中在少数代工厂手里。
LeNet-5让识别器自己学特征
手写数字的写法和位置都不固定。1998 年那篇文档识别论文用 LeNet-5 展示了卷积、权重共享和下采样怎样配合,下采样就是把特征图缩小。参数靠梯度自己学出来,不用把识别规则全部手写。
用到反向传播互补Neocognitron
细节
权重共享的意思是:同一组局部检测器在图像每个位置都用一遍,不用每个位置各学一套。后面的层再把这些局部特征组合起来。
留下的问题
它的下采样和输出层,和今天常用的 max pooling、softmax 做法不同。
- 用到 · 反向传播
论文把用反向传播训练的多层网络当作基于梯度学习的代表。
- 互补 · Neocognitron
LeNet 论文说,卷积加下采样的组合在 Neocognitron 里已经实现,只是那时还没有反向传播这样的监督训练。
Google 原型把链接也用来排序
1998 年的 Google 原型论文,把抓取、存储、索引和排序放在一个系统里讲。排序不只看关键词出现几次:PageRank 利用网页之间的链接关系,anchor text 借用别的页面对目标的描述,也就是指向它的链接上写的字。
用到Web
细节
链接数量相同,分数也未必一样:链接来自哪些页面、这些页面又有多少出链,都会影响传过来的权重。PageRank 也只是排序的一部分,替代不了文本匹配和索引。
留下的问题
链接多只说明受关注,内容对不对、和查询相不相关,是另一回事。
- 用到 · Web
原型抓取并索引整个 Web,排序时用上了网页之间的超链接。
Paxos有机器坏了也能达成一致
几台机器各存一份状态,有的会宕机、消息会丢,怎样让它们对同一个值达成一致?Lamport 把答案写成一个希腊小岛议会的故事:议员常常离开议事厅,信使也会忘事,各人手里的议事记录却始终一致。这篇论文 1990 年投稿,审稿人觉得不太重要,1998 年才发表。
被用于Borg
细节
留下的问题
原文太难读,2001 年 Lamport 又写了《Paxos Made Simple》重讲一遍。
MapReduce把分布式琐事交给系统
在集群上处理大规模数据,数据划分、调度、通信和失败重跑这些协调代码,以前常要重复写。2004 年,Dean 和 Ghemawat 发表 MapReduce,把处理过程写成映射和归约两类操作。协调的活交给运行系统,应用作者只管写这两类操作。
用到Linux被借用于Spark RDD互补Fat-tree
细节
用词频统计最好懂:map 为每个词发出一次计数,系统把相同词的记录汇到一起,reduce 再相加。代价是计算得能写成这种批处理流程。
留下的问题
它是批处理模型,装不下任意的交互式计算。
- 用到 · Linux
论文描述的集群由运行 Linux 的双处理器 x86 机器组成,配本地 IDE 硬盘和普通网络。
能耗比例性活少时电也该少用
服务器没干多少活,也可能照样耗不少电。2007 年,Barroso 和 Hölzle 提出:负载降下来时,整台服务器的功耗也应该跟着降。光提高满载时的能效,还不够。
被用于TPU v1
细节
满载时每瓦算得多,和闲下来时省不省电,是两回事。2017 年的 TPU 研究专门测了不同负载下的功耗。
留下的问题
这是一个设计目标,提出时行业里还没做到。
PUE看电有多少到了 IT 设备
机房的电不全给服务器、存储和网络设备,配电损耗和冷却也在耗电。2007 年,行业联盟 The Green Grid 发布 PUE:机房总能耗除以 IT 设备能耗。它最小是 1.0,越接近 1.0,设施本身多耗的电越少。
细节
举个算例:一座机房一年从电网取电 1,500 万千瓦时,其中 1,000 万送到了 IT 设备。它的 PUE 就是 1.5。伯克利国家实验室测过 22 座机房。它们的 PUE 在 1.3 到 3.0 之间。
数字要看口径。Google 报告整个机队 2025 年的平均 PUE 是 1.09,并说把变电站、变压器这些开销都算了进去;这是 Google 自己的测量。
留下的问题
PUE 只管设施,不管计算:服务器空转耗的电,照样算进 IT 能耗。
仓库级计算把整座机房当成一台计算机
机房不只是把一堆服务器放在一起。2009 年,Barroso 和 Hölzle 在一本专著里,把整个数据中心看成一台计算机。服务器、网络、供电和冷却,都得放在一起设计。
细节
LLVM让各种语言共用一套优化
2004 年的 LLVM 论文提出一种低层的中间表示,也就是源代码和机器指令之间的一层通用写法。它带类型,每个变量只赋值一次。围绕它搭起的编译框架,能在编译、链接、运行时分析和改写程序,优化也不必绑在某一种源语言上。
细节
2018 年的 TVM 论文里,就有一条经由 LLVM 中间表示生成代码的路径。AI 编译器能复用这类通用工具,但张量布局、算子融合和硬件调度,还是得专门处理。
留下的问题
它只是低层的中间表示,离完整的模型编译器还远,性能也得靠后面的优化。
NumPy把两派数组合成一个
1990 年代中期,Python 有了用 C 写的数组库 Numeric。为了处理哈勃望远镜的图像,有人重写出 Numarray,社区就此分成两派。2005 年的 NumPy 把两边合起来,兼顾 Numarray 的功能和 Numeric 在小数组上的速度。
细节
NumPy 数组就是一块内存,加上元素类型、形状和步长几项说明。在这之上是向量化:对整个数组做加减、求和,在 C 里可能要写几十行循环,在 Python 里常常一句就够。
到 2020 年,SciPy、Matplotlib、pandas、scikit-learn 都建在 NumPy 上,探测引力波、拍出第一张黑洞照片的软件里也有它。
留下的问题
它只管一台机器内存里、用 CPU 算的数组,GPU 和超大数据得靠别的库。
CUDA让 GPU 不必假装画图
GPU 本来是画图用的。2000 年代初,有人拿它做线性代数和物理模拟,但得把数据打包成纹理、计算写成着色程序,再靠“画”图形来触发。2006 年 11 月,NVIDIA 公布 CUDA:用扩展的 C 写 GPU 程序,大量线程分组运行,显存也能任意读写。
细节
拿向量相加 c = a + b 来比。走图形接口,要把 a、b 装进两张纹理,写着色程序,设好渲染目标,画一个铺满它的矩形,再从“画面”里读回结果。用 CUDA,每个线程按自己的编号 i 算一次 c[i] = a[i] + b[i] 就行。
后来的深度学习也走上这条路。2012 年 AlexNet 的作者自己写了 GPU 卷积代码;2014 年 NVIDIA 发表 cuDNN,接入 Caffe 后,一个标准模型快了 36%,内存也用得更少。
留下的问题
CUDA 当时只支持 NVIDIA 自家的 GPU,写好的程序搬不到别家去。
- 用到 · FFT
CUDA 1.0 自带两套数学库,其中之一是 FFT 库 CUFFT。
来源 6
- NVIDIA CUDA announcement, 2006-11-08; press-release reprint
- NVIDIA GeForce 8800 technical brief, 2006-11-08, pp. 12–14
- NVIDIA public-beta release, 2007-02-16; WebWire archive
- Buck et al. · Brook for GPUs, SIGGRAPH 2004, §§1–2 on programming through graphics APIs
- NVIDIA CUDA Programming Guide 1.0, 2007-06-23, §§1.1–1.2 and Appendix A
- cuDNN · arXiv v1, 2014-10-03, abstract
Theano把数学表达式编译到 GPU
用 Python 写数值代码方便,跑起来却慢,要用 GPU 还得手写 CUDA。2010 年,蒙特利尔大学的 Theano 让人像写 NumPy 一样写数学表达式,由它做符号求导、优化计算图,再编译成 C++ 或 CUDA 代码。论文里的多层感知机,在 GPU 上比 CPU 上的 NumPy 快 11 倍。
细节
留下的问题
要先建好整张计算图再编译,调试和写动态结构都不方便。
Roofline看清程序卡在哪
同一颗 CPU 跑不同的程序,有的卡在计算,有的卡在等数据。2008 年 Berkeley 的一份技术报告用 Roofline 模型把两头放在一起看。关键是运算强度:每从内存读写一个字节能做几次运算。性能上限取计算峰值和“带宽 × 运算强度”中较小的那个。
被借用于TPU v1被用于FlashAttention
细节
2017 年的 TPU 论文改造了这个模型,用来比较神经网络在 CPU、GPU 和 TPU 上的瓶颈,还按量化计算重新数了运算和字节。
留下的问题
它只给上限,实际能跑多快,还要看延迟、依赖和并行度。
AMD GCN一套架构兼顾图形和计算
AMD 之前的 GPU 用 VLIW 结构,要靠编译器找出能同时执行的指令。GCN 改用一个个计算单元,每个里面有标量单元和向量 SIMD 单元。这样少依赖编译器,图形和通用计算都能兼顾。2011 年 12 月公布的 HD 7970 用的就是它。
细节
留下的问题
HD 7970 在 2011 年底公布,要到 2012 年 1 月才开始零售。
22 纳米三栅晶体管把晶体管立起来
几十年来,晶体管都是平的,栅极只从上面控制电流。Intel 说,到 22 纳米再往小做越来越难。2011 年,它宣布要用三栅晶体管量产芯片:电流通道竖成一道薄鳍,栅极从两侧和顶上包住它。按 Intel 的数字,和自家 32 纳米相比,性能相同时功耗不到一半。
借用晶体管
细节
可以把平面晶体管想成平铺在地上的水渠,闸门只从上面压下来;三栅晶体管把水渠竖成一道薄墙,闸门从左、右、上三面卡住。三面一起控制,导通时能过尽量多的电流,关断时尽量接近零,开关也更快。
低电压下,Intel 报告性能最多比自家 32 纳米提高 37%。宣布当天,它演示了代号 Ivy Bridge 的 22 纳米处理器;这批芯片 2012 年 4 月作为第三代酷睿上市。
留下的问题
三栅改进的是栅极对电流的控制,芯片快不快,还取决于很多别的设计。
- 借用 · 晶体管
Intel 称 Tri-Gate 重新发明了晶体管:用立起来的薄鳍取代平面栅。
BLEU机器给翻译自动打分
评价机器翻译要请人来看,又贵又慢,一轮可能要好几个月。2002 年,IBM 的 Papineni 等人提出 BLEU:数机器译文和几份人工参考译文有多少相同的词组,再惩罚过短的译文。它和人的判断高度相关,每多跑一次几乎不花成本。Transformer 报告成绩,用的就是 BLEU。
细节
留下的问题
它要靠参考译文来比,参考译文越少,合理的不同译法越容易被扣分。
Common Crawl人人可以下载的网页存档
很多研究者没有能力自己抓取网页。2007 年成立的非营利组织 Common Crawl,从 2008 年起定期抓取网页,把数据免费公开,累计超过 10 PB。GPT-3 训练时 60% 的数据来自过滤后的 Common Crawl,LAION-5B 的图文对也从这里提取。
细节
留下的问题
抓来的网页什么都有,要经过大量过滤和去重才能拿来训练。
ImageNet按概念层次收集图片
要做一个大规模图像数据集,难处不只在多下载些文件。ImageNet 按 WordNet 的概念层次收集图片,候选图片再交给人工核验。规模背后,是类别设计、检索、标注和质量检查一整套功夫。
用到WordNet被用于AlexNetFaster R-CNN
细节
留下的问题
后来 ILSVRC 比赛用的只是其中的子集,和完整的 ImageNet 是两回事。
- 用到 · WordNet
ImageNet 沿用 WordNet 的层级结构,目标是给约 8 万个名词同义词集配上图片。
RDMAP给远程读写内存定规矩
机器之间通信,数据要复制,CPU 也得陪着忙。2007 年 10 月的 RFC 5040 定义了 RDMAP:一台机器可以直接读写对方公布出来的缓冲区,内存保护照样保留。它建在直接数据放置协议 DDP 之上,为的是少复制、少占 CPU。
用到TCP/IP
细节
2016 年的 TensorFlow 论文说,任务之间除了 TCP 上的 gRPC,还可以用 RoCE 通信,可见 RDMA 确实进了机器学习系统。但 RoCE 走的是另一条协议路线,不能据此说 TensorFlow 用了 RDMAP。
留下的问题
复制少了,通信、同步和管理缓冲区的成本还在。
- 用到 · TCP/IP
RDMAP 跑在 TCP 之上的 DDP/MPA 层,省掉 TCP/IP 通常要做的拷贝。
Fat-tree用普通交换机搭满速网络
2008 年前后,机房网络多是交换机树,越往上越贵,带宽卡在树根。为了省钱,上层带宽常不够分,最坏时千兆网卡只能跑 125 Mbps。Al-Fares 等人改用许多同样的普通交换机连成 fat-tree,48 口交换机就能让 27,648 台主机全速互通。
细节
所有交换机都一样,所以都能用便宜的通用产品。论文估算,这套网络的交换设备约 864 万美元;用高端交换机给 2 万台主机做到满带宽,约需 3,700 万美元。
难处在于用上这么多条路。普通路由只挑一条,流量会挤到少数核心交换机上。论文让交换机按目的地址分散流量,同一台主机的包始终走同一条路。16 台主机的模拟里,随机通信能达到理想带宽的 75%,超额订阅 3.6:1 的传统树只有 53.4%。
留下的问题
实验只模拟了 16 台主机,大规模的成本是估算的,还没算上多得多的线缆。
- 互补 · MapReduce
论文以 MapReduce 为例说明集群的瓶颈常在节点间带宽:map 阶段的输出要先大量重新分发,reduce 才能开始。fat-tree 针对的正是这类跨机器流量。
HDFS把大文件分散到多台机器上
大文件分散存到很多机器上,就得应付机器故障。2010 年的 HDFS 论文给出了分工:NameNode 管目录和数据块的位置,DataNode 保存数据块,每块存多份副本。存储和计算放在同一批服务器上,任务就能在数据旁边运行。
被用于Spark RDD
细节
留下的问题
它只允许一个写者、多个读者,为大文件吞吐而设计,给不了数据库那样的事务。
SIFT换个角度也认得出
同一个东西拍两次,远近、角度一变,像素就全不一样。当时常用的 Harris 角点,换个远近就对不上。SIFT 在不同尺度上找稳定的关键点,按周围梯度的方向把它摆正,再把附近的梯度统计成一串数字。一张 500×500 的图,通常能取出约 2000 个这样的特征。
互补AlexNet
细节
这串数字有 128 个:关键点周围取 16×16 的采样,分成 4×4 个小格,每格统计 8 个方向的梯度。比对时有条实用的规矩:最近的匹配距离超过第二近的 0.8 倍,就扔掉。在 4 万个关键点的数据库上,这条规矩去掉了 90% 的错配。
到 2012 年的 ImageNet 比赛,SIFT 还在前列:用 SIFT 加 Fisher 向量的方法拿了第二名,top-5 错误率 26.2%,AlexNet 是 15.3%。
留下的问题
SIFT 只看灰度,不看颜色;它认的是登记过的具体物体,分不出“这是一只猫”这样的类别。
来源 4
- Lowe · Distinctive Image Features from Scale-Invariant Keypoints, author's copy dated 2004-01-05, §§1–2, 6–7, 9 and Figure 11
- Same paper · IJCV 60(2), November 2004, DOI record
- AlexNet · NeurIPS 2012 paper, Tables 1–2 with SIFT + FV entries
- OpenCV 4.x · features2d.hpp, SIFT class documentation citing Lowe 2004
差分隐私按一个人的影响加噪声
统计机构想公布汇总数字,又不想暴露某个人。只公布汇总也不保险:允许无限次提问、回答只带一点噪声,攻击者几乎能还原整个数据库。2006 年,Dwork 等人把隐私写成一个条件:换掉任何一行,回答的分布只能变一点点。按一行数据最多能改变结果多少来加噪声,就能做到。
互补联邦学习
细节
最简单的例子是计数:每人一行,取值 0 或 1,问一共有几个 1。换掉一个人,答案最多变 1,所以敏感度是 1;在真实答案上加一个尺度为 1/ε 的拉普拉斯噪声就够了。ε 越小,单个人越难被看出来,要加的噪声也越大。
论文把这个定义叫 ε-indistinguishability,后来通行的名字是差分隐私。美国人口普查局说,2020 年普查改用了基于差分隐私的保护框架。
留下的问题
它管的是单个人的影响,挡不住统计结果揭示群体规律;问得越多,噪声也得越大。
Xen一台服务器分给几个系统
很多人共用一台服务器,装在同一个系统里会互相拖累。虚拟机隔得更干净,可 x86 有些特权指令权限不够时会悄悄失败,VMware 只好边跑边改写机器码。2003 年的 Xen 换了条路:把客户系统稍改一改,遇到特权操作就请 Xen 代办,应用一行不用改。
用到Linux被用于Amazon EC2
细节
代价是得改操作系统。论文统计,移植 Linux 改动和新增了约 3000 行代码,占 x86 相关代码的 1.36%。管理功能放在叫 Domain0 的特权域里,由它创建和销毁其他虚拟机。设计目标是一台服务器跑约 100 个虚拟机。
后来的云服务用上了它。2006 年亚马逊发布 EC2 测试版时,发布博客写明 EC2 建在 Xen 上。
留下的问题
客户系统得改源码才能跑;论文写成时,Windows XP 只能跑些简单程序。
- 用到 · Linux
论文把 Linux 2.4 改成能跑在 Xen 上的 XenoLinux,负责管理的 Domain0 也运行在它上面。
Amazon EC2服务器按小时租
以前要上线网站,得先买服务器或签按月按年的租约,还要提前猜流量。猜多了机器闲着,猜少了用户看到“网站太忙”。2006 年 8 月,亚马逊推出 EC2 测试版:调一下接口,几分钟就开出一台虚拟服务器,不用了就关。当时只有一种规格,每小时 10 美分。
用到Xen
细节
Barr 的发布博客举过一个例子:一个只在早 7 点到晚 7 点用的内部库存系统,晚上把实例关掉,服务器费用就能省下一半左右。
系统盘打包成 AMI 镜像存在 S3 里,调用接口就能用它启动实例;底层虚拟化用的是 Xen。测试期每个账户最多同时开 20 台。
留下的问题
刚推出时,实例一关本地数据就没了,负载均衡和自动扩缩也还没有。
- 用到 · Xen
发布博客写明 EC2 用 Xen 虚拟机监控程序搭建;Xen 提供隔离,按小时租用是 EC2 自己的服务设计。
Stanley赢下沙漠无人车赛
2004 年第一届 DARPA 大挑战,没一辆车跑完全程的 5%。2005 年的第二届,同样不准人工干预。激光只能可靠地看清前方约 22 米,斯坦福的 Stanley 让摄像机学会激光认出的路面颜色,往更远处找路。它用 6 小时 53 分 58 秒最先跑完。
细节
定位的小误差会被放大。激光打在前方最远约 30 米处,车身俯仰或侧倾估计差不到 0.5 度,平地上就会冒出“幻影障碍”。团队让人只在没障碍的路上开,用这些粗糙标签自动调参数,可行驶区域被误判成障碍的比例从 12.6% 降到 0.002%。
视觉也起了作用。论文估计,如果没有摄像机、全程限速每小时 25 英里,用时约 7 小时 5 分,可能落到 CMU 的 Sandstorm 之后。
留下的问题
比赛环境是静态的;作者说,Stanley 不能在车流里开,也分不清高草和石头。
Netflix Prize用矩阵分解预测评分
2006 年,Netflix 悬赏 100 万美元,求把自家算法的评分误差降低 10%。经典做法是找口味相近的用户来推。Koren 等人总结比赛经验,主张矩阵分解:给每个用户、每部电影各学一个向量,内积就是预测评分。大奖在 2009 年 9 月颁出。
互补GroupLens被借用于YouTube 深度推荐
细节
文章里有个小例子:所有电影平均 3.7 星,《泰坦尼克号》比一般电影高 0.5 星,Joe 打分偏严,平均低 0.3 星。只看偏差,Joe 给它的估计就是 3.9 星,剩下的才交给两个向量的内积去解释。
大奖颁给了 BellKor's Pragmatic Chaos 队,获胜提交的误差比 Netflix 好 10.06%。The Ensemble 队的成绩一模一样,只是晚交了约 20 分钟。
留下的问题
获胜提交混合了 100 多组预测器;评分太少的新用户、新电影,照样难推。
- 互补 · GroupLens
文章把矩阵分解当作邻居法之外的另一条路;GroupLens 用的正是找口味相近用户的邻居法。
来源 4
- Koren, Bell & Volinsky · Matrix Factorization Techniques for Recommender Systems, IEEE Computer 42(8), August 2009 · DOI record
- Same article · IEEE Xplore record
- Netflix Prize · official home page, archived January 2010: grand prize awarded September 21, 2009
- Netflix Prize · official leaderboard, archived January 2011
神经语言模型给每个词学一个向量
n-gram 模型只认得见过的词组,换个说法就不会了。2003 年,Bengio 等人用神经网络同时学两样东西:每个词的向量,以及根据前几个词的向量预测下一个词的概率。意思相近的词向量相近,没见过的句子也能估计。word2vec 就从这个模型出发。
被借用于word2vec
细节
留下的问题
要对整个词表算概率,词表一大,训练就很慢。
UCT用老虎机的办法挑分支
状态太多时,没法把搜索树全展开,只能随机模拟一部分。模拟时该多走哪条分支?2006 年,匈牙利科学院的 Kocsis 和 Szepesvári 把多臂老虎机的 UCB 规则用到树的每个节点:常赢的分支多走,试得少的也给机会。AlphaGo 的蒙特卡洛树搜索引用了这项工作。
被用于AlphaGo
细节
留下的问题
模拟足够多时,它保证选到最好的动作;模拟少时就没有这个保证。
AlexNet让网络自己学看图
当时,大规模图像识别中常见的做法是先设计特征,再交给分类器;能学习特征的卷积网络也早已存在。AlexNet 把后者做大:八层、六千万参数,在两块 GPU 上训了五六天。团队在 ILSVRC 2012 中提交的集成系统,top-5 错误率是 15.3%,第二名是 26.2%。这次结果让更多人看到,数据、算力和深层网络放在一起能做到什么。
用到ImageNetCUDA互补SIFT多列 GPU CNN
细节
能训起来靠几处改动:激活函数换成 ReLU,训练快了好几倍;用 dropout 和随机裁剪对抗过拟合;一块显卡放不下,就把网络拆到两块卡上。
留下的问题
它只会从一千个类别里挑一个答案,图里有什么、在哪、彼此什么关系,还管不了。
- 用到 · ImageNet
训练与评估使用 ImageNet 的 ILSVRC 子集;数据集与竞赛设置都是结果的一部分。
- 用到 · CUDA
论文提供 GPU 卷积实现,并链接到 cuda-convnet。训练还受当时两块 GPU 的显存与通信限制。
- 互补 · SIFT
AlexNet 的结果表拿 SIFT 加 Fisher Vector 的流水线作对照,那是此前最好的方法。
- 互补 · 多列 GPU CNN
AlexNet 说它的双 GPU 结构有点像 Cireşan 等人的“分列”CNN,引的是这组人 2011 年的 GPU CNN 论文。
多列 GPU CNN在 AlexNet 之前刷新纪录
传统视觉方法认手写数字和交通标志,比不过人。2012 年初,瑞士 IDSIA 的 Cireşan、Meier 和 Schmidhuber 用 GPU 训练好几列深度 CNN,每列看经过不同预处理的输入,最后把预测平均。MNIST 手写数字上,它第一次接近人的水平;交通标志识别上,错误率只有人的一半。
互补AlexNet
细节
留下的问题
它的成绩都在小图数据集上,ImageNet 这样的大规模图片还没有碰。
ResNet让很深的网络也训得动
网络越深,表达能力越强,可层数一多,连训练误差都可能变大。ResNet 加了残差连接:一组层学一个 F(x),输出时再把原来的输入 x 加回去。如果某几层用不着改什么,只要把 F(x) 学到接近零,输入就差不多原样传下去。优化也就更容易了。
用到Faster R-CNN被借用于GNMTWaveNet
细节
留下的问题
能训得动之后,再往深加,也未必更好。
- 用到 · Faster R-CNN
ResNet 的检测实验以 Faster R-CNN 为框架,只把 VGG-16 换成 ResNet-101,COCO 标准指标提高 6.0 个点。
DQN看游戏画面学会决策
强化学习要让智能体在试错中学会选动作。DQN 用神经网络估计每个动作的价值,直接从 Atari 的游戏画面学起。它还把过去的交互存下来,训练时反复拿出来用,这叫经验回放。
细节
word2vec从上下文里学词向量
想从大量文本里学词向量,训练就得高效。word2vec 把预测任务做得很简单:CBOW 用周围的词猜中间的词,Skip-gram 反过来,用当前词猜附近的词。一个词每在新的上下文里出现一次,训练就把它的向量调一调。
借用神经语言模型被借用于YouTube 深度推荐
细节
Seq2Seq一个序列换成另一个序列
有些任务的输入和输出都是序列,长度还各不相同,机器翻译就是一例。Seq2Seq 分两步走:先把输入编码,再从编码生成输出。这样,长短不一的序列都能用同一套流程来学。
被借用于翻译里的 attention
细节
留下的问题
整句话被压成一个固定长度的向量;后来的 attention,让解码时能回头看输入的每个词。
翻译里的 attention不再把整句压成一个向量
2014 年的神经翻译,多把原句压成一个定长向量,再生成译文。句子一长就装不下,质量迅速下降。Bahdanau 等人给原句每个词都留一个向量,每译一个词,先给各位置打分,再加权求和。英法翻译上它得到 26.75 BLEU,同样设置的老办法只有 17.82。
借用Seq2Seq被用于GNMT被借用于Transformer
细节
论文的对齐图很直观。英文 European Economic Area 译成法文 zone économique européenne,词序是反的:模型生成 zone 时直接跳过前两个词去看 Area,再一个词一个词往回看。
句子越长,老办法掉得越厉害,新模型到 50 词以上也没下滑。后来的系统沿用了这个想法:2017 年的 Transformer 把它叫作加性 attention,自己改用缩放点积,还去掉了循环网络。
留下的问题
每译一个词都要把原句每个词算一遍;词表只有 3 万个常用词,生僻词留待解决。
- 借用 · Seq2Seq
在 Cho 等人和 Sutskever 等人的 RNN 编码器—解码器上扩展:编码器为每个词保留向量,解码器每步重新计算权重,而不是只靠一个定长向量。
来源 4
- Bahdanau, Cho & Bengio · Neural Machine Translation by Jointly Learning to Align and Translate, arXiv v1, 2014-09-01, §§1–3, 5–7, Table 1, Figs. 2–3
- arXiv · version history and ICLR 2015 note
- GNMT · arXiv v1, 2016-09-26, §3 on the attention module
- Attention Is All You Need · arXiv v1, 2017-06-12, §§1, 3.2.1 on additive attention
Spark RDD把中间结果留在内存里
在 MapReduce 上,两个作业要复用数据,只能先写进分布式文件系统再读出来。逻辑回归这类反复迭代的算法,就被拖慢了。RDD 把数据留在内存里,只记下每份数据是怎么算出来的,丢了就照着重算。第一轮之后,逻辑回归每轮比 Hadoop 快 25.3 倍。
细节
论文的日志排查例子只有三行:从 HDFS 读入日志,筛出以 ERROR 开头的行,把结果留在内存里。之后再查含 MySQL 的错误,就直接在内存里算。存着部分错误行的机器坏了,只把对应的那段原始日志重筛一遍。
在一次 75 台机器的 k-means 实验里,作者在第 6 轮开始时杀掉一台机器。那一轮从约 58 秒变成 80 秒;丢失的部分重算完,下一轮又回到 58 秒。
留下的问题
它适合对整批数据做同一种操作,不适合细粒度地改共享状态,比如 Web 应用的存储。
参数服务器让上千台机器共用一份模型
每台机器只管部分数据,却要不停读写共享参数:网络吃紧,一台慢了全都得等。2014 年 Li 等人的参数服务器把机器分成两种:服务器分片存参数,工作节点算梯度,再和服务器交换。同步多严由算法设计者定,在 1000 台机器上,工作节点空等时间从一半降到 1.7%。
被借用于TensorFlow
细节
以梯度下降为例:工作节点算出梯度 push 给服务器,服务器加总后更新权重,工作节点再 pull 回新权重。每个工作节点只拉自己数据里出现过的参数,100 个工作节点时,每个只要总参数的 7.8%。
同步程度用最大延迟 τ 来调:τ=0 每轮都等齐,τ 越大等得越少。作者在稀疏逻辑回归上发现 τ=8 最划算。同样的算法,他们的系统只用 300 行代码,对照的专用系统都超过一万行。
留下的问题
放宽同步不白来:等得少了,收敛要跑的轮数就多了。
Borg把闲着的资源让给批处理
在线服务要为少见的流量高峰预留资源,平时大多用不上。Google 的 Borg 让在线服务和批处理混在同一批机器上跑,估计每个任务实际要用多少,把多出来的拿去跑批处理。论文说,要是两类作业分开,中位数大小的集群单元得多用 20–30% 的机器。
用到LinuxPaxos被借用于Kubernetes 1.0
细节
具体做法是:作业先报一个资源上限,Borg 每隔几秒按实际用量估一个“预留”,上限和预留之间的差额,拿去跑能接受资源差一点的批处理。中位数大小的单元里,约 20% 的工作负载跑在回收来的资源上。
Borg 的任务大多跑在 Linux 容器里,没用虚拟机。论文最后讲了这些经验怎样用到 Kubernetes 上,比如 Borg 的 alloc 对应 Kubernetes 的 pod。
留下的问题
这些数字来自 Google 自己的集群和工作负载,换一家公司未必一样。
Kubernetes 1.0把容器交给集群来管
容器应用跑在很多台主机上,运维工作散在各处,得一台台地管。2015 年 7 月,Kubernetes 发布 1.0 版,给跨主机的容器应用提供了一套共同的管理系统。调度、扩缩容、服务发现和健康检查,都集中到了集群这一层。
借用Borg
细节
留下的问题
编排只是容器工具链的一环,底下的计算资源是另一回事。
- 借用 · Borg
Joe Beda 回忆,Kubernetes 建立在 Google 用 Borg 验证了十年的想法上,但代码是另外写的。
HBM把堆叠内存放进 GPU 封装
2015 年,AMD 的 Fury X 用上 HBM,把堆叠的 DRAM 带进了 GPU 产品。这些存储层之间用穿透硅片的通孔相连,再通过一块中介层接到处理器上。带宽靠的是很宽的接口和很短的连线,不只是把引脚速率往上提。
细节
留下的问题
HBM 本身更早就有,2015 年只是它进入 GPU 产品的一年。
深度声学模型用深度网络换掉 GMM
多年来,语音识别靠 GMM-HMM:HMM 管语音在时间上的伸缩,GMM 判断每一帧像哪个状态。GMM 调得很成熟,新方法很难超过。这篇综述汇总了四个团队的结果:把 GMM 换成深度网络,同样的训练数据下,电话对话的词错误率从 27.4% 降到 18.5%。
用到HMM
细节
作者回头看也说得直白:大部分收益来自让网络利用相邻的几帧,以及直接预测上下文相关的状态。逐层预训练能减少过拟合,但训练时间上的好处,仔细设置初始权重的尺度也能做到。
代价在计算上。深度网络每一帧几乎要用上全部参数,识别 1 秒语音原本要 1.6 秒。把权重量化、改用 CPU 的定点指令后,降到 210 毫秒;用 GPU 是 66 毫秒。
留下的问题
深度网络只换掉了 GMM,HMM、语言模型和解码器都还在,离端到端还远。
- 用到 · HMM
深度网络替换的是 GMM:它输出 HMM 状态的后验概率,换算成似然后,仍交给 HMM 做对齐和解码。
来源 3
- Hinton et al. · Deep Neural Networks for Acoustic Modeling in Speech Recognition, IEEE Signal Processing Magazine 29(6), November 2012, DOI record
- Same article · author-hosted magazine proof, Switchboard, Voice Input and summary tables
- Same article · Google-archived draft dated 2012-04-27, §§I, II.E, IV and VI
Faster R-CNN候选框也交给网络
物体检测要说出是什么,还要框出在哪。主流做法先用 Selective Search 提出约两千个候选框,再由卷积网络逐个判断。网络已接近实时,提框反倒成了瓶颈,每张图约 2 秒。Faster R-CNN 用网络提框,和检测共用特征,每张图只多花约 10 毫秒。
细节
提框网络的关键是锚框:在特征图的每个位置预先放 9 个参考框,3 种大小乘 3 种长宽比。网络对每个锚框回答两件事:里面有没有物体,框该怎么挪、怎么缩放。
论文的计时表里,原来每张图共 1830 毫秒,提框占 1510 毫秒;换成提框网络后共 196 毫秒。准确率也没掉:在 PASCAL VOC 2007 测试集上,mAP 是 73.2%,Selective Search 方案是 70.0%。
留下的问题
它仍是先提框、再分类的两阶段做法,框也只能是矩形,描不出物体轮廓。
- 用到 · ImageNet
RPN 和检测网络共享的卷积层,用在 ImageNet 分类上预训练的模型初始化。
U-Net给每个像素标上类别
生物医学图像要标出每个像素属于什么,可标好的训练图往往很少。2015 年,Freiburg 大学的 Ronneberger 等人提出 U-Net:一路缩小抓上下文,一路放大还原位置,两边对应的层直接接上,再配合大量数据增强。它在 2015 年 ISBI 细胞追踪比赛的透射光类别里大比分胜出。
被用于Diffusion
细节
留下的问题
挨在一起的同类细胞容易连成一片,要靠给边界加权的损失才能分开。
TensorFlow把计算和状态画进同一张图
Google 原来用 DistBelief 训练神经网络:试新的层得换语言,换优化方法得改参数服务器,循环网络和强化学习也塞不进固定流程。TensorFlow 把运算、参数和参数更新都画进一张数据流图,由运行时分到多台机器上。2015 年 11 月,它开源了。
细节
论文用一个手写数字分类程序说明写法:先搭图,声明输入、权重、矩阵乘法、ReLU、损失和优化器,这时什么都还没算;再开一个会话,一批批喂数据,执行训练节点。整个程序写完才执行,运行时就能统筹安排。
参数服务器不再单独存在,一部分任务担任这个角色,但能运行任意计算图。2019 年的 PyTorch 论文把 TensorFlow 归为先建静态图的框架,用来对照自己边写边算的设计。
留下的问题
图得先建好再运行,结构在运行中才展开的算法,比如深度强化学习,用起来束手束脚。
来源 4
Adam每个参数各自调步长
普通 SGD 的参数共用一个学习率,但不同参数的梯度尺度和噪声可能差很多。Adam 分别记录梯度与梯度平方的指数滑动平均,做偏差修正后,用前者除以后者的平方根加上 ε,调整每个参数的更新尺度。它减轻了对梯度尺度的敏感性,但更新量并不总被学习率硬性限制。
被用于Transformer
细节
设想两个参数,一个的梯度总在 1000 上下,另一个只有 0.001。学习率 0.001 的 SGD,前者每步挪 1,后者只挪百万分之一。用 Adam,梯度方向稳定时,两个参数每步都挪大约一个学习率。
后来的模型直接拿来用:2017 年的 Transformer 和 2018 年的 BERT 预训练,用的都是 Adam。
留下的问题
收敛证明只管凸问题,管不到神经网络;后来还有人找到让 Adam 收敛不到最优的凸问题。
来源 5
- Adam · arXiv v1, 2014-12-22, Algorithm 1, §§2–4, 6
- Adam · arXiv v9, 2017-01-30, ICLR 2015 conference version, Algorithm 1 defaults
- Attention Is All You Need · arXiv v1, 2017-06-12, §5.3
- BERT · arXiv v1, 2018-10-11, §3.4
- Reddi, Kale and Kumar · On the Convergence of Adam and Beyond, ICLR 2018 (arXiv posting 2019), abstract and §1
GAN让生成器和判别器对抗
怎么让神经网络学会生成像真的一样的样本?2014 年,Goodfellow 等人让两个网络对抗:生成器造样本,判别器判断样本来自真实数据还是生成器,生成器的目标是让判别器出错。整个系统用反向传播就能训练。后来的扩散模型拿 GAN 作对照来比生成质量。
细节
留下的问题
两个网络一起练不稳定,有时生成器只会造几种样本。
图卷积网络 GCN从邻居那里学
要给图里的节点分类,有时只有很少几个节点带标签。GCN 把节点自己的特征和图的连接关系放在一起,让每个节点从邻居那里学信息。它给图卷积找了一条简洁的传播规则,可以直接写成代码。
被借用于GraphSAGE
细节
留下的问题
图神经网络的研究早就有了,GCN 只是其中一项代表工作。
GraphSAGE给没见过的节点算表示
如果给图上每个节点单独存一份 embedding,也就是一串代表它的数字,没见过的新节点就没有现成的表示。GraphSAGE 改学一个函数:采样一些邻居,把它们的特征聚合起来。新节点来了,用同一个函数也能算出表示。
细节
留下的问题
能不能泛化,还要看节点特征、邻居信息和数据分布,新图不一定都能直接套用。
- 借用 · 图卷积网络 GCN
GraphSAGE 的卷积式聚合,是 Kipf 和 Welling 的 GCN 的归纳版。
GAT给每个邻居不同的分量
图上一个节点要从邻居那里汇总信息,可邻居不必同样重要。GAT 先用 attention 学出每个邻居该占多大分量,再按这个权重把信息合到一起。当时做图表示学习的还有 GCN 和 GraphSAGE,GAT 是并列的另一种做法。
细节
Transformer翻译只靠注意力
当时常见的循环翻译模型要沿序列逐步计算,也有卷积模型在尝试并行化。Transformer 不用循环和卷积,改用 attention 交换位置信息,训练时可以并行处理多个位置。论文在英德翻译上比此前最好成绩高出 2 BLEU 以上;英法实验在八块 GPU 上训练了三天半。后来的 BERT 和 GPT 分别发展了 encoder-only 和 decoder-only 路线。
借用翻译里的 attention用到GNMTAdamBLEU互补图灵机HopperGraphCast被借用于ViTGAT被用于缩放定律WhisperMegatron-LMHugging Face Transformers
细节
拿 50 个 token 来算:循环网络要串行走 50 步,双向 self-attention 一层就能连接任意两个位置。decoder 的 causal mask 则会挡住后面的 token,不能偷看。标准 dense attention 的分数矩阵是 50×50;固定隐藏维度时,这部分计算随序列长度按平方增长。训练能并行,不代表自回归生成也能一次吐出所有 token。
留下的问题
生成时还是得一个词一个词往外吐;长文本的平方开销也留给了后人。
- 借用 · 翻译里的 attention
论文把 Bahdanau 等人的加性 attention 列为两种常用 attention 之一;Transformer 改用缩放点积,并且不再搭配循环网络。
- 用到 · GNMT
英法实验沿用 GNMT 的 32000 词片词表;GNMT 加强化学习的结果也是表 2 里的对照基线。
- 用到 · Adam
训练用 Adam(β1 = 0.9,β2 = 0.98,ε = 10⁻⁹),学习率先在 4000 步内线性升高,再按步数的平方根倒数下降。
- 互补 · 图灵机
后来的理论工作证明,带位置编码和硬注意力的 Transformer 能模拟任意图灵机。
- 用到 · BLEU
Transformer 用 BLEU 报告成绩:英德翻译 28.4,英法翻译 41.0。
ELMo让词义跟着句子变
word2vec 这类词向量给每个词一个固定向量。play 在体育报道和戏剧评论里意思不同,向量却一样。ELMo 先在约 3000 万个句子上训练语言模型,从左往右、从右往左各读一遍。用的时候,词的表示由整句话算出来。接进现有模型后,六个任务都刷新了最好成绩。
细节
论文拿 play 对比过。用 GloVe 查,离它最近的是 playing、game、football,几乎全是体育。用 ELMo,棒球报道里的 play 找到的句子在夸球员打得好;百老汇 play 找到的句子,讲演员在一部成功的戏里演出。
各层学到的东西也不同。做词义消歧,第二层比第一层好;做词性标注,第一层更好。所以 ELMo 让每个任务自己学怎么混合各层。接进 SQuAD 问答的基线模型,F1 从 81.1 提到 85.8。
留下的问题
每个任务仍要自己设计模型;所谓双向,也只是两个单向模型拼在一起。
- 用到 · LSTM
ELMo 的语言模型是两层双向 LSTM,词的表示取自这些层的加权组合。
- 用到 · Penn Treebank
ELMo 用 Penn Treebank 里《华尔街日报》部分的词性标注来检验表示。
BERT一次预训练,适配多种任务
BERT 先做掩码语言建模:把句子里的一些词遮住,让模型根据上下文去猜。这样学到的表示,再拿去适配各种下游任务。预训练出来的模型,不再只为原来的一个任务服务。
细节
留下的问题
它同时看左右两边,擅长理解;要一个词一个词往下写,还得靠只看前文的模型。
- 用到 · GLUE
论文用 GLUE 报告微调结果,最终版摘要给出的总分是 80.5%(2018 年初版为 80.4%)。
- 用到 · SQuAD
论文在 SQuAD 上评估问答,摘要报告 SQuAD v1.1 测试 F1 为 93.2,SQuAD v2.0 为 83.1。
- 用到 · Okapi BM25
Nogueira 和 Cho 让 BERT 对 BM25 检索出的前 1000 段重新排序,超过了 BM25 和此前的神经排序。
AlphaGo用神经网络给搜索减负
围棋每步约有 250 种走法,一盘约 150 步,没法穷举。之前最强的程序靠大量随机模拟估胜率,停在业余强手的水平。AlphaGo 加了两个神经网络:策略网络挑出值得考虑的几步,价值网络直接估计局面胜率。2016 年 3 月,它在首尔以 4:1 赢了李世石。
细节
训练分三步。先用 3000 万个局面训练策略网络,模仿人类高手;再让它和自己的旧版本对弈,用强化学习继续改进;最后用自我对弈的局面训练价值网络。价值网络算一次,准确度接近用策略网络一路模拟到终局,计算量却少 15,000 倍。
后来的 AlphaGo Zero 去掉了人类棋谱,只靠规则和自我对弈学习。训练三天后,它以 100:0 赢了战胜李世石的那个版本。
留下的问题
围棋规则全知、局面全可见、能无限模拟,现实里的大多数决策没有这样的模拟器。
来源 4
- Silver et al. · Mastering the game of Go with deep neural networks and tree search, Nature, 2016
- Same paper · DeepMind-hosted PDF, introduction, value-network section and Methods
- DeepMind · AlphaGo overview, Lee Sedol match in Seoul, March 2016
- DeepMind · AlphaGo Zero: Starting from scratch, 2017-10-18
PPO压住策略的大幅更新
在强化学习里,策略决定模型每一步怎么行动。PPO 用裁剪等设计,压住策略一次大幅更新的动力。它同时照顾两头:实现起来不难,训练效率也顾到了。后来,用人类反馈训练模型时也用上了它。
被用于InstructGPT被借用于GRPO互补SAC
细节
留下的问题
裁剪只是收着更新的劲,新旧策略之间的实际差距(KL)还是可能跑大。
SAC用旧经验学连续控制
机器人和模拟控制都很在乎样本效率,也就是用尽量少的尝试学会。SAC 学的是取值连续的动作,靠两样东西:一是最大熵目标,让策略保留一些随机性;二是离策略的数据重用,以前收集的经验能反复拿来学。
互补PPO
细节
Volta给矩阵乘法配专用单元
Volta V100 在通用计算单元旁边,加了一组叫 Tensor Core 的硬件,只做矩阵乘加。输入用 FP16,累加用 FP32,两种精度混着用。深度学习里的密集矩阵运算,有了一条专门的硬件通道。
借用NVLink被用于Megatron-LM被借用于Ampere A100
细节
合适的神经网络运算能用上它,可数据照样要搬进搬出,其他算子也照样要跑。所以拿矩阵峰值,推算不出整个程序有多快。
留下的问题
这一代 Tensor Core 不做 FP64 矩阵乘法,双精度它帮不上忙。
- 借用 · NVLink
V100 白皮书写明 NVLink 于 2016 年随 P100 推出;V100 的第二代把每对线速从 20 提到 25 Gb/s,链路从 4 条增到 6 条。
TPU v1为推理专门造一颗芯片
2013 年,Google 估算:如果每人每天用三分钟语音搜索,数据中心就得翻倍,用普通 CPU 太贵。团队用 15 个月做出一颗专做推理的芯片,2015 年起投入使用。在 Google 六个生产应用上,它平均比同期 CPU 和 GPU 快 15–30 倍。
细节
关键约束是响应时间:一个应用要求 99% 的请求在 7 毫秒内返回。在这条线内,TPU 能跑到自身最高吞吐的 80%。CPU 和 K80 只能开小批量,分别只有 42% 和 37%。
瓶颈常在内存,不在算力。六个应用里,两个 MLP 和两个 LSTM 受内存带宽限制,只有两个 CNN 受算力限制。作者估计,换上 K80 那样的 GDDR5 显存,TPU 还能再快两到三倍。
留下的问题
比的是 2015 年的同代芯片,倍数不能推到后来;训练也还得用现成的 GPU。
来源 3
- Jouppi et al. · In-Datacenter Performance Analysis of a Tensor Processing Unit, arXiv v1, 2017-04-16, §§1–8 and 10
- Jouppi et al. · Ten Lessons From Three Generations Shaped Google's TPUv4i, ISCA 2021, Table 1
- Jouppi et al. · Google's Training Supercomputers from TPU v2 to Ironwood, arXiv v1, 2026-06-14, introduction
Datasheets给数据集配说明书
如果一份数据只有文件名和一行下载说明,用的人只能猜它能用在哪、不能用在哪。Datasheets 主张把这些写清楚:数据为什么收集、怎么标注、适合哪些用途、之后由谁维护。
细节
留下的问题
说明书让人有据可查,却证明不了数据就公平、准确、合用。
- 用到 · Gender Shades
Datasheets 开头举 Gender Shades 为例:商用性别分类系统在深肤色女性上错误率更高。
联邦学习数据留在手机上,只传更新
手机上的数据能改进输入法和语音识别,可里面有你打过的字、拍过的照片,很私密,量也大,不适合全部上传。2016 年,Google 的 McMahan 等人提出联邦学习:数据留在设备上,每轮挑一批设备各自训练,只传回模型更新,服务器再加权平均。
互补差分隐私
细节
论文拿《莎士比亚全集》做实验:每个说话的角色算一个客户端,共 1146 个,台词多少、内容都不一样。让客户端在本地多跑几轮再上传,和每轮只算一次梯度相比,达到同样准确率的通信轮数少了 95 倍。
上传的更新仍可能泄露东西。比如特征是稀疏词袋时,非零的梯度会直接暴露用户打过哪些词。要更强的保证,可以再叠加差分隐私或安全多方计算。
留下的问题
原始数据不出设备,更新仍可能泄露信息;设备掉线这类部署问题,论文也没处理。
- 互补 · 差分隐私
论文把差分隐私列为可以叠加的更强保证,也说明它要靠加噪声换取,会损失一些效用。
来源 4
- McMahan et al. · Federated Learning of Deep Networks using Model Averaging, arXiv v1, 2016-02-17
- McMahan et al. · Communication-Efficient Learning of Deep Networks from Decentralized Data, AISTATS 2017, PMLR 54
- McMahan & Ramage · Federated Learning: Collaborative Machine Learning without Centralized Training Data, Google Research blog, 2017-04-06
- Bonawitz et al. · Towards Federated Learning at Scale: System Design, arXiv v1, 2019-02-04, abstract
Model Cards发布模型时交代边界
只看一个总分,判断不了模型适不适合眼前的场景。Model Cards 要求把这些写清楚:模型做什么用、在什么条件下评估、在不同群体上表现如何、有哪些已知限制。这样开发者、使用者和受影响的人,才有依据做判断。
互补Datasheets欧盟 AI 法案用到Gender Shades被用于Hugging Face Transformers
细节
留下的问题
填好卡片只是第一步,安全审计和独立评估还得另做。
- 互补 · Datasheets
前者交代模型的用途与表现,后者交代数据的来历与边界。原论文明确把两者作为互补文档。
- 用到 · Gender Shades
Model Cards 的引言引用 Gender Shades,说明人脸属性检测在不同人群上表现不一。
Gender Shades按人群分开看准确率
商用人脸分类器通常只报一个总体准确率。2018 年,Buolamwini 和 Gebru 按肤色和性别交叉分组,审查了三家商用系统:深肤色女性的错误率高达 34.7%,浅肤色男性最高只有 0.8%。
细节
留下的问题
它审查的是性别分类这一个任务,别的任务要各自分组再测。
WaveNet一个点一个点地生成声音
当时常见的语音合成方法会拼接录音片段,或先预测参数,再交给声码器合成。WaveNet 直接生成原始波形:先根据历史预测下一个采样点,再把它接回输入。概率分解写的是全部历史,实际网络只能看到感受野内的部分。在论文的英语和普通话测试中,听众给它的自然度打分高于所比较的参数式与拼接式系统。
借用ResNet
细节
为了看得够远,它用“空洞因果卷积”:每层只看前面的点,间隔逐层翻倍,从 1 一直到 512。这样一组层能看到 1024 个采样点。训练时可以并行算;生成时只能算完一个点,喂回网络,再算下一个。
自然度按 5 分制打分。美式英语里 WaveNet 得 4.21,真人录音是 4.55。逐点生成难以用上并行硬件,很难做到实时。后来的 Parallel WaveNet 从 WaveNet 教出一个能并行生成的网络,比实时快 20 倍以上。
留下的问题
它只管把语言学特征变成波形,从文字得到这些特征,还得靠别的模型。
- 借用 · ResNet
WaveNet 通篇用了 He 等人的残差连接,再加跳连。
稀疏混合专家参数很多,每次只用几个
普通网络里,每个样本都要过一遍全部参数,模型和数据一起变大,代价约按平方涨。只激活一部分网络的想法,一直没做出大效果。这篇论文的 MoE 层有成百上千个小网络,叫“专家”,由门控网络给每个位置挑几个。它用更少的计算,在语言建模和翻译上超过了当时最好的结果。
用到LSTM借用混合专家被借用于Gemini 1.5
细节
门控先给每个专家打分,加一点噪声,只留最高的几个,没选中的专家完全不用算。麻烦在于门控会偏向少数专家:被选得多的训练得快,就更容易被选中。作者加了额外的损失,让各专家的负担尽量均衡。
在 1000 亿词的语料上,专家加到 65536 个,参数达 680 亿。同等计算量下,它的困惑度比基线低 39%,困惑度越低越好。再加到 131072 个反而变差,作者猜是太稀疏了。
留下的问题
计算省了,参数却照样要放进显存、在机器之间传,带宽和批量都成了难题。
PyTorch写一句,算一句
2010 年代中期的主流框架,要先搭一张静态的计算图,再拿数据反复去跑。这样便于优化,却难调试,能写的计算也受限。PyTorch 是一个 Python 库,写一句就算一句,同时能自动求导、用 GPU 加速,速度和当时最快的库相当。
细节
论文里的例子很直白:一个层就是一个 Python 类,构造函数里建好权重,forward 方法里做矩阵乘法、加偏置。因为每句都立刻执行,print、调试器和 matplotlib 都照常能用,中间结果随时能看。
快靠的是底下:核心库 libtorch 用 C++ 写,算子和自动求导都在里面跑;GPU 显存由缓存分配器反复复用。在作者测的 6 个模型上,PyTorch 的训练速度都在最快框架的 17% 以内。
留下的问题
一句一句执行,就丢了看到整个程序才有的优化;作者当时正在做 JIT 来补。
Ring-allreduce让梯度沿环传两圈
多卡训练要把每张卡的梯度汇总再平均。2017 年初,百度把高性能计算里的 ring-allreduce 带到深度学习:GPU 连成一个环,每张卡把梯度切成小块,只和相邻的卡收发,传两圈就完成汇总。Uber 的 Horovod 就是从百度的实现改出来的。
细节
Horovod改几行代码扩到多机
Uber 的数据越来越多,有的训练要跑一周以上。TensorFlow 自带的方案用参数服务器,得自己起进程、改程序,在 128 张 GPU 上约一半算力耗在通信上。Horovod 改用 ring-allreduce:各卡算完自己那批数据的梯度,直接互相求平均。
用到TensorFlowMPI借用Ring-allreduce
细节
ring-allreduce 把 N 个节点连成一圈,每个节点只和两个邻居通信。前一半步骤把收到的值加到自己的缓冲区上,后一半用收到的值覆盖。缓冲区够大时,网络带宽能用满。
单卡程序只要改四处:初始化,给每个进程分一张 GPU,包住原来的优化器,开始时广播初始变量。按 Uber 的测试,Inception V3 和 ResNet-101 的扩展效率达到 88%,约为标准分布式 TensorFlow 的两倍。
留下的问题
当时只支持一台服务器装得下的模型,在集群上装 MPI 也还麻烦。
- 用到 · TensorFlow
Horovod 为 Uber 的 TensorFlow 训练而写,用包装过的优化器和广播操作,取代 TensorFlow 自带的参数服务器式分布式训练。
- 用到 · MPI
用 Open MPI 这类 MPI 实现启动多份训练程序并建立进程间通信;论文的例子用 mpirun 在 4 台服务器上启动 16 个进程。
- 借用 · Ring-allreduce
Horovod 从百度的 ring-allreduce 草稿实现出发,做成独立的 Python 包,换上 NVIDIA 的 NCCL,并支持一台服务器上多块 GPU。
GNMT神经翻译走进 Google 翻译
到 2016 年,神经翻译在研究基准上已追近短语翻译系统,可上线还卡在三处:慢,生僻词译不好,有时漏译。GNMT 用 8 层 LSTM,把词切成“词片”,推理放到 TPU 上。2016 年 9 月,Google 翻译的中译英全部改用它,每天约 1800 万次。
用到LSTM翻译里的 attentionBLEU借用ResNet互补IBM 翻译模型被用于Transformer
细节
论文的例句开头 Jet makers feud 被切成 _J et _makers _fe ud。不常见的 Jet 和 feud 各拆成两块,常见词保持完整,下划线标出词的开头。这样不用专门处理词表外的词,序列也不会像逐字符那样拉得很长。
双语评分员按 0 到 6 分给译文打分。英译中上,旧的短语系统平均 4.035 分,人工译文 4.987 分。GNMT 得 4.594 分,补上了两者差距的 58%。
留下的问题
它仍会漏词、译错人名和生僻术语,而且一句一句孤立地翻,不看上下文。
- 用到 · LSTM
编码器和解码器都是 8 层 LSTM,编码器最底层为双向。
- 用到 · 翻译里的 attention
论文写明 attention 模块与 Bahdanau 等人的类似,用一个单隐层前馈网络给原句各位置打分。
- 借用 · ResNet
受 ResNet 启发,在堆叠的 LSTM 层之间加残差连接;作者说不加时 4 层还好,6 层勉强,超过 8 层就很差。
- 互补 · IBM 翻译模型
GNMT 把统计机器翻译(引 Brown 等 1993)当作要比的主流方法。
- 用到 · BLEU
GNMT 用 BLEU 报告成绩,另外还请人做了并排评分。
YouTube 深度推荐先召回几百个,再排序
YouTube 要从几百万个视频里,给每个用户挑几十个;用户满不满意几乎无从得知,只能看观看记录。2016 年 Google 的这篇论文把推荐换成两段深度网络:第一段在几十毫秒内找出几百个候选,第二段给它们打分,按预计观看时长排,不按点击率。
细节
候选生成被写成一个超大的分类题:在几百万个视频里,猜用户下一个会看完哪个。最近 50 次观看的视频向量取平均,搜索词也一样,再拼上地区、设备等特征,送进几层网络。上线时不算概率,直接在点积空间里找最近的视频。
论文记下了几个坑。用户刚搜了 taylor swift,模型若知道这次搜索,就会把搜索结果页原样搬到首页,效果很差,所以搜索词被打散成无序的词袋。按点击率排序会抬高点进去却不看完的标题党,所以排序改按观看时长加权。
留下的问题
观看时长只是代理指标,用户到底满不满意,作者几乎拿不到真值。
- 借用 · word2vec
视频向量的做法受连续词袋(CBOW)语言模型启发;论文引用的是 Mikolov 等人 2013 年的另一篇 Distributed Representations of Words and Phrases,而不是本树 word2vec 节点所用的 CBOW 原文。
- 借用 · Netflix Prize
候选生成一开始模仿矩阵分解推荐,作者把它写成矩阵分解的非线性推广。
TVM把模型编译到各种硬件上
2018 年前后,框架把干活的算子交给厂商写好的库,比如 cuDNN。这些库主要照顾服务器 GPU,换到手机或 FPGA 上就得大量手工调。TVM 把它当成编译问题:先在计算图上做融合等优化,再为每个算子生成目标硬件的代码,用学出来的代价模型挑更快的写法。
细节
举个例子:卷积后面跟一个逐元素加法。不融合时,卷积先把结果写回显存,加法再读回来;融合成一个内核,中间结果就不用来回搬。论文在 Titan X 上测到,融合后的算子快 1.2–2 倍。
每个算子先写清“算什么”,再决定“怎么算”:怎么分块、循环按什么顺序、数据放哪层缓存。组合太多,TVM 就在目标硬件上实测候选代码,用测到的时间训练代价模型,预测哪种写法更快。
留下的问题
加速只在几种硬件和推理模型上测过,代价模型也得靠在目标硬件上实测来训练。
- 用到 · LLVM
论文图 2 中,TVM 生成的低层循环程序可以交给 LLVM IR 后端,也可以输出 CUDA、Metal 或 OpenCL。
- 用到 · Metropolis 方法
TVM 用模拟退火搜索调度:降低预测成本的移动总接受,升高的多半拒绝,正是 Metropolis 的接受规则。
SQuAD答案必须从原文里摘
此前的阅读理解数据,要么质量高但只有几千道题,要么有上百万题,却是挖空实体自动生成的。SQuAD 请众包工作者就维基百科文章写了 107,785 个问题,答案必须是原文里的一段。题目由人写,评分却能自动完成。基线模型 F1 是 51.0%,人类是 86.8%。
细节
论文第一个例子讲降水。问“什么让降水落下”,答案是 gravity:要先找到 falls under gravity 那句,再明白 under 在这里表示原因,不表示位置。为了不让题目照抄原文,网页禁用了复制粘贴,提醒工作者用自己的话问。
两年后,BERT 的集成模型超过了排行榜上的人类成绩,但这要打折扣。2017 年,Jia 和 Liang 在段落里自动插入一句话,不改答案,也不会误导人,却能干扰模型。已发表模型的平均 F1 从 75% 跌到 36%。
留下的问题
每道题在原文里都有答案,模型只管挑最像的一段,从不用判断“原文没说”。
来源 5
- SQuAD · arXiv v1, 2016-06-16, §§1–3
- SQuAD · EMNLP 2016 proceedings, §6 and Table 5
- BERT · arXiv v1, 2018-10-11, §4.2 and Table 2
- Jia and Liang · Adversarial Examples for Evaluating Reading Comprehension Systems, arXiv v1, 2017-07-23, abstract
- Rajpurkar, Jia and Liang · Know What You Don't Know: Unanswerable Questions for SQuAD, arXiv v1, 2018-06-11, abstract
GLUE用一个总分考九项任务
到 2018 年,语言理解模型大多只为一个任务设计,换个领域就吃力。GLUE 收集了九个任务,有语法、情感、复述、蕴含等,训练数据从 706 条到 40 万条不等。测试集标签不公开,在网站上统一打分取平均。有的任务数据很少,能在任务间共享知识的方法就占便宜。
细节
初版论文的基线里,最高平均分是 60.3,来自 BiLSTM 加 ELMo。总分也掩盖了差别:CoLA 上不少基线接近 0,SST-2 上却都在 80 以上。
分数涨得比预想快。BERT 初版报告 GLUE 80.4 分,比此前最好成绩高 7.6。到 2019 年 5 月,最高分离作者估计的人类水平只差 3.3,部分相同的作者推出了更难的 SuperGLUE。
留下的问题
有些任务可能靠表面技巧就能解掉;总分只是简单平均,不代表各种能力都一样好。
- 借用 · SQuAD
GLUE 的 QNLI 任务由 SQuAD 自动改造:把问题和段落里的每个句子配对,判断这句话是否包含答案。
NVLinkGPU 之间不再挤 PCIe
到 2016 年,一台服务器装 4 块或 8 块 GPU 已很常见。GPU 之间交换数据全走 PCIe,NVIDIA 说这越来越成瓶颈。它随 P100 推出 NVLink,称带宽是 PCIe 3.0 x16 的 5 倍。相连的 GPU 能直接读写对方显存。
被借用于VoltaGB200 NVL72
细节
P100 只有 4 条链路,连不满 7 个邻居,所以 8 卡的 DGX-1 分成两组:每组 4 块 GPU 两两直连,两组之间再加 NVLink。GPU 之间的流量全走 NVLink,PCIe 就空出来接网卡、访问主机内存。
后来几代沿用这条路。Volta V100 换上第二代 NVLink,链路增到 6 条,总带宽 300 GB/s。2022 年的 Hopper 是第四代,NVIDIA 称 DGX H100 里每块 GPU 有 900 GB/s 带宽。
留下的问题
它只连 NVIDIA 的 GPU 和支持它的 CPU,机器之间还得靠别的网络。
TPU v3 液冷更密集的芯片,换一种散热方式
Google 前两代 TPU 都用风冷,v2 每颗的热设计功耗是 280 W。2018 年的 TPU v3 升到每颗 450 W,改用了液冷:铜冷板压在芯片封装上,冷却液流过冷板,把热量带走。按 Google 后来的说法,这让部署的芯片密度翻了一倍。
被用于TPU 8t 与 8i
细节
液冷先改变的是机房布局:TPU 要集中放在几个相邻机柜里,才能分摊冷却设施的成本。训练用的超级计算机本来就这样摆;推理要靠近各地用户,有些机房已经塞满。所以 2020 年的推理芯片 TPUv4i 把热设计功耗压到 175 W,回到风冷。
泵比风扇省电得多:每颗液冷 TPU v3 分摊的泵功率,不到同等热设计功耗下风冷所需风扇功率的 5%。从 TPU v3 起,Google 的训练系统只用液冷。
留下的问题
热照样得排出机房,代价是机柜要成组摆放,还要配水路和备用电源。
来源 5
- Google · 100 things we announced at I/O '18, 2018-05-10, item 19
- Jouppi et al. · Ten Lessons From Three Generations Shaped Google's TPUv4i, ISCA 2021, Table 1 and lesson 5
- Padilla & Iyengar (Google) · Evolution of Google's IT Liquid Cooling, Hot Chips 2025 tutorial, slides 4–10
- Iyengar & Huffman · Enabling 1 MW IT racks and liquid cooling at OCP EMEA Summit, Google Cloud blog, 2025-04-29
- Jouppi et al. · Google's Training Supercomputers from TPU v2 to Ironwood, arXiv v1, 2026-06-14, Table 1 and conclusion
HNSW在分层图上找最近的向量
向量越来越多,逐个比较找最相近的那些太慢。2016 年,Malkov 和 Yashunin 提出 HNSW:把向量连成多层的邻近图,上层稀疏、下层稠密,查询从最上层开始,一层层往下细找,复杂度随数据量按对数增长。RAG 的检索就用了 FAISS 里的 HNSW 近似来加速。
被用于RAG
细节
留下的问题
它找的是近似最近邻,偶尔会漏掉真正最近的那个。
从人类偏好学习让人比较两段行为
很多任务写不出奖励函数。2017 年,OpenAI 和 DeepMind 的 Christiano 等人让人比较两段行为片段、选出更好的一段,用这些选择训练一个奖励模型,再交给强化学习去优化。人只需对不到 1% 的交互给出反馈。InstructGPT 的 RLHF 就沿用了这个做法。
被借用于InstructGPT
细节
留下的问题
它只在 Atari 游戏和模拟机器人上做了试验。
GPT-3看几个示例就能做新任务
当时,按任务微调是常见做法,不更新权重直接做任务的研究也已出现。GPT-3 把预测下一个 token 的预训练做大,并系统比较 zero-shot、one-shot 和 few-shot 设置:只在提示里说明任务、放入示例,看看模型能做到哪一步,不为每项任务另改权重。
用到缩放定律Common Crawl被借用于Codex 与 CopilotInstructGPTLoRA
细节
留下的问题
上下文学习不改权重,换个任务,效果可能就不灵了。
- 用到 · 缩放定律
GPT-3 依据这篇的分析,训练比常见做法大得多、词元却少得多的模型;大模型的批量和学习率设置也引用了它。
- 用到 · Common Crawl
GPT-3 的训练数据有 60% 来自经过质量过滤和去重的 Common Crawl,约 4100 亿词元。
缩放定律按规模预测语言模型的损失
给定一笔算力,模型该多大、数据该多少?Kaplan 等人训练了一批 Transformer 语言模型,发现测试损失分别随参数量、数据量和算力按幂律下降,有的趋势跨了七个数量级以上。由此能算出最划算的分配:算力主要用来扩大模型,数据适度增加,而且不必训到收敛。
用到Transformer随机逼近被用于GPT-3
细节
几条结论可以直接用。模型每大 8 倍,数据只要多约 5 倍,就不会因为数据不够吃亏。算力增加时,最优模型大小约按算力的 0.73 次方增长,训练步数只按 0.03 次方。多出来的算力,主要该换成更大的模型。
2022 年的 Chinchilla 论文给出另一种分配。作者训了 400 多个模型,认为模型和数据应同比例增长。据此训练的 Chinchilla 有 700 亿参数,和 2800 亿参数的 Gopher 算力相同,在大量下游任务上胜过它。
留下的问题
这是在一个数据集上拟合出的经验规律,预测的是损失,不直接预测下游能力。
- 用到 · Transformer
缩放规律是在 Transformer 语言模型上拟合的;论文另外和 LSTM 做了对比。
- 用到 · 随机逼近
Chinchilla 把损失里受数据限制的部分看作随机逼近项,按随机一阶方法的收敛速度下降,引的是 Robbins 和 Monro。
RAG生成之前先去查资料
预训练模型把知识记在参数里,要精确调用、给出出处、更新知识都不方便。2020 年,Lewis 等人把一个 seq2seq 生成器和一个维基百科的稠密向量索引接在一起:先检索相关段落,再据此生成答案。它在三个开放域问答任务上刷新了最好成绩。
细节
留下的问题
检索不到或检索错了,生成的答案也跟着错。
- 互补 · Okapi BM25
RAG 的消融实验把可学习的稠密检索器换成固定的 BM25;在 FEVER 上,BM25 反而最好。
- 用到 · BERT
RAG 的检索器里,查询和文档各用一个 BERT 编码成向量。
- 用到 · HNSW
RAG 用 FAISS 建一个最大内积检索索引,并用 HNSW 近似来加速。
Codex 与 Copilot在编辑器里续写代码
GPT-3 能照文档字符串写些简单程序,但没专门学代码,在后来的 HumanEval 上一题没对。2021 年,OpenAI 用 GitHub 公开代码微调出 Codex。6 月,GitHub 推出由它驱动的 Copilot 预览,在编辑器里补整行、整个函数。
细节
HumanEval 有 164 道手写的题,每题给出函数签名和文档字符串,用单元测试判对错。之所以手写,是因为现成题目的答案早已在 GitHub 上。120 亿参数的 Codex 每题只生成一次,能做对 28.8%。
论文直接写了它的毛病:文档字符串里串起的操作越多越容易错,每多一步,通过率大约降为原来的二分之一到三分之一。它还会把变量和操作对错位。
留下的问题
生成的代码可能看着对、其实没做到要求,也可能不安全,必须有人审查。
- 借用 · GPT-3
Codex 从 GPT-3 系列模型出发,在 GitHub 代码上微调;论文说从预训练模型出发并没有提高最终效果,但收敛更快。
ViT把图像切块交给 Transformer
Transformer 原本是处理序列的结构。ViT 把图像切成一个个小方块,叫 patch,排成序列,交给 Transformer 编码。这套结构就这样搬到了视觉上。不过训练规模和归纳偏置,也就是结构里预先带的假设,依然要紧。
借用Transformer被用于Segment AnythingRT-2
细节
Diffusion从噪声里一步步生成
DDPM 学的是一步步去噪:从一团噪声出发,每次去掉一点,最后得到生成的样本。它成了生成建模的一条重要路线。
互补GAN用到U-Net被借用于AlphaFold 3
细节
来源 1
CLIP把图像和文字接起来
一套固定的类别标签,很难覆盖所有想识别的东西。CLIP 用成对的图片和文字训练两个编码器,一个看图,一个读文字,让配对的图和文在表示上靠得更近。这样一来,要识别什么,直接用一句自然语言描述就能定下来。
被用于Segment AnythingLAION-5BStable Diffusion
细节
比如分辨自行车和汽车,就把“自行车的照片”“汽车的照片”两句话分别编码,再和图片的表示比一比。不用为这两个类别另训分类器。代价是描述换个说法,结果可能就变了,模型本身也不会给出解释。
留下的问题
图和文对齐了,但光靠对齐,还生成不了有依据的回答。
来源 1
AlphaFold 2用 AI 预测蛋白质结构
蛋白质折成什么形状,决定了它能做什么。2020 年的结构预测评测 CASP14 上,AlphaFold 2 交出的结果,被看作这一领域的重大进展。
被借用于AlphaFold 3互补诺贝尔奖
细节
留下的问题
预测出结构,还解释不了蛋白质的全部功能和动态,实验也省不掉。
ZeRO把训练状态分给各张卡
普通的数据并行里,每张 GPU 都存一整份训练状态。模型一大,显存就浪费得厉害。ZeRO 分几个阶段,把优化器状态、梯度和参数切成片,各张卡分着存,用到时再互相传。
细节
比如四张卡原本各存一份优化器状态,现在可以改成每张只管其中一部分。重复的副本省掉了,可计算用到的数据得及时交换。训练用的内存,也不会全部缩到原来的四分之一。
留下的问题
省下显存的代价是更多通信,它也只是几种并行方式里的一种。
- 互补 · Megatron-LM
ZeRO 论文把 ZeRO 驱动的数据并行与 Megatron-LM 的模型并行组合使用,并拿 2019 年 9 月开源的 Megatron-LM 作对照。
来源 1
Megatron-LM把一层网络拆到多张卡上
2019 年,语言模型大到一张 GPU 装不下,现成的并行方案又得重写模型。Megatron-LM 只在 PyTorch 里加几处通信,就把每层的矩阵乘法切到同一台服务器的几张卡上。NVIDIA 用它在 512 张 V100 上训出了 83 亿参数的模型。
用到PyTorchVoltaTransformer互补ZeRO
细节
拿 MLP 来说:先乘矩阵 A,再过 GeLU。把 A 按列切,每张卡各算一半输出、各自过 GeLU,中间不用通信。第二个矩阵按行切,直接接住这些输出,最后做一次 all-reduce,把各卡的结果加起来。
实际训练时,一台服务器里的 8 张卡组成一个模型并行组,再拿 64 组做数据并行。整套系统的扩展效率是 76%。这个 83 亿参数的模型训了 9.2 天。
留下的问题
层内切分通信太频繁,只在一台机器内部划算,跨机器效率掉得很快。
- 用到 · PyTorch
模型并行只靠在原生 PyTorch 里加几处通信操作实现,通信由 Python 调用 NCCL 完成,不需要新的编译器。
- 用到 · Volta
实验用 32 台 DGX-2H、共 512 张 V100,并用混合精度训练来利用 V100 的 Tensor Core。
- 用到 · Transformer
切分方式依赖 Transformer 层的结构:MLP 的两次矩阵乘法先按列、再按行切,注意力按头切。
LoRA冻住大模型,只训一小块
为每个任务都存一份完整微调过的 1750 亿参数模型,代价太高。2021 年,Hu 等人提出 LoRA:冻住预训练权重,只在每层加入可训练的低秩分解矩阵。对 GPT-3,可训练参数少一万倍,硬件需求降到三分之一,效果与全量微调相当或更好。
借用GPT-3
细节
EUV 光刻用极紫外光印芯片
芯片上的图形用光刻制造。193 纳米 DUV 在一些精细图形上需要多重图形化,工序和成本随之增加。EUV 使用 13.5 纳米光,在合适的层和工艺中能减少这些步骤,不代表所有层都只需一次曝光。相关实验从 1980 年代开始;到 2019 年,采用 EUV 工艺的芯片进入商用产品。
细节
难处在于,这种光几乎会被所有东西吸收。所以它得在高真空里产生和传播,也不能用透镜,只能靠多层膜反射镜把掩模上的图形缩小四倍,投到硅片上。光源是用激光两次打中飞过的小锡滴,把锡打成发出 EUV 的等离子体,每秒最多五万次。
EUV 也没有取代全部光刻。芯片上最复杂的几层用 EUV 印,其余各层仍用 DUV 光刻机。ASML 说,到 2021 年底,客户工厂里在用的新一代 EUV 机器有 127 台。
留下的问题
光有 EUV 还不够,芯片厂还得把掩模、光刻胶和设计工具一起调好。
- 互补 · Moore 1965
ASML 把 EUV 说成让摩尔定律继续、晶体管继续变小的手段。
- 互补 · 台积电
台积电宣布,N7+ 是第一个大批量为客户交付产品的 EUV 工艺。
来源 4
- TSMC · N7+ is first EUV process delivering customer products in high volume, press release, 2019-10-07
- Samsung · Starts production of EUV-based 7nm LPP process, press release, 2018-10-18
- ASML · Making EUV: from lab to fab, company story, 2022-03-30
- ASML · EUV lithography systems, product page (13.5 nm light, NXE, layer use)
RDNA重新组织图形计算单元
RDNA 随 Radeon RX 5700 系列上市,主攻游戏图形的效率。它以 32 个线程为一组(叫波前)来执行,配上 32 通道的 SIMD 单元。缓存层次也重新设计过,为的是减少执行和访存的开销。
借用AMD GCN
细节
Ampere A100让矩阵加速支持更多精度
Ampere A100 的 Tensor Core 专做矩阵运算。这一代新增了 TF32、BF16 和 FP64 三种格式,AI 和科学计算能用上矩阵加速的地方更广了。MIG 则能把一颗 A100 切成最多七个独立实例,让不同任务共用一块硬件。
借用Volta
细节
CDNA把计算架构单独分出来
AMD 用 MI100 推出 CDNA,面向高性能计算和 AI,和侧重图形的 RDNA 分成两条线。CDNA 在源自 GCN 的标量和向量单元旁边,加上了矩阵核心,专做混合精度的矩阵乘加。
借用AMD GCN
细节
MMLU用 57 个学科考模型
以前评估语言模型,常常只看单一的语言任务。MMLU 用 57 个学科的选择题,考模型在预训练中学到了多少知识。成绩还能按学科拆开看,总分盖住的短板就露出来了。
被用于o1
细节
留下的问题
选择题成绩,代替不了对开放式生成、工具使用和真实部署的评估。
Hugging Face Transformers把预训练模型收进一个库
BERT、GPT-2 之后,NLP 常见的做法是拿预训练好的大模型,在自己的任务上微调。可各家的代码和权重散在不同仓库里。Hugging Face 把它们收进一个库,统一成配置、模型、分词器三个类,都用一个 from_pretrained() 调用加载。
细节
比如要用在法语上预训练的 BERT 模型 FlauBERT,两行代码就够:一行加载分词器,一行加载模型,填同一个名字。库按名字找到对应的类,下载并缓存权重。同一个模型换个“头”,就能做分类或问答。
它从内部工具长出来,改过两次名。2019 年论文写作时,它才存在约十个月,已有 200 多篇论文用到它。到 2020 年,模型中心里有 2,097 个社区上传的模型。
留下的问题
复用变容易了,从头预训练还是一样贵。
- 用到 · Transformer
库里的模型都是 Transformer 结构的变体,按原论文的计算图实现,并测试能否复现原作者的结果。
- 用到 · Model Cards
2020 年的会议版写道:模型中心的模型页可以附一份模型卡(引用 Mitchell 等人),说明训练、数据和已知偏差。
Triton按“块”写 GPU 内核
常用的深度学习运算有 cuBLAS、cuDNN 这些厂商库撑着。想试库里没有的新运算,就得请专家手写内核,写完还难移植。2019 年,哈佛的研究者提出 Triton:程序员按“块”写计算,线程怎么分工、数据怎么搬,交给编译器,块多大由自动调优来挑。
细节
论文第一个例子是矩阵乘法:循环里每次取 A 的一块和 B 的一块,做一次点积,加到 C 的对应块上。块的长宽只写几个候选值,让自动调优去试;线程分配、显存访问合并、共享内存同步,都由编译器处理。
测试只用了一块 NVIDIA GTX 1070。矩阵乘法和 cuBLAS 打平,在循环网络和 Transformer 的矩阵形状上,比其他编译器方案最多快 3 倍;不过在较浅的 Transformer 形状上,cuBLAS 还是更快。
留下的问题
写内核容易了,块大小、内存访问这些性能问题还在,只是交给了编译器。
Waymo驾驶座上没人的公开服务
自动驾驶长期停在演示和带安全员的试点。2020 年 10 月,Waymo 在凤凰城向公众开放完全无人驾驶的叫车服务,驾驶座上没有人。在这之前,早期乘客当年的行程里已有 5% 到 10% 是完全无人的。
互补Stanley
细节
留下的问题
服务一开始只覆盖凤凰城的一片区域,不是哪里都能开。
- 互补 · Stanley
Waymo 的前身是 Google 的无人车项目。Thrun 说,团队从 DARPA 挑战赛招来工程师,其中就有 Stanley 的软件负责人 Montemerlo。
InstructGPT用人的反馈调整回答
InstructGPT 把四样东西串成一条流程:人写的示范、人标的偏好、一个奖励模型,再加上 PPO 这种强化学习方法,用来调整语言模型怎么回答。这套做法叫 RLHF(基于人类反馈的强化学习),InstructGPT 把它完整、公开地做了一遍。
借用GPT-3从人类偏好学习用到PPO被借用于ChatGPTDPO
细节
ChatGPT大模型走进对话框
2022 年 11 月,OpenAI 以研究预览的形式放出 ChatGPT。不用写代码,打开网页就能提问,还能接着追问、让它改。语言模型从论文和 API 里走出来,成了很多人每天在用的东西。
细节
DPO直接从偏好对里学
先收集偏好对:同一个问题的两份回答,标出哪份更好。DPO 直接用这些数据更新语言模型。它的损失函数,是从带 KL 约束的奖励优化目标推出来的。常规的离线流程里,既不用另训一个奖励模型,也不用边训练边采样。
借用InstructGPT被用于Llama 3.1
细节
比如两份摘要,A 保留了关键事实,B 漏了一个重要条件,标签说 A 更好。训练时比较的是两份回答相对参考模型的概率比,并没有把 A 当成唯一正确的答案。偏好本身靠不靠得住,还得另外检查。
留下的问题
离线 DPO 不算在线强化学习,偏好数据里的偏差也不会自己消失。
- 借用 · InstructGPT
保留 InstructGPT 这条 RLHF 路线的目标,但把奖励模型加强化学习换成一个直接的损失。
Stable Diffusion把图像生成交到用户手里
2022 年,Stable Diffusion 公开模型权重和代码,并提供演示和工具入口,让更多人能自己运行、改造文本生成图像的模型。它不是第一个可下载的图像生成模型,但这次发布推动了围绕模型的工具和应用开发。
细节
FlashAttention减少显存来回读写
普通的 attention 实现会把很大的分数矩阵写进显存,再读回来接着算。FlashAttention 把计算分块,减少中间结果在显存和片上 SRAM 之间的来回读写。它算的仍是精确的 attention,前向和反向都支持,训练也能用。
用到Roofline
细节
FlashAttention 一块一块地算,同时记下归一化要用的统计量,所以整张中间矩阵不用存下来。省下的是数据搬运和中间存储,没有靠丢掉 token 来省事。
留下的问题
实际能快多少,还要看张量形状、硬件和实现版本。
- 用到 · Roofline
按算术强度把操作分成算力受限和内存受限,引的是 Roofline。
vLLM按需分配 KV cache
KV cache 存的是注意力的键和值。有的请求几十个 token 就结束,有的要写很长;给每个请求预留一大块连续空间,显存很容易浪费。PagedAttention 借用分页管理内存的思路,把 KV cache 切成块,用多少分多少,服务调度也更有效率。
借用Atlas 虚拟内存被用于后训练配方
细节
名字里有 cache,但它和 CPU 的硬件缓存不是一回事。它存的是注意力的键和值张量,放在显存里,按块通过映射表来找。
留下的问题
省下的是显存,单个请求的延迟未必跟着降。
- 借用 · Atlas 虚拟内存
PagedAttention 借用操作系统的虚拟内存和分页,论文引了 Kilburn 等人 1962 年的 Atlas 论文。
思维链提示让模型先写推理步骤
模型越做越大,数学应用题、符号操作这类多步推理的成绩却几乎不涨。2022 年,Wei 等人在提示的示例里写出一步步的推理过程,让模型照着先写思路再给答案,足够大的模型在这些任务上明显变好。后来的 o1 和 R1,用强化学习来训练这条思维链。
细节
留下的问题
写出来的思路不一定是模型真正的计算过程,也可能一本正经地推错。
RT-2把视觉语言能力用到控制上
机器人不光要看懂画面和指令,还得做出动作。RT-2 把视觉语言预训练和机器人的动作数据结合起来,想把模型已有的看图读字能力,用到控制任务上。
用到ViT
细节
来源 1
Hopper专门给 Transformer 提速
Hopper H100 加入了 Transformer Engine 和 FP8 计算,把加速 Transformer 模型明确定为架构目标。互连也往外扩了:第四代 NVLink 加上外部交换系统,让高速 GPU 互连跨到多台服务器。
互补Transformer用到台积电
细节
留下的问题
架构公布后,又过了半年才宣布全面量产。
- 互补 · Transformer
Hopper 加了一个专门服务 Transformer 模型的 Transformer Engine。
- 用到 · 台积电
H100 有 800 亿个晶体管,用台积电的 4N 工艺制造。
CDNA 3 与 MI300把 CPU 和 GPU 装进一个封装
MI300 系列把 CDNA 3 架构、3D 封装和 HBM3 内存结合在一起,面向 AI 和科学计算。MI300A 在一个封装里放进 Zen 4 CPU 和 GPU,两者共享内存,异构编程因此简单了一些。MI300X 则不带 CPU。
用到HBM
细节
Whisper让语音识别不微调也能用
以前的语音识别,常先用大量没标注的语音预训练,但用之前还得在具体数据集上微调。微调要有经验的人来做,模型还容易学到只在那个数据集里成立的规律。Whisper 直接用网上带文字稿的音频训练,共 68 万小时。模型不微调,直接拿去测别的数据集。
细节
一个模型做好几件事,靠的是解码器开头的几个特殊词元。音频切成 30 秒一段,交给编码器—解码器 Transformer。解码器先预测语种,没人说话就输出“无语音”;再用一个词元指定是转写还是译成英语,然后才开始出文字。
论文最想说明的是稳健性。找一个在 LibriSpeech 上和 Whisper 成绩相差不到 0.1% 的有监督模型,换到其他数据集上测,Whisper 的错误平均少 55.2%。作者因此提醒,只在一个数据集上拿模型和人比,容易高估模型。
留下的问题
长音频里它还会陷入重复、漏词,甚至编出和音频无关的话。
- 用到 · Transformer
为了不让架构改动干扰结论,Whisper 直接用现成的编码器—解码器 Transformer。
Segment Anything点一下,就把东西抠出来
图像分割要逐个像素标出物体的范围,标起来很费工夫。SAM 让模型听提示:给一个点、一个框或一块粗略的掩码,都要返回合理的掩码。每张图只编码一次,之后每个提示在浏览器里约 50 毫秒出结果。训练数据 SA-1B 由模型和标注员一起攒出,有 11 亿个掩码。
细节
提示常有歧义:在衬衫上点一下,指的可能是衬衫,也可能是穿衬衫的人。SAM 的办法是一次给出 3 个掩码,大致对应整体、部分和更小的部分,另有一个分支给每个掩码的质量打分。
数据分三个阶段攒起来。先是标注员在浏览器里点选,SAM 实时出掩码,人再修,标一个掩码的平均时间从 34 秒降到 14 秒。接着模型自动填上有把握的,人只补漏。最后完全自动,SA-1B 里 99.1% 的掩码都是这样生成的。
留下的问题
它能把东西抠出来,却不知道抠出的是什么。
LAION-5B公开 58.5 亿对网络图文
CLIP 用 4 亿对图文训练,数据没公开;在 LAION 自己 2021 年放出 4 亿对的 LAION-400M 之前,公开的英文图文数据集最大约 1 亿对。大规模图文研究于是集中在少数几家公司。LAION-5B 从网页里挑出带 alt 文本的图片,按 CLIP 算的图文相似度筛选,公开了 58.5 亿对,图片要使用者自己下载。
用到CLIPCommon Crawl被用于Stable Diffusion
细节
一对图文要过几关:从 Common Crawl 里找带 alt 文本的图片,下载,去掉文字太短或图片太小的,再用 CLIP 算相似度,低于门槛的删掉。最后这关删掉了约 500 亿张图片里的九成左右。因为只给链接,网页一变,图片就可能失效。
论文用其中 4 亿对的子集训练 CLIP,在 ImageNet 零样本分类等测试上,和 OpenAI 的原版持平或接近。论文还写道,Stable Diffusion 就是用它的几个子集训练的。
留下的问题
自动过滤挡不住所有有害图片,后来还被查出含有指向疑似儿童性虐待材料的链接。
- 用到 · CLIP
用 OpenAI 的 ViT-B/32 CLIP 计算图文相似度来筛选数据,又用 LAION 子集重新训练 CLIP,与原版比较。
- 用到 · Common Crawl
LAION-5B 从 Common Crawl 出发,解析其中带替代文字的图片,构建图文对。
GraphCast从历史数据学天气预报
中期天气预报一直靠超级计算机解大气方程,几十年的历史数据很难拿来改进模型。GraphCast 从这些数据里学:输入此刻和 6 小时前的全球大气,预测 6 小时后,一步步推到 10 天。和 ECMWF 最好的确定性预报 HRES 比,它在九成评测目标上明显更准。
细节
一次预测要处理多少数?0.25 度的经纬网格约有 104 万个格点。每个格点上有 227 个变量,整个状态约 2.36 亿个数。模型先把格点信息编码到二十面体网格上,用图神经网络在节点间多轮传递消息,再解码回经纬格点。
训练用的是 1979–2017 年的数据。在 32 台 Cloud TPU v4 上训了约四周。它没有专门为极端天气训练,但拿来追踪气旋时,2018–2021 年的路径中位误差比 HRES 小。
留下的问题
它只给一个确定的预报,给不出各种可能结果的分布,也离不开传统数值模式。
- 互补 · Transformer
GraphCast 在多层网格上做图消息传递,没用 Transformer:上百万个格点做全局注意力,内存是平方级的。
来源 4
- Lam et al. · GraphCast: Learning skillful medium-range global weather forecasting, arXiv v2, 2023-08-04 · introduction, GraphCast, verification, severe-event and discussion sections
- Same paper · arXiv v1, 2022-12-24, Figure 1 and discussion
- Science · DOI record of the published article, 2023
- Google DeepMind · GraphCast blog post, 2023-11-14
o1先想一阵再回答
o1 用大规模强化学习训练:回答之前,先在内部写一长串思路,学着发现错误、换个办法。OpenAI 报告,训练时多做强化学习、回答时多想一会儿,成绩都会往上走。2024 年 AIME 数学竞赛题上,GPT-4o 平均做对 12%,o1 单次作答做对 74%。
细节
GRPO让同题的回答互相比
同一道题让模型生成几份回答,用它们的奖励高低互相比,估计每份回答比组内平均好多少,也就是优势。这样就不用另训一个价值模型。GRPO 由 DeepSeekMath 提出,后来 R1 用上了它,TRL 和 verl 也提供了实现。
借用PPO被用于DeepSeek-V4
细节
举个只看结果的简单例子:同一题的四个回答得分 1、1、0、0,平均 0.5,高于和低于平均的就分开了。要是四个全得 0,组内比较就分不出好坏。多采样要花成本,也不一定换来有用的反馈。
留下的问题
不用价值模型了,奖励还得设计,多采样的成本也省不掉。
- 借用 · PPO
GRPO 是 PPO 的变体:去掉价值模型,用同组回答的分数当基线,省显存。
DeepSeek-R1用强化学习练推理
DeepSeek-R1 的报告对比了两种设置。R1-Zero 直接在基座模型上做强化学习;R1 先加入冷启动数据,再分几个阶段训练。两者放在一起看,能看出强化学习怎样和数据、SFT(监督微调)、评估配合。
细节
留下的问题
报告里的奖励和结果来自特定任务,换到别的模型上还得重新验证。
- 用到 · DeepSeek-V3
R1-Zero 和 R1 都从 DeepSeek-V3-Base 出发,再用 GRPO 做强化学习。
- 互补 · o1
R1 的报告以 o1 为参照,在推理任务上报告与 o1-1217 相当。
- 用到 · 思维链提示
R1 论文开头说,o1 靠加长思维链在推理时多用算力;R1-Zero 只用强化学习,思维链就越写越长。
IMO用自然语言写出金牌证明
2024 年,DeepMind 的系统还得先把题目译成 Lean 这样的形式语言,再算两三天。2025 年的国际数学奥林匹克上,Gemini Deep Think 直接读题、写自然语言证明,在考试时限内拿到 35 分(满分 42),由 IMO 协调员按学生标准评分认证。OpenAI 的实验模型也拿到 35 分,由三位前奖牌得主评分。
被借用于AI 做数学研究
细节
留下的问题
IMO 只给答卷评分,不检验系统本身;两个模型当时都还没对外开放。
Gemini 1.5一次读进百万词元
Gemini 1.0 一次只能读 3.2 万个词元。1.5 Pro 换成 MoE 架构,向部分用户开放了 100 万词元的上下文,一小时的视频也能整段放进去。把一句话藏进这么长的输入里,它几乎每次都能找回来。
借用稀疏混合专家
细节
DeepSeek-V3用 FP8 训练大 MoE
低精度训练省显存、省时间,但激活、权重和梯度里的离群值容易把训练带偏。DeepSeek-V3 是一个 MoE 模型,每个词只激活 6710 亿参数中的 370 亿。报告说它首次在这么大的模型上验证了 FP8 混合精度训练,整套正式训练用了 278.8 万个 H800 GPU 小时。
被用于DeepSeek-R1
细节
留下的问题
这个成本只算正式训练,之前的研究和消融实验不在里面;推荐的部署单元也偏大。
DeepSeek-V4让百万上下文变便宜
上下文越长,每生成一个词要读的 KV cache 越大,长上下文一直很贵。2026 年 4 月的 DeepSeek-V4 预览版改了注意力的设计:在 100 万词元的上下文里,V4-Pro 每个词的推理计算只要 V3.2 的 27%,KV cache 只要 10%。DeepSeek 自己的服务也把 100 万上下文设成了默认。
用到GRPO
细节
MCP给 AI 工具一个统一接口
模型被挡在数据孤岛外面,每接一个新数据源都要单独写一套集成,很难扩展。2024 年 11 月,Anthropic 开放了 Model Context Protocol:数据和工具做成 MCP 服务器,AI 应用作为客户端去连。发布时附带了规范、SDK,以及 Google Drive、Slack、GitHub 等六个现成的服务器。
被用于编程 agent
细节
留下的问题
发布时只能在本地连 MCP 服务器,远程部署的工具包还在路上。
编程 agent把整件任务交给模型
2021 年的 Copilot 在编辑器里补全代码。2025 年 2 月,Anthropic 推出 Claude Code,在开发者自己的终端里搜代码、改文件、写测试、跑命令、提交。5 月,OpenAI 推出 Codex,把每个任务放进预装了仓库的云端沙箱,几个任务并行跑,通常 1 到 30 分钟做完,附上终端日志和测试结果。
细节
留下的问题
生成的代码仍要人一一审过;工具调用不稳、长时间运行的命令,也还是难点。
- 用到 · MCP
Claude Code 通过 MCP 连接外部工具和数据源。
- 互补 · Codex 与 Copilot
Claude 4 的发布说明写到,GitHub 将用 Sonnet 4 驱动 Copilot 新的编程 agent。
GB200 NVL72一整柜当一块 GPU 用
大模型拆到很多 GPU 上训练和推理,卡与卡之间的通信常常卡住整体速度。GB200 NVL72 把 72 块 Blackwell GPU 装进一个液冷机柜,用第五代 NVLink 连成一个域,每块 GPU 的双向带宽 1.8 TB/s。新的 Transformer Engine 还加入了 4 位浮点推理。
借用NVLink
细节
IEA《能源与 AI》给数据中心用电算总账
AI 到底要用多少电,决策者和市场一直缺少看清的工具。国际能源署 2025 年 4 月的报告估算,2024 年全球数据中心用电约 415 太瓦时;到 2030 年预计翻一倍多,约 945 太瓦时,比日本今天全国的用电还略多。
用到PUE
细节
留下的问题
越往后越难说准:到 2035 年,几种情景的估计从 700 到 1700 太瓦时不等。
- 用到 · PUE
IEA 用 IT 用电乘以 PUE 算数据中心总用电,基准情景下全球平均 PUE 从 1.41 降到 1.29。
TPU 8t 与 8i训练和推理分开造芯片
训练要大量芯片一起算,推理要低延迟地回应,尤其是 agent 之间频繁往来的时候。2026 年 4 月,Google 的第八代 TPU 分成专做训练的 TPU 8t 和专做低延迟推理、内存带宽更大的 TPU 8i。一个 8t 超节点能连 9600 颗芯片;两颗芯片的每瓦性能都比上一代 Ironwood 最多高一倍。
细节
AlphaFold 3从单个蛋白到分子组合
细胞里的蛋白质、DNA 和其他分子从不单独工作,要看懂生物,得看它们怎么相互作用。AlphaFold 3 一次预测整个复合物的三维结构:扩散模块从一团原子出发,一步步收拢成最终的坐标。在蛋白质和其他分子的相互作用上,它比已有方法至少准 50%。
细节
留下的问题
它给出的是静态结构,看不到分子怎么动;在无序区域还会编出不存在的结构。
- 借用 · AlphaFold 2
沿用 AlphaFold 2 的框架,但把 evoformer 换成更简单的 pairformer,结构模块换成扩散模块。
- 借用 · Diffusion
用扩散的思路直接生成原子坐标:从带噪声的原子位置一步步去噪。
诺贝尔奖物理和化学奖都给了 AI
2024 年 10 月,诺贝尔物理学奖授予 Hopfield 和 Hinton,表彰让人工神经网络能够学习的奠基性发现。第二天,化学奖一半给了做计算蛋白质设计的 Baker,另一半给了做蛋白质结构预测的 Hassabis 和 Jumper。评奖说明写到,AlphaFold2 已被 190 个国家的两百多万人用过。
细节
AI 做数学研究解开悬而未决的问题
2025 年,AI 在竞赛题上拿到金牌线;2026 年,它开始碰没人解开的问题。5 月,OpenAI 的一个通用推理模型推翻了平面单位距离问题上的一个长期猜想,证明由外部数学家核对过。同月的一篇预印本让语言模型写 Lean 形式证明、再交给机器检查,在 353 个未解的 Erdős 问题里自主解决了 9 个。
借用IMO
细节
留下的问题
语言模型单独写的证明还靠不住,得有人核对或交给 Lean 检查;成功率也只有几个百分点。
- 借用 · IMO
DeepMind 的 Aletheia 研究 agent 跑在拿到 IMO 金牌线的 Gemini Deep Think 的进阶版上,把它从竞赛题带到未解的 Erdős 问题。
Llama 3.1把 405B 的权重放出来
Meta 说,开放模型的能力此前大多落后于闭源模型。Llama 3.1 放出了三个尺寸的权重,最大的 405B 用超过 15 万亿词元训练,还量化到 FP8,一台服务器就能跑起来。
用到DPO
细节
Genie 3生成能走进去的世界
一帧一帧往下生成、还要实时接住用户的操作,比一次生成整段视频更难。Genie 3 每生成一帧都参考之前走过的轨迹,不需要显式的 3D 表示,就能以每秒 24 帧实时生成。世界能保持几分钟前后一致,生成过程中还能用文字改变世界里发生的事。
细节
留下的问题
能做的动作还很有限;多个角色同时互动、几小时的连续体验,都还做不到。
网络安全能力过线先交给防守的一方
2026 年,几家实验室报告,新模型已经能自己找出未知漏洞、写出利用方法。Anthropic 的 Claude Mythos Preview 不对公众开放,只给维护关键软件的组织用来修漏洞;Google 先把 Gemini 4 Argon 交给经过筛选的防守方。OpenAI 的 GPT-6 Astra 是它第一个达到网络安全“严重”级别的模型,公开发布时加强了防护。
互补Linux
细节
留下的问题
这些能力和漏洞数量,都来自各家自己的报告。
- 互补 · Linux
Anthropic 报告,Mythos Preview 自己找到几个 Linux 内核漏洞,并串成一次完整的提权;这些漏洞已经修复。
欧盟 AI 法案按风险高低给 AI 定规矩
AI 用到招聘、信贷和执法这些地方以后,欧盟想用一套统一的法律来管。2024 年 6 月通过的 AI 法案按风险高低定义务,分阶段生效。通用模型的提供者要保存技术文档,写明训练、测试过程和评估结果;法案还把训练用的累计算力当作衡量模型能力的一个近似指标。
细节
后训练配方调出能力还没有定法
模型里藏着的能力,很难一次就稳稳调出来。SFT、DPO、PPO、GRPO 用的数据和反馈各不相同。已有的报告给出了能用的配方,也摆明了取舍:覆盖哪些任务,花多少预算,训练稳不稳。
用到vLLM
细节
比较方案时,先固定任务和评估,再问几个问题:高质量示范够不够?奖励能不能核验?每次 rollout 要花多久?这些选择,常常比算法叫什么更贴近实际工作。
留下的问题
同样的预算,该多收数据、多采样,还是多更新几步,仍没有统一答案。
- 用到 · vLLM
Tülu 3 的可验证奖励训练用 vLLM 生成回答,每次更新后把权重同步过去。