活字 从规则到大模型
正在加载 3D
输入层隐藏层 1隐藏层 2输出层

这台设备或浏览器没有开启 WebGL2,这里显示同一装置的静态图;正文里的演示与文字说明照常可用。

3D 画面没能加载。

点神经元看算式 · 拖动旋转 · 向下滚动,网络按层拆开

第 02 章1986—2012

从数据中学习

如果规则写不完,能不能让机器自己从例子里学?

1986 年,反向传播让多层神经网络能从例子里自己调整参数⁠[1]⁠。又过了二十多年,数据和显卡才让这条路真正走通。

输入
第 1 组

点神经元看算式 · 拖动旋转 · 向下滚动,网络按层拆开 青色表示正值,黑色表示负值;神经元上的网点越密,激活值的绝对值越大。 权重为随机生成的示意值,网络未经训练;前向计算是真实的

网络变深,数据变多

从反向传播到 AlexNet,这条路走了二十多年:方法早就有了,等的是足够的数据和算力。

  1. 1982

    霍普菲尔德网络:把记忆存成“低谷”

    J. J. Hopfield

    解决了什么
    神经网络能存储和回忆什么,缺少一套像物理学那样清楚的数学描述。
    带来了什么变化
    借用物理学中“能量”的思想,把记忆存成网络的稳定状态,能从残缺或有噪声的输入里恢复出存过的模式⁠[2]⁠。
  2. 1986

    反向传播:多层网络能训练了

    Rumelhart、Hinton、Williams

    解决了什么
    单层感知机分不开异或这类问题;多层网络分得开,但没人知道中间层的权重该怎么调。
    带来了什么变化
    把输出的误差从后往前逐层分摊,算出每个权重该往哪个方向调、调多少,隐藏层因此能自己学出有用的中间特征⁠[1]⁠。
  3. 1997

    LSTM:记得更久的循环网络

    Hochreiter、Schmidhuber

    解决了什么
    处理序列的循环网络,误差往回传几步就几乎消失,学不会相隔很远的依赖。
    带来了什么变化
    加入带“门”的记忆单元,决定哪些信息保留、哪些丢掉,缓解了梯度消失,后来成为处理语音和文字序列的常用结构⁠[3]⁠。
  4. 1998

    LeNet-5:卷积网络读手写字

    LeCun、Bottou、Bengio、Haffner

    解决了什么
    识别手写字,过去要靠人事先设计该提取哪些笔画特征。
    带来了什么变化
    卷积网络直接从像素学起,用梯度下降端到端训练;相关系统曾实际用于银行支票识别⁠[4]⁠。
  5. 2009

    ImageNet:大规模标注图像库

    邓嘉、李飞飞等

    解决了什么
    此前带标注的图像数据集通常只有几万张,不够训练大模型⁠[5]⁠。
    带来了什么变化
    按 WordNet 的词语层级组织、人工标注的图像库⁠[6]⁠,到 2012 年已有超过 1500 万张图、约 2.2 万个类别;由它衍生的 ILSVRC 竞赛成了视觉模型的公共考场⁠[5]⁠。
  6. 2012

    AlexNet:显卡上的深层卷积网络

    Krizhevsky、Sutskever、Hinton

    解决了什么
    图像分类主要依赖人工设计的特征,ILSVRC-2012 的第二名用的仍是这种方法。
    带来了什么变化
    在两块 GTX 580 显卡上训练五六天,top-5 错误率 15.3%,第二名是 26.2%⁠[5]⁠。深度学习从此迅速成为视觉领域的主流。
  7. 2016

    AlphaGo:深度网络加搜索下围棋

    Silver 等,DeepMind

    解决了什么
    围棋局面多到无法穷举,靠搜索和人写的评估规则下不过职业棋手。
    带来了什么变化
    用神经网络评估局面、挑选候选落子,再配合树搜索;2015 年 10 月 5:0 胜樊麾,2016 年 3 月 4:1 胜李世石⁠[7]⁠。
02.1

训练就是调参数:梯度下降 Gradient Descent · 梯度下降

1一句话

神经网络里有大量可调的数,叫参数。训练就是反复测量“错了多少”,再把每个参数朝让错误变小的方向挪一小步。

2打个比方

像在大雾里下山:看不见山谷在哪,只能用脚试探哪边最陡,朝下坡迈一步,再试探,再迈一步。

步子太小,天黑也走不到;步子太大,会从山谷这边一脚跨到对面山坡上,越走越高。每一步迈多大,就是学习率。

3动手试

在损失地形上下山:梯度下降 地形为手工设定的二维函数;每一步的梯度和更新都是真实计算

网点越大,损失越高等高线点图上任意位置可以换起点

0.40
起点

第 0 步

损失随步数的变化

4怎么做到的

先定义一个损失函数,用一个数衡量模型错了多少,比如预测值和正确答案之差的平方。参数的每一种取值都对应一个损失,合起来像一片起伏的地形。

梯度指向这片地形在当前位置最陡的上坡方向,由损失对每个参数的偏导数组成。梯度下降每一步只做一件事:参数 ← 参数 − 学习率 × 梯度。演示里只有两个参数,地形能画在纸上;真实网络的参数有几百万到上千亿个(GPT-3 有 1750 亿个⁠[8]⁠),原理相同。

实际训练时,每一步通常只用一小批样本来估计梯度,叫随机梯度下降。AlexNet 每批用 128 张图,把整个训练集大约过了 90 遍⁠[5]⁠。

做不到什么

  • 梯度只说明脚下哪边是下坡,不保证走到最低点:可能停在一个小坑(局部极小)里,也可能在平地上走得极慢。演示里点左边那个小坑附近试试。
  • 学习率要靠试:太小训练太慢,太大会来回震荡甚至发散。
  • 损失降低只说明在训练数据上错得少了,不代表在没见过的数据上也一样好(见本章第 4 节)。
02.2

反向传播:把误差分摊回去 Backpropagation · 反向传播

1一句话

输出错了,每个权重该负多少责任?反向传播从输出层往回,一层层算出每个权重对误差的影响,也就是梯度。

2打个比方

像一条流水线出了次品:先看最后一道工序偏了多少,再往前追问上一道,它的偏差里又有多少是更前面传下来的。追到源头,就知道每个环节该调多少。

关键在于顺着同一条线往回追:每一层只用到后一层已经算好的结果,不必为每个权重从头算一遍。

3动手试

反向传播:一个 2-2-1 小网络的一轮训练 训练样本与初始权重为预设;每一步的数值都是真实计算
  1. 1前向传播
  2. 2算损失
  3. 3反向传播
  4. 4更新参数
w1 w2 w3 w4 w5 w6 – x1 – x2 – h1 – h2 – ŷ 答案 y = 1
正确答案

准备

参数账本
参数当前值梯度 ∂L/∂·更新后
w1——
w2——
w3——
w4——
w5——
w6——
b1——
b2——
b3——
损失 L 随训练轮数第 0 轮

4怎么做到的

训练的每一步分四段:前向传播,输入逐层算到输出;算损失,比较输出和正确答案;反向传播,用微积分的链式法则,从输出层开始往回逐层计算损失对每个权重的偏导数;更新,用上一节的梯度下降改动所有权重。

1986 年,Rumelhart、Hinton 和 Williams 在《自然》发表论文,展示这套方法能训练带隐藏层的网络,隐藏层会自己学出有用的中间表示⁠[1]⁠。类似的数学方法此前已有人提出,这篇论文让它在神经网络研究中广为人知。

反向传播算一遍的计算量,和前向传播在同一个数量级。所以网络再大,训练一步的代价也只是“来回各算一遍”的规模,这是它能用到几十亿参数上的原因。

做不到什么

  • 层数很多时,误差往回传会越乘越小(梯度消失)或越乘越大(梯度爆炸),早期的深层网络和循环网络因此很难训练⁠[3]⁠。
  • 它只告诉每个权重该往哪边调,不说明这个权重“代表”什么。
  • 反向传播是一种数学方法,不是对大脑学习方式的描述;大脑是否以类似方式学习,目前没有定论。
02.3

卷积:看图的方式 Convolution · 卷积神经网络

1一句话

卷积用一个小窗口在整张图上滑动,每到一处都做同一组乘法再加总,用来找边缘、拐角这类局部图案。

2打个比方

像拿一枚小印章在纸上逐格比对:印章上刻着一道竖线,哪里的图案和它吻合,哪里就留下深色的印记。换一枚刻着横线的印章,找到的就是横线。

卷积网络里有很多枚这样的“印章”,叫卷积核。它们刻的图案不是人设计的,而是训练时从数据里学出来的。

3动手试

卷积:一枚 3×3 的“印章”扫过整张图 卷积核是图像处理中人手设计的经典核;卷积计算是真实的

左亮右暗处为正,左暗右亮处为负

输入:12×12 像素 点格子可以改画

卷积核

窗口里的九个乘积

特征图 正 负
0 / 144

4怎么做到的

卷积核是一个小网格,比如 3×3 的九个数。把它盖在图像某个位置上,九个数分别乘以底下的九个像素,再加起来,就得到输出图上的一个点;然后挪一格再算,扫遍整张图,得到一张特征图。同一个卷积核在每个位置用的是同一组数,所以参数很少,而且图案出现在哪里都能被找到。

卷积层一层层叠起来:前几层找边缘和笔画,后面的层把它们组合成更大的形状。1998 年的 LeNet-5 用这种结构识别手写字符⁠[4]⁠;2012 年的 AlexNet 有 5 个卷积层和 3 个全连接层,共 6000 万个参数⁠[5]⁠。

演示里的卷积核是图像处理中人手设计的经典核,用来说明计算过程;真实网络里卷积核的数值都由训练得到。

做不到什么

  • 卷积只看局部窗口,要看到整张图得叠很多层,图上相隔很远的两处之间的关系不容易捕捉。
  • 对训练中很少见到的变化,比如大角度旋转、奇特的光照,仍然容易认错。
  • 在图上加一点人眼几乎察觉不到的特定扰动,就可能让网络给出完全错误的分类,这类输入叫对抗样本⁠[11]⁠。
02.4

数据、算力与过拟合 Overfitting · 数据与算力

1一句话

模型越灵活,越能贴合训练数据,也越容易连噪声一起背下来。要让它学到规律而不是死记,就需要更多数据和更强的算力。

2打个比方

像备考只刷了十道题:把这十道的答案背得一字不差,换一道新题照样不会。见过的题越多,越难靠死记过关,只能去摸清题目背后的规律。

3动手试

过拟合:模型越灵活,越会把噪声背下来 数据由一条正弦曲线加随机噪声生成;拟合为真实的最小二乘计算
x →

训练数据 测试数据(训练时没见过) 模型的拟合 真实规律

3
0 · 一条水平线12 · 非常弯

训练点 10训练误差 —测试误差 —

两种误差随次数的变化

4怎么做到的

检验一个模型,要用它训练时没见过的数据,叫测试集。训练误差一直下降、测试误差却开始上升,就是过拟合:模型把训练数据里偶然的噪声也当成了规律。

2012 年前后,三件事碰到了一起。数据:ILSVRC 提供了约 120 万张带标注的训练图⁠[5]⁠,来自 ImageNet⁠[6]⁠。算力:AlexNet 用 GPU 实现卷积运算,在两块显卡上训练五六天就能完成⁠[5]⁠。方法:用平移、翻转扩充训练图(数据增强),训练时随机让一半隐藏神经元暂时不工作(dropout),都在减轻过拟合⁠[5]⁠。

从此,“数据越多、模型越大、效果越好”成了深度学习的常见经验。这条经验后来被量化成规模定律,见第 04 章。

做不到什么

  • 数据越多,混进来的错误标注和偏见也越多,模型会把它们一起学进去。
  • 算力和电力成本随规模快速上升,最大规模的训练只有少数机构负担得起。
  • 测试集上表现好,只说明在和训练数据相似的数据上表现好;换一个场景,比如另一家医院的影像,效果可能明显下降。

这一章留下的问题

  1. 01

    图像是一张固定大小的网格,文字却是一串长短不一的序列。网络该怎样读一句前后相连的话?

  2. 02

    循环网络和 LSTM 要一个词接一个词地算,句子一长就慢,开头的信息也容易丢。能不能让所有位置同时计算?

  3. 03

    词在网络里该用什么样的数字来表示?下一章从“词变成向量”讲起,一直讲到注意力和 Transformer。

本章参考文献

  1. [1] David E. Rumelhart, Geoffrey E. Hinton, Ronald J. Williams. Learning representations by back-propagating errors. Nature, 323(6088): 533–536.展示了用反向传播算法训练多层神经网络,使隐藏层能学到有用的内部表示,推动了1980年代神经网络研究的复兴(反向传播的数学思想此前已有人提出)。
  2. [2] J. J. Hopfield. Neural networks and physical systems with emergent collective computational abilities. Proceedings of the National Academy of Sciences (PNAS), 79(8): 2554–2558 (Apr 1982).提出后来称为“霍普菲尔德网络”的模型,借用物理学中能量函数的思想,使网络能作为联想记忆,从不完整或有噪声的输入中恢复已存储的模式。
  3. [3] Sepp Hochreiter, Jürgen Schmidhuber. Long Short-Term Memory. Neural Computation, 9(8): 1735–1780 (Nov 1997).提出带门控记忆单元的循环神经网络结构LSTM,缓解了普通RNN因梯度消失而难以学习长距离依赖的问题。
  4. [4] Yann LeCun, Léon Bottou, Yoshua Bengio, Patrick Haffner. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11): 2278–2324 (Nov 1998).系统阐述了用梯度下降端到端训练卷积神经网络(LeNet-5)识别手写字符和文档的方法,并在MNIST数据集上做了对比,相关系统曾实际用于银行支票识别。
  5. [5] Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton. ImageNet Classification with Deep Convolutional Neural Networks. Advances in Neural Information Processing Systems 25 (NIPS 2012; the conference was renamed NeurIPS in 2018).用GPU训练的深层卷积网络(AlexNet)在ILSVRC-2012中取得15.3%的top-5测试错误率(次优成绩为26.2%),使深度学习迅速成为计算机视觉的主流方法。
  6. [6] Jia Deng et al.. ImageNet: A large-scale hierarchical image database. 2009 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pp. 248–255.发布了按WordNet层级组织、人工标注的大规模图像数据库ImageNet,为后来的ILSVRC竞赛和深度学习在视觉领域的突破提供了数据基础。
  7. [7] David Silver et al.. Mastering the game of Go with deep neural networks and tree search. Nature, 529(7587): 484–489.介绍结合策略网络、价值网络与蒙特卡洛树搜索的围棋程序AlphaGo,它于2015年10月以5:0击败欧洲冠军樊麾,是计算机程序首次在全尺寸棋盘、不让子的条件下战胜职业棋手;2016年3月又以4:1战胜李世石。
  8. [8] Tom B. Brown et al.. Language Models are Few-Shot Learners. NeurIPS 2020 (arXiv:2005.14165).训练了1750亿参数的GPT-3,展示只需在提示中给出少量示例(上下文学习,不更新参数)就能完成许多任务。
  9. [9] Yoshua Bengio, Geoffrey Hinton, Yann LeCun (recipients). 2018 ACM A.M. Turing Award. ACM (award year 2018; announced March 27, 2019).ACM表彰三人“在概念和工程上的突破,使深度神经网络成为计算的关键组成部分”;这是2018年度奖项,于2019年3月27日公布。
  10. [10] John J. Hopfield, Geoffrey Hinton (laureates). The Nobel Prize in Physics 2024. Royal Swedish Academy of Sciences / NobelPrize.org.授予霍普菲尔德和辛顿,表彰他们“为利用人工神经网络实现机器学习奠定基础的发现和发明”,分别涉及霍普菲尔德网络和玻尔兹曼机等工作。
  11. [11] Christian Szegedy, Wojciech Zaremba, Ilya Sutskever, Joan Bruna, Dumitru Erhan, Ian Goodfellow, Rob Fergus. Intriguing properties of neural networks. arXiv:1312.6199 (ICLR 2014).发现给图像加上人眼几乎察觉不到的特定扰动,就能让训练好的神经网络给出错误分类,这类输入后来被称为“对抗样本”。

全部文献、素材与许可见 来源与许可。