残差连接:今天真正弄懂
先记住:一句话定义 + 一句记忆口诀
一句话定义: 残差连接(Residual Connection),就是把输入信号 $x$ 直接拉一条“旁路”跳过多层网络,然后跟后面算出来的特征相加:$y = \mathcal{F}(x) + x$。
生活类比:写报告批注 普通网络改文章:每次修改都让学生从头背着重抄整篇,越改错漏越多。 残差连接改文章:保留原文 $x$,学生只提交修改批注 $\mathcal{F}(x)$,最终结果是“原文 + 批注”。就算批注全写废了($\mathcal{F}(x)=0$),原稿也完整保留,绝对不会比原来更差。
必要公式: $$y = \mathcal{F}(x) + x$$
符号拆解: - $x$:输入特征。 - $\mathcal{F}(x)$:中间几层网络(卷积、线性层、激活函数等)学到的“残差”(即特征的增量/差值)。 - $y$:最终输出特征。 - 关键反向传播求导: $$\frac{\partial y}{\partial x} = \frac{\partial \mathcal{F}(x)}{\partial x} + 1$$ 看那个醒目的 **$+1$**:反向传播回传梯度时,即使经过复杂的网络层导致 $\frac{\partial \mathcal{F}(x)}{\partial x}$ 衰减变小,后面那个 **$1$** 也能让梯度无损地直接回传给输入 $x$。
它解决什么问题?没有它会怎样? - 解决的问题:网络退化问题(Degradation)与梯度消失。 - 没有它会怎样:在 2015 年之前,网络叠到 20 层以上,训练误差反而比浅层网络更高。层数一深,连续的小数相乘导致梯度迅速归零,底层权重根本更新不动,深层网络完全退化。
残差连接最核心的数学公式是什么?
残差连接在反向传播中起到的最直接作用是什么?
说话人日志提取骨干中如果去掉所有残差连接,会导致什么直接现象?
1. 发展流程: - 之前怎么做:直接串联(Plain Net),像叠积木一样一层接一层(如 AlexNet、VGG)。层数一多就无法收敛。 - 为什么出现:何恺明等人在 2015 年发现深层网络的退化并非过拟合,而是优化困难。他们提出了 ResNet,利用残差学习让深层模型轻松突破 100 层。如果想用直观代码理解残差为何让深层网络可训练,建议研读《Dive into Deep Learning:ResNet》。 - 现在怎么用:它是现代深度学习的“水电煤”。不仅是卷积网络标配,现代所有主流骨干网络(Transformer、Conformer、ConvNeXt)的每个核心子模块后面,全部都包了一层残差连接与归一化(Pre-LN/Post-LN)。
2. 在音视频理解与说话人日志中的实际位置: - 说话人日志(Speaker Diarization): - 提取 Speaker Embedding(声纹特征)的骨干网络(如经典的 ResNet-34、ECAPA-TDNN),核心组件全部依赖残差块。 - ECAPA-TDNN 中,特征在多尺度一维空洞卷积(TDNN)与通道注意力(Squeeze-Excitation)处理后,都会与输入特征做残差相加,保证帧级时序特征不丢失。 - 音视频多模态(Audio-Visual Processing): - 语音识别与音频编码核心模型 Conformer 中,每个 Block 结构为:“FFN残差 → Multi-Head Self-Attention残差 → 卷积模块残差 → FFN残差”。没有残差连接,长音频特征序列在深层注意力计算中会迅速发散。
3. 与相近概念的区别: - 对比 DenseNet(密集连接): - 残差连接是逐元素相加(Element-wise Add),特征通道数不变,内存开销较小。 - DenseNet 是通道拼接(Concatenation),把前面的特征拼到后面,通道数不断膨胀。 - 对比 Highway Networks: - Highway 网络在跳跃路上加了门控开关(需要学习权重来决定通过多少)。 - 残差连接是无条件恒等映射(Identity Mapping,通道权重恒为 1),简单且更容易优化。
4. 当前局限与未来可能(区分事实与推测): - 当前局限(事实): - 残差相加要求两边张量形状(通道数、时间步、长宽)必须完全一致。如果经过步长卷积缩减了尺寸,跳跃路径必须额外加一个 $1\times 1$ 卷积或插值来对齐维度,增加了实现复杂度。 - 极深网络(如数百层)中,单纯依赖恒等残差可能出现“表征塌陷”,深层特征可能趋于冗余。 - 未来作用(推测): - 随着边缘端轻量化与超长音视频流式推理的发展,动态自适应残差(根据语音静音段自适应跳过深层计算)可能会成为低功耗部署的关键方向。
- 为什么残差连接中“逐元素相加”比“门控通过”更容易让极深网络训练成功?
- 如果输入特征尺寸和输出特征尺寸不同(比如跨步长降采样了),残差连接该怎么处理?
- 在 ECAPA-TDNN 或 Conformer 中,LayerNorm/BatchNorm 通常放在残差加法之前还是之后?为什么?