把一部手机压缩到能塞进硬币缝里,还要照片拍得跟原来一样清楚

发布时间:2026/10/2 0:23:57
把一部手机压缩到能塞进硬币缝里,还要照片拍得跟原来一样清楚 你有没有想过一个训练好的神经网络,里面到底装了多少没用的东西?这个问题在2025年之前有一个还算清楚的答案:剪枝和量化,各干各的活,谁也不管谁。剪枝负责把不重要的权重直接归零,量化负责把留下来的权重从32位浮点数压成8位甚至更低。两条流水线,两套团队,两次优化,最后拼在一起交货。这篇来自普渡大学和德州大学埃尔帕索分校的论文,提出了一个让人有点意外的观点:分开做这两件事,本身就是一种浪费。**核心问题:两条腿走路,为什么反而摔跤**想象你要给一个大家庭搬家,要求是既要扔掉不需要的东西(剪枝),又要把留下的东西打包得尽量小(量化)。如果你先花一整天决定扔什么,第二天再决定怎么打包,你大概率会发现:昨天觉得必须留下的一个大衣柜,今天打包的时候才意识到根本塞不进搬家车,应该换成别的方式处理。先剪枝后量化,或者先量化后剪枝,都会遇到类似的问题。剪枝阶段以为某个权重很重要所以保留了它,但等到量化阶段,发现这个权重在低精度表示下反而变得没那么关键,这时候已经晚了,决策已经做完了。论文管这个现象叫redundancies in each step,也就是每一步单独优化时都会漏掉的冗余。数据说话最直接:在ResNet-32上,分开做的DGMS方法能达到27倍压缩,而论文提出的SQS联合优化方法能做到32倍压缩,准确率下降还从1.30%降到了1.29%。压缩率提升了18%,精度损失反而更小。这不是玄学,这是把两个决策放在同一个优化过程里同时权衡的结果。那么问题来了,联合优化听起来是个正确的方向,但具体怎么在数学上把该不该留下这个权重和留下的权重该量化成什么值这两件事捏合到一起?这篇论文给出的答案,是一套叫SQS的贝叶斯框架。**贝叶斯变分学习:用概率分布描述权重的命运**先说说这套方法的骨架。SQS,全称Sparse Quantized Sub-distribution,直译是稀疏量化子分布,这个名字听起来抽象,拆开看其实很直观。变分学习*:一种用简单分布去近似复杂后验分布的贝叶斯推断方法。真实的后验分布往往算不出来,所以退而求其次,在一族好算的分布里找一个最接近真实分布的,这个过程就叫变分学习。论文的做法是,不再把每个权重看成一个固定的数字,而是看成一个概率分布,这个分布同时描述了这个权重有多大概率被剪掉和如果不被剪掉,它更可能落在哪几个量化值附近。这个分布由两部分拼成。第一部分叫spike,也就是钉子,在数学上是一个点质量,概率全部集中在0这一个点上,代表这个权重被剪掉了。第二部分叫slab,也就是板子,是一个连续分布,代表这个权重被保留时的取值范围。spike-and-slab先验*:贝叶斯统计里用来诱导稀疏性的经典先验分布,由一个在零点的尖峰(spike)和一个平缓的连续分布(slab)混合而成,常用于变量选择问题。这个概念本身在统计学里已经有几十年历史,不是这篇论文的原创。论文的创新点在于slab那部分怎么设计。传统做法里slab往往是一个简单的高斯分布,但SQS把slab换成了一个高斯混合模型。高斯混合模型(GMM)*:由多个高斯分布加权叠加而成的概率分布,常用于聚类和密度估计。每个高斯分量有自己的均值、方差和权重。为什么要用GMM而不是单个高斯?因为量化的本质就是把连续的权重值映射到几个离散的代表值上,比如4bit量化只允许16个可能的取值。GMM里的每个高斯分量的均值,天然就可以当作量化后的候选数值。当每个高斯分量的方差被压得足够小的时候,GMM这个连续分布就退化成了一个离散的多项分布,这个退化的过程,恰好就是量化想要模拟的效果。这里可以打一个比方。假设你要给一批学生的成绩打包成等级(A、B、C、D),但打分老师内心的判断本来是连续的,比如85.3分、85.7分、86.1分都倾向于打A,但具体给哪个数字有点模糊。GMM式的思路是:先假设有几个标准分数中心(比如90分代表A的中心,80分代表B的中心),每个学生的真实分数以一定概率归属到最近的中心。方差越小,这个归属就越果断,最后几乎就是非黑即白的等级划分了。如果不用这种带概率的软划分,而是一上来就硬性规定85分以上是A,以下是B,会发生什么?85.01分和84.99分这种边界情况会被粗暴地分到两个完全不同的等级,损失大量原本连续变化的信息。GMM的软划分保留了这种渐变的可能性,直到训练收敛前它都还有调整空间。论文的完整变分分布,就是spike(要不要留)乘以GMM(留下来量化成什么),这两层决策被写进同一个概率分布里,同一次梯度下降就能同时调整两者。这就是联合的数学含义,不是先后串行,而是在同一个目标函数里同时求解。**目标函数算不出来怎么办:一个巧妙的近似**理论听起来很美,但这里有一个卡壳的地方。标准的贝叶斯做法要求你去最小化一个叫ELBO的东西。证据下界(ELBO)*:变分学习中用来替代直接优化难以计算的后验分布的目标函数,由两部分组成:衡量拟合数据程度的似然项,和衡量与先验分布接近程度的KL散度项。ELBO里有一项是变分分布和先验分布之间的KL散度。KL散度*:衡量两个概率分布之间差异程度的一种度量,数值越小说明两个分布越接近。问题是,spike-and-slab分布和GMM分布之间的KL散度,根本没有解析解,算不出来。这不是工程实现的困难,是数学上就没有闭式解。论文的解决办法分成两步走。第一步,面对似然项里那个在整个分布上求期望的操作,论文没有真的去采样很多次权重再平均,而是直接用分布的均值代入网络做一次前向传播,相当于用一个平均权重网络去近似整个分布的期望效果。第二步,面对算不出来的KL散度,论文用一个数学引理把它的上界推导出来,上界里出现的是最大概率的那个高斯分量和零均值高斯先验之间的KL散度,这个是有闭式解的高斯对高斯的KL散度。用上界代替真值来优化,是变分推断里的常规操作,但这里巧妙的地方在于,论文没有简单粗暴地用一个大杂烩上界,而是精确定位到贡献最大的那个分量上做近似,这样既控制了近似误差,又让计算量保持可控。打个比方,如果你要评估一个班级今天的整体出勤状态,严格来说应该统计每个学生具体在哪、干了什么,但这个信息量太大算不过来。一个务实的近似是:只看每个学生最可能去的那个地方(教室、操场、图书馆),按照这个最大概率地点来估算全班状态。这样虽然损失了一些细节,但抓住了主要矛盾,而且计算量从追踪每个人的完整概率分布降到了记录每个人最可能在哪这么简单。**推理阶段:贝叶斯平均比选最可能的那个更稳**训练结束之后,怎么用这个学出来的分布去做预测?论文在这里比较了两种做法。第一种叫贪心法(greedy),对每个权重直接选概率最高的那个量化值,一锤定音。第二种叫贝叶斯平均(Bayesian averaging),从整个分布里采样出好几组完整的权重(论文默认采4次),分别跑一遍网络,再把结果平均。实验结果很直接:在ResNet-18和ResNet-50上,用相同数量的高斯分量,贝叶斯平均始终比贪心法准确率更高。这个差距在分量数少的时候(比如K8)更明显。论文还专门测了平均次数M对结果的影响。M1时准确率掉了3.76个百分点,M5时降到2.86,M50时降到2.63。有意思的是,从M5到M50,准确率只提升了0.23个百分点,大部分收益在前5次采样就吃到了。这背后的道理其实很朴素。你去问5个不同的医生同一个诊断问题,取多数意见,通常比只问1个医生靠谱,但问50个医生和问5个医生的效果差不了太多,因为多数意见早就趋于稳定了。贝叶斯平均本质上就是问多个版本的自己,用采样出的多组权重分别预测再取平均,抵消掉量化引入的随机噪声。如果只相信贪心法选出的那一个标准答案,一旦这个最大概率分量的选择本身就带着量化误差,预测结果就完全暴露在这个误差之下,没有任何缓冲。**长尾分布与离群值:大语言模型权重里的隐藏麻烦**如果说前面讲的是SQS的通用骨架,那这一部分讲的是论文针对大语言模型专门做的一个补丁,而且这个补丁的效果相当显著。论文观察到一个现象:大语言模型的权重分布,尤其是自注意力层的权重,往往不是规规矩矩的高斯钟形曲线,而是长尾分布,也就是绝大多数权重挤在中间一小段区间里,但有极少数权重的数值特别大,拖出一条长长的尾巴。长尾分布*:一种概率分布形态,大部分数据集中在某个区间,但存在少量远离主体、数值极端的样本,这些极端样本被称为离群值(outlier)。这个现象不是这篇论文首次发现的,此前已有研究指出大语言模型权重里存在显著的离群值。但SQS的应对方式值得细说。论文原本的量化方案是把一层的权重按照数值范围切成4个等宽窗口,每个窗口内部单独拟合一个K分量的GMM。这个思路在权重分布均匀的情况下没问题,但碰到长尾分布就会出问题:因为窗口是等宽切分的,那些占少数但数值极端的离群权重,会和大量普通权重挤在同一个宽窗口里,量化精度被主体权重平均掉了,离群值的信息被严重稀释。论文的解决方案叫outlier-aware windowing,离群值感知的窗口划分。IQR(四分位距)*:统计学中衡量数据离散程度的指标,等于第三四分位数减去第一四分位数,常用于识别异常值。具体做法是,先算出这层权重的四分位距IQR,然后用5倍IQR作为界限,把权重切成4个窗口,其中专门留出两个窗口去捕捉最低和最高的尾部区域,剩下的窗口处理中间的主体部分。这样,原本被稀释掉的离群权重,现在有了自己专属的量化空间,不用再跟主体权重抢资源。实验数据很能说明问题。在Qwen2.5-0.5B模型上,相同6bit精度、相同50%非零率的条件下,用等宽窗口的准确率掉了5.40个百分点,用离群值感知窗口只掉了2.46个百分点,差距接近3个百分点。论文配的图里,可以直观看到用离群值感知窗口量化出来的权重分布,在尾部区域和原始全精度权重的形状吻合得多,而等宽窗口在尾部区域基本是空的,那部分信息被丢光了。这里可以类比一下城市规划。如果一个城市里绝大多数房子都是普通住宅,只有少数几栋是摩天大楼,你如果按照每个区域面积相等的原则来划分行政区,摩天大楼所在的那个区域可能因为面积配额有限,反而没法给这栋楼配套足够的基础设施,因为设计者默认这个区域应该跟其他区域承载差不多规模的建筑。而如果你事先知道这些摩天大楼扎堆在哪,单独给它们划出一个特殊管理区,反而能针对性地投入资源。等宽窗口就是前者的思路,离群值感知窗口就是后者。为什么不能一开始就把所有窗口都设计成动态自适应大小?因为对于绝大多数没有长尾的普通层,这样反而增加了不必要的计算复杂度,论文选择了一个折中方案,用IQR这个统计量来判断该不该做特殊处理。**理论保证:这套方法不是拍脑袋,是有数学支撑的**如果一篇论文只讲实验效果,读者难免会怀疑这是不是运气好凑出来的结果。这篇论文专门用了一整节做理论分析,证明在一定条件下,这套spike-and-GMM变分方法学出来的稀疏量化网络,会随着数据量增大而收敛到真实的目标函数。论文考虑的是一个标准的非参数回归问题,真实函数记为f0,数据里带着高斯噪声。论文证明了一个叫Hellinger距离的量,会被一个由三部分组成的误差上界给控制住。Hellinger距离*:一种衡量两个概率分布相似程度的度量,数值越接近0说明两个分布越相似,常用于统计推断中的收敛性分析。这三部分误差分别是统计估计误差、变分误差和逼近误差。前两者会随着样本量n趋向无穷而消失,逼近误差则和网络的容量有关,网络越大,能表达的函数越丰富,逼近误差反而越小。这和统计学习理论里的经典权衡完全一致:模型容量增大,能降低逼近误差,但会增加统计估计和变分近似的负担,好在这篇论文证明了在合理的稀疏度和先验设置下,三者可以同时被控制住。证明过程借助了一个叫Lemma 3的引理,这个引理本身来自更早的一篇论文(Chérief-Abdellatif和Alquier,2018),给出了两个混合分布之间KL散度的上界,前面讲的那个近似目标函数的推导,数学基础就来自这里。理论分析当然有局限,论文自己也承认,这套证明目前只覆盖了全连接网络的回归任务,没有直接覆盖Transformer架构或分类任务。但至少证明了这套框架不是一个纯粹靠调参凑出来的经验方法,背后有可以立得住的数学逻辑。**实验战场:从ResNet到Llama,压缩率全面领先**理论说完了,该看实际战绩了。在ResNet-56上,SQS用2bit精度、50%非零率,达到了32倍压缩,准确率只掉了0.84个百分点,而同为联合压缩方法的DGMS只能做到31倍压缩,准确率掉0.89个百分点。差距虽然不算悬殊,但SQS在所有对比方法里都拿到了更优的压缩率和更小的精度损失,这个双赢的组合在压缩领域并不常见,通常压缩率和精度是要互相妥协的。BERT-base在SQuAD v1.1数据集上的结果更能说明差距。传统的纯剪枝方法比如L-OBS只能做到2倍压缩,F1分数掉了10.86分;PLATON能做到5倍压缩,F1掉2.20分;而SQS用4bit量化配合25%非零率,做到了32倍压缩,F1只掉1.66分。压缩率是PLATON的6倍多,精度损失反而更小。真正让人印象深刻的是大语言模型上的对比。在Llama3.2-1B上,DGMS这个原本表现不错的基线方法,压缩率只有7倍,但准确率暴跌了46.67个百分点,几乎等于模型失效了。原因论文分析得很清楚:DGMS假设权重服从高斯分布,但自注意力层的权重是前面提到的长尾分布,DGMS的量化方案完全没有为离群值留出空间,而且这个方法本身不支持自定义稀疏度,只能被动接受一个不合理的压缩配置。相比之下,SQS用同样6bit精度,把非零率控制在25%,做到了21倍压缩,准确率只掉1.48个百分点。这不是渐进式的改进,这是量级上的差异。论文还专门跟一个叫Bayesian Bits的方法做了对比。这个方法同样是贝叶斯框架下统一剪枝和量化,但它的做法是给一串翻倍位宽的残差项加门控,本质上是在一个均匀网格上做选择。在ResNet-56上,Bayesian Bits做到约13.5倍压缩,准确率掉6.79个百分点;SQS做到17倍压缩,准确率只掉0.84个百分点。差距的核心在于,SQS学的是GMM均值这种非均匀的码本,而不是被限定在均匀网格里,这给了模型更大的自由度去逼近真实权重分布的形状。下面这张表格汇总了几个关键场景下SQS和最强基线的对比:| 模型 | 基线方法 | 基线压缩率 | 基线精度损失 | SQS压缩率 | SQS精度损失 ||---|---|---|---|---|---|| ResNet-56 | DGMS | 31倍 | 0.89% | **32倍** | **0.84%** || BERT-base | PLATON | 5倍 | 2.20 F1 | **32倍** | **1.66 F1** || Llama3.2-1B | DGMS | 7倍 | 46.67% | **21倍** | **1.48%** || Qwen2.5-0.5B | DGMS | 16倍 | 50.80% | **11倍** | **2.46%** |**关于压缩率计算方式,一个诚实的说明**这篇论文有一个值得称道的细节,它专门用一段篇幅解释了自己压缩率的计算口径,而不是回避这个问题。论文的压缩率公式没有单独给哪些权重被剪掉了这个二进制掩码计入存储成本,这是沿用了它对比的一系列剪枝基线方法(比如L-OBS、PLATON、ExactOBS)一贯的统计口径。论文解释,如果按照更严格的部署导向标准,比如像位图或压缩稀疏行索引那样显式为稀疏结构计费,那么所有基于剪枝的方法(包括SQS自己)算出来的绝对压缩率都会偏低,但方法之间的相对排名不会变。这种坦率地把统计口径的局限性摆在明面上,而不是藏在脚注里含糊带过,是这篇论文让人信任的一个细节。**写在后面**读这篇论文的时候,有一个地方让我反复琢磨:为什么先剪枝后量化这种看似合理的流水线思路,在实践中会漏掉这么多冗余?后来想明白了,问题出在信息的单向流动上。剪枝阶段做决策的时候,它并不知道量化阶段会怎么处理留下来的权重,它只能基于这个权重现在的重要性来判断该不该留。但一个权重在32位浮点精度下看起来很重要,不代表它在4bit精度下依然重要,精度损失本身会重新洗牌哪些权重才是真正关键的。反过来,量化阶段拿到的输入已经是剪枝之后的结果,它没有回头修改剪枝决策的余地。这是一个典型的局部最优不等于全局最优的例子,而且这个例子藏在一个我们平时不太会去质疑的工程习惯里,分阶段处理复杂问题。另一个值得单独说的细节是论文对DGMS失效原因的分析。DGMS在ResNet上表现不错,但在Llama和Qwen上直接崩掉,原因不是算法本身有bug,而是它对权重分布形态的假设(高斯)在小模型上大致成立,但在大语言模型的自注意力层上完全不成立。这提醒我一件事:很多压缩方法的通用性其实是有隐藏前提的,这个前提往往是关于权重分布形态的一个隐含假设,论文如果不做长尾分布的可视化分析,这个失效原因可能永远被归因成大语言模型更难压缩这种笼统的说法,而不会被追溯到具体的分布假设失配。这篇论文目前的理论分析还停留在全连接网络的回归问题上,没有覆盖Transformer架构。但反过来想,理论落后于实践,在深度学习领域几乎是常态,而不是例外。QAQ1SQS压缩方法是什么ASQS是普渡大学团队提出的一种贝叶斯变分学习框架,通过spike-and-slab先验和高斯混合模型联合完成神经网络的剪枝和低比特量化,在ResNet、BERT、Llama3.2等模型上都取得了比传统分步压缩方法更高的压缩率。Q2SQS和DGMS这类方法有什么区别ADGMS只用高斯混合做量化聚类,不支持自定义稀疏度,遇到长尾权重分布时会大幅掉精度。SQS把剪枝和量化写进同一个spike-and-GMM变分分布里联合优化,还加入了离群值感知的窗口策略,在Llama3.2-1B上准确率损失从46.67%降到1.48%。Q3为什么大语言模型的权重更难量化A因为大语言模型自注意力层的权重往往呈长尾分布,少数权重数值极端大,如果用均匀窗口做量化,这些关键的离群权重会被主体权重稀释掉,导致模型性能大幅下降,这也是SQS专门设计离群值感知窗口的原因。