图像为什么不能用全连接
这一章讲三件事: 一张比手机图标还小的图,凭什么会要二百多万个可以拧的数; 参数多除了费显存(显卡上的内存 —— 训练时模型那些数要全部装在里面)还带来哪两个病; 以及三味药 —— 只看一小块、共用一套数、把图缩小 —— 各治什么。 它在全书链条里的位置是第 9 级台阶:前八章搭起来的那张网,一碰图像就炸,这一章换连法。 这一章的主走查是一张 16×16 的手写数字图,参数量从二百多万一路降到几十。 遇到的生词都在当场解释。
1. 顶层全景
第 07—09 章搭起来的东西:全连接网络
每一层的每个神经元,都连到上下层的**全部**神经元
│
│ 拿它去认一张 16×16 的小图 ——
▼
要调的数:2 269 010 个 ← 书给的,我们核过加得上
│
├── 病一 参数爆炸:图再大一点、层再深一点,这个数指数级往上翻
├── 病二 结构不灵活:换个尺寸的图就得重搭一个网
└── 病三 极易过拟合:参数多到足以把训练那批数据背下来
│
▼
三味药(第 3、4、7 节)
① 只看一小块 每个单元只连图上的一小片,不连整张
② 共用同一套数 所有小片用同一组权重
③ 把图缩小 隔一段就把特征图压小一圈
│
▼
这三味药合起来,就是**卷积神经网络**(CNN)
—— 今天所有认图的模型都是它的后代
图说:三味药是一一对症的,不是三个并列的技巧。
① 和 ② 治参数爆炸,③ 治「看得太窄」(第 7 节会讲这个新问题从哪来)。
「CNN」这个缩写从这里开始会反复出现,现在就把它拆开: Convolutional Neural Networks,卷积神经网络 —— 一类包含卷积计算的神经网络1。 「卷积」是什么,第 5 节从头讲。在讲清楚之前,你只需要记住它是「换了一种连法的网络」。
2. 先把那笔账算出来
这是本章的主走查起点,也是这一章存在的全部理由。
现象先行:这个数大到什么程度
书拿手写数字识别举例。输入是一张 16×16 的图片 —— 比手机上一个应用图标还小, 只有 256 个像素。网络这么搭2:
输入层 256 个神经元 (16 × 16 = 256,一个像素一个)
↓ 全连接
隐藏层① 1000 个神经元
↓ 全连接
隐藏层② 1000 个神经元
↓ 全连接
隐藏层③ 1000 个神经元
↓ 全连接
输出层 10 个神经元 (0—9 十个数字)
「全连接」的意思是字面的:上一层每个神经元都连到下一层每个神经元。 所以两层之间的连线数 = 上层神经元数 × 下层神经元数,每一条连线就是一个要调的数。
权重(连线):
256 × 1000 = 256 000
1000 × 1000 = 1 000 000
1000 × 1000 = 1 000 000
1000 × 10 = 10 000
─────────────
2 266 000
偏置(每个神经元一个,输入层不算):
1000 + 1000 + 1000 + 10 = 3 010
合计:2 266 000 + 3 010 = **2 269 010**
图说:这个总数是书给的,我们把加法核了一遍,对得上。
(第 05 章讲过:每条连线上的那个数叫权重,每个神经元自带的那个数叫偏置。)
这个数要有参照物才有量感
光说「二百二十七万」没 有意义。给三个对照:
| 拿什么比 | 数 |
|---|---|
| 这张图本身有多少个像素 | 256 个 —— 参数量是它的八千八百倍 |
| 车上那只摄像头出的图 | 640×480 = 307 200 个像素,是这张 16×16 图的 1200 倍 |
| 第 08 章那个手算过的网络 | 10 个参数 —— 你亲手算过它有多累 |
书自己把话说得很清楚:这仅仅是一个简单网络针对小输入的参数量。 换成 128×128 的图、10 层网络,「就会造成参数量过大,也就是参数爆炸的问题」2。
为什么是「爆炸」而不是「变多」: 因为这种连法下, 参数量随着网络规模的增大呈指数级增长 —— 「指数级」的意思很具体:每加宽一层,新增的连线数是「乘」上一层的神经元数,不是「加」上去。
参数多带来的不只是费显存
书列了三个病,参数爆炸只是其中一个3:
| 病 | 具体是什么 | 后果 |
|---|---|---|
| 参数爆炸 | 上面那笔账 |