40 分钟
大模型内核:从经典机器学习到对齐与前沿

CNN 与 RNN:为图像和序列而生的两种经典网络

理解卷积神经网络如何用局部连接与权值共享高效处理网格数据,循环神经网络如何用隐状态处理序列,以及 LSTM 用门控解决长程记忆,最后看清它们的局限正是 Transformer 登场的原因

  • 理解卷积、池化、感受野与权值共享,知道 CNN 为什么适合图像
  • 理解 RNN 的隐状态递推与它处理序列的方式
  • 说清 LSTM/GRU 用门控缓解长程依赖与梯度消失的思路
  • 理解 CNN/RNN 的归纳偏置与局限,明白注意力机制为何后来居上

CNN:不让每个像素都连全部神经元

用全连接网络处理一张普通图片,参数量会大到不可训练,还丢掉了「相邻像素才有局部关系」的先验。卷积神经网络(CNN)换了个思路:用一个小卷积核在图像上滑动,每次只看一个局部窗口,并在整张图上共享同一套核权重。

典型 CNN 的层级流水线

卷积层

小窗口滑动提取局部特征(边缘→纹理→部件),权值共享、参数极少

激活

ReLU 引入非线性

池化层

下采样缩小尺寸、扩大感受野、增强平移鲁棒性

重复堆叠后展平

深层感受野覆盖全图,末端接全连接做分类

感受野指某一层的一个神经元「看得到」原图多大区域。浅层只看到局部边缘,越深层通过层层卷积与池化,感受野越大,能识别由边缘组合成的纹理、部件乃至整体。权值共享让「在左上角学到的边缘检测器」在右下角同样可用,这既减参数又带来平移不变性。

为什么「同一套小权重在整张图上滑动」就够了?因为图像有个强先验:一个「斜 45 度边缘」是边缘这件事,不会因为它出现在左上角还是右下角就改变。既然如此,就没必要给每个位置单独学一套边缘检测器——用同一个卷积核扫完整张图,哪里出现这种模式就在哪里响应。这和人看东西的方式一致:你不会因为猫从画面左边走到右边,就重新认识一遍猫。权值共享带来的平移不变性、加上局部连接带来的参数暴减,正是 CNN 在图像上一举碾压全连接的根本原因。池化则进一步把「这个特征大概在哪个区域」而非「精确在哪个像素」保留下来,于是目标挪几个像素也照样认得。

RNN:给网络加「记忆」处理序列

文本、语音、时间序列的长度可变且有先后顺序。循环神经网络(RNN)在每个时间步读入一个输入,同时维护一个隐状态 h:它把「上一步的隐状态」和「当前输入」结合,算出新的隐状态再传给下一步。于是隐状态像一条贯穿时间的记忆,理论上能携带前文信息。

RNN 沿时间步传递隐状态

t₁ 输入 + 初始隐状态 → h₁

t₂ 输入 + h₁ → h₂

t₃ 输入 + h₂ → h₃(已含前两步信息)

… 隐状态沿时间递推

但标准 RNN 的记忆很短:梯度沿时间反向传播时同样要连乘,序列一长就梯度消失,难以关联句首和句尾;而且它必须严格按顺序一步一步算,无法并行,训练很慢。

把这两个硬伤具体化就更容易理解。先说串行:处理第 100 个词必须先算完第 99 个,而第 99 个又依赖前面 98 个,哪怕 GPU 再大也没法把这 100 步摊开同时算——这和 CNN 能整图并行、Transformer 能整句并行形成鲜明对比,训练长序列时 RNN 慢得令人绝望。再说长程衰减:句首的「小明」要影响句尾的指代,信息得在隐状态里被搬运上百步,每传一步都经过一次变换,原始信号被越磨越淡;反向传播时梯度同样要连乘上百步,浅层(句首附近)的梯度几乎归零。LSTM 的门控正是为修补这一点而生,它给信息修了一条可以近乎原样流过的「传送带」,门决定什么时候该写入、什么时候该清掉,让长程信息比裸 RNN 走得远得多。但它终究没解决串行——这就给 Transformer 留下了空位。

LSTM/GRU:用「门」控制记什么、忘什么

长短期记忆网络(LSTM)给隐状态增加了细胞状态和三个门:遗忘门决定丢弃哪些旧信息、输入门决定写入哪些新信息、输出门决定对外暴露什么;GRU 是它的简化版。门是可学习的 0~1 开关,让梯度有一条相对畅通的「记忆主干道」,显著缓解长程依赖问题,曾长期是机器翻译、语音的主力。

CNN 与 RNN 的归纳偏置对照
CNN 擅长空间/网格

局部连接 + 权值共享

平移不变、层级感受野

可高度并行

代表:图像、二维网格数据

RNN/LSTM 擅长序列

隐状态沿时间递推

门控缓解长程依赖

必须串行、难并行、超长仍衰减

代表(历史):文本、语音、时序

🐍为什么最终被 Transformer 取代

RNN 串行无法并行、长程信息要经过很多步传递仍会衰减;CNN 捕捉远距离关系要堆很多层。注意力机制让序列中任意两个位置直接交互、路径最短,且整句可并行计算。下一个模块就进入 Transformer——它不是凭空出现,正是为了解决这里指出的两个硬伤。

选择题

CNN 用「同一卷积核在整张图上滑动、共享权重」主要带来的好处是?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

先查数据:标签是否正确、有没有特征和标签泄漏、是否做了归一化;再查损失与学习率:学习率太大震荡、太小几乎不动;接着看批量大小和优化器,最后才怀疑模型结构。一个极好用的冒烟测试是:用极少量样本训练,看损失能不能被压到接近零——能,说明整条代码链路是通的;不能,问题一定在实现里,先别谈调参。