深夜的大饭店后厨里,张师傅看着墙上挂着的八口炒锅摇了摇头。他即将退休,可毕生的厨艺总得有人继承——徒弟小林准备在街角开个小摊,那里只有一口灶、三尺台。把大饭店的豪华后厨浓缩成小摊的方寸之地,又让小林的手艺不减当年,这几乎是每个边缘 AI 工程师每天都要面对的难题。模型剪枝,是把多余的锅碗瓢盆一件件搬走;知识蒸馏,是张师傅亲自炒菜,让小林从色香味里尝出火候与分寸。剪枝让模型变小,蒸馏让手艺传下来。这篇文章用“老厨师传艺”的故事,带你从零看懂边缘模型压缩的两大核心招式,以及它们如何珠联璧合地落到真实芯片上。
掌握剪枝与蒸馏,意味着你能把动辄上百 MB 的模型装进几瓦功耗的芯片,这是边缘 AI 落地最核心的工程能力,也是模型优化、端侧部署岗位的必备技能。
可视化演示
展示先来先服务与时间片轮转两种CPU调度算法的执行过程,动态呈现进程队列与CPU占用时间线。
本节配有交互动效(进入视口后自动加载,约 3KB)。
FCFS — 先来先服务调度 按进程到达顺序依次分配CPU 非抢占式,进程执行完毕才释放CPU 等待时间=Σ(前序进程执行时间) FCFS简单但可能导致短作业等待过长
剪枝基础概念
张师傅掌勺的大饭店后厨,光是炒锅就挂了八口,其中五口是同款;调料架上还有三瓶几乎一样的生抽。小林来帮忙的第一天就发现:真正天天被端上灶台的,翻来覆去也就三四样。多出来的锅、重复的料,就是后厨里的“冗余”。神经网络里也有类似的冗余——一个大模型训练完成后,大量通道和权重的数值接近零,它们对最终判断几乎没有任何贡献,却实实在在占着内存、耗着算力。边缘设备的内存和算力,就像小摊那三尺台面,容不下任何多余物件。
把这些“用不上的部件”从模型里移除,就是模型剪枝。根据移除粒度的不同,剪枝分成两大流派。第一个流派叫结构化剪枝:像搬走整口锅一样,直接删除整个卷积核或整条通道。删完之后网络仍是规整的矩形,普通 CPU、NPU 都能直接提速,非常适合边缘场景。第二个流派叫非结构化剪枝:像用镊子挑出锅底的油星一样,把单个权重逐个清零。参数矩阵变成稀疏形状,理论压缩率虽高,但形状不规则,需要特殊硬件和专用库才能发挥加速效果,在普通芯片上有时反而更慢。
既然要删通道,就得先决定“谁该走”。最朴素也最常用的评分标准,是看一个卷积核所有权重绝对值的平均。数值大,说明它传递的信息多,是主厨离不开的招牌炒锅;数值普遍接近零,说明它可有可无,优先淘汰。正式地,第 i 个卷积核的重要性定义为:
这就像后厨盘点:给每口锅列一张“月度使用频次”清单,垫底的几口直接送人。模型瘦身的第一招,就是学会做这份清单。
- 权重矩阵形状假设第 i 个卷积核的权重是 $C \times K \times K$ 的张量,其中 C 是输入通道数,K 是卷积核边长。
- 绝对值求和对所有位置的权重取绝对值再求和,取绝对值是为了防止正负贡献相互抵消。
- 平均归一化除以 $C \times K \times K$,得到每个位置的平均贡献度。
- 排序筛选算出所有通道的重要性后,按分数排序,保留最高的若干通道,其余从网络中移除。
稀疏度调度
张师傅虽然要精简后厨,却绝不会选在周六晚上把一半锅具搬走——那饭馆当场就得停业。聪明的做法是分几个月慢慢来:第一个月先撤掉节庆才用的大蒸笼,第二个月再撤掉备用的双耳锅……每次只动一点,生意照常做,厨房悄悄变小。这种“分期分批”的撤换节奏,在剪枝里叫稀疏度调度。
最简单粗暴的做法是一次性剪枝:训练好模型后,一次性把稀疏度从 0 提到目标值,比如直接剪掉 50% 的通道。这样做省事,但模型受到的冲击太大,精度往往断崖式下跌,之后很难恢复。更稳妥的是渐进式剪枝:把整个剪枝过程分散到多轮训练中,每轮只增加一点稀疏度,剪一刀、微调一轮,让模型“边疼边适应”。
渐进式剪枝最经典的调度曲线是三次方调度,也叫 Automated Gradual Pruning。它让稀疏度从初始值缓慢爬升,越到后期加速越猛,最终到达目标稀疏度。式子里的 t 是当前训练步,T 是总训练步数:
三次方调度就像张师傅的撤厨计划表:头两月几乎感觉不到变化,最后几周却雷厉风行。由于不同层对剪枝的敏感度不一样,还可以给每层配上不同的目标稀疏度——有些“传家锅”坚决不换,有些一次性餐具则第一时间清走,灵活调整才是工程上的常态。
- 符号约定索引 t 表示当前训练步,T 表示总步数,$s_i$ 是初始稀疏度,$s_f$ 是目标稀疏度。
- 归一化进度计算 $(1 - t/T)^3$,t=0 时等于 1,t=T 时等于 0,曲线整体呈“先平后陡”。
- 区间映射乘以 $(s_i - s_f)$ 再叠加 $s_f$,把数值从 [1,0] 映射到实际稀疏度区间 $[s_i, s_f]$。
- 调度含义前期稀疏度变化小,模型平稳适应;后期变化快,逼近最终目标。
知识蒸馏原理
菜谱写“盐少许”“爆炒十秒”,小林试了几次总不是那个味。张师傅明白了:菜谱只给了“正确答案”,却没给“过程中的犹豫与分寸”。于是他换了个教法——亲手炒一道菜,让小林在旁边看油温、闻香气、尝火候。这道菜呈现出来的“色香味”,就是比菜谱丰富得多的“软知识”。
在深度学习里,这位“张师傅”就是大模型,被称为教师模型;小林就是小模型,被称为学生模型。训练好的大模型对每个样本都会输出一个概率分布——不只是“这是猫”这一句话,而是“92% 是猫,5% 是狗,2% 是兔子,1% 是狐狸”。这组软输出(也叫软标签)里藏着大模型的判断逻辑,比如“猫和狗长得像,猫和狐狸也略像”。把这份软知识传授给小模型,就叫知识蒸馏。
如何得到一簇“有分寸”的软输出?直接对 logits 做 softmax 往往太“自信”,输出接近独热编码,学不到类间关系。于是蒸馏引入了温度 T:把每个 logits 先除以 T 再做 softmax。T 越大,概率分布越平坦,类间相似信息越明显:
张师傅的“品尝教学”落到损失函数上,就是让学生同时对齐两个目标:一是跟真实标签对齐,不能把猫认成狗;二是跟教师的软输出对齐,学会猫和狗之间的相似度。完整的蒸馏损失如下:
张师傅的教学法最终凝练成一条损失函数:学生每走一步,既看正确答案,也闻教师锅里的香气。模型越小,越需要这种“耳濡目染”式的传承,而不是光背菜谱。
- 硬标签损失$\mathcal{L}_{\text{CE}}$ 是学生预测与真实标签的交叉熵,保证基本判断正确。
- 软标签损失KL 散度衡量学生与教师软分布的距离,距离越小,学生的“手感”越接近教师。
- 温度平方因子乘以 $T^2$ 是为了抵消 softmax 除以 T 带来的梯度缩小,让软损失与硬损失量级相当。
- 权重分配$\alpha$ 控制信任教师多少,通常在 0.5 到 0.9 之间。
蒸馏温度选择
同样是教“糖醋排骨”,张师傅有两种讲法。一种用大白话:“放两勺糖、一勺醋,糖先下。”——简洁但丢掉了层次;另一种用讲究的词:“糖要炒到琥珀色,醋香要压住甜腻。”——信息量大,但初学者容易听得云里雾里。温度 T 就是张师傅讲课的“语言浓度”。
温度越高,教师输出的分布越平缓,把“像与不像”的细微差别都摊开给学生看;温度越低,分布越尖锐,几乎就是直接报答案,接近硬标签的形态。但温度绝不是越高越好:太高,分布趋近均匀,类间差异被彻底抹平,等于让小林听一篇全是形容词的废话;太低,则退化成普通交叉熵,蒸馏也就失去了意义。
实践中的经验是:多数分类任务 T 取 3 到 10;类别越多、类间越相似,T 可以适当调大;遇到严重类别不平衡时,把 T 调小反而更稳定。从信息论视角看,温度升高会增加软标签分布的熵,而熵越大,意味着携带的“类间结构信息”越丰富:
好师傅会根据徒弟的水平调整讲法:初学者听迷糊了就说直白些(降 T),等上手了再讲“琥珀色”这些门道(升 T)。温度选择的本质,就是找到那个既能听明白、又能学到真功夫的“语言浓度”。
- 熵的定义对软化后的分布 $p^T$ 求信息熵,衡量概率分布的平坦程度。
- 温度的极限T 趋近无穷大时,分布趋近均匀分布;T=1 时对应原始 softmax 的熵。
- 调参指导实践中先用 3 到 10 起步,在验证集上对比精度,找到“听得懂又学得到真东西”的点。
组合训练策略
张师傅发现,光撤锅不教学,小林做的菜越来越难吃;光教学不撤锅,小摊又放不下那些大家伙。于是他把两件事安排成了同一条流水线:每撤走一批锅,就让小林跟着师傅练一次菜。厨房边变小,手艺边见长——这正是剪枝与蒸馏组合的精髓。
单独剪枝会带来精度损失,因为模型突然失去了表达能力,需要用微调来恢复。但普通微调只是“自己重新练”,遇到困难样本时恢复得又慢又差。蒸馏微调则多了一位永远在线的师傅:学生在剪枝后调整参数时,不用只盯着真实标签“盲人摸象”,还可以照着教师模型的软输出“照方抓药”,恢复自然又快又稳。
典型的组合训练流程是一个四步循环:先用完整数据训练一个大模型作为教师;然后对学生模型执行一小步渐进式剪枝,提升稀疏度;接着用蒸馏损失微调学生,让它同时向教师的软输出和真实标签对齐;最后重复剪枝与微调两步,直到稀疏度达到目标。每一轮的总损失,是剪枝掩码下的交叉熵与蒸馏项的叠加:
组合策略像是给小林定制的“边搬家边拜师”计划:每一轮撤厨具都伴随一次师傅的亲自示范。等到小摊开业那天,锅只剩三口,小林做的菜却已经有了师傅八成火候。
- 剪枝掩码$M \odot W_s$ 表示用掩码 M 把学生权重中被剪掉的位置遮住,等价于厨房里一些锅已经搬走。
- 基础损失第一项是与真实标签的交叉熵,保证学生基本盘不崩。
- 蒸馏补充第二项是学生与教师的 KL 散度,让学生持续从教师那里“补课”。
- 交替循环剪枝制造缺口,蒸馏填补缺口,两者反复交替直到目标稀疏度。
边缘部署落地
小摊终于开张了。柜台只有一臂宽,灶台只有两灶眼,电费还得精打细算。可小林发现,师傅留下的“三口锅”刚好够用——出餐快、占地小、电费省。这正是边缘设备上模型落地时的真实处境:内存、算力、能耗处处受限,每一兆字节都要花在刀刃上。
经过剪枝与蒸馏,最终交付的不再是几百 MB 的大模型,而是一个体积小、速度快、精度靠谱的小模型。工程上要盯四个指标:参数量决定占据多少存储;FLOPs 决定理论计算量;延迟决定单次推理耗时;能耗决定设备能撑多久。如果你做的是电池供电的摄像头或传感器,能耗往往比精度更金贵。
最直观的收益是压缩率。如果结构化剪枝把主要卷积层的通道数从 720 减到 288,那么参数量和 FLOPs 都近似按比例下降:
当小林的三口锅在小摊上翻出喷香的炒饭时,整个“大饭店知识迁移”的故事才算闭环。剪枝负责把厨房变小,蒸馏负责把手艺留住——两者合起来,就是边缘 AI 推理里最实用的一道“拿手菜”。
- 压缩率定义压缩率 r 表示参数减少的比例,r=0.6 意味着参数少了 60%。
- FLOPs 换算当结构化剪枝比例为 s 时,剩余通道占比约 $(1-s)$,计算量近似等比例下降。
- 工程取舍实际部署还要结合延迟、功耗的实测数据,不能只看理论压缩率——小摊的“实际翻台率”才是最终目标。
AI 应用场景
智能安防摄像头的人脸检测
阶段:模型压缩与端侧部署优化
解决的问题:云端大模型无法实时跑在摄像头内置 NPU 上;传统做法是把视频传回云端分析,带宽成本高、隐私风险大。用结构化剪枝把主干网络通道削减一半,再用服务器上的教师模型对学生做蒸馏微调,精度只掉 1% 到 2%,帧率却从 8fps 提升到 30fps。
具体案例:某园区部署的边缘盒子,原模型 120MB、单帧推理 120ms;经过剪枝加蒸馏后压缩到 28MB、35ms,稳定运行在 5W 功耗的 NPU 上,实现了“张师傅的菜在小林灶上也能炒”。
工业质检边缘盒子
阶段:模型蒸馏与推理加速
解决的问题:产线瑕疵检测模型在 GPU 服务器上效果好,但车间现场只有普通工控机,无法负担大模型。把教师网络逐层蒸馏给轻量学生网络,同时配合剪枝压缩通道数量,让模型在无 GPU 的工控机上跑到实时检测,漏检率基本持平。
具体案例:某 3C 工厂的外观质检线,原模型单张推理 800ms,压缩后仅 90ms,产线节拍从每小时 3000 件提升到 15000 件,误检率只增加 0.3%。
智能音箱的语音唤醒
阶段:小模型常驻与功耗优化
解决的问题:唤醒词模型需要 7×24 小时常驻内存并持续监听,功耗极其敏感。利用蒸馏让学生模型学会大模型在噪声环境下的鲁棒性,再用剪枝把参数量压缩到原来的四分之一,待机功耗显著下降,续航明显提升。
具体案例:某智能音箱把唤醒模型从 12MB 压缩到 3MB,误唤醒率从每月 8 次降到 3 次,整机待机电流下降 40%,符合电池供电产品的硬指标。
Python 演示
import numpy as np def make_data(n=600): rng = np.random.default_rng(0) X = rng.uniform(-1, 1, (n, 2)) y = (np.sin(3 * X[:, 0]) + X[:, 1] > 0.1).astype(int) y = y + (X[:, 0] ** 2 + X[:, 1] ** 2 > 0.8).astype(int) y = np.clip(y, 0, 2) return X, y def softmax(Z, T=1.0): Z = Z / T Z = Z - Z.max(axis=1, keepdims=True) E = np.exp(Z) return E / E.sum(axis=1, keepdims=True) def onehot(y, C=3): M = np.zeros((y.size, C)) M[np.arange(y.size), y] = 1 return M class MLP: def __init__(self, d_in, d_hid, d_out, seed=1): rng = np.random.default_rng(seed) self.W1 = rng.normal(0, 0.5, (d_in, d_hid)) self.b1 = np.zeros(d_hid) self.W2 = rng.normal(0, 0.5, (d_hid, d_out)) self.b2 = np.zeros(d_out) def forward(self, X, T=1.0): self.h = np.tanh(X @ self.W1 + self.b1) self.z = self.h @ self.W2 + self.b2 return softmax(self.z, T) def fit(self, X, Y, steps=500, lr=0.3): for _ in range(steps): P = self.forward(X) + 1e-9 d2 = (P - Y) / len(X) dh = d2 @ self.W2.T * (1 - self.h ** 2) self.W2 -= lr * (self.h.T @ d2 + 1e-3 * self.W2) self.b2 -= lr * d2.sum(axis=0) self.W1 -= lr * (X.T @ dh + 1e-3 * self.W1) self.b1 -= lr * dh.sum(axis=0) def prune(self, k): imp = np.abs(self.W1).sum(axis=0) keep = np.argsort(imp)[::-1][:k] self.W1 = self.W1[:, keep] self.b1 = self.b1[keep] self.W2 = self.W2[keep, :] def distill(self, X, teacher, T=4.0, steps=400, lr=0.2): targets = teacher.forward(X, T) for _ in range(steps): P = self.forward(X, T) + 1e-9 d2 = (P - targets) / len(X) dh = d2 @ self.W2.T * (1 - self.h ** 2) self.W2 -= lr * (self.h.T @ d2) self.b2 -= lr * d2.sum(axis=0) self.W1 -= lr * (X.T @ dh) self.b1 -= lr * dh.sum(axis=0) def accuracy(model, X, y): return (model.forward(X).argmax(1) == y).mean() def main(): X, y = make_data() Y = onehot(y) teacher = MLP(2, 32, 3, seed=1) teacher.fit(X, Y) student = MLP(2, 32, 3, seed=2) student.fit(X, Y) student.prune(12) print("教师模型准确率: %.3f" % accuracy(teacher, X, y)) print("剪枝后即时准确率: %.3f" % accuracy(student, X, y)) student.distill(X, teacher, T=4.0) print("蒸馏微调后准确率: %.3f" % accuracy(student, X, y)) print("隐藏通道数: 32 -> %d" % student.W1.shape[1]) print("参数量压缩率: %.1f%%" % (100 * (1 - student.W1.shape[1] / 32.0))) if __name__ == "__main__": main()
self.W1 = rng.normal(0, 0.5, (d_in, d_hid))初始化输入层到隐藏层的权重矩阵,教师和学生各持一份。def forward(self, X, T=1.0):前向传播支持温度参数,既算普通概率,也算软化后的软输出。self.h = np.tanh(X @ self.W1 + self.b1)隐藏层激活,把输入映射到特征空间。def fit(self, X, Y, steps=500, lr=0.3):普通交叉熵训练,让模型先学会基本分类。student.prune(12)结构化剪枝,把学生隐藏层从 32 个通道减到 12 个。imp = np.abs(self.W1).sum(axis=0)按 L1 范数计算每个隐藏通道的重要性分数。keep = np.argsort(imp)[::-1][:k]取重要性最高的 k 个通道索引,其余全部淘汰。self.W1 = self.W1[:, keep]只保留选中的列,网络的宽度立刻变小。def distill(self, X, teacher, T=4.0, steps=400, lr=0.2):蒸馏微调:学生向教师的软标签对齐。targets = teacher.forward(X, T)教师在温度 4 下输出软标签,作为学生的“示范菜”。student.distill(X, teacher, T=4.0)用温度 4 执行蒸馏微调,恢复剪枝带来的精度损失。
常见误区
误区我以为剪枝就是把网络里所有接近零的权重直接清零,这样模型立刻变小变快,而且什么硬件都能跑。
正解清零单个权重是非结构化剪枝,参数矩阵虽然变稀疏,但形状不规则,普通 CPU、NPU 无法直接加速,反而可能更慢。要实打实提速,得做结构化剪枝——整组删除通道,让矩阵保持规整。就像小摊搬走整口锅才能腾出柜台,挑掉锅底油星并不能缩短做菜时间。
为何常见:很多入门教程展示的都是权重置零的可视化,让人误以为“删得越多越快”,忽略了硬件对规则形状的依赖。
误区温度越高软标签携带的信息量越大,学生学得越好,所以 T 越大越厉害。
正解温度过高时,概率分布趋近均匀,类间差异反而被抹平。就像师傅全程只说“这个菜嘛,还行,挺好”,徒弟什么都学不到。经验上 T 取 3 到 10,且要在验证集上实测对比,而不是盲目拉高。
为何常见:“软信息”听起来很玄,容易让人以为多多益善,忽略了均匀分布其实不含任何有效信息。
误区剪枝只是去掉多余部分,模型精度几乎不变,所以剪完不用再训练。
正解一次性大幅剪枝通常带来精度骤降,必须配合微调恢复。渐进式剪枝的每一轮都包含“剪一刀、微调一轮”,蒸馏微调还能借教师知识更快恢复。就像搬走锅具后,菜谱要重新试做几遍才能稳定出品。
为何常见:论文里常用“剪枝后微调”一句话带过,读者只盯着剪枝那一步,忽略了后续训练的必要性。
误区蒸馏是让学生的输出等于教师预测的类别,本质是拿大模型标注的数据集去训练小模型。
正解关键区别在“软”而不是“硬”。学生对齐的是教师对每个类别的概率分布,比如 92% 猫、5% 狗、2% 兔子,而不是单独的类别标签。正是这些类间相似度,让小模型学到了正确类别之外的隐含知识。好比师傅教的不是“这菜是咸的”,而是“咸中带甜、甜里回甘”。
为何常见:对硬标签和软标签的理解停在字面上,容易把蒸馏误解成一种变相的数据标注。
误区剪枝是压缩,蒸馏是学习,两个方向不一样,应该选其中一种方案来用。
正解二者天然互补:剪枝制造表达能力缺口,蒸馏用教师知识填补缺口。实践中常用“渐进剪枝 + 蒸馏微调”交替循环,最终得到的小模型又小又准,是边缘部署的主流方案。就像撤锅和教学必须同步进行,才对得起小摊那一方灶台。
为何常见:教程通常把两个主题分开讲解,缺少组合视角,读者很难想到它们能协同工作。
面试题
Q1. 关于非结构化剪枝,下列说法正确的是?
- A.直接删除整个通道
- B.逐个抹掉无关权重← 正确答案
- C.无需额外硬件加速
- D.剪枝后形状全规则
答案:B。非结构化剪枝是逐个权重清零,得到不规则的稀疏矩阵,选项 B 正确。删除整组通道属于结构化剪枝(A 错);稀疏矩阵需要特殊硬件支持(C 错);形状并不规则(D 错)。就像挑掉锅底油星,矩阵形状并不会变得整齐。
Q2. 结构化剪枝最大的工程优势是什么?
- A.权重矩阵变得稀疏
- B.形状规整方便加速← 正确答案
- C.精度必然保持不降
- D.无需计算通道重要
答案:B。结构化剪枝整组删除通道,网络保持规整矩形,普通 CPU、NPU 都能直接提速,所以选 B。非结构化剪枝才会让矩阵变稀疏(A 错);剪枝后精度通常需要微调恢复(C 错);筛选通道必须计算重要性(D 错)。
Q3. 三次方稀疏度调度中,稀疏度随时间的变化特点是?
- A.前期快而后期变慢
- B.前期慢而后期变快← 正确答案
- C.全程保持匀速变化
- D.完全随机的跳跃式
答案:B。三次方调度中 $(1 - t/T)^3$ 的斜率前期小、后期大,所以稀疏度前期爬升慢、后期加速猛,选 B。它不是匀速(C 错),也不是随机跳跃(D 错),更不是前快后慢(A 错)。
Q4. 知识蒸馏中,教师输出除以温度 T 的主要目的是什么?
- A.使训练梯度完全消失
- B.软化分布暴露类间联系← 正确答案
- C.将标签转换成独热码
- D.显著提升每层参数量
答案:B。除以 T 再 softmax 会让概率分布变平缓,把“猫像狗、猫也像狐狸”这类类间相似信息暴露给学生,选 B。温度不会让梯度消失(A 错);独热码是硬标签的形态(C 错);温度不改变参数量(D 错)。
Q5. 蒸馏损失中,KL 项前乘上 T 的平方,原因是?
- A.保持梯度量级与稳定← 正确答案
- B.提高训练样本的数量
- C.减少网络参数量大小
- D.将温度参数赋予零值
答案:A。softmax 除以 T 会压缩梯度,乘回 $T^2$ 能让软损失的梯度量级与硬损失相当,保持训练稳定,选 A。它不能改变样本数量(B 错)、参数量(C 错),也不是把温度清零(D 错)。
Q6. 关于蒸馏温度的选择,下列说法正确的是?
- A.温度越低类间信息越丰富
- B.温度过高容易引入噪声← 正确答案
- C.所有任务最优温度均为 1
- D.温度只对硬标签有影响
答案:B。温度过高时分布趋近均匀,有效信息被噪声淹没,所以 B 正确。温度越低分布越尖锐,类间信息反而越少(A 错);最优温度要按任务在验证集上调,并不固定为 1(C 错);温度影响的是软标签(D 错)。
Q7. 剪枝与蒸馏组合训练的正确流程是?
- A.先蒸馏后剪枝且无需微调
- B.剪枝与蒸馏微调交替循环← 正确答案
- C.剪枝一次后永久不再训练
- D.蒸馏与剪枝天生完全互斥
答案:B。标准流程是“渐进剪枝 + 蒸馏微调”交替循环:剪一刀制造缺口,蒸馏把缺口填上,反复直到目标稀疏度,选 B。先蒸馏后剪枝再不做微调精度会崩(A 错);剪完必须继续训练(C 错);两者互补而非互斥(D 错)。
Q8. 下列哪些属于结构化剪枝的工程优势?
- A.能去除整组冗余通道← 正确答案
- B.形状规整利于硬件加速← 正确答案
- C.不需要任何微调训练
- D.保证精度绝对不下降
答案:AB。结构化剪枝整组删除冗余通道(A 对),网络保持规整矩形,利于 CPU、NPU 直接加速(B 对)。但它通常需要微调恢复精度(C 错),剪枝一定会带来精度波动,只是程度不同(D 错)。
Q9. 下列哪些是蒸馏温度产生的合理影响?
- A.低温输出接近硬标签← 正确答案
- B.高温暴露类间相似度← 正确答案
- C.温度加大必降低精度
- D.温度只影响教师训练
答案:AB。温度越低分布越尖锐,接近硬标签(A 对);温度越高分布越平缓,类间相似信息越明显(B 对)。温度过大可能引入噪声,但不是必然降低精度(C 错);温度影响的是学生蒸馏学习过程,不只是教师训练(D 错)。
Q10. 边缘部署时,评估剪枝蒸馏方案应关注哪些指标?
- A.参数量与模型体积← 正确答案
- B.推理延迟与运行能耗← 正确答案
- C.论文引用次数高低
- D.训练集样本总数多少
答案:AB。边缘部署核心看参数量、体积、延迟、能耗(A、B 对)。论文引用次数与模型质量无关(C 错);训练集样本总数属于数据侧的事,不直接反映压缩效果(D 错)。