拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

腾讯AI Lab NeurIPS 2018:模型压缩、机器学习与最优化算法深度解析

腾讯AI Lab NeurIPS 2018:模型压缩、机器学习与最优化算法深度解析

1. 一场学术顶会的含金量,以及腾讯AI Lab为什么值得听

先说个背景。NeurIPS(神经信息处理系统大会)在AI圈是什么地位,不用我多废话——计算机视觉有CVPR、自然语言处理有ACL,但论综合性和风向标意义,NeurIPS基本是金字塔尖。2018年那届在加拿大蒙特利尔举办,投稿量逼近5000篇,录取率大概21%,和CVPR动辄25%上下的接受率相比,NeurIPS的筛选更苛刻。能在这种会议上发论文、做Tutorial、搞Workshop的团队,基本代表当下学术界和工业界最前沿的那批人。

腾讯AI Lab在NeurIPS 2018的参与,放在当时的环境里很有意思。2018年正是国内大厂AI Lab风头最劲的时候,微软亚洲研究院的老牌地位还在,腾讯、阿里、字节的研究院都在疯狂招人、堆论文。腾讯AI Lab的方向覆盖游戏AI、NLP、计算机视觉,还有一个容易被忽略的底层支撑——机器学习基础研究和优化算法。这次腾讯重点讲的三大块:模型压缩、机器学习、最优化算法,恰好对应了应用落地、理论框架、训练基建三个层次。

之所以说这篇值得读,是因为这三个方向不是平行并列的三个独立话题,而是一条完整的逻辑链:模型压缩解决"模型太大跑不动"的问题,机器学习解决"算法怎么设计才有效"的问题,最优化算法解决"参数怎么训练才收敛"的问题。放到今天的大模型时代回头看,这三件事依然是绕不开的命门。你训一个百亿参数模型,没有优化算法,loss永远降不下去;你想把它塞进手机或者边缘设备,不压缩,推理延迟直接爆炸;你做一个新任务,不掌握机器学习方法论,连数据怎么处理、评估指标怎么设计都是懵的。

这篇文章我不会只复述当年腾讯分享了什么,而是把这三块拆开揉碎,讲清楚里面的核心技术逻辑、当年的背景动机,以及放到今天依然适用的实操经验。无论你是刚入门机器学习的学生,还是在做模型部署的工程师,都能找到对应自己阶段的东西。

2. 模型压缩:不是"锦上添花",是"能不能用"的分水岭

2.1 为什么2018年大家突然都在谈模型压缩

模型压缩在NeurIPS 2018被重点讨论,背后有个很现实的产业驱动。2018年恰好是第一代移动端AI芯片和AI应用爆发的当口,手机厂商开始推NPU,IoT设备开始集成智能语音,自动驾驶的感知模块要求在车载平台上跑实时模型。但学术界刷榜的模型——ResNet-152、VGG、各种大型GAN——动辄上百MB,算力需求动辄每秒几十亿次浮点运算,别说手机,就是车机芯片都扛不住。

当时的普遍困境是:研究者在GPU集群上训出来的SOTA模型,产品经理一句"跑不到30帧"就直接被打回。而模型压缩恰恰是解决"训练出来但用不上"这个尴尬局面的核心手段。所以NeurIPS 2018上,剪枝、量化、蒸馏这三个方向都出现了大量高质量工作,腾讯AI Lab讲这块,本质上也是在回应工业界落地时的真实痛感。

2.2 剪枝:把干草垛修成雕塑

剪枝的想法很直白——神经网络里大部分参数对最终结果的影响很小,把它们干掉,模型自然就小了。但"干掉"也有讲究。

非结构化剪枝是把权重矩阵里接近零的值置零,模型变成稀疏矩阵,理论计算量下降,但硬件如果不支持稀疏运算,实际加速几乎为零。结构化剪枝是把整个channel、filter或者层剪掉,直接改变网络结构,虽然精度损失可能稍大,但剪完之后的模型是密集矩阵,在任何硬件上都能跑得快。2018年业界基本达成的共识是:要落地,尽量做结构化剪枝,因为大多数推理引擎和芯片只对密集运算优化。

实际操作中,剪枝流程通常是这样的:

  • 先训练一个基准模型,确保精度达标。
  • 设定剪枝率,比如剪掉30%的通道。
  • 逐层评估每个channel的重要性,常用指标是权重绝对值和、BN层的缩放因子、或者基于梯度的影响估计。
  • 按重要性排序,剪掉最不重要的部分。
  • 对剪完的模型做微调(fine-tune),恢复精度。

这里有个容易踩的坑:剪枝率不是均匀设置的。有些层冗余度高,比如最后的全连接层或者浅层卷积,可以多剪;有些层敏感度极高,比如第一个卷积层,剪一点精度就崩。我见过不少团队一上来就给所有层设同样的剪枝率,结果精度掉了5个点还找不到原因。正确做法是先做逐层敏感度分析,画一张"每层剪去x%后精度损失"的曲线,再按敏感度反比分配剪枝率。

2.3 量化:从FP32到INT8的性价比革命

量化是另一个思路:不减少参数数量,而是降低每个参数的精度。模型默认用FP32(32位浮点数)存权重,如果转成INT8(8位整数),存储直接缩到四分之一,推理速度因为硬件优化通常能提升2到4倍。这在2018年是极具诱惑力的事情——手机芯片的INT8算力普遍比FP32高一大截。

量化的技术路线主要有两种:

  • 训练后量化(Post-training Quantization):模型训练完直接转INT8,不额外训练。优点是快,缺点是精度损失不可控,尤其对激活值分布特别不均匀的模型,损失可能很大。
  • 量化感知训练(Quantization-aware Training):在训练过程中就模拟量化的效果,让模型主动适应低精度带来的噪声。精度损失小很多,但需要重新训练一轮,成本高。

腾讯当年分享的实操经验里有一个关键点:不是所有层都适合INT8量化。比如检测模型里的bbox回归头、分割模型的边界部分,对数值精度极其敏感,全模型一刀切量化经常会出问题。稳妥方案是混合精度量化——敏感层保持FP16甚至FP32,非敏感层用INT8,精度和速度取一个平衡。

另外,量化的时候千万别忽略激活值的范围统计。权重分布通常比较稳定,好处理;但激活值会因为输入变化而波动,如果掐不准范围,量化误差会被放大。常见做法是在校准集上跑几百个batch,统计激活值的min/max或者percentile,再决定量化scale。

2.4 知识蒸馏:大模型当老师,小模型当学生

知识蒸馏的思路有点意思。Hinton在2015年提出蒸馏时有个洞察:大模型学到的"知识",不只体现在最终预测标签上,还体现在类别的软概率分布里。比如一个猫的图片,模型认为87%是猫、10%是狗、3%是狐狸——这个分布比"猫"这个硬标签包含更多信息。小模型直接学软标签,相当于老师在教学生时不仅告诉答案,还讲了推导过程。

2018年蒸馏的实践已经成熟到可以组合使用了。腾讯提到的一个工程化经验是:蒸馏和剪枝、量化搭配,效果往往比单一手段好。比如先拿一个大模型蒸馏出一个中等模型,再对这个中等模型做剪枝和量化,最后得到的模型比直接对原模型剪枝量化精度高不少。这个流程后来成了很多团队的标配。

蒸馏本身的技巧也值得一提。温度参数T控制软标签的平滑程度,T越高,分布越平滑,类间信息越容易被学到,但也可能引入噪声。一般做法是T先设4左右试,观察student模型的表现,然后按验证集调。此外,蒸馏不只是让student去匹配teacher的输出logits,也可以匹配中间层特征图——这相当于让student模仿老师的"思维方式"而不只是"答案"。

2.5 三种手段怎么选:一个实用决策思路

我把这三个手段的使用场景整理一下,方便你对号入座:

手段核心原理优点注意点适用场景
剪枝去除冗余参数/通道不损失太多精度,对硬件友好需逐层敏感度分析,微调成本高模型本身结构冗余,如大卷积网络
量化降低数值精度存储和推理加速显著敏感层精度易崩,需校准集追求高吞吐、低延迟,如端侧推理
蒸馏大模型教小模型能拿到一个全新的小模型,不依赖原结构需要一个高质量的teacher模型从零训练一个紧凑模型

实际项目中,三者的顺序通常是先蒸馏得到结构合理的student,再剪枝去掉冗余,最后量化压缩数值精度。每一步都要验证精度是否达标,如果某一步掉点太多,要回流调整前一步的超参。记住一个原则:模型压缩不是"做完就完",每压一步都要有对应的精度回测和回归测试。

3. 机器学习:从"调参玄学"到"工程方法论"

3.1 2018年机器学习正处在"野路子"与"科学方法"的交叉口

说句实话,2018年之前很长一段时间,机器学习在工业界是被当成"玄学"来对待的。模型效果好不好,很大程度上取决于那个负责调参的人有没有手感——learning rate设1e-3还是3e-4,隐藏层宽度设256还是512,正则项系数设0.1还是0.01,都靠肉眼盯着loss曲线做决定。

但到了NeurIPS 2018这个节点,圈内对方法论本身的关注明显上升了。大家开始系统性地研究:什么样的数据处理流程更可靠?评估指标怎么选才能真实反映业务目标?模型效果不佳时,是数据问题、特征问题还是模型结构问题?这种思维转变,本质上是机器学习从"实验室里的手工技艺"转向"可复现、可规模化的工程体系"。

腾讯AI Lab在这个议题上的分享,据当时公开报道和业界流传的技术要点,主要集中在深度学习与传统机器学习方法的融合应用,以及模型组件(如注意力机制)在不同任务间的迁移复用。这些内容放到今天的视角来看,其实指向一个底层问题:机器学习项目的方法论,远比某个具体模型的实现细节更重要。

3.2 一个机器学习项目的"标准动作"拆解

不管你是用XGBoost还是用Transformer,一个完整的机器学习项目,基本逃不开下面七个环节:

  1. 业务问题定义:把"预测用户流失"翻译成"二分类问题,正样本是流失用户,评估指标是召回率优先于精确率"。这一步是最容易被忽略的,但决定后面所有工作的方向。
  2. 数据采集与清洗:处理缺失值、去重、纠正数据类型。脏数据是模型效果差的第一大原因,占比远超模型选型不当。
  3. 特征工程:把原始数据转换成模型能理解的表示。数值型要不要标准化?类别型用one-hot还是label encode?时间特征怎么抽?特征之间有没有交叉组合的空间?
  4. 模型选择:根据数据量、任务类型、可解释性要求选模型。小表格数据优先树模型;图像文本用深度学习;对解释性要求高的场景用线性模型或树模型。
  5. 训练与调参:划分训练集/验证集/测试集,确定loss函数,选优化器,设learning rate和batch size。用验证集做早停,用交叉验证评估稳定性。
  6. 评估与迭代:在测试集上计算准确率、精确率、召回率、F1、AUC等指标,然后回到特征工程或模型选择环节继续优化。
  7. 部署与监控:把模型封装成服务,设好输入输出格式,上线后监控指标是否漂移、预测分布是否变化,定期重训。

这里面每一环都有坑。比如数据切分,如果直接用sklearn的train_test_split而不考虑时间顺序,会对未来数据做"时空穿越",线上表现远差于离线评估。再比如类别不平衡,直接拿原始分布训练,模型会倾向把所有样本都判成多数类,准确率看着很高但毫无业务价值。

3.3 深度学习与传统机器学习的边界在哪里

聊机器学习就绕不开"深度学习vs传统机器学习"这个经典对比,我看相关热搜词里也大量出现"计算机视觉和机器学习区别""机器学习线性回归例子"这类问题,说明很多读者对概念边界还没完全建立起来。这里我用尽量直白的方式讲清楚。

传统机器学习(树模型、线性模型、SVM、K近邻等)擅长处理表格数据,特征维度几百几千这种规模,数据量在几万到几百万条之间。它的优势是训练成本低、结果可解释性强、在小数据上不容易过拟合。

深度学习擅长处理高维非结构化数据,比如图像、语音、文本,这些数据没法手工设计有效特征,而神经网络可以自动从原始信号中逐层提取特征。它的代价是需要大量数据和算力。

两者不是非此即彼的关系。实际工程里常见组合是:传统模型做第一层漏斗筛选,深度学习模型做精排。比如推荐系统里,先用GBDT或者逻辑回归从几千万商品里粗筛出几百个候选,再用深度模型精排这几百个的点击率。这种"分层漏斗"的思路,到今天依然是工业界的主流架构。

3.4 从机器学习热词看,入门者的共性问题

从最近搜索热度里能看到大量"机器学习入门""机器学习期末复习""吴恩达机器学习""西瓜书""李宏毅机器学习作业"这类关键词,说明这个领域的入门者数量非常庞大,而且很多人卡在同一个阶段——资料看了一堆,代码也跑了几个Demo,但一到自己拿到一个新数据集就不知道从哪下手。

我给入门者的建议很朴素:不要一上来就啃理论推导,也不要沉迷于换模型调参,先找一个小而完整的数据集(Titanic、Iris、房价预测这类经典数据集都行),从头到尾走一遍上面说的七步流程。第一遍走的时候允许犯错,哪怕结果很差也没关系;第二遍再针对性地优化某一个环节。走完三个完整项目,你对机器学习的感觉会和只看教程完全不一样。

4. 最优化算法:神经网络训练的底层基建,也是争议最多的战场

4.1 为什么模型效果不好要先查优化器

很多刚入门的朋友会觉得优化算法离自己很远——反正PyTorch里一行optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)就搞定了,有什么好研究的?

但事实是,优化算法决定了模型能不能收敛、收敛到多好的解、以及需要多长时间才能训完。同一套模型结构,用SGD和用Adam,最终精度可能差好几个点;learning rate设大了直接发散,设小了训到天荒地老还不收敛。腾讯AI Lab把最优化算法列为三大热点之一,正是因为它是所有深度学习工作的地基。

优化算法的本质是求解这样一个问题:给定一个损失函数 L(θ),找到一组参数 θ 让 L 最小化。但由于神经网络的非凸性,这个问题不存在解析解,只能靠迭代逼近。每次迭代沿着某个方向迈一步,步长和方向决定了整个训练的路径。所有优化器的区别,本质上就是"方向怎么算"和"步长怎么定"的区别。

4.2 优化器进化史:从SGD到Adam,再到AdamW和LAMB

把优化器的演化脉络梳理一遍,你会发现每次革新都是为了解决一个具体的痛点:

  • SGD(随机梯度下降):最朴素的做法。每次随机抽一批样本,算梯度,沿负梯度方向更新。优点是稳定,但收敛慢,而且在loss landscape的狭窄山谷里会来回震荡。
  • Momentum(动量):引入历史梯度的指数滑动平均,相当于让更新方向带有"惯性",穿越平坦区域和逃离局部极小值时更利索。
  • Adagrad/RMSProp:自适应调整每个参数的学习率,对稀疏梯度友好,解决了不同参数更新频率差异大的问题。
  • Adam:Momentum和RMSProp的结合体,同时考虑梯度的一阶矩(均值)和二阶矩(方差),在绝大多数任务上开箱即用,收敛速度快。
  • AdamW:把权重衰减(Weight Decay)从loss函数中解耦出来,直接作用于参数更新。修复了Adam里L2正则与自适应学习率相互作用导致的泛化问题。

到了2018年,腾讯这类大厂在工业级训练里已经开始关注一个更工程化的问题——大batch下的优化。Adam虽然在很多任务上表现好,但在超大batch(几万甚至几十万)训练时,它的二阶矩估计容易失真,导致收敛不稳定。后来Google提出的LAMB优化器就是针对这个场景做修正——逐层归一化更新步长,让大batch训练效率和效果能同时兼顾。

4.3 大白话理解Lipschitz常数和Adam的争议

2018年NeurIPS上关于优化算法最有意思的讨论,是Adam的收敛性理论证明及其反例。这个争论到现在还有余温,但其中两个核心概念你得懂,不然看论文和博客会很吃力。

第一个是Lipschitz常数。简单理解,它描述了一个函数的梯度变化有多剧烈——如果在一个区域内,无论你怎么移动,梯度的变化率都不会超过某个上限L,那这个函数就是L-Lipschitz光滑的。对优化算法来说,L越小,说明梯度越"温和",用固定步长往下降就越安全;L越大,说明梯度变化越剧烈,步长稍微大一点就可能跳过最优点甚至发散。很多自适应优化器的设计思路,本质上是让步长能动态适应局部L的变化。

第二个是Adam到底能不能保证收敛。2018年那篇著名的反例论文指出,存在某个简单函数,Adam在某些参数设置下会一直不收敛。这个发现当时让学术界炸了锅——因为大家都默认Adam是"自适应魔法",原来它也有失效的时候。后续的研究发现,Adam不收敛的原因在于二阶矩估计可能偏小,导致步长偏大,在局部区域反复横跳。解决办法也不复杂:加权重衰减(就是AdamW干的事),或者对二阶矩设一个下限(类似AMSGrad的思路)。

我个人的经验是:不要神化任何优化器,也不要妖魔化任何优化器。默认情况下,AdamW在Transformer类模型上表现稳定;CNN模型SGD+momentum经常能推出更好的泛化精度;小数据小模型用SGD即可。每换一个优化器,都要重新做learning rate的搜索,因为优化器改变后,最优学习率是完全不同的量级。

4.4 分布式训练和优化算法的配合

腾讯AI Lab当年讲最优化算法时,分布式训练是一个绕不开的应用场景。单卡训练一个模型可能要几天,公司等不起,分布式成了解药。但分布式训练引入了新的优化问题——数据并行下,梯度的同步方式会直接影响模型的收敛速度和最终精度。

常见方案有三种:

  • 同步SGD:每step要求所有worker算完梯度并同步,再统一更新。优点是和单卡训练理论等价,缺点是一台慢机器拖慢全体,吞吐量受限。
  • 异步SGD:每个worker算完梯度就立即更新共享参数,不等其他人。优点是吞吐量大,缺点是梯度是"过期的"——你拿到的参数可能已经被别人更新过好几轮,这会让训练不稳定。
  • 梯度压缩与通信优化:把梯度做量化或稀疏化(只传大于阈值的梯度项),降低通信开销。2018年前后兰登等人做的一系列梯度压缩工作,就是在不损失太多精度的情况下,把通信量降到原来的百分之一量级。

做工程落地时,我的建议是:同步SGD优先,如果同步受限于通信瓶颈,再考虑梯度压缩和延迟同步的混合方案。异步SGD不是不能用,但需要把learning rate调低、增加梯度裁剪阈值,并且用更大的batch来抑制噪声。

5. 从当时的三大热点,看看这几年的技术演变

5.1 模型压缩的今天:从"可选项"变成"必选项"

回到标题本身,我们再看NeurIPS 2018腾讯AI Lab详解的这三个热点,以及它们在这几年间的演变。

模型压缩在2018年是"让模型跑在端上"的补救手段,但今天的语境完全变了。大模型时代,模型参数量动辄几十亿、上百亿,单卡都装不下,更别说端侧。模型压缩的优先级已经从"有空再优化"变成了"从一开始就要考虑"。

现在的LLM部署几乎离不开量化——4bit、8bit量化已经成了推理引擎的默认配置;剪枝在结构化稀疏和MoE稀疏两个方向上都有了新内涵;蒸馏则变成了最热门的研究方向之一,比如把大模型的能力蒸馏到小模型上,让7B、13B的模型逼近70B的效果。可以看到,当年腾讯分享的三大技术路线不但没过时,反而成了今天基础设施级的存在。

5.2 最优化算法在LLM时代的分量

大模型训练的基础设施,比2018年复杂了好几个数量级,但最优化问题依然是核心瓶颈之一。LLM训练经常面临loss尖峰(loss spike)问题,训练到某个step突然loss暴涨,然后慢慢恢复,这种不稳定通常与优化器的自适应步长、batch size太大、数据分布变化有关。

现在业界普遍采用的策略包括:用AdamW做base优化器,配合warmup、cosine decay、gradient clipping、以及动态调整batch size。张量并行、流水线并行的分布式拓扑里,同步策略的选择依然直接影响训练效率。说实话,2018年那套关于Lipschitz光滑性、步长动态调整、梯度同步的底层认知,今天一点都没过时,反而更重要了。

5.3 机器学习在AI Lab的位置:应用研究与基础研究的跷跷板

最后聊聊"机器学习"这个看似宽泛的方向,在AI Lab里到底承担什么角色。

AI Lab做机器学习研究,和高校做机器学习研究有本质区别。高校可以为了一个理论问题争论三五年,但企业的实验室必须同时回答一个问题:"这个研究能帮到公司什么业务?"所以腾讯AI Lab在NeurIPS上讲的机器学习,往往不是纯粹的统计学习理论,而是那些能把论文成果转化为技术能力的中间层——比如统一的训练框架、可复用的模型组件、跨任务的迁移方法。

这也解释了为什么腾讯当时会同时押注模型压缩和最优化算法:模型压缩对应着业务侧"模型要落地",最优化对应着平台侧"训练效率要提升",这两头一拉一推,中间的机器学习研究就有了明确的着力点。国内其他大厂的AI Lab的布局逻辑也大同小异。理解了这个动机,你就知道看AI Lab的论文时该关注什么——不只看理论创新,更要看它有没有实际应用落地的可能性。

6. 看完这篇文章,你接下来该做什么

内容聊得差不多了,最后给不同阶段的读者一些具体建议。

如果你还在入门阶段,正在刷吴恩达或者李宏毅的课程、看西瓜书、备考期末,那这篇文章里有几个词你不需要深究——Lipschitz常数可以先放一放,分布式训练也暂时不用碰。你目前最该做的是把机器学习七步流程走一遍,亲手完成一个线性回归或逻辑回归项目,把数据清洗、特征处理、模型训练、评估这些基本动作练熟。优化器可以先记住一句话:默认用Adam,效果不好换SGD试试。

如果你是已经在做项目的工程师,我建议你从模型压缩入手,把你手头正在跑的模型做一次量化,至少能感知到推理速度的变化。然后找一个小模型做剪枝实验,画一画各层的敏感度曲线,这个动手过程比读十篇综述都管用。最优化算法这块,花半天时间把你项目里的优化器、learning rate、weight decay、gradient clipping参数全部梳理一遍,做一个简单的消融实验,你会发现很多精度问题其实不是模型结构问题,而是优化配置没调对。

如果你是研究向的读者,最优化领域的争议至今没有完全收敛,Adam及其变体为什么在大模型上work得这么好,理论解释还是开放的。模型压缩和知识蒸馏在生成式模型上的新形态也是好方向。

最后分享一个我的个人习惯:每年学术顶会放榜后,不急着读全部论文,先找几家有代表性的实验室或者公司的技术博客,看看他们怎么解读自己录用的论文。这个动作比你自己盲扫几百篇论文的效率高得多。NeurIPS 2018的腾讯这篇算是比较典型的一次——三大热点,每个都值得你花时间深挖下去。

返回列表