
1. 为什么NeurIPS 2018值得重新翻出来看NeurIPS 2018那一年腾讯AI Lab在现场带去了三场技术分享主题分别是模型压缩、机器学习、最优化算法。当时投稿量已经涨到4800多篇最后接收率不到21%顶会的竞争比现在看到的还要激烈。三场分享看着是三个独立方向实际上连成了一条非常清晰的技术链路算法负责把模型训出来最优化负责把训练过程跑稳模型压缩负责让模型真正能落地。这正好对应了当时AI行业从实验室走向产业的核心矛盾。我之所以把这场旧会翻出来写是因为三年、五年后再看这三个方向不但是NeurIPS的主流也是工业界招聘、项目立项、技术选型时绕不开的基本功。很多人学机器学习上来就调库跑模型最后卡在训练不收敛、模型太大部署不了、效果不稳这几个老问题上根源就是这三块底层逻辑没打通。这篇复盘会把这三大热点拆开揉碎讲清楚每个方向解决什么问题、关键操作怎么做、实际踩坑怎么避。适合刚入门的学生、做算法落地工程的工程师以及想了解AI项目全貌的技术管理者。2. 模型压缩把“大象”塞进“冰箱”的三个方案2.1 为什么模型压缩成了顶会热点2018年前后深度学习模型的效果已经刷得很高但模型体积和算力消耗也水涨船高。一个ResNet-50跑在GPU上没问题放到手机、摄像头、嵌入式设备里就完全跑不动。模型压缩不是学术界自嗨而是产业落地的硬需求。你训练好的100层神经网络到了端侧设备上内存就几百MB算力还不到GPU的零头不压缩根本没得玩。那个时候的压缩思路集中在三个方向量化、剪枝、知识蒸馏。这三大套路到现在依然是主流后来出现的各种轻量化网络设计比如MobileNet、ShuffleNet更像是从源头把模型做小而压缩技术是在已有模型上“减肥”两者可以配合使用。腾讯当时分享的模型压缩内容重点也是围绕这三条路线展开的我逐一讲下原理和实操。2.2 量化用更少的比特装下权重量化做的是“降精度”。平时训练用的浮点参数是FP32也就是每个权重占32位。如果换成INT8每个权重只占8位模型体积直接缩小到四分之一推理时用整数运算替代浮点运算计算速度也能提升一截。这个方法最直观、最容易见效所以工业界用得非常普遍。但量化不是简单粗暴地把权重截断成整数核心是建立浮点数值到整数数值的映射。常见做法是线性量化先统计权重或激活值的动态范围min和max然后按公式把浮点数映射到0到255的整数区间。这里面有个容易被忽略的点量化的粒度。按整个张量算一个scaleper-tensor实现简单但精度损失大按每个通道各自算scaleper-channel精度更好但实现复杂一些。我的经验是卷积层尽量用per-channel全连接层用per-tensor问题不大。实操中掉点太明显时推荐做量化感知训练QAT。就是在训练过程中模拟量化误差让模型自己去适应低精度表达这样推理时切到INT8掉点会小很多。我踩过的坑是校准集的选择——选500张图片跟选5000张图片校准出来的scale差别很大选得有偏后续模型在真实数据上会偶发精度崩塌。一般校准集要尽量贴近真实分布各类别都要覆盖到。2.3 剪枝砍掉不重要的连接剪枝的思路跟“断舍离”一样神经网络里很多权重本来就接近零或者很多通道对最终结果贡献极小把这些去掉模型就变瘦了。剪枝分成两类非结构化剪枝是直接把单个权重置零模型变得稀疏但硬件加速不明显结构化剪枝是直接删掉整个通道或滤波器模型结构真正变小推理速度能实打实提升。这里要提一个经典方法基于L1范数的滤波器剪枝。每个滤波器计算所有权重的绝对值之和这个值越小说明滤波器对输出的影响越小可以优先剪掉。剪完以后必须做一次微调fine-tune让剩下的参数重新适应。否则精度会肉眼可见地掉。我个人的建议是剪枝比例不要一上来就拉满。我见过有同学直接剪掉50%的通道结果模型精度崩了再微调也很难救回来。稳妥的做法是从10%开始试每次增加5%每剪一次评估一次精度找到拐点后再往回调一点。另外剪枝和量化可以叠加使用先剪枝再量化压缩效果比单独用任何一种更好但要注意叠加带来的误差会被放大需要更细腻的微调。2.4 知识蒸馏让大模型当老师知识蒸馏的思路特别有意思既然大模型效果好那让小模型去学大模型的“行为”就行。大模型教师网络在训练时不仅输出最终的正确答案还输出一个概率分布比如一张猫的图片它可能会给“猫”0.7的概率给“狮子”0.2的概率。这个分布里其实包含了“猫和狮子有点像”的暗知识直接学硬标签只告诉你是猫是学不到这层信息的。实现方式是在softmax里面加一个温度参数T让概率分布变“软”。公式不复杂T越大分布越平滑类间的相对关系保留得越多。训练学生模型时损失函数由两部分组成一部分是学生自己的预测和真实标签之间的交叉熵另一部分是学生的软预测和教师的软预测之间的KL散度。两部分用权重系数α平衡。我自己试过α在0.7左右通常表现不错但具体还要看你任务的数据量和难易程度可以拿验证集多试两次。知识蒸馏在工业界的应用非常广腾讯当年分享的内容里就有不少推荐场景的案例。因为推荐模型很多都是大模型embedding线上延迟敏感直接用蒸馏把大模型压缩成小模型是性价比极高的方案。后来很多LLM也用蒸馏做小模型原理一样只是数据规模大得多。3. 机器学习从入门到实战的完整通道### 3.1 机器学习的应用流程到底长什么样很多初学者对机器学习的理解停留在“训练一个模型”上但真正项目里的流程远比这长数据收集、数据清洗、特征工程、模型选择、训练调参、评估、部署、监控一环扣一环。腾讯当年分享的机器学习内容相当一部分是在讲这套完整流程因为顶会论文里大家看到的是闪亮的结果看不到前面百分之八十的数据功夫。我把流程拆成几个关键动作第一步是定义问题明确是分类、回归还是聚类用什么指标衡量好坏第二步是数据准备包括缺失值处理、异常值剔除、归一化、类别特征编码第三步是特征工程这一步决定模型上限第四步才是建模和训练。很多热门问题搜“机器学习中的数据处理是什么”说明大家都意识到数据这关难过了。确实我见过太多项目在数据阶段就翻车比如训练集和测试集分布不一致、标签有噪声、特征里有未来数据泄露这些都不是模型能救回来的。3.2 数据处理和特征工程的优先级数据处理里最容易被忽视的是“数据泄露”。比如做用户流失预测你把用户未来的消费行为当成特征放进去模型在训练集上表现完美上线就废因为未来数据在预测时根本拿不到。这是个非常典型的实操陷阱。另一个常见问题是类别特征的处理直接硬编码成0、1、2会让模型误以为类别之间有大小关系正确做法是用one-hot或embedding。特征工程做得好可以让简单模型达到复杂模型的效果。我自己常用的思路是先做一轮基础统计特征均值、方差、分位数、频次再做交叉特征比如用户活跃度和商品价格段组合最后用GBDT的叶子节点做特征转换效果往往立竿见影。特征不是越多越好冗余特征会增加训练难度和过拟合风险所以特征筛选也很关键常用方法包括基于相关性的筛选、基于模型特征重要度的筛选。3.3 经典算法和学习资源怎么选机器学习算法看起来很多但核心就几大家族线性模型线性回归、逻辑回归、树模型决策树、随机森林、GBDT、支持向量机、聚类算法K-Means、DBSCAN、神经网络。热搜里“十大机器学习算法”“机器学习西瓜书”高频出现说明大家刚开始学的时候都想有一条清晰路径。我的建议是先吃透线性回归和逻辑回归这两个是理解一切复杂模型的基础然后啃决策树学完树模型你对特征重要度和非线性的理解会提升一个层次之后再碰神经网络。学习资源方面吴恩达的课程适合入门视频讲得细作业也值得做周志华的《西瓜书》理论性强适合用来查概念和补数学基础李宏毅的课程对深度学习讲得通俗有趣英文中文混合也能接受。我不建议一上来就死磕数学推导先会用、知道调什么参数再回头补数学效率会高很多。4. 最优化算法训练的发动机4.1 机器学习的本质是最优化你可能没意识到机器学习的训练过程本质上就是在求解一个最优化问题找到一组模型参数让损失函数最小。线性回归的损失函数是个凸函数可以用解析解一步求出但神经网络结构复杂损失函数是非凸的必须用迭代算法一步步逼近。这时候最优化算法就是决定你“走得快不快、稳不稳、能不能到终点”的发动机。最经典的迭代思路是梯度下降。你把损失函数想象成一座连绵的山目标是走到山谷最低点梯度就是当前位置最陡峭的上山方向往相反方向走一步就下降一点。所谓“学习率”就是这一步迈多大。公式看一眼就懂θ θ - η·∇J(θ)。批量梯度下降每次用全部数据算梯度准确但慢随机梯度下降每次随便抽一个样本算快但噪声大小批量梯度下降取两者折中也是现在的实战标配。4.2 优化器进化史从SGD到Adam常年在PyTorch里用optimizer.SGD或者optimizer.Adam很多人其实没搞清楚这些优化器解决什么问题。SGD最原始的问题是如果损失曲面在某个方向上极其陡峭、另一个方向非常平缓SGD会来回震荡走得很慢。动量的思路就是给更新累积一个“惯性”方向保持一致就加速方向反复横跳就抵消这样能更快穿过平坦区域。AdaGrad、RMSProp则是从“每个参数该用多大学习率”入手的。不同参数的重要性不一样有些参数梯度稀疏需要大一点的学习率有些参数梯度密集学习率大会震荡。RMSProp用梯度平方的指数滑动平均来归一化学习率。把这些思路整合在一起的就是Adam它同时具备动量和自适应学习率还引入了偏差校正来处理初始估计偏小的问题所以在大部分任务上开箱即用效果不差。4.3 学习率设置与实战调参心得学习率是最重要的超参数没有之一。太大损失函数发散训练直接飞掉太小训练半天原地踏步。我见过太多人训练不收敛第一反应是改网络结构结果问题只是学习率设错了。建议新任务的pipeline搭建好之后先用一组大范围的学习率做个小实验画出loss曲线观察它是发散、震荡还是收敛太慢再决定初始值。几个能救命的技巧一是warmup前几百步用比较小的学习率让模型先热身尤其是大模型和Transformer结构跳过warmup很容易训飞二是学习率调度训练到一半后逐渐降低学习率让模型收敛到更精细的局部最优三是梯度裁剪当梯度范数超过某个阈值时缩小到阈值以内防止梯度爆炸。这些方法都是NeurIPS 2018前后最优化领域的热点话题到现在依然是工业界的标准操作。5. 三大热点如何影响AI落地的这几年5.1 模型压缩直接喂活了端侧AI把时间线拉长看NeurIPS 2018上的模型压缩内容几乎预告了随后几年端侧AI的大爆发。手机芯片高通的Hexagon、华为的NPU逐步把INT8计算做成硬件的标配能力TFLite、TensorRT这些推理框架也把量化入口做得越来越简单。今天你手机上的人像分割、实时翻译、语音助手背后全是压缩过的模型在跑。端侧场景对延迟和功耗极其敏感模型压缩是生死线。一个动作识别模型如果在服务器上要2秒钟才出结果做交互就完全不可用压缩到手机上50毫秒以内产品逻辑才成立。从技术选型角度讲现在的铁律已经变成先按端侧硬件能力确定量化方案再通过蒸馏和剪枝把模型压到目标延迟最后才上线测试。这条流程在腾讯当年的分享里已经有雏形现在基本是所有AI产品团队的标准姿势。5.2 最优化算法支撑起大规模训练另一个重要影响在大规模训练领域。2018年之后模型越来越大数据越来越多单卡训练变成不可能完成的任务分布式训练的核心问题就是最优化算法怎么同步。常见的方案有同步SGD和异步SGD两种。同步方式稳定但需要等最慢的卡算完才能汇总梯度异步方式快但容易出现梯度陈旧问题影响收敛性。这些年业界折腾出的Gradient Accumulation、Local SGD、梯度压缩类似于把梯度先量化再通信等方案都和最优化算法直接相关。大模型训练里动不动就“loss spike”“loss发散”本质上也是优化器、学习率调度、数据并行策略没配合好。所以我一直觉得懂最优化算法的人在大模型时代特别吃香因为所有分布式训练问题最终都得靠优化理论那套分析框架去解。5.3 机器学习工程化走向成熟三个热点合在一起还催生了机器学习工程化MLOps的成熟。模型压缩让部署不再是事后的痛苦迁移机器学习流程让数据、模型、评估成为闭环最优化算法让训练本身变得可控、可复现。现在的AI团队招人看的不是你会不会调个库而是能不能端到端地把一个项目做出来数据有问题会清洗特征有缺失会处理模型不收敛会调优化器模型太大能压缩。这也是为什么我反复建议新人不要把目光只盯在某一个算法上。从NeurIPS 2018这三个热点看十年后的今天学AI的正确姿势是掌握机器学习完整流程理解最优化算法的工作原理再掌握模型压缩的常见手段。这三块拼在一起你才真正具备独立解决实际问题的能力。6. 常见问题与排查技巧实录6.1 训练不收敛从哪查起训练不收敛是出现频率最高的故障。我一般按顺序排查先看数据有没有NaN、标签错乱、特征分布异常再看损失函数有没有写错配合的激活函数是不是匹配然后看梯度是不是出现了梯度消失或爆炸最后才看超参数尤其是学习率。很多问题其实在第一、二步就该发现了偏偏有人喜欢先调模型结构绕一大圈回来发现是数据里有脏值时间全浪费了。6.2 压缩后精度下降太狠压缩掉点不要慌按“温和到激进”的顺序处理。先调整量化校准集让量化参数更贴近真实分布再尝试量化感知训练让模型在训练中提前适应量化误差。如果用的是剪枝方案把剪枝比例调小增加微调的epoch数。最后还可以尝试知识蒸馏让压缩后的小模型去学习原始大模型的输出分布这个办法往往能有效弥补压缩损失。6.3 给初学者的三条实用建议第一先把线性回归和逻辑回归用手推一遍不要只满足于调包。推完你会理解梯度下降、损失函数、学习率这些概念的全部含义后面学什么都快。第二每个新模型都要建立小规模的验证集先跑通再跑大不要直接把全部数据灌进去。第三遇到问题先看loss曲线它是最直接的诊断工具。保持这样一个思维习惯永远是“数据、模型、优化、压缩”四个环节一起思考而不是孤立地调参。我个人在实际操作中的体会是这三个方向并不是彼此隔离的三个知识点而是同一个系统工程的三根支柱。腾讯AI Lab在NeurIPS 2018把这三个主题放在一起分享本身就是一种技术判断AI要走向产业不能只会在论文里刷分。后来这几年的发展也验证了这种判断。对于现在还在入门阶段的朋友我的建议很朴素把机器学习流程走通把优化器原理吃透把压缩技术练熟。这三样功夫练好不管以后技术怎么变你的基本功都不过时。