← cd ../posts

从感知机到 CNN:让机器看见

2026-05-25

AI 系列第 4 篇。上一篇我们让神经网络"会学"了,这一篇让它"看见"。 你会发现,"让机器看见"这件事,光是把它做对,就花了 70 年。

0. 你以为机器看图很容易?

人类看一张猫的图片,"知道是猫"这件事大脑只用了 200 毫秒。但对机器,这件事难得不可思议。

为什么?因为机器看到的不是"猫",是这个:

[[ 23, 45,  67, 89, ... ],
 [ 22, 41,  68, 88, ... ],
 [ 25, 43,  70, 92, ... ],
 ...]

一张 1000×1000 的彩色照片,对计算机就是 300 万个 0–255 的数字。猫的形状、毛色、姿态——全部要从这 300 万个数字里"自己长出来"。

这就是为什么"让机器看见"是 AI 圈最早、也最难的目标之一。今天这一篇,我们走 70 年的路:

1958  感知机             ─┐
1980  Neocognitron        ├─ 神经网络派的"地下年代"
1998  LeNet               ─┘
2012  AlexNet            ──── 神经网络派封神
2015  ResNet              ─── 100 层不再是天花板
2020  Vision Transformer  ─── CNN 第一次被撼动

1. 1958:感知机——第一台"会学"的机器

故事从康奈尔大学的一个心理学实验室开始。

1958 年,Frank Rosenblatt 用 IBM 704 实现了一个叫 Perceptron 的算法。本质上,这是一台用一层神经元做二分类的机器。

它能干什么?看一张 20×20 的图片(400 个像素),判断"这是不是字母 A"。

工作原理朴素得吓人:

            像素1 ──×w1──┐
            像素2 ──×w2──┼──▶ Σ ──▶ if > 0.5: "是 A"
            ...             │        else:     "不是"
            像素400 ──×w400─┘

每个像素配一个权重 w。所有像素加权求和。超过阈值就说"是",否则说"不是"。

这台机器自己会调那 400 个 w。看错了,就把权重朝"如果当时这样调就对了"的方向挪一点。这就是上一篇讲的梯度下降的简化版。

当年的媒体疯了

The New York Times, 1958: "海军今天揭晓一台电子计算机的胚胎,它将能走路、说话、看见、写字、自我繁殖,并意识到自己的存在。"

是的,1958 年大家就觉得 AI 要起飞了。

但 11 年后,被一本书干进 ICU

1969 年,符号派旗手 Marvin Minsky 和 Papert 出版了 Perceptrons。书里用数学严格证明:

单层感知机不能学会"异或"(XOR)。

异或是小学逻辑题:相同输出 0,不同输出 1。这种最简单的"非线性"模式,感知机解决不了。

这本书的杀伤力不在于它指出了局限——它的杀伤力在于:作者是 AI 圈最有声望的人。Minsky 一发话,整个圈子的钱、人才、论文都撤走了。

一句你可以拿去吹的话: 1969 年 Perceptrons 这本书,是 AI 圈第一次"流派内斗冷掉一整条赛道"的经典案例。一篇数学正确的论文,能让一个研究方向死 25 年。

但—— 单层不行,多层不就行了吗?这一点书里也提到了。问题是 1969 年没人知道怎么训练多层网络。

这一等,等到 1986 反向传播。


2. 1980:福岛邦彦的 Neocognitron——被冷落的 CNN 之父

在反向传播 1986 年出现之前,日本有个研究者已经偷偷搞出了类似 CNN 的架构

1980 年,NHK 放送科学研究所的 福岛邦彦(Kunihiko Fukushima)发表了 Neocognitron。这是一个受人类视觉皮层启发的多层神经网络,第一次提出了:

  • 局部感受野(local receptive field):每个神经元只看图的一小块。
  • 权值共享(weight sharing):同一个"滤波器"扫遍整张图。
  • 分层抽象:底层抓边缘,中层抓部件,顶层抓物体。

这三件事就是今天 CNN 的核心思想。但当年这篇论文几乎没人在意。原因?

  1. 没有反向传播——没法训。福岛用了一种叫"无监督竞争学习"的方法,效果有限。
  2. 用 Fortran 写的,跑得慢得离谱。
  3. 数据集只有玩具级别。

福岛邦彦今天被公认为"CNN 之父",但他没拿过图灵奖。圈内人调侃他:"做了对的事,不在对的时机。"


3. 1998:LeNet——CNN 第一次上美国邮局

1989 → 1998 年间,AT&T 贝尔实验室的 Yann LeCun(后来 Meta 首席 AI 科学家)做了一件改变 CNN 命运的事:

他把福岛邦彦的思路 + 反向传播缝在了一起,搞出了 LeNet

LeNet 长这样:

输入图 (32×32)
   │
   ▼
卷积层  6 个 5×5 滤波器 → 28×28×6
   │
   ▼
池化层 → 14×14×6
   │
   ▼
卷积层 16 个 5×5 滤波器 → 10×10×16
   │
   ▼
池化层 → 5×5×16
   │
   ▼
全连接层 × 2
   │
   ▼
输出 10 个数字的概率(0-9)

这就是今天所有 CNN 的祖宗。卷积 + 池化 + 全连接 的三段式,今天大模型出现之前的 CV 论文 80% 都长这个样子。

卷积是什么?直觉版

输入图          滤波器(3×3)        输出
┌─────────┐    ┌───┐            ┌─────────┐
│ 4 0 0 1 │    │1 0│            │ x x x   │
│ 0 1 1 0 │ ⊛  │0 1│       =    │ x x x   │
│ 1 0 1 0 │    └───┘            │ x x x   │
│ 0 1 0 1 │                     └─────────┘
└─────────┘

滤波器(filter)就是一个小窗口。它在图上滑动,每滑到一个位置就做一次"点乘求和"。同一个滤波器在整张图上只用同一组权重——这就是权值共享。

每个滤波器学会一种特定的视觉模式

  • 第一层:边缘、颜色块。
  • 第二层:纹理、角点。
  • 第三层:眼睛、轮子、文字。
  • 第四层:脸、车、字母 A。

这就叫分层抽象——和人类视觉皮层的工作方式惊人地像。

LeNet 第一次商业落地

LeNet 当年被部署到美国邮政系统,识别手写邮政编码——一台机器一秒能识别几十封信。这是神经网络第一次在生产环境里替代人

但十年内,没人跟进。原因?

  • 算力不够,训大一点的网络就跑不动。
  • 数据不够,邮编识别这种"小数据集"上 SVM 反而更稳。
  • 1995 → 2010 是统计学习的时代,神经网络被认定"理论不优雅、调起来玄学"。

LeCun 后来回忆:"那些年是孤独的。Hinton 在多伦多,Bengio 在蒙特利尔,我在贝尔,全世界搞 CNN 的可能就一打人。"


4. 2012 年 9 月 30 日:AlexNet 那场地震

时间快进到 2012。

那年的 ImageNet Large Scale Visual Recognition Challenge (ILSVRC) 是 CV 圈的"奥运会"——把图片分到 1000 个类别里,看谁错误率最低。

前几年这个比赛错误率一直在 25%–28% 之间挪动,每年改善个 1%—2%。所有参赛者都用 SVM + 手工设计的特征(SIFT、HOG)。

那一年,Hinton 实验室的两个学生——Alex KrizhevskyIlya Sutskever(对,后来 OpenAI 那个 Ilya)——交了一份完全不同的作品:

  • 用一个 8 层的 CNN,没用任何手工特征。
  • 用了 ReLU 激活函数(不是当时主流的 sigmoid)。
  • 用了 Dropout 防止过拟合。
  • 跑在 两块 NVIDIA GTX 580 GPU 上,训了 6 天。

结果:错误率 15.3%。第二名(用 SVM 的)26.2%。

$ leaderboard --year=2012
1. AlexNet (CNN, Toronto)    15.3% ◀── 全场震惊
2. ISI (SVM, Tokyo)          26.2%
3. OXFORD_VGG (SVM)          27.0%
4. XRCE (SVM)                27.1%
...

10 个百分点的差距,在那个赛道里相当于让所有人原地不动。圈内一夜风向变了。

为什么 2012 行了,1998 不行?

回到上一篇讲的"算法 × 算力 × 数据 × 信仰"——

因素 1998 LeNet 2012 AlexNet
算法 卷积 + 池化 + 全连接 卷积 + 池化 + 全连接 + ReLU + Dropout
算力 单 CPU,几 MFLOPS 双 GTX 580,~1.5 TFLOPS
数据 MNIST 6 万张 ImageNet 120 万训练图
网络深度 5 层 8 层

算法只改了 20%,剩下 80% 是工程条件改善了。 这是深度学习历史的一个反复出现的规律——

大多数突破不是"想出了新算法",是"等到了能让旧算法 work 的条件"。


5. 2015:ResNet——100 层不再是天花板

AlexNet 之后所有人都想:网络越深越好对吧?

事实并不是。

VGG(2014)把网络做到 19 层,性能确实好了点。但 GoogLeNet 想做 22 层就开始训不动——梯度消失(上一篇讲过)。简单堆层数,效果反而变差。

Test Error
   │
   │          ╲___       20 层
   │     ╲___     ╲___   56 层(更差!)
   │  ╲___    
   │___________
              Training Epochs

为什么?因为梯度从输出层往输入层传,每经过一层都会衰减一点。56 层之后,最底层根本收不到梯度,等于没训。

2015 年,何凯明等人提出 ResNet(Residual Network),用一个 dumb 到极致的招数解决了:

输入 x
  │
  ├──────────────────┐
  ▼                  │
卷积层               │   ← 这条捷径叫 "skip connection"
  │                  │
  ▼                  │
+ ───────────────────┘
  │
  ▼
输出 = F(x) + x

就加一条"短路"。让信号可以"绕过"中间几层,直接传到后面。这样梯度反向传时,至少有一条路是畅通的。

ResNet 一口气做到 152 层,在 ImageNet 上错误率干到 3.57%——比人类肉眼(约 5%)还低

何凯明这篇论文是 CV 史上引用最多的论文之一。20 多万次。

这一系列论文的隐藏剧情:从"网络"到"深度网络"

LeNet (1998)        5 层
AlexNet (2012)      8 层
VGG (2014)          19 层
GoogLeNet (2014)    22 层(加 Inception 模块)
ResNet (2015)       152 层 ── 突破!
ResNeXt (2017)      200+ 层

每一次加深都带来一次小突破。ResNet 之后,"深度"这个变量基本被解锁——你想做几层就几层。


6. 2020:Vision Transformer——CNN 第一次被撼动

2012 → 2020,CV 圈是 CNN 的天下。

但 2017 年 Transformer 在 NLP 圈横空出世后,有人开始想:能不能把 Transformer 用到图像上?

2020 年 10 月,Google 团队发了 An Image is Worth 16×16 Words: Transformers for Image Recognition at Scale,俗称 ViT(Vision Transformer)

它做了一件几乎反直觉的事:

输入图 (224×224)
   │
   ▼
切成 16×16 的小块 → 196 个 patches
   │
   ▼
把每个 patch 当作一个 "token"
   │
   ▼
丢进标准 Transformer 编码器
   │
   ▼
输出分类

完全不用卷积。就把图切成小块,当文字一样处理。

刚发布时,很多 CV 老炮都嗤之以鼻——"图像和文字结构不一样,怎么可能 work?" 但 ViT 在大数据集上碾压了 ResNet

ViT 打败 CNN 了吗?答案比想的复杂

短答案:没有。 但格局变了。

CNN 的优势

  • 数据量小的时候表现更好(因为卷积自带"图像有局部性"的归纳偏置)。
  • 推理快、参数少、容易部署到手机/边缘设备。
  • 工业界 80% 的 CV 系统还是 CNN(YOLO、ResNet、EfficientNet)。

ViT 的优势

  • 数据量超大的时候性能上限更高。
  • 架构和 NLP 统一(方便做多模态)。
  • 注意力机制能捕捉长距离依赖。

今天的实际格局

  • 学术界顶会 paper:ViT 系(Swin、DeiT、ConvNeXt v2)占主流。
  • 工业界部署:还是 CNN(YOLO 系迭代到 v11,依然是最常用的实时检测器)。
  • 多模态大模型:视觉编码器普遍用 ViT,因为要和文本 Transformer 对齐。
   CNN 还活着,并且活得很好
              ▼
   ┌──────────────────────┐
   │  推理快、部署简单     │
   │  小数据集稳           │
   │  → 工业界主力         │
   └──────────────────────┘

   ViT 在大数据 + 多模态场景胜出
              ▼
   ┌──────────────────────┐
   │  研究前沿             │
   │  和 NLP 统一架构       │
   │  → 大模型的"眼睛"     │
   └──────────────────────┘

一句你可以拿去吹的话: CNN 没死,它只是被 Transformer 偷了"研究前沿"的位置。CNN 依然是部署到生产环境里"让机器看见"的事实标准。


7. 70 年下来:让机器看见的关键拐点

把这条线浓缩成 5 个时间点:

年份 事件 关键贡献
1958 Perceptron "机器可以从数据里学"
1980 Neocognitron "用局部感受野 + 权值共享处理图像"
1998 LeNet "CNN 第一次商业落地"
2012 AlexNet "GPU + 大数据 + 深网络的范式确立"
2015 ResNet "Skip connection 让任意深度成为可能"
2020 ViT "Transformer 入侵 CV,多模态时代开启"

注意这条线:每一次跨越式进步,都不是"光算法对了",而是算法 + 算力 + 数据 + 工程技巧同时到位。

这就是为什么我反复强调上一篇那句话——

AI 不是单一发明的胜利,是多个独立条件同时成熟的乘积。


8. 给你的小作业

  1. 用一张图解释 CNN 的三层抽象(边缘 → 部件 → 物体)。 提示:可以画一个识别"猫脸"的例子。
  2. AlexNet 用 ReLU 不用 sigmoid,为什么? 提示:和上一篇的"梯度消失"有关。
  3. 如果你今天要做一个手机 App 识别植物,你会用 CNN 还是 ViT?给三个理由。

下一篇钩子:让机器看见,CNN 用了 70 年才学会。 让机器读懂顺序——理解一段文字、翻译一篇文章、写出连贯的回答——又花了多久? 答案是:1986 RNN 出现 → 2014 seq2seq → 2017 Transformer。一共 31 年。 而 Transformer 这一篇 8 页的论文,标题就跟挑衅似的:Attention is All You Need。 下一篇我们看,"attention" 这个词到底是什么意思,它凭什么干掉了 RNN。