# 从感知机到 CNN：让机器看见

> AI 系列第 4 篇。把"机器视觉" 70 年的故事讲完——从 1958 Rosenblatt 的感知机、1980 福岛邦彦那篇被冷落的 Neocognitron、1998 LeCun 的 LeNet 上美国邮局，到 2012 AlexNet 那场把 SVM 派踩进土里的 ImageNet 之战。最后回答：今天 ViT 打败 CNN 了吗？

- URL: https://tenggouwa.com/posts/from-perceptron-to-cnn/
- 发布: 2026-05-25
- 标签: ai, cnn, 计算机视觉, 历史, ai-series

> 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 Krizhevsky** 和 **Ilya 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。
