从数据中学习
如果规则写不完,能不能让机器自己从例子里学?
1986 年,反向传播让多层神经网络能从例子里自己调整参数[1]。又过了二十多年,数据和显卡才让这条路真正走通。
网络变深,数据变多
从反向传播到 AlexNet,这条路走了二十多年:方法早就有了,等的是足够的数据和算力。
- 1982
霍普菲尔德网络:把记忆存成“低谷”
J. J. Hopfield
- 解决了什么
- 神经网络能存储和回忆什么,缺少一套像物理学那样清楚的数学描述。
- 带来了什么变化
- 借用物理学中“能量”的思想,把记忆存成网络的稳定状态,能从残缺或有噪声的输入里恢复出存过的模式[2]。
- 1986
反向传播:多层网络能训练了
Rumelhart、Hinton、Williams
- 解决了什么
- 单层感知机分不开异或这类问题;多层网络分得开,但没人知道中间层的权重该怎么调。
- 带来了什么变化
- 把输出的误差从后往前逐层分摊,算出每个权重该往哪个方向调、调多少,隐藏层因此能自己学出有用的中间特征[1]。
- 1997
LSTM:记得更久的循环网络
Hochreiter、Schmidhuber
- 解决了什么
- 处理序列的循环网络,误差往回传几步就几乎消失,学不会相隔很远的依赖。
- 带来了什么变化
- 加入带“门”的记忆单元,决定哪些信息保留、哪些丢掉,缓解了梯度消失,后来成为处理语音和文字序列的常用结构[3]。
- 1998
LeNet-5:卷积网络读手写字
LeCun、Bottou、Bengio、Haffner
- 解决了什么
- 识别手写字,过去要靠人事先设计该提取哪些笔画特征。
- 带来了什么变化
- 卷积网络直接从像素学起,用梯度下降端到端训练;相关系统曾实际用于银行支票识别[4]。
- 2009
- 2012
AlexNet:显卡上的深层卷积网络
Krizhevsky、Sutskever、Hinton
- 解决了什么
- 图像分类主要依赖人工设计的特征,ILSVRC-2012 的第二名用的仍是这种方法。
- 带来了什么变化
- 在两块 GTX 580 显卡上训练五六天,top-5 错误率 15.3%,第二名是 26.2%[5]。深度学习从此迅速成为视觉领域的主流。
- 2016
AlphaGo:深度网络加搜索下围棋
Silver 等,DeepMind
- 解决了什么
- 围棋局面多到无法穷举,靠搜索和人写的评估规则下不过职业棋手。
- 带来了什么变化
- 用神经网络评估局面、挑选候选落子,再配合树搜索;2015 年 10 月 5:0 胜樊麾,2016 年 3 月 4:1 胜李世石[7]。
训练就是调参数:梯度下降 Gradient Descent · 梯度下降
1一句话
神经网络里有大量可调的数,叫参数。训练就是反复测量“错了多少”,再把每个参数朝让错误变小的方向挪一小步。
2打个比方
像在大雾里下山:看不见山谷在哪,只能用脚试探哪边最陡,朝下坡迈一步,再试探,再迈一步。
步子太小,天黑也走不到;步子太大,会从山谷这边一脚跨到对面山坡上,越走越高。每一步迈多大,就是学习率。
3动手试
网点越大,损失越高等高线点图上任意位置可以换起点
第 0 步
4怎么做到的
先定义一个损失函数,用一个数衡量模型错了多少,比如预测值和正确答案之差的平方。参数的每一种取值都对应一个损失,合起来像一片起伏的地形。
梯度指向这片地形在当前位置最陡的上坡方向,由损失对每个参数的偏导数组成。梯度下降每一步只做一件事:参数 ← 参数 − 学习率 × 梯度。演示里只有两个参数,地形能画在纸上;真实网络的参数有几百万到上千亿个(GPT-3 有 1750 亿个[8]),原理相同。
实际训练时,每一步通常只用一小批样本来估计梯度,叫随机梯度下降。AlexNet 每批用 128 张图,把整个训练集大约过了 90 遍[5]。
做不到什么
- 梯度只说明脚下哪边是下坡,不保证走到最低点:可能停在一个小坑(局部极小)里,也可能在平地上走得极慢。演示里点左边那个小坑附近试试。
- 学习率要靠试:太小训练太慢,太大会来回震荡甚至发散。
- 损失降低只说明在训练数据上错得少了,不代表在没见过的数据上也一样好(见本章第 4 节)。
反向传播:把误差分摊回去 Backpropagation · 反向传播
1一句话
输出错了,每个权重该负多少责任?反向传播从输出层往回,一层层算出每个权重对误差的影响,也就是梯度。
2打个比方
像一条流水线出了次品:先看最后一道工序偏了多少,再往前追问上一道,它的偏差里又有多少是更前面传下来的。追到源头,就知道每个环节该调多少。
关键在于顺着同一条线往回追:每一层只用到后一层已经算好的结果,不必为每个权重从头算一遍。
3动手试
- 1前向传播
- 2算损失
- 3反向传播
- 4更新参数
准备
| 参数 | 当前值 | 梯度 ∂L/∂· | 更新后 |
|---|---|---|---|
| w1 | — | — | |
| w2 | — | — | |
| w3 | — | — | |
| w4 | — | — | |
| w5 | — | — | |
| w6 | — | — | |
| b1 | — | — | |
| b2 | — | — | |
| b3 | — | — |
4怎么做到的
训练的每一步分四段:前向传播,输入逐层算到输出;算损失,比较输出和正确答案;反向传播,用微积分的链式法则,从输出层开始往回逐层计算损失对每个权重的偏导数;更新,用上一节的梯度下降改动所有权重。
1986 年,Rumelhart、Hinton 和 Williams 在《自然》发表论文,展示这套方法能训练带隐藏层的网络,隐藏层会自己学出有用的中间表示[1]。类似的数学方法此前已有人提出,这篇论文让它在神经网络研究中广为人知。
反向传播算一遍的计算量,和前向传播在同一个数量级。所以网络再大,训练一步的代价也只是“来回各算一遍”的规模,这是它能用到几十亿参数上的原因。
做不到什么
- 层数很多时,误差往回传会越乘越小(梯度消失)或越乘越大(梯度爆炸),早期的深层网络和循环网络因此很难训练[3]。
- 它只告诉每个权重该往哪边调,不说明这个权重“代表”什么。
- 反向传播是一种数学方法,不是对大脑学习方式的描述;大脑是否以类似方式学习,目前没有定论。
卷积:看图的方式 Convolution · 卷积神经网络
1一句话
卷积用一个小窗口在整张图上滑动,每到一处都做同一组乘法再加总,用来找边缘、拐角这类局部图案。
2打个比方
像拿一枚小印章在纸上逐格比对:印章上刻着一道竖线,哪里的图案和它吻合,哪里就留下深色的印记。换一枚刻着横线的印章,找到的就是横线。
卷积网络里有很多枚这样的“印章”,叫卷积核。它们刻的图案不是人设计的,而是训练时从数据里学出来的。
3动手试
左亮右暗处为正,左暗右亮处为负
卷积核
窗口里的九个乘积
4怎么做到的
卷积核是一个小网格,比如 3×3 的九个数。把它盖在图像某个位置上,九个数分别乘以底下的九个像素,再加起来,就得到输出图上的一个点;然后挪一格再算,扫遍整张图,得到一张特征图。同一个卷积核在每个位置用的是同一组数,所以参数很少,而且图案出现在哪里都能被找到。
卷积层一层层叠起来:前几层找边缘和笔画,后面的层把它们组合成更大的形状。1998 年的 LeNet-5 用这种结构识别手写字符[4];2012 年的 AlexNet 有 5 个卷积层和 3 个全连接层,共 6000 万个参数[5]。
演示里的卷积核是图像处理中人手设计的经典核,用来说明计算过程;真实网络里卷积核的数值都由训练得到。
做不到什么
- 卷积只看局部窗口,要看到整张图得叠很多层,图上相隔很远的两处之间的关系不容易捕捉。
- 对训练中很少见到的变化,比如大角度旋转、奇特的光照,仍然容易认错。
- 在图上加一点人眼几乎察觉不到的特定扰动,就可能让网络给出完全错误的分类,这类输入叫对抗样本[11]。
数据、算力与过拟合 Overfitting · 数据与算力
1一句话
模型越灵活,越能贴合训练数据,也越容易连噪声一起背下来。要让它学到规律而不是死记,就需要更多数据和更强的算力。
2打个比方
像备考只刷了十道题:把这十道的答案背得一字不差,换一道新题照样不会。见过的题越多,越难靠死记过关,只能去摸清题目背后的规律。
3动手试
训练数据 测试数据(训练时没见过) 模型的拟合 真实规律
训练点 10训练误差 —测试误差 —
4怎么做到的
检验一个模型,要用它训练时没见过的数据,叫测试集。训练误差一直下降、测试误差却开始上升,就是过拟合:模型把训练数据里偶然的噪声也当成了规律。
2012 年前后,三件事碰到了一起。数据:ILSVRC 提供了约 120 万张带标注的训练图[5],来自 ImageNet[6]。算力:AlexNet 用 GPU 实现卷积运算,在两块显卡上训练五六天就能完成[5]。方法:用平移、翻转扩充训练图(数据增强),训练时随机让一半隐藏神经元暂时不工作(dropout),都在减轻过拟合[5]。
从此,“数据越多、模型越大、效果越好”成了深度学习的常见经验。这条经验后来被量化成规模定律,见第 04 章。
做不到什么
- 数据越多,混进来的错误标注和偏见也越多,模型会把它们一起学进去。
- 算力和电力成本随规模快速上升,最大规模的训练只有少数机构负担得起。
- 测试集上表现好,只说明在和训练数据相似的数据上表现好;换一个场景,比如另一家医院的影像,效果可能明显下降。
这一章留下的问题
- 01
图像是一张固定大小的网格,文字却是一串长短不一的序列。网络该怎样读一句前后相连的话?
- 02
循环网络和 LSTM 要一个词接一个词地算,句子一长就慢,开头的信息也容易丢。能不能让所有位置同时计算?
- 03
词在网络里该用什么样的数字来表示?下一章从“词变成向量”讲起,一直讲到注意力和 Transformer。
本章参考文献
- [1] David E. Rumelhart, Geoffrey E. Hinton, Ronald J. Williams. Learning representations by back-propagating errors. Nature, 323(6088): 533–536.展示了用反向传播算法训练多层神经网络,使隐藏层能学到有用的内部表示,推动了1980年代神经网络研究的复兴(反向传播的数学思想此前已有人提出)。
- [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] Sepp Hochreiter, Jürgen Schmidhuber. Long Short-Term Memory. Neural Computation, 9(8): 1735–1780 (Nov 1997).提出带门控记忆单元的循环神经网络结构LSTM,缓解了普通RNN因梯度消失而难以学习长距离依赖的问题。
- [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] 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] 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] 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] Tom B. Brown et al.. Language Models are Few-Shot Learners. NeurIPS 2020 (arXiv:2005.14165).训练了1750亿参数的GPT-3,展示只需在提示中给出少量示例(上下文学习,不更新参数)就能完成许多任务。
- [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] John J. Hopfield, Geoffrey Hinton (laureates). The Nobel Prize in Physics 2024. Royal Swedish Academy of Sciences / NobelPrize.org.授予霍普菲尔德和辛顿,表彰他们“为利用人工神经网络实现机器学习奠定基础的发现和发明”,分别涉及霍普菲尔德网络和玻尔兹曼机等工作。
- [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).发现给图像加上人眼几乎察觉不到的特定扰动,就能让训练好的神经网络给出错误分类,这类输入后来被称为“对抗样本”。
全部文献、素材与许可见 来源与许可。