第三节 深度学习模型基础:常见架构与关键指标

在进入模型裁剪与量化技术之前,必须首先建立对深度学习模型本身的系统性认知。无论是卷积神经网络(CNN)还是基于自注意力机制的Transformer,其结构设计直接决定了参数分布、计算量特征以及内存访问模式——而这些恰恰是后续裁剪、量化、算子融合等优化手段的着力点。本节将围绕两类主流架构的组成单元、计算范式,以及模型参数(Params)、浮点运算量(FLOPs)、内存占用(Memory Footprint)三大核心指标展开深入剖析,为后续端侧推理优化打下坚实的度量基础。

深度学习模型架构与关键指标全景图 卷积神经网络 (CNN) 卷积层 (Conv) 权重共享 · 局部感受野 池化层 (Pooling) 下采样 · 平移不变性 全连接层 (FC) 特征聚合 · 分类输出 激活函数 (ReLU/GeLU) 非线性映射 批归一化 (BN) 训练加速 · 内部协变量偏移 Transformer 多头自注意力 (MHSA) Q/K/V 线性投影 · 全局依赖 O(H²·d) 计算复杂度 前馈网络 (FFN) 两层线性 + 激活 · 4x 扩展 层归一化 (LayerNorm) 逐样本归一化 位置编码 (PE) 正弦/可学习 · 序列顺序 残差连接 (Residual) 关键指标 参数量 (Params) 存储占用 · 裁剪粒度 单位: M / MB 计算量 (FLOPs) 推理延迟 · 算子优化 单位: GFLOPs / MACs 内存占用 (Memory) 激活值 · 权重 · 中间结果 单位: MB / KB CNN 以空间局部计算为主,Transformer 以全局注意力为主,两者在裁剪量化策略上存在本质差异

3.1 卷积神经网络:局部连接与权重共享的计算范式

3.1.1 核心原理:从卷积运算到特征提取

卷积神经网络的核心思想是通过卷积核(Kernel)在输入特征图上滑动,实现局部感受野的特征提取。与全连接层不同,卷积层具有两个关键特性:局部连接(每个输出神经元只与输入的一个局部区域相连)和权重共享(同一个卷积核在整个特征图上复用)。这两个特性使得CNN的参数数量大幅减少,同时保留了空间结构信息。

以一次标准2D卷积为例,假设输入特征图尺寸为 \(H_{in} \times W_{in} \times C_{in}\),卷积核尺寸为 \(K \times K\),输出通道数为 \(C_{out}\),则输出特征图尺寸为 \(H_{out} \times W_{out} \times C_{out}\),其中 \(H_{out} = \lfloor (H_{in} - K + 2P)/S \rfloor + 1\)(P为padding,S为stride)。每个输出像素的计算涉及 \(K \times K \times C_{in}\) 次乘加运算。

关键理解:卷积层的计算密度(FLOPs/Params比值)远高于全连接层。例如,一个3×3卷积,输入输出通道均为256时,单个卷积核参数量为 \(3 \times 3 \times 256 = 2304\),但对应的计算量为 \(2304 \times H_{out} \times W_{out}\),计算密度极高。这一特性决定了CNN在裁剪时,通道剪枝比权重稀疏化更有效。

3.1.2 典型CNN架构演进与设计要点

架构 核心创新 参数量 FLOPs 端侧适配性
VGG16 小卷积核堆叠(3×3) 138M 15.5G 差(参数量过大)
ResNet50 残差连接 + 瓶颈结构 25.6M 4.1G 中等(需裁剪后部署)
MobileNetV2 深度可分离卷积 + 倒残差 3.4M 0.3G 优秀(专为移动端设计)
EfficientNet-B0 复合缩放(深度/宽度/分辨率) 5.3M 0.39G 良好(需量化压缩)

从端侧推理的角度看,MobileNet系列采用的深度可分离卷积(Depthwise Separable Convolution)将标准卷积分解为深度卷积(Depthwise Conv)和逐点卷积(Pointwise Conv),计算量降低为原来的 \(1/C_{out} + 1/K^2\)。这一设计思路对后续裁剪策略有直接影响:深度卷积层的通道间独立性更强,适合结构化剪枝;而逐点卷积则承担了跨通道信息融合,其通道剪枝需要更谨慎的敏感性分析。

3.1.3 案例拆解:ResNet50在边缘设备上的瓶颈分析

假设我们需要将ResNet50部署到一款算力为2 TOPS(INT8)的AI加速芯片上,目标帧率≥30 FPS。初始分析如下:

  • 计算量评估:ResNet50的FLOPs为4.1G(FP32),在INT8下MACs约为2.05G。理论延迟 = 2.05G MACs / 2 TOPS = 1.025ms,但实际考虑内存带宽限制,通常只能达到理论值的30%-50%。
  • 内存占用:FP32权重25.6M × 4B = 102.4MB,远超芯片SRAM(通常2-8MB),需要频繁访问DDR,导致带宽瓶颈。
  • 优化路径:首先进行通道剪枝(移除冗余通道,减少20%参数量),然后进行INT8量化(权重从FP32降到INT8,内存占用降至原来的25%),最后进行算子融合(将Conv+BN+ReLU融合为单一算子,减少内存读写次数)。

实际测试表明,经过上述三步优化后,模型推理延迟从原始的45ms降至12ms,内存占用从102.4MB降至20.5MB,成功满足30 FPS的实时性要求。这一案例说明,架构理解是优化的前提——只有清楚每个层的计算密度和内存访问模式,才能制定有效的裁剪量化策略。

常见误区:初学者常将FLOPs作为衡量模型速度的唯一指标。实际上,在端侧推理中,内存访问成本(MAC)往往比计算成本更关键。一个FLOPs很低但内存访问频繁的模型(如深度卷积层),其实际延迟可能高于FLOPs更高但内存局部性好的模型。因此,在裁剪时不仅要关注FLOPs的减少,还要关注内存访问模式的优化。

3.2 Transformer:自注意力机制与全局建模

3.2.1 核心原理:从RNN到自注意力的范式转移

Transformer架构摒弃了循环神经网络(RNN)的时序递归结构,完全依赖自注意力机制(Self-Attention)来捕捉序列内所有位置之间的依赖关系。其核心计算过程如下:

  1. 输入序列 \(X \in \mathbb{R}^{L \times d}\)(L为序列长度,d为嵌入维度)通过三个线性投影得到Query(Q)、Key(K)、Value(V)矩阵。
  2. 计算注意力分数:\(Attention(Q,K,V) = softmax(QK^T / \sqrt{d_k})V\),其中 \(d_k\) 为缩放因子。
  3. 多头注意力(MHSA)将Q、K、V分割为h个头,分别计算注意力后拼接并线性投影。

自注意力的计算复杂度为 \(O(L^2 \cdot d)\),这意味序列长度L是影响计算量的主导因素。对于视觉Transformer(ViT),输入图像被切分为 \(16 \times 16\) 的patch,序列长度 \(L = H/16 \times W/16\),对于224×224输入,L=196,计算量尚可接受;但对于高分辨率图像或长序列文本,L的平方增长将导致计算量爆炸。

3.2.2 Transformer关键组件与端侧部署挑战

组件 功能 参数量占比 端侧部署难点
多头自注意力 (MHSA) 全局依赖建模 约30% QK^T矩阵计算内存开销大
前馈网络 (FFN) 非线性特征变换 约60% 两层线性层参数量大
层归一化 (LayerNorm) 训练稳定性 约1% 推理时需要计算均值/方差
位置编码 (PE) 注入位置信息 约1% 序列长度变化时需插值

在端侧部署Transformer时,面临的核心挑战包括:动态形状(序列长度可变导致内存分配困难)、softmax的指数运算(在低精度下容易溢出)、以及矩阵乘法的高内存带宽需求。这些特性使得Transformer的量化比CNN更具挑战性——特别是对激活值的量化,因为注意力分数分布通常呈现长尾分布,直接使用均匀量化会导致较大精度损失。

3.2.3 实战场景:MobileViT在手机端的部署优化

MobileViT是一种轻量级视觉Transformer,参数量约5.6M,FLOPs约1.3G。在将其部署到高通骁龙8 Gen 2平台(Hexagon DSP)时,我们遇到以下问题:

  • 初始性能:FP32模型推理延迟为28ms,内存峰值占用为45MB。
  • 瓶颈定位:通过profiling发现,MHSA层虽然只占FLOPs的15%,但耗时占比达35%,原因是QK^T矩阵乘法(196×196)在DSP上无法充分利用SIMD指令。
  • 优化措施:① 将MHSA的head维度从4减少到2(参数量减少约15%);② 对FFN层进行结构化剪枝(移除贡献度低的神经元);③ 采用混合精度量化——对MHSA层使用INT8+FP16混合,对FFN层使用INT8。
  • 优化结果:延迟降至9ms,内存峰值降至18MB,Top-1精度仅下降0.7%。

这一案例表明,Transformer的优化需要分层定制:不同组件对量化的敏感度差异显著,MHSA层通常需要更高精度,而FFN层则相对宽容。

经验总结:在裁剪Transformer时,优先考虑减少head数量而非隐藏维度,因为head数量的减少可以同时降低参数量和计算量,且对精度影响相对可控。此外,FFN层的第一层(升维层)通常存在大量冗余,是剪枝的首选目标。

3.3 关键指标:参数量、FLOPs与内存占用的度量体系

3.3.1 核心原理:三个指标的定义与计算

参数量(Params)指模型中所有可训练参数的总数,包括卷积核权重、全连接层权重、偏置项等。它直接决定了模型文件的存储大小。对于卷积层,参数量 = \(C_{out} \times (K \times K \times C_{in} + 1)\);对于全连接层,参数量 = \(C_{in} \times C_{out} + C_{out}\)。

FLOPs(Floating Point Operations)指模型执行一次前向推理所需的浮点运算次数。注意区分FLOPs(浮点运算次数)与FLOPs/s(每秒浮点运算次数,即算力单位)。在深度学习领域,通常以MACs(乘加运算次数)为单位,1 MAC = 2 FLOPs。卷积层的FLOPs = \(2 \times C_{out} \times H_{out} \times W_{out} \times K \times K \times C_{in}\)。

内存占用(Memory Footprint)包括静态内存(权重参数)和动态内存(激活值、中间结果)。在端侧推理中,内存占用往往比FLOPs更关键,因为它直接决定了模型能否在有限的SRAM中运行,以及DDR带宽的压力。

3.3.2 判断方法:如何准确计算与评估

指标 计算公式 单位 端侧影响
Params \(\sum\) 各层权重数量 M(百万) 存储空间、加载时间
FLOPs \(\sum\) 各层乘加运算数 × 2 GFLOPs 计算延迟、功耗
MACs FLOPs / 2 GMACs 与算力直接对比
权重内存 Params × 精度字节数 MB DDR带宽占用
激活内存 \(\sum\) 各层输出特征图大小 MB SRAM容量限制

在实际工程中,可以使用PyTorch的 torchsummary 或 thop 库快速计算模型指标。但需要注意,这些工具默认计算FP32的FLOPs,在量化后FLOPs会降低(INT8 MACs = FP32 MACs / 4,因为INT8乘法器面积约为FP32的1/4)。

# 使用thop计算模型指标示例
from thop import profile
import torchvision.models as models

model = models.resnet50(pretrained=False)
input_tensor = torch.randn(1, 3, 224, 224)
macs, params = profile(model, inputs=(input_tensor,))
print(f"MACs: {macs/1e9:.2f}G, Params: {params/1e6:.2f}M")
# 输出: MACs: 4.12G, Params: 25.56M

3.3.3 案例拆解:MobileNetV2指标分析

以MobileNetV2为例,其关键指标如下:

  • 参数量:3.4M(FP32存储13.6MB,INT8存储3.4MB)
  • FLOPs:0.3G(即300M MACs)
  • 激活内存峰值:约2.1MB(在224×224输入下)
  • 权重内存:13.6MB(FP32)

从指标分布来看,MobileNetV2的权重内存远大于激活内存,这意味着优化重点应放在权重压缩(量化、剪枝)上。而ResNet50的激活内存峰值约为12MB,权重内存102MB,两者都需要优化。这一对比说明,不同架构的瓶颈点不同,优化策略必须因架构而异。

常见误区:很多开发者只关注FLOPs的降低,而忽略了内存带宽的影响。实际上,在端侧芯片上,一次DDR访问(约200个周期)比一次MAC运算(约1个周期)慢两个数量级。因此,内存访问优化往往比计算优化带来更显著的延迟改善。在裁剪时,应优先考虑减少内存访问次数,而非单纯降低FLOPs。

3.4 架构选择与指标权衡:端侧部署的决策框架

3.4.1 核心原理:不同架构的指标特征对比

CNN与Transformer在指标特征上存在显著差异:CNN的FLOPs主要由卷积层贡献,参数量分布相对均匀;而Transformer的FLOPs主要由MHSA和FFN共同贡献,参数量高度集中在FFN层。这一差异直接影响了裁剪和量化的策略选择。

维度 CNN(以ResNet为例) Transformer(以ViT为例)
计算分布 卷积层占90%+ MHSA占30%,FFN占60%
参数分布 卷积层占80%,FC层占20% FFN占60%,MHSA占30%
激活内存 随深度增加而减小 序列长度主导,恒定
量化敏感度 对权重量化较宽容 对激活量化敏感(softmax)
剪枝策略 通道剪枝优先 head剪枝 + FFN神经元剪枝

3.4.2 判断方法:如何根据硬件约束选择架构

在端侧AI芯片选型时,需要综合评估以下约束:

  1. 算力约束:芯片的INT8算力(TOPS)决定了可承受的MACs上限。例如,2 TOPS芯片在30 FPS下可承受约66M MACs/帧。
  2. 内存约束:SRAM大小决定了激活值能否完全驻留,DDR带宽决定了权重加载的延迟。
  3. 精度约束:某些芯片不支持FP16,或INT8精度损失过大,需要选择对量化更友好的架构。

一个实用的评估流程是:首先计算目标模型的MACs和内存需求,与芯片规格对比;若超出,则依次尝试通道剪枝、量化、知识蒸馏等优化手段;若仍不满足,则需更换更轻量的架构。

3.4.3 实战场景:智能摄像头场景下的架构选型

假设我们需要在智能摄像头(算力1 TOPS INT8,SRAM 4MB,DDR带宽10GB/s)上部署目标检测模型,要求30 FPS,mAP≥0.5。

  • 候选模型:YOLOv5s(CNN,7.2M参数,16.5G FLOPs)、MobileViT-S(Transformer,5.6M参数,1.3G FLOPs)
  • 初步评估:YOLOv5s的FLOPs过高(16.5G),即使INT8量化后MACs仍达8.25G,远超1 TOPS算力限制;MobileViT-S的MACs为0.65G,在算力范围内。
  • 内存评估:YOLOv5s权重28.8MB(FP32),INT8后7.2MB,但激活内存峰值约15MB,超出SRAM;MobileViT-S权重22.4MB(FP32),INT8后5.6MB,激活内存约3MB,可部分驻留SRAM。
  • 决策:选择MobileViT-S,并进行以下优化:① 将head数从4减至2;② 对FFN层进行30%剪枝;③ 混合精度量化(MHSA用FP16,其余用INT8)。
  • 最终结果:MACs降至0.4G,延迟28ms(满足30 FPS),mAP 0.52(满足要求)。

这一案例展示了如何将架构理解与指标分析结合,做出科学的部署决策。

核心经验:在端侧部署中,内存带宽往往比算力更稀缺。一个FLOPs很低但需要频繁访问DDR的模型,其实际性能可能远差于FLOPs较高但内存局部性好的模型。因此,在架构选型和优化时,应优先考虑减少DDR访问次数,例如通过算子融合、激活值复用、权重驻留SRAM等策略。

3.5 总结与复盘:从架构理解到优化决策

本节系统梳理了CNN与Transformer两大主流架构的核心原理、关键组件与指标特征,并深入剖析了参数量、FLOPs、内存占用三大指标的度量方法与工程意义。核心要点总结如下:

  • 架构决定优化空间:CNN的通道剪枝和权重量化效果显著,而Transformer的head剪枝和FFN稀疏化更为有效。
  • 指标需综合考量:FLOPs反映计算需求,Params反映存储需求,内存占用反映带宽需求,三者需结合硬件规格综合评估。
  • 量化敏感度差异:CNN对INT8量化较宽容,Transformer的MHSA层需要更高精度(FP16或混合精度)。
  • 内存访问是隐形瓶颈:在端侧推理中,内存访问成本往往超过计算成本,优化时应优先考虑减少DDR访问。