猫和狗都有毛,有眼睛,也有耳朵。要区分低层特征相似的两种对象,需要什么呢?我们会在三维空间里旋转观察感知机和 SVM 为什么会被一个平面卡住,并确认隐藏层改变坐标的样子。接着跟随 CNN 把照片变成概率的全过程以及训练过程,最后亲手试一试把核心小块贴过去、把答案也混合起来的数据增强(Attentive CutMix)。
两者都有毛,都有两只眼睛,耳朵都竖着。只靠低层特征很难区分。模型要叠加什么,才能把这两者分开?
4-2 的猫 vs 人从毛发和皮肤这样的低层特征就已经不同了。猫 vs 狗则不一样。两者都有毛,边缘地图相似,差别在于嘴部长度、鼻子大小、脸部轮廓这类局部形状。
这一篇要看三件事:为什么叠加层之后,原本一个平面分不开的东西就能分开(第 2 节);CNN 把照片变成概率的过程(第 3~4 节);以及教模型专注于关键部位的数据增强,也就是图中的 Attentive CutMix(第 5~6 节)。
图中的方法是:从猫的照片里选出模型反应最强的小块(眼睛、耳朵附近)贴到狗的照片上,再按贴上去的面积混合标签。49 格中有 6 格是猫,所以标签变成“猫 6/49,狗 43/49”。我们会在第 6 节亲手试一试。
4-1 的感知机和 SVM 只画一个平面。直接用像素坐标,一个平面分不开。解决办法是改变坐标,而由谁来决定改变的方法,正是核SVM 与多层神经网络的分水岭。
线性分类器在特征空间中画一个平面(二维时是直线,三维时是平面,更高维时是超平面),根据点落在哪一侧给出答案。单层感知机和线性 SVM 都是这种形式,两者都要求出权重 w 和偏置 b。区别只在于选择平面的标准:感知机在没有分错的点时就停下,SVM 则选择与两组点之间间隔最大的平面。所以“求权重”这件事并不是两者的区别。
简单来说这就像用一把尺子把桌上混在一起的黑珠子和白珠子分开。如果黑珠子聚在中间、白珠子围在四周,不管尺子怎么摆,都会切到一边。这时如果把桌子弯成中间凹陷的样子,黑珠子就会落到下面,白珠子留在上面,用一块水平板就能把它们分开。核SVM 是由人来决定桌子怎么弯,而多层神经网络则是自己学会怎么弯。
这是两组点:中间的一组和围在它四周的一组(说明用的虚拟数据)。用按钮切换方法,拖动图形来旋转。③ 的隐藏层(3 个神经元)是这个页面打开时在浏览器里实际训练出来的结果。
● 中间组 ● 外圈组 紫色面 = 边界平面。点击图形后也可以用方向键旋转。
| 方法 | 边界形状 | 坐标(特征)由谁定 | 在原始像素照片上 | 出现时间 |
|---|---|---|---|---|
| 单层感知机 | 一个平面 | 不改变 | 效果不好 | 1958 |
| 线性 SVM | 一个平面(间隔最大) | 不改变 | 效果不好(通常比感知机好一些) | 1990 年代 |
| 核SVM | 在原始空间中弯曲的边界 | 由人通过核来决定 | 简单照片(手写数字)效果好,自然照片有局限 | 1992~ |
| 多层感知机 · CNN | 在原始空间中弯曲的边界 | 从数据中学习 | 效果好(需要足够的数据) | 1986 年起,2012 年 CNN 飞跃 |
在手写数字(MNIST)上,核SVM 仅用像素就达到了 1% 左右的错误率(LeCun 等,1998 年的比较)。照片越复杂,人就越难选出合适的核。反过来,在训练好的 CNN 提取的特征向量上接一个线性 SVM,分类效果也很好(Razavian 等,2014)。这说明决定性能的不是分类器的种类,而是特征。
“因为 SVM 不行才出现了感知机”,这个顺序是反的。感知机(1958)先出现;在难以训练多层神经网络的 1990~2000 年代,SVM 成了主流。2012 年,深层 CNN 在大规模照片分类中大幅击败基于 SVM 的方法,潮流才再次转变。
“感知机会求权重,所以很准确”也只对了一半。求权重这一点 SVM 也一样。单层感知机和线性 SVM 一样是只有一个平面的分类器,在原始像素照片上同样会卡住。效果好的是带隐藏层的多层感知机和 CNN。
总结一下,差别不在于用 SVM 还是感知机,而在于坐标(特征)是由人决定,还是从数据中学习。像素规则会挑中没有意义的背景格子(4-4),是因为像素这种坐标本身不好;而 4-2 的滤波器和本篇的 CNN 正是通过训练改变这种坐标的装置。CNN 能胜出,除了叠加层之外,卷积的权重共享、大量带标签的数据和 GPU 运算也共同发挥了作用。
Q1. 关于单层感知机和线性 SVM 的关系,哪一项正确?
Q2. 核SVM 和多层感知机最重要的区别是什么?
Q3. 如果从隐藏层中去掉 σ(激活函数),会怎样?
隐藏层的一个神经元通过“加权和 → 带折弯的函数(tanh、ReLU)”生成一个新坐标。训练会修正生成这个坐标的方法本身,让最后的平面分得更好。在代码 1 中,对同一批点,线性 SVM 答对 57.7%,加入人选的 x₁² + x₂² 的 SVM 答对 98.8%,只有 3 个隐藏神经元的多层感知机答对 99.2%。CNN 的卷积层也是针对照片做的这种“改变坐标”。
反复进行卷积 → ReLU → 池化,照片会变小,特征图的张数会增加。最后展平后输入感知机层,就得到各类别的分数。
卷积神经网络(CNN)是把 4-2 的零件(卷积、池化)叠起来做成的模型,也是第 2 节中“通过训练改变坐标后再画平面”的多层神经网络的照片专用版。把 [卷积 → ReLU → 池化] 重复多次,照片会越来越小,而特征图的张数(通道)会增加。把最后的特征图展平成一行,输入全连接层(多个感知机),每个类别就得到一个分数,Softmax 再把这些分数变成总和为 1 的概率。
简单来说这就像公司的汇报体系。一线员工(第 1 层)汇报“这里有一条线”这样的小事实,组长(第 2~3 层)把这些汇报汇总成“这里有眼睛和耳朵”再往上报,高管(全连接层)只看摘要,决定“是猫的概率为 93%”。越往上,报告越短,内容越抽象。
| 阶段 | 作用 | 输出尺寸 | 数字个数 | 要学习的数字(参数) |
|---|---|---|---|---|
| 输入 | 像素矩阵 | 56 × 56 × 3 | 9,408 | 0 |
| 卷积1 | 16 个 3 × 3 滤波器,边缘填充 | 56 × 56 × 16 | 50,176 | 3·3·3·16 + 16 = 448 |
| 池化1 | 2 × 2 最大池化 | 28 × 28 × 16 | 12,544 | 0 |
| 卷积2 + 池化2 | 32 个滤波器 → 减半 | 14 × 14 × 32 | 6,272 | 3·3·16·32 + 32 = 4,640 |
| 卷积3 + 池化3 | 64 个滤波器 → 减半 | 7 × 7 × 64 | 3,136 | 3·3·32·64 + 64 = 18,496 |
| 展平 | 排成一行 | 3,136 | 3,136 | 0 |
| 全连接 | 2 个分数 | 2 | 2 | 3,136·2 + 2 = 6,274 |
| Softmax | 变成概率 | 2 | 2 | 0 (合计 29,858) |
请记住,最后的特征图是 7 × 7。实际中常用的 ResNet-50 输入 224 × 224 的照片时,最后的特征图也是 7 × 7 的网格(2,048 个通道),第 6 节的 Attentive CutMix 用的正是这 49 个格子。
跟着表中的数字看一看。56 × 56 × 3 的照片经过三次卷积和池化变成 7 × 7 × 64,展平后的 3,136 个数字经过全连接层,变成 2 个分数。要学习的数字一共 29,858 个。实际中常用的 ResNet-50 大约有 2,500 万个,但最后的特征图同样是 7 × 7 的网格 [R4]。
用 Softmax 把最后的分数变成概率,再按照与正确答案的差距(交叉熵)修正滤波器和权重。
请在上方选择照片。第 1 层的特征图和池化结果,是在本页面中对真实照片应用滤波器计算出来的。后面各层的反应和最后的概率,是为了展示流程而设定的示例值。
拖动全连接层给出的两个分数试试。假设正确答案是猫。
一开始,CNN 滤波器的数字 K 和全连接层的 W 全是随机的。即使输入猫的照片,得到的概率也差不多是一半一半。
告诉它正确答案后,就计算损失 L = −log p正确,再用上一集学过的梯度下降法,朝着损失减小的方向把所有数字一点点修正。这个梯度从输出往输入方向逐层反向传递(反向传播)。
把这个过程在几万张照片上反复进行,即使没人指定,第 1 层滤波器也会变成边缘滤波器的样子,后面各层的滤波器则会对眼睛或耳朵产生反应。连“看哪些特征”都从数据中学到,这是它与由人来设定特征的方式最大的不同。
Q1. 经过 CNN 后,特征图的形状大体会怎样?
Q2. 如果分数 z 是 (2.0, 2.0),Softmax 概率是多少?
Q3. 训练过程中会被修正的是?
Softmax 把分数变成和为 1 的概率。交叉熵在给正确答案的概率越低时给出越大的惩罚。训练就是朝着让这个惩罚减小的方向,把所有滤波器的数字和权重一点点修正,这个梯度从输出往输入方向逐层反向传递(反向传播)[R3]。
低层特征(毛发的边缘)很相似。区分二者的是第 3 层以后看到的局部特征,比如嘴部长度、鼻子大小、脸部轮廓。
这一次低层特征很相似。两者都有毛,边缘强度图在整张照片上都很密集,两只眼睛和竖起的耳朵也一样。只靠第 1~2 层的特征很难区分。
差别在于局部的形状。狗的嘴部向前伸得很长,鼻子大,有时张着嘴露出舌头。猫的脸圆圆的,鼻子和嘴都小。第 3 层以后观察“眼睛·鼻子·嘴部排列”的特征,能把两者区分开。
于是出现了一种技巧:教模型不要关注整张照片的氛围(毛色、背景),而要专注于这些关键部位。第 6 节讲的就是第 1 节图片中出现的 Attentive CutMix。
在成对比较中切换到“边缘强度”视图,两张照片都因为毛发而边缘图很密集。再把分辨率降到 7,看看什么先消失。要让模型看的是脸的局部,而不是毛色或背景(草地)这类容易的线索,如何提供训练数据就变得很重要。这就是第 6 节的数据增强。
当照片太少,或者模型依赖了不相干的线索时,就改变或混合训练照片,教它“应该看什么”。
| 方法 | 作用 | 标签呢? | 教会它的 |
|---|---|---|---|
| 翻转·裁剪·旋转 | 左右翻转,或裁下一部分放大 | 不变 | 位置·方向变了也是同一对象 |
| 改变亮度·颜色 | 做成像是不同光照下的照片 | 不变 | 看形状而不是光照 |
| Cutout | 擦掉一个矩形 | 不变 | 一部分被遮住也能认出 |
| Mixup | 把两张照片半透明叠加 | 按比例混合 | 减少过度自信 [R7] |
| CutMix | 贴上另一张照片的矩形碎片 | 按贴上的面积混合 | 只看局部也能认出 [R5] |
| Attentive CutMix | 只挑反应大的碎片贴上 | 按贴上的面积混合 | 专注于关键部位 [R6] |
在 Colab 代码 2 中,手写数字每类只给 20 张(共 200 张)来训练同一个 CNN,直接训练的测试准确率为 93.3%,用 CutMix 则为 95.2%(3 个随机种子的平均)。这是照片少时混合拼贴起作用的一个例子。数据和模型不同,效果的大小也会不同。
方法分四步。(1) 把猫的照片输入已经训练好的 CNN,得到最后的 7 × 7 特征图。(2) 在 49 个格子中选出反应最大的 k 个。(3) 把这些格子对应的猫照片碎片,贴到一张随机狗照片的相同位置。(4) 标签也按面积比例混合。k = 6 时,猫 6/49,狗 43/49。
注意:论文是根据在 ImageNet 上训练的 ResNet-50 的真实反应来挑选碎片的。这里没有用训练好的模型,而是用“格子内边缘强度的平均值”来代替反应。因此,除了眼睛、鼻子之外,额头条纹或背景边缘这类只是边缘多的格子也可能被选中。真正训练好的模型会选哪些格子,可能和这里不同。
数据增强是不改变模型结构、只改变训练照片来提升性能的方法。它有正则化效果,能减少过拟合,也就是模型只对训练照片拟合得过分的情况。请记住,上面的实践用“格子内的边缘强度”代替了训练好的 ResNet-50 的反应。
两段代码都只使用 Colab 默认安装的库和内置数据。点击“下载笔记本(.ipynb)”后,在 Colab 中通过文件 → 上传笔记本打开,或者复制后粘贴到新笔记本的单元格中。
用感知机、线性 SVM、人工挑选的变换、RBF 核SVM、3 个隐藏神经元的多层感知机(用 numpy 亲手实现反向传播)来比较中心和外圈两群点,并计算 Softmax 和交叉熵。
在 8 × 8 的手写数字中每类只用 20 张训练,用直接训练 / CutMix 两种方式训练同一个 CNN,以 3 个随机种子比较测试准确率。如果想换成猫·狗照片,就从 keras.datasets.cifar10 中选出第 3 类(猫)和第 5 类(狗),并把 Input 的形状改为 (32, 32, 3)。
这是粘贴到 ChatGPT、Qwen、Claude 等 AI 助手中的提示词。点击“复制”,所选代码会一起附在提示词后面。把〔 〕里的内容换成你自己的情况即可。
AI 的回答只是起点。它推荐的论文·数值·库函数一定要对照原文和官方文档核实。如果在竞赛·论文中得到了 AI 的帮助,要按照主办方和期刊的规定说明使用的事实和范围。
与正文中黄色虚线下划线对应的词典。整个系列使用相同的写法。点击章节名可以跳到首次出现的位置。
类比是理解的第一步,但也可能成为误解的种子。人眼·人脑类比标注了对应程度。直接 有依据表明确实在做同样的事 · 部分 只有部分性质相似 · 无 尚未发现对应的东西
| 概念 | 日常类比 | 人眼·人脑类比 | 类比不成立的地方 |
|---|---|---|---|
| 隐藏层 | 把揉皱的纸展开,再用尺子分开 | 无 | 纸是人来展开的,而隐藏层会学习“怎么展开”。而且实际上这发生在几百维空间中,肉眼看不到 |
| CNN 的层 | 基层员工 → 组长 → 高管的汇报体系 | 部分 视觉通路也是从视网膜 → 初级视觉皮层 → 高级区域,越往后越对更大的区域和更复杂的形状作出反应 | 大脑里有很多反向下行的连接和注意机制,而 CNN 只朝一个方向计算 |
| Softmax | 把得票数换算成得票率 | 无 | 得票率是真实的投票结果,而 Softmax 概率只是模型的“自信程度”,不一定等于答对的概率 |
| 反向传播 | 结果出错时,从最后一道工序开始倒着追究责任 | 无 | “分摊”责任的多少是用求导精确算出来的,并不是由人来判断谁犯了错 |
| CutMix | 把两张照片剪下来拼成拼贴画,按拼贴的面积比例分配答案 | 无 | 如果贴上的碎片只有背景,就会产生“猫 30%”这样错误的答案。Attentive CutMix 能减少这种情况 |
E-1 作者简介 · E-2 学术参考文献 · E-3 图片·数据参考资料
这是给讲师、在职培训(OJT)负责人和辅导老师的运营指南。时间为预估值,请根据实际课堂进行调整。
| 对象 | 学完 4-1·4-2 的大学生和上班族;需要讲清深度学习“为什么要深”的从业者 |
|---|---|
| 预备知识 | 4-1 的感知机·SVM,4-2 的卷积;指数函数 e^z 的含义 |
| 学习目标 | ① 能举出线性分类器无法处理的数据作为例子,并说明隐藏层改变坐标的原理 ② 能计算 CNN 各层的输出尺寸和参数数量 ③ 能计算 Softmax·交叉熵,并说明 CutMix 的答案混合 |
| 预计时间 | 阅读 45~55 分钟 · 实践演示 25 分钟 · Colab 实践 30 分钟(代码 1 10 分钟,代码 2 运行 1 分钟 + 解读 19 分钟) |
导入 5 分钟(章节 1)→ 章节 2 三维图 15 分钟 → 章节 3 尺寸表 10 分钟 → 章节 4 Softmax 计算器 10 分钟 → 章节 6 CutMix 5 分钟 → 小测验 5 分钟。
把章节 2 换成自己数据中“用平面分不开的案例”讨论 20 分钟 → 用章节 3 的表计算自己输入尺寸下的参数数量 15 分钟 → 在章节 6 的增强表中挑选适合自己照片的方法 20 分钟 → 把代码 2 改成自己照片较少的情况并运行 35 分钟。
入门者只学章节 1·2·4。中级学习者让他们亲手重算章节 3 表中的参数数量,并把代码 1 中反向传播的三行代码与公式逐行对照。
| 章节 | 停下来提的问题 | 操作技巧 |
|---|---|---|
| 1 问题 | “猫和狗有什么共同点?” | 先问图像中的 6/49 是从哪里来的 |
| 2 为什么要叠加层 | “为什么平面不管立在哪里,总有一边会被切开?” | 按 ① → ② → ③ 的顺序点击并旋转图形 |
| 3 CNN 结构 | “池化层要学习的数字有几个?” | 在表中上下对照尺寸列和参数列 |
| 4 概率 | “分数相同时,概率是多少?” | 在 Softmax 计算器中把两个分数调成一样 |
| 5 猫 vs 狗 | “只看毛色来区分会有什么问题?” | 看成对比较中的边缘强度和分辨率 7 |
| 6 数据增强 | “猫的碎片占 10 格时,答案是多少?” | 把 k 滑块从 1 → 15 移动,观察答案条 |
| 误解 | 正确解释 | 要展示的画面 |
|---|---|---|
| 只要叠加层,就会得到弯曲的边界 | 没有折线函数(激活函数),叠加再多层也等同于一个平面 | 章节 2 小测验 Q3 |
| SVM 无法做非线性分类 | 核SVM 能画出弯曲的边界,只是核要由人来选 | 章节 2 的 ② 和代码 1 的 RBF 结果 |
| Softmax 概率 = 答对的概率 | 那只是模型的自信,可能与实际正确率不同(校准问题) | 在章节 4 的计算器中把分数拉开很大差距 |
| CNN 表现好是因为要学习的数字多 | 由于反复使用同一个滤波器,参数比全连接网络少得多 | 章节 3 表中的 29,858 |
| 数据增强只是增加照片数量 | 它是教模型该看什么的正则化手段,也有混合答案的方法 | 章节 6 的增强表和代码 2 |
因为边界只是一个平面(二维中是一条直线),不管朝哪个方向立,都会把外圈那一群切成两半。代码 1 中的结果是 57.7%。
3 × 3 × 16 × 32 + 32(偏置)= 4,640 个。
概率 (0.5, 0.5)。损失 −log 0.5 ≈ 0.693。
猫 10/49 ≈ 0.204,狗 39/49 ≈ 0.796。
训练照片只有 200 张,数量很少,两个模型都能把训练照片全部答对。差别出现在第一次见到的测试照片上(过拟合的程度)。
在代码 1 中把隐藏神经元数改为 1、2、3、8,把准确率整理成表格,写出从几个开始能区分中心和外圈,以及原因。
把代码 2 的 PER_CLASS 改为 10、20、50、100,用 3 个随机种子报告 CutMix 的效果(测试准确率差异)如何随照片数量变化。
| 入门者 | 章节 3 的表和章节 4 的公式可以跳过。一定要亲手试一试章节 2 的三维图和章节 6 的 CutMix 实践 |
|---|---|
| 进阶 | 把 Mixup 和 CutMix 都加入代码 2 进行比较,并让学生汇报混合答案的增强如何改变模型的自信(Softmax 最大值) |
| 延伸学习 | 3-3 图像与 CNN · 4-4 吉娃娃 vs 松饼(高层特征与模型的局限) |
| 讲师用资料 | 小测验的评分标准和作业参考答案可以在教师用答案页面(4-3)中查看 |
你已经读完了《4-3 猫 vs 狗》篇。实验室的伙伴们每人用一句话为你总结。