一层一层看出一只猫
神经网络不是大脑的复制品,而是一种能把「该看什么」也学出来的模型。这一章从一个神经元讲到手机相册里的猫。

你的手机相册里存着几千张照片。在搜索框里输入「猫」,半秒钟后,所有有猫的照片排在你面前,包括那张只露出半个猫耳朵的。没有人给这些照片打过标签。手机是怎么做到的?
如果让你写一条规则来定义「猫」,你会发现根本写不出来:有尖耳朵?狗也有。有胡须?海豹也有。橘色的?有些猫是黑的。第二章讲过,这正是规则系统撞死的那堵墙。神经网络绕过了它:它不要求你说出猫是什么,只要求你给它看几十万张猫。
但「看几十万张猫」之后到底发生了什么?为什么一堆简单的乘法和加法堆在一起,就能得到「猫」这个概念?这一章回答这个问题。它比前两章多一点数学,但都是加法和乘法,请放心往下读。
一个神经元做四件事
人工神经元和大脑里的神经元只有一个相似之处:它接收很多输入,当输入足够强时才「放电」。除此之外的一切类比都只是修辞。
一个神经元做四件事。接收输入:一组数字,比如一张图片的每个像素亮度。加权:每个输入乘以一个权重,权重大的输入影响大,权重为负的输入起反作用。求和:把加权后的输入加起来,再加一个偏置。激活:把求和结果送进一个简单的非线性函数,比如「负数归零,正数照原样输出」,得到这个神经元的输出。

$$y = f\Big(\sum_i w_i x_i + b\Big)$$
权重 $w_i$ 和偏置 $b$ 就是第四章说的旋钮。一个神经元可以看作一个「微型探测器」:如果它的权重恰好在「猫耳朵」形状的位置为正、周围为负,那么当输入图像的对应位置有一个耳朵形状时,它的输出就大。
激活函数那一步看起来多余,其实关键。没有它,不管堆多少层,整个网络仍然只是一个线性变换,等价于一层,能表达的规律和一条直线差不多。有了它,多层网络可以逼近几乎任何函数。「非线性」是神经网络所有能力的来源。
激活函数只有一个要求:非线性。但选哪一个,影响训练能不能成功。
早期用的是 S 形函数(sigmoid):把任何数压到 0 和 1 之间,形状像一条平滑的台阶。它有生物学上的直觉(放电率的饱和),但有一个致命缺点:输入很大或很小时曲线几乎是平的,梯度接近零。反向传播要把梯度一层层往回乘,几层之后梯度就消失了,深层网络训练不动。这是 1990 年代深度网络难以训练的主要原因之一。
2010 年前后,线性整流函数(ReLU)流行起来:负数归零,正数照原样输出。它简单到几乎不像一个函数,但正数区域的梯度恒为 1,不会消失;计算也极便宜。2012 年 AlexNet 用它,是那几个「小改进」之一。它的问题是负数区域梯度为零,一个神经元一旦「死」了就再也不会更新,于是有了各种变体:在负数区域留一个小斜率,或者用平滑的曲线过渡。
今天的大语言模型多用 GELU 或 SwiGLU 这类平滑版本,它们在零附近不是硬拐角而是圆滑的弯,实践中训练更稳。区别都是细节,共同点是:正数区域近似线性、负数区域压制。当你在论文里看到这些名字,知道它们只是「够了才亮」的不同实现就行。
层:从像素到猫
把几百个神经元并排放在一起,接收同样的输入,就是一层。把一层的输出当作下一层的输入,一层接一层,就是一个深度网络。「深度学习」的「深」指的就是层数。
层的意义在于组合。第一层的神经元直接看像素,它们能学到的只是最简单的模式:某个方向的边缘、某种颜色的过渡。第二层看的是第一层的输出,它能把几条边缘组合成角、弧、条纹。第三层把角和弧组合成眼睛、耳朵、鼻子的形状。再往上,把眼睛、耳朵、鼻子按特定的空间关系组合起来,就是一张猫脸。

这个层级不是人设计的,是训练出来的。研究者事后打开训练好的网络去看每一层的神经元对什么最敏感,才发现了这个从简单到复杂的层级。这是深度学习最令人惊讶的发现之一:给它足够多的猫,它自己会发明「耳朵」这个中间概念,虽然它不知道这个词。
理论上,只有一个隐藏层的网络,只要足够宽,就能逼近任何连续函数。那为什么要堆很多层?
答案是效率。一个宽而浅的网络要表达「猫脸」,需要为每一种可能的猫脸位置、大小、姿态各准备一个神经元,数量是天文数字。一个深网络则可以复用:第一层学到的「边缘探测器」可以被第二层的所有神经元共享,第二层学到的「耳朵」可以被第三层在任何位置使用。层级结构让网络用指数级更少的参数表达同样复杂的函数。
这与世界的结构相符:自然界的东西本来就是层级组合的,物体由部件组成,部件由形状组成,形状由边缘组成;句子由短语组成,短语由词组成。深度网络的归纳偏置恰好匹配这种组合性,这是它在图像和语言上都成功的一个深层原因。
但深也有代价:网络越深,梯度从输出往回传时越容易消失或爆炸,训练变得困难。2015 年的「残差连接」(让每一层可以直接把输入传给下一层)解决了这个问题,网络从几十层一下到了上千层。第八章里 Transformer 的每个模块都带着这个设计。
训练:把错误往回分
网络刚初始化时,所有权重都是随机的,它对每张图片的判断都是瞎猜。训练的任务是把这几百万个权重调到正确的位置。第四章的框架完全适用:定义损失(预测的概率分布和真实标签的差距),算梯度,往下走。
问题在于「算梯度」。一个深度网络里,输出对某个第一层权重的依赖要经过后面所有层,直接求导极其繁琐。1986 年被推广的反向传播算法解决了这个问题:先做一次正向传播,从输入算到输出,记下每一层的中间结果;再从输出的误差出发,逐层往回走,用微积分里的链式法则把误差「分配」给每一层的每个权重。一次反向传播,就得到所有权重的梯度,计算量只比正向传播多一个常数倍。
反向传播的直觉是追责。输出错了,是最后一层的哪些神经元的责任?它们又是被前一层的哪些神经元误导的?一路追到第一层。每个权重按它对错误的「贡献」比例得到调整。没有反向传播,深度网络在算力上就是不可训练的。
读技术文章时会反复遇到这几个词。
轮次(epoch):把全部训练数据过一遍。训练通常要几十到几百轮。批次(batch):每次更新权重用的一小撮样本,常见的是几十到几千个。学习率:梯度下降的步长,最重要的超参数。损失曲线:训练过程中损失随步数下降的曲线,看它是判断训练是否正常最直接的办法。验证准确率:在验证集上的表现,它停止上升的时候通常就该停止训练。参数量:网络里权重和偏置的总数,是衡量模型规模最常用的数字,从几万到几万亿。
看到「一个 70 亿参数的模型训练了 3 轮,批次大小 4096,学习率 3e-4」,你现在能读懂这句话的每个词了。
第五章讲过过拟合,深度网络因为参数极多,天然是过拟合的高发区。实践中有三个几乎每个网络都在用的技巧。
数据增强。把同一张猫的照片随机旋转几度、左右翻转、稍微裁剪、调一调亮度,就得到「新的」训练样本。网络于是见到了同一只猫的很多变化,学到的是「猫的本质」而不是「这张照片的像素」。本站的手写数字实验就用了旋转、平移、缩放,这是它在手写风格多样的输入上仍然准确的原因。
随机丢弃(Dropout)。训练时每一步随机把一部分神经元「关掉」,让网络不能依赖任何一个特定的神经元,必须让知识分散冗余地存在。测试时全部打开。它像是在训练成千上万个略有不同的子网络,再把它们平均。
批归一化。把每一层的输入重新调整到稳定的均值和方差。它原本是为了让训练更快更稳,顺带也起了一点正则化的作用。第八章 Transformer 里的层归一化是它的近亲。
这三个技巧有一个共同的哲学:往训练过程里加噪声,让网络学到的东西对噪声不敏感。稳健的知识是那些在扰动下仍然成立的知识,对人也一样。
「参数量」这个数字从几万到几万亿,跨了八个数量级。下面几个锚点能建立数量感。
| 模型 | 年份 | 参数量 | 大约相当于 |
|---|---|---|---|
| LeNet-5(读支票) | 1998 | 6 万 | 一张高清照片的像素数的百分之一 |
| AlexNet(ImageNet) | 2012 | 6000 万 | 一部高清电影的一帧像素数的三十倍 |
| ResNet-50 | 2015 | 2500 万 | 比 AlexNet 少,但深六倍、准得多 |
| GPT-2 | 2019 | 15 亿 | 一本三十万字小说的字数的五千倍 |
| GPT-3 | 2020 | 1750 亿 | 地球人口的二十倍 |
| 前沿混合专家模型 | 2025 | 数千亿到上万亿总参数 | 每个 token 只用其中几百亿 |
| 人脑的突触 | — | 约 100 万亿 | 但突触和参数不是一回事 |
两个提醒。参数量和能力不是简单的正比:ResNet 比 AlexNet 参数少却强得多,结构比数量重要。参数量和运行成本也不是正比:第九章的混合专家模型总参数很大,每次只激活一小部分。看到一个参数量数字,先问它是什么结构、是总参数还是激活参数。
用四个名字串起卷积网络之后视觉模型的演化。
LeNet(1998):杨立昆的经典,五层,识别手写数字,在银行系统里读了大量支票。证明了「卷积 + 反向传播」可行,但当时没有数据和算力把它做大。
AlexNet(2012):八层,六千万参数,两块 GPU,ImageNet 上把错误率砍掉十个百分点。深度学习浪潮从这里开始。它的结构今天看很粗糙,但它证明了「更深 + 更多数据 + GPU」这条路。
ResNet(2015):残差连接让网络可以训练到一百五十二层,ImageNet 错误率降到 3.6%,首次低于人类。残差连接后来成为几乎所有深度架构的标配,包括 Transformer。
ViT(2020):视觉 Transformer。把图片切成小方块当作「词」,用第八章的注意力机制处理,在足够大的数据上超过了卷积网络。它的意义在第十一章:视觉和语言从此可以用同一种架构,原生多模态成为可能。
这四步的共同模式是:每一步都不是全新的想法,而是让「更深、更大」这件事在工程上变得可行。
本章的手写数字实验里跑的那个网络,结构可以在一行里写完:
输入 1×28×28
→ 卷积 16 个 5×5 滤波器 → ReLU → 2×2 池化 → 16×14×14
→ 卷积 32 个 3×3 滤波器 → ReLU → 2×2 池化 → 32×7×7
→ 展平 1568 → 全连接 128 → ReLU → 全连接 10 → Softmax
约八万两千个参数,在一万张测试图片上准确率 99.6%,在你的浏览器里做一次识别不到十毫秒。
几个细节说明本章讲过的原理。第一层 16 个滤波器学到的是笔画的方向和端点,你在实验里能亲眼看到。池化把 28×28 缩到 14×14,让第二层的每个滤波器看到更大的范围。展平之后的全连接层把「哪些局部模式出现在哪里」组合成十个数字的证据,Softmax 把证据变成概率。
训练时用了数据增强:随机旋转、平移、缩放,这就是为什么它对你歪歪扭扭的手写也能认。它也会犯错:把一个写得太像 1 的 7 认成 1,因为训练集里的 7 大多带横。这是第五章的抽样偏差在最小尺度上的样子。整个模型只有九百多 KB,说明「深度学习」不一定意味着「巨大」。
卷积:为图像量身定做
普通的全连接层有一个浪费:每个神经元看整张图片的所有像素。但「猫耳朵」是一个局部的模式,在图片左上角是耳朵,在右下角也是耳朵。让每个神经元都学一遍所有位置的耳朵,是巨大的冗余。
卷积层用两个想法解决它。局部连接:每个神经元只看一小块区域,比如 3×3 个像素。权重共享:同一组权重在图片的每个位置滑动,扫一遍。这样一组权重就是一个「滤波器」,它在整张图上寻找同一种模式,输出一张「这个模式在哪里出现了」的地图。一层里有几十个这样的滤波器,就得到几十张地图。再用池化把地图缩小,让下一层看到更大的范围。

这就是卷积神经网络,1989 年由杨立昆提出,1998 年在手写数字识别上成熟,2012 年在 ImageNet 上一鸣惊人。它的参数量比同等规模的全连接网络少几个数量级,却在图像上表现得好得多,因为它的结构里内置了「图像的规律与位置无关」这个先验知识。
表示学习:真正的突破
回到开头的问题:深度学习到底突破了什么?
第四章说过,机器学习的第一步是特征工程,人要决定「模型该看数据的哪些方面」。在深度学习之前,教电脑认猫的流程是:视觉专家设计一套特征(边缘方向的直方图、颜色分布、纹理统计……),把图片变成这些特征的数值,再用一个分类器在特征上学习。特征设计得好不好,决定了一切,而设计特征需要多年的专业经验。
深度网络把这一步吃掉了。它的前面几层就是特征提取器,而且是从数据里学出来的。人只需要提供像素和标签,网络自己发明中间的「边缘」「纹理」「耳朵」。这叫表示学习:学习的不只是从特征到答案的映射,还有从原始数据到特征的映射。
这是「深度学习」真正的含义,也是它能从图像扩展到语音、文本、蛋白质结构、棋局的原因:不管输入是什么,只要有足够的数据,网络就能自己找出合适的表示。第七章会看到,语言模型里的「词向量」,就是文字的表示学习。
手机相册认猫和门禁系统认你的脸,用的是同一类网络。但这两件事的社会含义完全不同。认错一只猫,无非搜索结果里混进一只狗;认错一张脸,可能是一个人被拒之门外,或者一个无辜者被当成嫌疑人。
人脸识别网络学到的不是「记住这张脸」,而是把每张脸变成一个几百维的向量,让同一个人的不同照片在这个空间里靠得近、不同人的照片离得远。这种表示对光线、角度、年龄有相当的鲁棒性,但它的错误率并不均匀:在训练数据里代表性不足的人群上,错误率可能高出几倍。这是第五章「抽样偏差」在真实世界里最严重的例子之一。
所以当一个 AI 产品涉及人而不是猫,有几个问题必须先问:数据是在什么人群上采集的?错误率按人群分开报告了吗?被识别的人知情并同意了吗?出错时有没有人工复核的通道?这些问题和网络的架构无关,但比架构重要得多。
带走一句话
神经网络是很多层简单计算单元的组合。每一层把上一层的输出组合成更复杂的模式,反向传播让每个参数为最终的错误承担相应的责任。它最大的突破是把「该看什么」也交给了学习。
去掉激活函数,一个十层的网络等价于什么?为什么?
答案
等价于一层线性变换。线性函数的复合仍然是线性的,十层矩阵乘法可以合并成一个矩阵。非线性激活是让多层结构有意义的前提。
卷积层的「权重共享」利用了图像的什么性质?它带来什么好处?
答案
图像中的模式(边缘、耳朵)在任何位置都是同一种模式。共享权重让一组参数在整张图上寻找同一模式,参数量大幅减少,也更不容易过拟合。
「表示学习」和传统的「特征工程」的区别是什么?
答案
特征工程由人决定模型看数据的哪些方面;表示学习让网络从原始数据自己学出中间特征。前者依赖专家经验,后者依赖数据量,深度学习的核心突破就是后者。
反向传播解决的是什么问题?它和梯度下降的关系是什么?
答案
梯度下降需要知道损失对每个参数的梯度。反向传播是高效计算这些梯度的方法:用链式法则把输出误差逐层往回分配。梯度下降决定「怎么改」,反向传播提供「改多少」的依据。
本章术语
神经网络的基本单元,做四件事:接收一组输入,各乘一个权重,求和加偏置,送进非线性激活函数输出。可以看作一个「微型探测器」。与生物神经元只有「输入够强才放电」这一点相似。 详
神经元求和之后的非线性函数(如「负数归零、正数照旧」)。没有它,堆多少层都只是一个线性变换;有了它,多层网络可以逼近几乎任何函数。非线性是神经网络一切能力的来源。 详
一层是并排接收同样输入的一组神经元;深度是层数。层的意义在于组合:下层学边缘,上层把边缘组成部件、把部件组成物体。深网络比宽网络更高效,因为下层学到的东西可以被上层复用。 详
高效计算深度网络中损失对每个参数的梯度的方法:先正向算出输出,再用链式法则把误差逐层往回「分配」。一次反向传播得到全部梯度,计算量只比正向多常数倍。没有它,深度网络在算力上不可训练。 详
为图像设计的网络:每个神经元只看一小块局部区域(局部连接),同一组权重在整张图上滑动(权重共享),配合池化逐层扩大视野。参数少、效果好,因为结构里内置了「图像模式与位置无关」的先验。 详
深度学习真正的突破:不只学从特征到答案的映射,连从原始数据到特征的映射也一起学。人只提供像素和标签,网络自己发明「边缘」「纹理」「耳朵」。它让同一套方法可以用于图像、语音、文本、蛋白质结构。 详
训练好的深度网络里事后观察到的现象:第一层对边缘敏感,第二层对角与纹理,更高层对部件与整体。这个层级不是人设计的,是为了完成任务而自发形成的。 详
网络中权重和偏置的总数,衡量模型规模最常用的数字,从几万到上万亿。对混合专家模型要区分「总参数」与每个 token 实际用到的「激活参数」,后者决定运行成本。 详