👻 5. 深度学习的主要架构
主要用于理解三大核心深度学习架构:CNN 擅长空间数据,RNN 擅长序列数据,Transformer 则是当今大模型的基石。
卷积神经网络(CNN)
主要用于图像处理和计算机视觉任务,能够有效捕捉图像的空间特征。
直觉类比:你拿着一块小放大镜在整张大图上一点点移动。在某个地方看到"圆圆的边缘";在另一个地方看到"尖尖的三角形"。大脑把这些局部信息组合在一起——"圆圆的边缘加上尖尖的耳朵,这一定是一只猫!"
如图所示,CNN 中新增了Convolution 层和 Pooling 层。CNN 的层的连接顺序是 Convolution → ReLU → (Pooling)(Pooling 层有时会被省略)。这可以理解为之前的 Affine → ReLU 连接被换成了 Convolution → ReLU → (Pooling) 连接。
1、卷积层(Convolution)
一、为什么需要卷积?
先想象一张 224×224 的彩色图片,展开后有 224×224×3 = 150,528 个像素。如果用全连接层处理,每个神经元要连接所有像素,参数量立刻爆炸。更糟的是,全连接层完全忽视"像素之间的空间关系"。
卷积操作用两个核心思想优雅地解决了这两个问题:局部感知 和 权重共享。
二、卷积核是什么?
卷积核(kernel / filter)本质上是一个小的数字矩阵,常见尺寸是 3×3 或 5×5。这个矩阵里的数字就是网络要学习的权重。
一个 3×3 卷积核包含 9 个权重。通过训练,这 9 个数字会自动调整成某种"检测器"——有的学会检测竖向边缘,有的检测水平线条,有的对颜色突变敏感。
三、卷积操作的具体过程
以 5×5 输入图像和 3×3 卷积核为例:
步骤一:对准位置 将 3×3 卷积核放到输入图像的左上角,完全覆盖一个 3×3 的区域。
步骤二:逐元素相乘再求和(点积) 将卷积核的每个权重,与对应位置的像素值相乘,然后把 9 个乘积全部加起来,得到一个数字。
输入区域 卷积核 乘积求和
[1, 2, 3] [-1,-1,-1]
[0, 1, 2] × [-1, 8,-1] → (-1+...) = 某个数
[1, 3, 1] [-1,-1,-1]
步骤三:滑动(Stride) 卷积核向右移动 1 格(默认步长 stride=1),重复步骤二。扫完一行后换行继续,直到遍历整张图像。
步骤四:形成特征图(Feature Map) 所有位置的点积结果拼合在一起,形成一张新的图——特征图:
输出尺寸 = (输入尺寸 - 卷积核尺寸) / stride + 1
= (5 - 3) / 1 + 1 = 3
四、不同卷积核提取不同特征
| 卷积核类型 | 权重构成 | 提取效果 |
|---|---|---|
| 边缘检测 | 中心为8,周围为-1 | 凸显像素突变处(边缘、轮廓) |
| 锐化 | 中心为5,上下左右为-1 | 加强细节,使图像更清晰 |
| 模糊(均值) | 全部为1 | 对周围均值,平滑噪点 |
| 垂直 Sobel | 左列-1,右列+1 | 只检测竖向边缘 |
一个卷积层通常同时使用数十乃至数百个卷积核,每个核产生一张特征图——这就是为什么卷积层的输出会有多个"通道"。
五、两个核心特性的本质
局部感知:每次计算只看 3×3 的小区域,而不是全部像素。这符合图像的自然规律——边缘、纹理、颜色块都是"局部现象"。
参数共享:同一个 3×3 卷积核在整张图上滑动时,权重始终是同一组。这意味着无论猫的耳朵在图片哪个位置,同一个"边缘检测器"都能找到它。这一特性带来了平移等变性,大幅减少了参数量。
六、填充(Padding)
默认情况下,卷积后特征图会缩小。为了保持尺寸,可以在图像边缘填充 0(零填充),这样 5×5 输入配 3×3 卷积核输出仍是 5×5。在深层网络中很常用,防止特征图越来越小而丢失边缘信息。
2、池化层(Pooling)
一、池化是什么?
经过卷积操作后,我们得到了特征图,但这些特征图的尺寸仍然很大。池化层的作用就是对特征图进行"压缩",在保留核心信息的前提下减小数据的空间尺寸。
类比:你拍了一张 4000×3000 的高清照片,发微信时会自动压缩成小图——核心内容还在,但文件小了很多。
二、池化的具体过程
以 2×2 的池化窗口、步长 stride=2 为例:
输入特征图 (4×4) Max Pooling 输出 (2×2)
[1, 3, 2, 4]
[5, 6, 7, 8] → [6, 8]
[3, 2, 1, 0] [3, 4]
[1, 2, 3, 4]
每个 2×2 窗口取最大值,输出尺寸变为原来的一半。
三、两种主流池化方式
| 池化类型 | 操作方式 | 特点 |
|---|---|---|
| 最大池化(Max Pooling) | 取窗口内的最大值 | 保留最显著的特征(如边缘、轮廓),实践中最常用 |
| 平均池化(Average Pooling) | 取窗口内的平均值 | 保留整体信息,较平滑,常用于网络最后一层(Global Average Pooling) |
四、池化层的三大作用
- 降低计算量:4×4 压缩到 2×2,参与后续计算的数据量直接减少 75%
- 增强鲁棒性:图像中的物体即使发生小幅平移或形变,池化后的特征依然相似
- 扩大感受野:池化后的每个像素实际上对应原图更大的区域,让后续层能"看到"更大范围的信息
现代网络的变化:ResNet、EfficientNet 等越来越倾向于用 stride=2 的卷积来代替传统池化层,因为 stride 卷积带有可学习的参数,能在下采样的同时保留更多有用信息。
循环神经网络(RNN)
适合处理序列数据,如文本、时间序列等,能够记忆之前的信息。
直觉类比:你在读一本小说,你不可能读到第 10 章时忘记第 1 章的主角是谁。每读一页,你把新内容和脑子里已有的记忆"融合"在一起,理解随着阅读不断更新。RNN 就是这样一个"边读边记"的网络。
1、为什么需要 RNN?
CNN 擅长处理固定尺寸的空间数据(图像),但现实中大量数据是"序列形式"的——一句话的单词有先后顺序,股票价格有时间先后,音频信号有采样点先后。
全连接网络和 CNN 都把输入当作"独立的一块",没有"记忆"的概念——处理第 5 个单词时,完全不记得第 1 个单词是什么。RNN 的核心创新就是引入了隐藏状态(Hidden State),让网络能"记住"之前看过的内容。
2、RNN 的核心结构
RNN 的关键公式只有一行:
其中:
- :当前时间步的输入(比如当前单词)
- :上一步的隐藏状态("记忆")
- :更新后的隐藏状态
- 、:可学习的权重矩阵
简单来说:新记忆 = f(旧记忆 + 新输入)。
3、RNN 的致命缺陷:梯度消失与梯度爆炸
理论上 RNN 可以记住任意长度的序列,但实践中它有严重的"健忘症"。当序列很长时(100个单词以上),反向传播时梯度会随着层数不断相乘,导致:
- 梯度消失:梯度越乘越小,趋近于 0,网络"记不住"早期的信息
- 梯度爆炸:梯度越乘越大,参数更新剧烈摆动,训练崩溃
这就是为什么后来产生了 LSTM 和 GRU 这两个重要的变体。
4、LSTM 与 GRU:RNN 的进化版
LSTM(Long Short-Term Memory,长短期记忆网络)
LSTM 的核心创新是引入了三个"门"机制:
| 门类型 | 作用 | 类比 |
|---|---|---|
| 遗忘门(Forget Gate) | 决定记忆中哪些信息该丢弃 | "这个人物已经死了,不用再记了" |
| 输入门(Input Gate) | 决定新信息中哪些值得记住 | "新出场的反派角色,要重点关注" |
| 输出门(Output Gate) | 决定当前步输出什么信息 | "现在问我主角的名字,我只输出名字相关的记忆" |
这三个门都是通过 Sigmoid 函数(0~1)控制的,0 表示"完全关闭",1 表示"完全打开"。通过这种机制,LSTM 能够选择性地记忆和遗忘,解决了普通 RNN 的长程依赖问题。
GRU(Gated Recurrent Unit,门控循环单元)
GRU 是 LSTM 的简化版,把三个门简化为两个:重置门(Reset Gate) 和 更新门(Update Gate)。参数更少,训练更快,效果在很多任务上与 LSTM 相当。
5、RNN 家族的应用场景
| 应用 | 输入→输出模式 | 举例 |
|---|---|---|
| 语言模型 | 多对多 (Many-to-Many) | 给定前文预测下一个单词 |
| 情感分析 | 多对一 (Many-to-One) | 一段影评 → 正面/负面 |
| 机器翻译 | 多对多 (Encoder-Decoder) | 英文句子 → 中文句子 |
| 时间序列预测 | 多对一 | 历史股价 → 预测明天的价格 |
Transformer
基于注意力机制的架构,在自然语言处理领域取得了突破性进展,是 GPT 和 BERT 等模型的基础。
直觉类比:你是一个考试中的学生,面前有一张充满信息的试卷:
- 全局审视:RNN 是从左到右一个字一个字读,而 Transformer 是一眼就看到整张试卷
- 重点标记:你会用荧光笔把重要的部分标记出来,这就是"注意力"
- 关联线索:你还会把第1题和第5题的关联信息连接起来,不管它们相距多远
1、为什么需要 Transformer?
尽管 LSTM/GRU 缓解了 RNN 的长程依赖问题,但 RNN 家族有一个天生的硬伤:必须按顺序处理。第 5 个单词的计算必须等第 4 个完成——无法并行化,训练速度很慢。
2017 年 Google 的论文《Attention Is All You Need》提出了 Transformer,完全抛弃了循环结构,纯靠注意力机制处理序列,实现了并行计算,训练效率大幅提升。
2、核心机制:自注意力(Self-Attention)
自注意力的核心思想是:对于序列中的每个元素,计算它与序列中所有其他元素的"相关性得分",然后用这个得分来加权汇总信息。
步骤一:生成 Q、K、V 三个向量
每个输入单词分别乘以三个不同的权重矩阵,得到:
- Query(查询):"我在找什么信息?"
- Key(键):"我能提供什么信息?"
- Value(值):"我实际携带的信息内容"
步骤二:计算注意力得分
用 Q 和每个 K 做点积,得分越高说明两个单词越相关。然后除以 进行缩放,再通过 Softmax 归一化:
步骤三:加权汇总
用注意力得分对 V 加权汇总,得到每个位置"融合了全局信息"的新表示。
3、多头注意力(Multi-Head Attention)
单一的注意力只能关注一种类型的关系。多头注意力把 Q、K、V 分成多个"头",每个头独立计算注意力,然后拼接在一起。
类比:一个头可能关注语法关系("猫"和"吃"的主谓关系),另一个头可能关注语义关系("猫"和"动物"的上下位关系)。多个角度同时分析,理解就更全面。
4、Transformer 的整体架构
完整的 Transformer 由 编码器(Encoder) 和 解码器(Decoder) 两部分组成:
| 组件 | 作用 | 关键操作 |
|---|---|---|
| 编码器 (Encoder) | 理解输入序列,提取全局特征 | 自注意力 + 前馈网络 + 残差连接 + 层归一化 |
| 解码器 (Decoder) | 基于编码器输出生成目标序列 | 掩码自注意力 + 交叉注意力 + 前馈网络 |
每个编码器/解码器块可以堆叠多层(原始论文用了 6 层),层数越多,模型容量越大。
5、位置编码(Positional Encoding)
Transformer 没有循环结构,所以它天然不知道单词的顺序。为了解决这个问题,需要给每个单词的嵌入向量加上一个"位置信号"——这就是位置编码。
原始论文使用正弦/余弦函数来生成位置编码,现代实践中也常用可学习的位置嵌入(Learned Positional Embedding)。
6、Transformer 的重大影响:衍生模型
Transformer 架构催生了当今最强大的 AI 模型:
| 模型 | 使用的部分 | 代表应用 |
|---|---|---|
| BERT | 仅 Encoder | 文本分类、问答、命名实体识别 |
| GPT 系列 | 仅 Decoder | 文本生成、对话、代码生成 |
| T5 / BART | Encoder + Decoder | 翻译、摘要、文本改写 |
| Vision Transformer (ViT) | 仅 Encoder(应用于图像) | 图像分类,证明 Transformer 不只能做 NLP |
Transformer 是现代深度学习的基石架构,从 NLP 到 CV 到多模态,几乎所有前沿模型都基于它的变体。
三大架构对比
| 特性 | CNN | RNN/LSTM | Transformer |
|---|---|---|---|
| 擅长数据类型 | 空间数据(图像) | 序列数据(文本、时间序列) | 序列数据(文本、图像) |
| 并行化能力 | 高 | 低(顺序依赖) | 高 |
| 长程依赖 | 有限(感受野限制) | 困难(梯度消失) | 优秀(全局注意力) |
| 参数效率 | 高(参数共享) | 中 | 低(参数量大) |
| 代表应用 | 图像识别、目标检测 | 早期 NLP、时间序列 | LLM、多模态模型 |