深度学习四大组件详解:残差连接、批标准化、注意力机制与深度可分离卷积
探讨四个在现代神经网络中无处不在的关键概念:残差连接、批标准化、注意力机制(以SE和CBAM为例)和深度可分离卷积。这些技术不仅让网络训练得更深、更稳定,还大幅提升了模型的表达能力与效率。我们将通过直观的数值计算过程和生活类比,帮助大家彻底理解它们的工作原理。
1. 残差连接 (Residual Connections)
背景与原理
在残差网络出现之前,研究人员发现随着网络层数加深,训练误差反而会上升(退化问题)。残差连接通过让网络学习残差映射而非直接映射来解决这一问题。其核心思想是:将输入 x 直接添加到经过若干非线性变换后的输出 F(x) 上,即输出为 H(x) = F(x) + x。
数值计算过程
假设我们有一个简单的残差块,输入是一个三维向量:
- 输入
x = [1.0, 2.0, 3.0] - 经过两个全连接层(带ReLU)后得到的残差映射输出
F(x) = [0.1, 0.2, 0.3]
则残差连接的最终输出为:
y = x + F(x) = [1.0+0.1, 2.0+0.2, 3.0+0.3] = [1.1, 2.2, 3.3]
这个简单的加法操作允许梯度直接通过跳跃连接反向传播,避免了梯度消失,使得训练上百层的网络成为可能。
生活类比:论文修改
想象你在写一篇论文,初稿是 x。经过导师的修改建议,你增加了一些新内容 F(x)(比如补充实验、润色语言)。最终提交的版本并不是完全重写的,而是在原稿基础上加上修改内容,即 x + F(x)。这样既保留了原文的精华,又融入了新的改进,而且如果修改建议不太合适,你仍可以保留原稿的基础结构。
2. 批标准化 (Batch Normalization)
背景与原理
在训练过程中,每层输入的分布会随着前一层参数的更新而变化(内部协变量偏移),导致需要更小的学习率和谨慎的初始化。批标准化通过对每一层的输入进行标准化,使其均值为0、方差为1,再引入可学习的缩放参数 γ 和平移参数 β,恢复网络的表达能力。这加速了训练,也起到了一定的正则化作用。
数值计算过程
假设一个batch包含3个样本,每个样本有2个特征:
样本1: [1.0, 4.0]
样本2: [2.0, 5.0]
样本3: [3.0, 6.0]
步骤1:计算每个特征维度的均值与方差
- 特征1均值 μ₁ = (1+2+3)/3 = 2.0
- 特征1方差 σ₁² = [(1-2)² + (2-2)² + (3-2)²] / 3 = (1+0+1)/3 ≈ 0.6667
- 特征2均值 μ₂ = (4+5+6)/3 = 5.0
- 特征2方差 σ₂² = [(4-5)² + (5-5)² + (6-5)²] / 3 = (1+0+1)/3 ≈ 0.6667
步骤2:标准化(加入小常数ε防止除零,取ε=1e-5)
标准差 σ₁ = √(0.6667) ≈ 0.8165,σ₂ ≈ 0.8165
- 样本1特征1: (1 - 2) / 0.8165 ≈ -1.2247
- 样本1特征2: (4 - 5) / 0.8165 ≈ -1.2247
- 样本2特征1: (2 - 2) / 0.8165 = 0
- 样本2特征2: (5 - 5) / 0.8165 = 0
- 样本3特征1: (3 - 2) / 0.8165 ≈ 1.2247
- 样本3特征2: (6 - 5) / 0.8165 ≈ 1.2247
步骤3:缩放和平移
假设可学习参数 γ = [1, 1],β = [0, 0],则输出就是标准化后的值。实际训练中 γ 和 β 会学习到合适的值,例如可能学到 γ = [2, 0.5],β = [1, 2],从而调整分布。
生活类比:考试成绩调整
假设三个班级(batch)的数学考试成绩,每个班级有3个学生(样本)。直接比较原始分数可能不公平,因为试卷难度不同。批标准化就像把每个班级的分数调整为平均分0、标准差1的标准化分数,这样就能公平比较不同班级学生的相对水平。然后再通过 γ 和 β 让网络自己决定是否恢复原始分布(比如如果想保留难度差异)。
3. 注意力机制(SE, CBAM)
注意力机制让网络动态地关注重要特征。这里介绍两种经典模块:Squeeze-and-Excitation (SE) 和 Convolutional Block Attention Module (CBAM)。
SE模块:通道注意力
原理
SE模块通过全局平均池化将每个通道压缩为一个标量,然后通过两个全连接层(先降维再升维)学习每个通道的重要性权重,最后将权重乘回原特征图。
数值计算过程
假设输入特征图大小为 2×2,有3个通道(为了简化,我们直接使用全局平均池化后的值):
- 通道1平均池化值: 2.0
- 通道2平均池化值: 3.0
- 通道3平均池化值: 1.0
步骤1:Squeeze(全局平均池化)
得到向量 z = [2.0, 3.0, 1.0]
步骤2:Excitation(两个全连接层)
设第一个全连接层将3维压缩到1维(即降维比例r=3),权重和偏置假设使得输出为:
fc1_out = W1·z + b1 = [0.5, 0.8, 0.3] (假设经过ReLU)
第二个全连接层将1维升回3维,并经过sigmoid激活得到权重:
fc2_out = W2·fc1_out + b2 = [0.6, 0.9, 0.4] (经过sigmoid后)
因此通道权重为 s = [0.6, 0.9, 0.4]
步骤3:Scale(加权)
假设原始特征图每个通道的所有像素值都等于该通道的平均池化值(仅用于演示),则加权后的特征图每个通道乘以对应权重:
- 新通道1: 所有像素值 × 0.6
- 新通道2: 所有像素值 × 0.9
- 新通道3: 所有像素值 × 0.4
生活类比:挑选照片颜色
你在看一幅画,SE模块就像你首先快速扫视整个画面,注意到某些颜色(通道)更突出(如红色、蓝色),然后你给这些颜色更高的“关注度”,再看画时会更加留意这些颜色的细节。
CBAM:结合通道与空间注意力
原理
CBAM依次应用通道注意力(类似SE但结合了最大池化)和空间注意力。先通过通道注意力得到通道权重,加权特征图;再通过空间注意力(在通道维度上做平均和最大池化,拼接后卷积)得到空间位置权重,再次加权。
数值计算过程(简化版)
假设输入特征图 F 尺寸为 2×2×3(高2,宽2,通道3),数值如下(每个通道的2×2矩阵):
通道1: [[1, 2], [3, 4]]
通道2: [[5, 6], [7, 8]]
通道3: [[9,10], [11,12]]
步骤1:通道注意力
- 对每个通道分别进行全局平均池化和全局最大池化:
平均池化:通道1 avg= (1+2+3+4)/4=2.5,通道2 avg=6.5,通道3 avg=10.5
最大池化:通道1 max=4,通道2 max=8,通道3 max=12 - 将这两个1×1×3的向量送入共享MLP(先降维再升维),得到两个通道注意力向量,相加后通过sigmoid得到最终通道权重
Mc。假设Mc = [0.5, 0.8, 0.9]。 - 将
Mc与原始特征图逐通道相乘,得到F'(通道加权后的特征图)。
步骤2:空间注意力
- 对
F'在通道维度上做平均池化和最大池化,得到两个2×2的特征图:
平均池化图:每个位置取3个通道的平均值,例如位置(1,1)平均 = (10.5 + 50.8 + 9*0.9)/3 ≈ (0.5+4+8.1)/3=12.6/3=4.2(这里实际应该用加权后的值,但仅示意)
最大池化图:每个位置取3个通道的最大值(加权后)。 - 将这两个2×2特征图拼接成2×2×2的张量,通过一个7×7卷积(或3×3)生成一个2×2的空间注意力权重图
Ms(经过sigmoid),假设Ms = [[0.3, 0.7], [0.5, 0.9]]。 - 将
Ms与F'逐元素相乘(每个通道的每个位置乘以对应的空间权重),得到最终输出。
生活类比:观察一张人脸照片
通道注意力让你关注肤色、发色等颜色信息,而空间注意力则让你关注眼睛、鼻子等位置。CBAM就是先决定哪些颜色重要,再在重要位置上聚焦,从而更全面地理解图像。
4. 深度可分离卷积 (Depthwise Separable Convolution)
背景与原理
标准卷积同时考虑空间和通道信息,计算量大。深度可分离卷积将其分解为两步:深度卷积(每个通道独立进行空间卷积)和逐点卷积(1×1卷积混合通道)。这大幅减少了参数量和计算量,是MobileNet等轻量级网络的基石。
数值计算过程
假设输入特征图大小为 2×2×2(高2,宽2,通道2),我们想输出 2×2×3(通道3)。为简化,我们使用步长1、padding=0,卷积核大小为2×2,输出尺寸变为1×1(因为2×2输入经2×2卷积无padding输出1×1)。实际中常padding保持尺寸,但本例为清晰展示数值。
输入数据:
通道1: [[1, 2],
[3, 4]]
通道2: [[5, 6],
[7, 8]]
第一步:深度卷积(Depthwise Convolution)
每个通道使用一个独立的2×2卷积核(无跨通道混合):
- 通道1的卷积核 K1: [[0.5, 0.2], [0.3, 0.1]]
- 通道2的卷积核 K2: [[0.1, 0.4], [0.2, 0.3]]
计算深度卷积输出(每个通道分别卷积):
- 通道1输出 = 1×0.5 + 2×0.2 + 3×0.3 + 4×0.1 = 0.5 + 0.4 + 0.9 + 0.4 = 2.2
- 通道2输出 = 5×0.1 + 6×0.4 + 7×0.2 + 8×0.3 = 0.5 + 2.4 + 1.4 + 2.4 = 6.7
得到中间特征图大小为 1×1×2:[[[2.2], [6.7]]]。
第二步:逐点卷积(Pointwise Convolution)
使用1×1卷积核将通道数从2变为3。假设输出通道1、2、3的1×1卷积核权重分别为:
- 输出通道1的核(作用于两个输入通道):[0.2, 0.8]
- 输出通道2的核:[0.5, 0.5]
- 输出通道3的核:[0.9, 0.1]
计算逐点卷积输出(每个位置上的两个通道值线性组合):
- 输出通道1 = 2.2×0.2 + 6.7×0.8 = 0.44 + 5.36 = 5.8
- 输出通道2 = 2.2×0.5 + 6.7×0.5 = 1.1 + 3.35 = 4.45
- 输出通道3 = 2.2×0.9 + 6.7×0.1 = 1.98 + 0.67 = 2.65
最终输出特征图为 1×1×3:[5.8, 4.45, 2.65]。
参数量对比:
- 标准卷积(直接2×2卷积,输入2通道,输出3通道):2×2×2×3 = 24个参数
- 深度可分离卷积:深度卷积 2×2×2 = 8个参数 + 逐点卷积 1×1×2×3 = 6个参数,总计14个参数,减少了近42%。若输入输出通道数更大,减少比例更明显。
生活类比:团队分工
深度可分离卷积好比一个团队完成一项任务。深度卷积就像每个成员独立处理自己负责的领域(比如翻译、排版、绘图),不互相干扰;逐点卷积则像团队领导将各成员的成果汇总、协调,形成最终报告。这种分工合作比每个人都要做所有事(标准卷积)效率更高,成本更低。
总结
- 残差连接让梯度畅通,使网络可以极深。
- 批标准化稳定训练,加速收敛。
- 注意力机制让网络学会聚焦重要信息,提升性能。
- 深度可分离卷积大幅降低计算成本,助力移动端部署。
这些技术并非孤立存在,它们常常共同出现在现代网络架构中(如ResNet+BN,MobileNet+SE)。理解它们,就掌握了构建高效深度学习模型的基石。希望本文的数值示例和生活类比能帮你彻底弄懂这些概念!

1560

被折叠的 条评论
为什么被折叠?



