all_lessons/数学的逻辑/40第 41 课 / 共 44 课

第十一部分 · 从一个神经元到现代 AI

归纳偏置:卷积如何把结构变成先验

上一课我们靠正则化通用地管住模型的容量,好让它别死记数据。但那是一味"对所有问题都一样"的补药。这一课换个思路:如果我们事先就知道数据长什么样——图像里相邻像素相关、一只猫平移几像素还是猫——为什么不把这些知识直接刻进架构本身?这就是卷积干的事,也是深度学习第一次真正"看懂"图像的原因。

线性回顾
上一课:第 39 课讲泛化——模型能不能在没见过的数据上表现好,取决于容量与数据的匹配。控制容量的通用手段是正则化:给损失加个偏爱"简单解"的项,逼模型别去硬记噪声。
留下的问题:正则化是"一视同仁"的药——不管你喂进来的是图像、声音还是表格,它都只会说"权重小一点、别太复杂"。可我们对某些数据的了解,远不止"简单点"这么笼统。一张图像自带极强的结构:相邻像素高度相关,同一个物体平移几像素还是同一个物体。把这些具体的先验知识白白扔掉,让一个全连接网络(第 38 课)从零把它们重新学出来,既浪费数据、又参数爆炸。
本课新增:归纳偏置——把关于数据结构的假设直接焊进模型架构,等于给架构装上先验;卷积——用"局部性 + 权重共享"这两条假设,让网络以极少的参数、并且平移等变地看图;这正是 CNN 掀起深度学习革命的引擎;最后推广成一句总纲——让架构的对称性去匹配数据的对称性
本课路线
(1) 全连接的两宗罪:参数爆炸,且把图像当成一串无序的数、无视它的结构。(2) 归纳偏置:把先验写进架构——和第 39 课把先验写进损失是两条平行的路。(3) 卷积:局部性 + 权重共享,参数量从"天文数字"骤降到"一个核"。(4) 一个核 = 一个特征探测器,堆起来就是层级特征;池化带来一点平移不变性。(5) 为什么它赢了,以及怎么推广到别的数据。

全连接的两宗罪

先把上一课的主角——全连接网络(第 38 课)——拉来当反面教材。它的每一个神经元,都和上一层所有输出相连,各连接一个独立权重。这在小问题上没毛病,可一旦输入是图像,它立刻犯下两宗罪。

第一宗:参数爆炸。 一张 1000 × 1000 的灰度图,摊平就是一百万个像素。若第一层只放同样一百万个神经元,光这一层的权重数就是

10⁶ × 10⁶ = 10¹²(一万亿;读作"一百万乘一百万")

一层就上万亿个参数。这既存不下、也训不动,更要命的是——按第 39 课的道理,参数越多容量越大,这么庞大的容量配上有限的图像,几乎必然过拟合

第二宗:无视结构。 这一宗更隐蔽,也更致命。全连接层做的第一件事是把二维图像摊平成一长串数,从此再也不知道哪两个像素原本是邻居。可图像明明自带两条铁打的结构:

全连接层对这两条一无所知:在它眼里,把所有像素随机打乱顺序再喂进去,结果完全一样——因为它本就把像素当成一串无序的数。它得从零开始,用海量数据去"重新发现"我们其实早就知道的常识。这是巨大的浪费。既然我们已经知道图像有这两条结构,何不把它们直接告诉模型?

归纳偏置:把先验写进架构

"把已知的结构告诉模型",在机器学习里有个正式名字:归纳偏置(inductive bias)。它指的是:我们缩小模型的假设空间,只允许它在一批"合乎情理"的函数里挑,从而让它偏向这些函数、而不是漫无目的地在所有可能里瞎找。

一句话说清归纳偏置
归纳偏置 = 一条对假设空间的限制,它把模型偏向"符合我们对数据的先验认识"的那些解。先验对了,模型就能用更少的数据学得更好;因为它不用再去搜索那些我们本就知道不合理的可能性。

这里有个和上一课漂亮的对照。第 39 课我们也在给模型施加先验——但那是把先验写进损失:加一个正则项,说"我偏爱权重小的解"。而归纳偏置这一课,是把先验写进架构本身:直接设计网络的连接方式,让某些解根本无法表达

两条施加先验的路
软的一路(第 39 课):模型仍能表达任意函数,只是在损失里加一项惩罚,把不合意的解压低——先验写在损失里。
硬的一路(本课):直接改架构,把不合意的解排除在假设空间之外,模型压根表达不出来——先验写在结构里。
卷积走的是硬的一路。下面看它具体怎么把"局部性"和"平移不变"焊进架构。

要提醒一句:归纳偏置越强,威力越大,但也越挑数据。先验押对了(图像确实有局部性),就是雪中送炭;押错了(硬把图像的先验套到毫无空间结构的数据上),反而会束缚模型。所以关键从来不是"要不要偏置",而是"这个偏置配不配你的数据"。

卷积:局部性 + 权重共享

卷积把上面两条结构,用一个极简的操作同时实现了。它的做法是:拿一个很小的、共享的权重方块——叫卷积核(kernel),比如 3 × 3——让它滑过整张图像;每滑到一个位置,就把核和它此刻盖住的那个小窗口做一次加权和,得到输出图(叫特征图)上对应的一个像素。

输出(i,j) = ∑u,v 核(u,v) × 图像(i+u, j+v)

读作"输出图上第 (i, j) 个像素,等于把卷积核里每个权重,乘上它此刻盖住的对应像素,再全部加起来"。看清楚了没有——这又是一次内积(第 11 课):核与那个小窗口拉直成两个向量,做点积。整门课学到现在,"打分"这件事反反复复都是同一招:内积。

这一个操作,同时兑现了两条先验:

参数量的对比堪称悬崖式坠落。全连接第一层要上万亿个权重;一个 3 × 3 的卷积核只有

3 × 3 = 9(个权重,检测整张图都够用;读作"三乘三等于九")

九个数,滑遍全图。参数量从"像素数 × 神经元数"这个天文数字,骤降到"一个核的大小"。这不是抠门省参数,而是因为权重共享本就是"图像"这种数据的强而正确的先验——一把好尺子,本来就该到处都能用。

平移等变,还是平移不变?
卷积严格来说是平移等变(equivariant):图像整体平移,输出的特征图也跟着一起平移——图案挪到哪,检测到它的那个亮点就跟到哪。它并不直接给你"不管在哪都输出同一个答案"(那叫不变,invariant)。不变性要靠后面的池化一点点攒出来(下一节)。先记住:卷积的核心先验,是"平移"这条对称性。

一个核 = 一个特征探测器

那这九个权重到底在干嘛?答案是:每一个核,就是一个特征探测器。填不同的数,它就检测不同的东西。看两个经典例子:

竖直边缘检测核 [[−1,0,1],[−1,0,1],[−1,0,1]]:它拿右边一列减左边一列。在图像平坦的地方(左右差不多),加权和≈0,输出发暗;一旦碰到左暗右亮的竖直边缘,左右差值大,输出就猛地变亮。于是它专门把竖直边缘点亮。把它转 90 度成 [[−1,−1,−1],[0,0,0],[1,1,1]],检测的就是水平边缘。别的核能做模糊(把邻域一平均,噪点就被抹平)、锐化、检测某种纹理……一个核,一种"探测器"。

但真正的关键在于——这些核不是手工设计的,是"学"出来的。核里那九个权重,就是网络的参数,靠梯度下降(第 25、38 课)在训练里自己调出来。你不告诉它"去找竖直边缘",它自己发现"点亮边缘"这件事有用,于是把某个核调成了边缘探测器。手工设计的边缘核(如 Sobel)只是这个庞大可能性里的一个特例。

更妙的是堆叠。一层卷积在原图上找边缘;第二层卷积作用在"边缘图"上,就能把边缘拼成角点、拼成小部件;再往上,部件拼成眼睛、车轮,最后拼成整只猫、整辆车。层级越深,特征越抽象——

像素 → 边缘 → 部件 → 物体(逐层抽象,读作"从像素堆到物体")

其间穿插一个小操作:池化(pooling),比如把每 2 × 2 的区域取个最大值,缩小特征图。它有两个作用:一是降低分辨率、减少计算;二是带来一点平移不变性——图案在小范围里挪动几像素,取最大值的结果基本不变。卷积负责"等变地找到"图案,池化负责"容忍它挪一点",两者配合,网络就既能定位、又对小位移稳健。

卷积核滑过图像:一把共享的小尺子,扫出一整张特征图
左边是一张 12 × 12 的灰度小图(亮方块+一条斜线)。选一个卷积核,看它怎么滑过整张图:红框是当前 3 × 3 感受野,右边特征图上蓝框那一个像素,就是核与红框窗口做一次内积的结果。点"滑动 ▶"让它自动扫完全图。选竖直边缘核,看输出如何只在竖直边缘处点亮;选模糊核,看整张图被抹平。
当前核
竖直边缘
参数量(核大小)
9
输出尺寸
10 × 10

对比一下:同一层若用全连接处理这张 144 像素的小图、并输出同样多的值,权重数会是 144 × 144 ≈ 2 万;而卷积只用了9 个——还滑遍全图。这就是权重共享的威力。

为什么它赢了,以及怎么推广

把上面几件事拼起来,就能解释深度学习最著名的一次爆发。2012 年,一个卷积网络(AlexNet)在图像识别竞赛上把错误率大幅甩开了当时所有手工特征的方法,机器视觉自此换了天地。它赢的根本原因,不是算力也不是运气,而是——"权重共享 + 局部性"恰好是"图像"这种数据的强而正确的先验。同样多的数据,全连接网络要拿去重新发现"平移不变"这种常识,而卷积网络一出生就免费拥有它,于是把宝贵的数据全花在真正该学的东西上。归纳偏置押对了,事半功倍。

这条思路远不止图像。把"共享一把尺子扫过整个维度"的想法搬到时间上,就得到另一类网络:RNN 在序列的每一个时间步上共享同一套权重——因为"一句话的语法规则,不该因为词出现在第 3 个还是第 30 个而改变"。这和卷积在空间上共享权重,是同一个动作,只是换了个维度。于是本课可以收束成一句总纲:

一句总纲
让架构的对称性,去匹配数据的对称性。 图像对"空间平移"对称 → 卷积在空间上共享权重;序列对"时间平移"对称 → RNN 在时间上共享权重。找准你的数据有哪种对称性,把它焊进架构,就是最有效的归纳偏置。

常见误解

一句话带走
全连接网络对图像犯两宗罪:参数爆炸、且无视结构(把像素当无序的一串)。出路是归纳偏置——把关于数据的先验直接焊进架构(不同于第 39 课把先验写进损失)。卷积用"局部性 + 权重共享"两条假设,让一把 3 × 3 的共享小核滑遍全图,用九个参数、平移等变地看图;核是学出来的特征探测器,堆叠起来就从边缘长到物体。这就是 CNN 掀翻机器视觉的引擎。总纲一句:让架构的对称性匹配数据的对称性。
下一步
卷积的先验是"局部"——每个输出只看一个固定大小的邻域。这对图像天造地设,可换成语言就露怯了:一句话里的"它",可能指代 20 个词以前的那个名词;该看谁、看多远,随内容而变,绝不是"固定的邻居"能框住的。我们需要一种连接,既能长程、又能让模型自己决定该看哪里。这,就是注意力。→ 第 41 课《注意力与 Transformer:现代 AI 的引擎》。