ARTICLE DETAIL

资讯详情

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

图解模型蒸馏:小模型凭什么学会大模型的本事

图解模型蒸馏:小模型凭什么学会大模型的本事 版权与内容来源声明本文为原创整理。文中涉及官方文档、开源仓库、论文与公开报道的内容均在附表 A 中标注来源引用官方原文保持原样不作改写。文中命令、版本号与界面截图以本文成文时的实测/核验结果为准标注「待验证」的部分请以你本地环境实际输出为判断依据。本文不推荐任何不合规的软件获取方式也不对任何收益结果作承诺。转载请注明出处。第1章 先把三件事分开蒸馏、量化、微调第一次听到「蒸馏」很多人会下意识把它和「量化」「微调」归成一类——都是「让模型变小一点、跑得快一点」。但三者在底层动的东西完全不同方向选错投入的时间和算力基本白费。先记住一句话判据微调继续训练改的是参数本身量化把权重的数值精度压下来参数数量不变蒸馏让一个小模型去模仿大模型的输出分布等于请大模型当老师重新教出一个学生。这里说的「老师」是一个模型「学生」是另一个模型。这套叫法来自 2015 年 Hinton、Vinyals、Dean 的论文《Distilling the Knowledge in a Neural Network》。它在摘要里把动机写得很直白A very simple way to improve the performance of almost any machine learning algorithm is to train many different models on the same data and then to average their predictions.翻译成人话把很多模型的结果平均起来效果通常更好但一堆模型同时上线又太笨重所以要把「平均出来的那份本事」压进单个模型里。这就是蒸馏最初的出发点——它一开始解决的不是「显存不够」而是「集成太大装不下」。1.1 三个动作分别动了什么微调改的是参数的取值参数量不变量化改的是参数的表示精度参数量同样不变蒸馏换的是模型本体用一个小结构重新训练。记住这条参数量下降这个结果只有蒸馏能直接带来另外两个是「同样大但更省」或「同样大但更懂业务」。1.2 为什么三者不能互相替代量化不改变模型的「知识」只改变它用多少位来表示知识所以量化一个没学好的模型得到的还是一个没学好的小体积模型。微调同理它让模型更贴合你的数据分布但参数量降不下来。要降体积先想量化要补领域先想微调要「用小模型继承大模型的本事」才轮到蒸馏。知识蒸馏在学术上被归到「模型压缩与加速」这一类一篇有代表性的综述在摘要里这样定位它原文逐字Knowledge distillation effectively learns a small student model from a large teacher model. 这句话点出了它的本质它是一次重新学习不是一次格式转换。第2章 软标签学生真正要学的是「分布」2.1 什么叫软标签蒸馏里最关键的一个词是「软标签」soft label。先把它讲成人话。普通训练用的标签是硬标签——一张图是猫就是猫答案是一个独热向量one-hot意思是整条向量里只有一位是 1、其余全是 0。软标签则是老师模型输出的一整串概率比如「猫 0.86、狗 0.11、狐狸 0.03」它不只告诉你答案是猫还顺带告诉你「狐狸也有点像」。这个「顺带信息」就是蒸馏的价值。关于它一篇量化综述在引言部分有过明确表述以下为无引号转述原句见附表 A与其在训练学生时使用「硬」类别标签蒸馏的核心思路是利用老师产生的「软」概率因为这些概率包含了更多关于输入的信息。维度硬标签软标签老师输出形态独热向量如 [0, 0, 1]概率分布如 [0.03, 0.11, 0.86]信息量只说「是哪个」还说「像哪些」谁来提供人工标注 / 数据集老师模型前向推理学生能学到单点答案类别之间的相对关系主要缺点丢失类间相似性依赖老师质量老师错学生跟着错2.2 温度把「像哪些」放大出来老师输出的原始概率往往很「尖」正确答案 0.99其它全接近 0这时软标签的信息量其实被压扁了。解决办法是引入温度temperature一个大于 0 的缩放系数在 softmax 之前先把 logits模型最后一层的原始得分还没被变成概率的那些数除以温度再归一化。温度越高分布越平类与类之间「谁更像谁」的差别就越明显。⚠️代码待验证importmathdefsoftmax_with_temp(logits,T1.0):scaled[x/Tforxinlogits]mmax(scaled)exps[math.exp(x-m)forxinscaled]ssum(exps)return[round(e/s,4)foreinexps]logits[3.2,1.1,0.7]print(T1 :,softmax_with_temp(logits,1.0))print(T4 :,softmax_with_temp(logits,4.0))这段代码没有在你的环境里跑过输出请以实际结果为准。它的作用是让你看到一件事同一组 logits温度升高后分布会变平原本被压到接近 0 的那些「像谁」的线索会被放大到可见。2.3 温度不是越高越好温度只是把分布拉平不改变老师的排序。实际训练里学生要在高温下学「类间关系」同时还得回到温度 1 去对「最终答案」两头的温度怎么配是蒸馏调参里最常被反复试的点。这条属于经验做法、非官方规定请以你自己的留出集结果为准先固定老师一侧的温度再看学生掉点情况微调而不是一次调两侧。第3章 学生怎么把分布学进去损失函数拆成两块3.1 两块损失学生训练时的总损失通常由两部分组成一块是学生自己对硬标签的常规损失另一块是学生去对齐老师软分布的蒸馏损失。损失项对齐的对象作用少了它会怎样学生任务损失硬标签数据集真标签保证学生答得对可能学歪最终答案层面跑偏蒸馏损失软标签老师输出分布传递类间关系退化成普通训练失去蒸馏意义DistilBERT 的做法是再加一块特征层面的损失。它 2019 年的论文摘要在这一点上写得明确原文逐字we introduce a triple loss combining language modeling, distillation and cosine-distance losses——即把语言建模损失、蒸馏损失、余弦距离损失三项合在一起。这说明蒸馏不必只用输出分布但输出分布是最小可用的那一块初学者先把这条主线走通。3.2 两者怎么加权常见写法是给两项各配一个权重合成一个总损失形式是total alpha * hard_loss beta * kd_loss。⚠️代码待验证deftotal_loss(student_logits,teacher_logits,labels,T,alpha,beta):hardcross_entropy(student_logits,labels)# 对真标签s_softsoftmax(student_logits/T)# 学生软分布t_softsoftmax(teacher_logits/T)# 老师软分布kdkl_divergence(s_soft,t_soft)*(T*T)# 对老师软分布returnalpha*hardbeta*kdcross_entropy、kl_divergence需要从你使用的框架里导入T * T是常见的量纲补偿写法具体以实现为准。3.3 学分布不等于学答案有个反直觉的点只让学生去拟合老师的最终答案也就是取概率最大的那个类蒸馏几乎退化成「用老师重新打了一遍标签」课堂信息大量流失。真正带信息量的是那一整条概率分布——同一条数据里软标签携带的监督信号比硬标签更密。这也是蒸馏能「用小模型接住大模型判断能力」的根本原因。第4章 图解对比蒸馏、量化、微调各动什么4.1 用流程描述画一遍这里不画思维导图请按顺序在脑子里过一遍。微调拿一个已训练好的模型 → 喂你的领域数据 → 继续反向传播 → 参数被改写 → 得到同样大、但更懂你业务的模型。量化拿一个已训练好的模型 → 统计权重数值范围 → 用更低的位宽位宽指一个数占多少比特例如从 FP32 降到 8 位整数重新表示 → 参数量不变、体积变小 → 得到同样聪明、但更省资源的模型。蒸馏先有一个训练好的大模型老师→ 准备一个结构更小的学生网络 → 学生同时对齐真标签与老师的软分布 → 学完之后老师退场 → 得到体量明显更小、但继承了大模型判断能力的新模型。一句话微调在改写同一本书量化在把书印得更小蒸馏是让另一个人读完这本书后重讲一遍。4.2 三者的关键差异对比维度蒸馏量化微调动的是什么学生模型的全部参数重新训练权重的数值精度原模型的参数取值参数量明显减少不变不变谁提供监督老师模型 真标签无依赖原模型真标签是否要重训是不一定是典型收益体积小、推理快省显存、省带宽任务表现好主要代价训练成本高、可能掉点低比特下精度损失不减小体积能否叠加可与量化、剪枝叠加可与蒸馏叠加可在蒸馏后做一个常被引用的落地例子是 DistilBERT。它的论文摘要在收益上给过一句原话reduce the size of a BERT model by 40%, while retaining 97% of its language understanding capabilities and being 60% faster。意思是体积减少约 40%、同时保留约 97% 的语言理解能力、速度快约 60%以上为原句数值仅作参考不代表你自己的任务能达到同样结果。它说明蒸馏的收益可以同时落在体积和推理速度上而不只是「模型变小了」。4.3 一个常被忽略的前提蒸馏的压缩比不如量化量化与蒸馏不在同一层面上量化是「表示层」的压缩蒸馏是「训练方式」的替换。所以两者可以叠加——先蒸馏出一个小模型再对它做量化体积收益是相乘的不是二选一。但有个容易踩的坑上面那篇量化综述在引言中给出过对比无引号转述原句见附表 A——量化与剪枝在低比特8 位整数及更低下守住性能的压缩倍数较为可观而仅靠蒸馏做激进压缩时往往伴随不可忽略的精度下降。它同时指出把蒸馏与量化、剪枝结合使用效果显著。这两句话合起来就是本文最重要的判据蒸馏负责「换小模型」量化负责「再省一档」想一步到位只靠蒸馏把体积压到极限是要付精度代价的。第5章 取舍判据什么时候该蒸馏什么时候不该5.1 先问三个约束判断要不要上蒸馏先回答三个问题而不是先挑工具。你的瓶颈是「显存 / 带宽」还是「模型本体太大」——前者优先量化后者才考虑蒸馏。你手上有现成的老师吗——蒸馏必须有老师拿不到老师权重、也拿不到老师输出的场景蒸馏根本无从谈起。掉点能不能接受——蒸馏在激进压缩下常见不可忽略的精度下降任务对精度极敏感时先小规模试验再决定。5.2 判据表你的情况该做蒸馏吗更该先做什么显存 / 带宽不够模型大小可接受不必优先先量化再看是否还要蒸馏模型本体太大想换更小的架构应该蒸馏可与量化叠加缺领域知识体积不是问题不该微调拿不到老师权重或老师输出做不了改用量化 / 微调对精度极敏感、不允许掉点谨慎先小规模试验确认误差范围想同时拿小体积和高精度应该叠加蒸馏 量化组合使用5.3 停手判据不要用「掉点多少能接受」这种模糊标准改成三个可检查的问题学生在留出集上是否稳定不劣于你定的验收线蒸馏带来的收益是否大于它多花的训练成本老师退场后学生能否独立跑通全流程三个都答「是」再上有一个答「否」就退回上一档。这份资料是什么把「机制系列」的图解和模型压缩相关的术语对照整理成了一份速查清单和本章的判据表配合看更顺。放在资料包里扫码即可获取第6章 一个最小可跑的蒸馏骨架6.1 骨架长什么样把流程按顺序写清楚准备老师固定、不训练→ 准备学生结构更小→ 前向两次老师、学生→ 算两项损失 → 只更新学生的参数 → 在留出集上验收。⚠️代码待验证forbatchindataloader:x,ybatchwithno_grad():t_logitsteacher(x)# 老师只前向不更新s_logitsstudent(x)# 学生前向losstotal_loss(s_logits,t_logits,y,T4.0,alpha0.5,beta0.5)loss.backward()# 只累积学生的梯度optimizer.step()# 只更新学生这里唯一的要点是老师的参数全程冻结。否则你训练的是一个「老师学生一起动」的过程监督信号不再稳定蒸馏也就失去了参照物。6.2 验收要看两类指标验收的动作很简单在同一个留出集上把老师和学生各跑一遍对比结果。⚠️代码待验证metrics{}metrics[teacher]evaluate(teacher,val_loader)metrics[student]evaluate(student,val_loader)print(metrics)验收至少要覆盖两类一类是任务指标分类任务看 F1分数一类是资源指标模型体积、单条推理耗时。只看任务指标你会选出一个「精度还行、但没省下多少」的方案。6.3 什么时候停学生进入验收线以内、且资源收益达到预期就该停。继续加大蒸馏强度收益递减而训练成本近似线性增长性价比会迅速变差。第7章 三个常见误区与收尾判据7.1 误区一学生越小越好学生结构太小会出现「容量不足」老师的知识根本传不进去掉点反而更严重。蒸馏不是「越小越赚」而是在容量与收益之间找一个平衡点先用中等规模结构试一版再往下压。7.2 误区二只学最后一层只对齐输出分布是基础做法学生也可以进一步去对齐老师的中间层特征这属于进阶手段。初学阶段先走通输出分布这条主线别一上来就堆三层损失——beta和特征损失一起调会很难判断是谁在起作用。7.3 误区三把蒸馏当成量化这是本文最想纠正的一个混淆。蒸馏改的是模型本体量化改的是表示精度两者的判据完全不同遇到显存瓶颈先想量化遇到「模型本体太大」才轮到蒸馏。拿蒸馏去解决显存问题大概率既没省下多少、又掉了一截精度。误区常见表现正确做法学生越小越好一味压小结构在容量与收益间找平衡点只学最后一层只对齐输出概率先走通输出分布主线再加中间层当成量化用蒸馏解决显存问题显存瓶颈先量化蒸馏解决「模型太大」忽略老师质量直接用有偏差的老师老师错学生跟着错先验收老师7.4 收尾判据把本文的判据压成一句先判断瓶颈在哪——显存 / 带宽瓶颈走量化缺领域知识走微调模型本体太大、需要更小的模型继承大模型能力才走蒸馏想拿到极致小体积就把蒸馏和量化叠加。截至 2026-10-02蒸馏在教学和面试里被提得很多但真正落地时它和量化往往是搭配出现的而不是二选一。这份资料是什么一份把「蒸馏 / 量化 / 微调」三者判据做成对照卡片的笔记配合本章的误区表使用适合在选型讨论会上直接翻。放在资料包里扫码即可获取附表 A本文引用事实与出处对照表序号事实出处文档名 发布方 链接本文位置1论文标题《Distilling the Knowledge in a Neural Network》作者 Geoffrey Hinton、Oriol Vinyals、Jeff Dean首次提交 2015-03-09arXiv:1503.02531arXiv 摘要页arXiv 由康奈尔大学运营https://arxiv.org/abs/1503.02531第1章2摘要逐字原句“A very simple way to improve the performance of almost any machine learning algorithm is to train many different models on the same data and then to average their predictions.”同上arXiv:1503.02531 摘要页逐字核对第1章引用块3论文标题《DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter》作者 Victor Sanh、Lysandre Debut、Julien Chaumond、Thomas Wolf首次提交 2019-10-02v4 修订 2020-03-01arXiv:1910.01108arXiv 摘要页 https://arxiv.org/abs/1910.01108第3章4摘要逐字原句“we introduce a triple loss combining language modeling, distillation and cosine-distance losses”同上arXiv:1910.01108 摘要页逐字核对第3章5摘要逐字原句“reduce the size of a BERT model by 40%, while retaining 97% of its language understanding capabilities and being 60% faster”同上arXiv:1910.01108 摘要页逐字核对第4章6论文《Knowledge Distillation: A Survey》作者 Jianping Gou、Baosheng Yu、Stephen John Maybank、Dacheng Tao首次提交 2020-06-09v7 修订 2021-05-20arXiv:2006.05525被 International Journal of Computer Vision (2021) 收录arXiv 摘要页 https://arxiv.org/abs/2006.05525第1章7摘要逐字原句“knowledge distillation effectively learns a small student model from a large teacher model”同上arXiv:2006.05525 摘要页逐字核对第1章8论文《A Survey of Quantization Methods for Efficient Neural Network Inference》作者 Amir Gholami、Sehoon Kim、Zhen Dong、Zhewei Yao、Michael W. Mahoney、Kurt Keutzer首次提交 2021-03-25v3 修订 2021-06-21arXiv:2103.13630arXiv 摘要页 https://arxiv.org/abs/2103.13630附表 A元数据核验9该综述正文引言「Knowledge distillation」子小节的说法不用「硬」类别标签而利用老师产生的「软」概率因为这些概率包含更多关于输入的信息arXiv:2103.13630 正文引言子小节经 ar5iv 渲染页核对 https://ar5iv.arxiv.org/html/2103.13630 该表述不在摘要页本文按无引号转述引用第2章10同一综述正文引言子小节的说法量化与剪枝在低比特8 位整数及更低下能维持性能的压缩倍数较为可观而蒸馏在激进压缩下通常出现不可忽略的精度下降把蒸馏与量化、剪枝结合使用效果显著同上arXiv:2103.13630 正文引言子小节非摘要页无引号转述第4章11硬标签 / 软标签、softmax 温度、logits 的定义属通用技术原理本文为人话解释无单一官方出处亦未逐字引用任何文献通用技术原理说明本文作者整理第2章、附表 B12第2章、第3章、第6章全部代码块均为示意代码未经实测本文自述正文该处已标「⚠️ 代码待验证」第2章、第3章、第6章13「先固定老师一侧温度再微调学生」为实践经验不是任何官方规定本文自述经验做法待验证第2章附表 B术语速查表术语一句话解释在本文哪里用到知识蒸馏让一个小模型模仿大模型输出分布的训练方法全篇主线老师模型提供监督信号的、已训练好的大模型第1、3、4、6章学生模型被训练的目标小模型第1、3、4、6章软标签老师输出的一整串概率含类间相似性信息第2章硬标签独热形式的真答案只标明「是哪个类」第2章独热向量只有一位是 1、其余全为 0 的向量第2章温度softmax 之前的缩放系数越大概率分布越平第2、3章logits模型最后输出的原始得分尚未变成概率第2章蒸馏损失学生软分布与老师软分布之间的差距第3章量化用更低位宽表示权重参数量不变、体积变小第1、4、5章微调在现成模型上继续训练改写参数的取值第1、4、5章剪枝去掉不重要的权重或结构以减小模型第4章位宽一个数占多少比特如 FP32 是 32 位第4章留出集不参与训练、只用来验收的独立数据第5、6章F1分数兼顾准确与召回的综合指标常用于分类任务第6章写在最后这篇用到的资料写这篇文章时把相关的官方文档和源码又翻了一遍顺手也整理了几份配套的东西大模型学习路线图从零基础到能自己动手做 Agent按阶段说明每一步该学什么、哪些可以先跳过《LangChain LangGraph MCP 智能体开发实战》视频课7 个模块从私有化部署、EmbeddingRAG 到 MCPAgent 全流程AI 大模型知识库在线可查Agent Skills 从入门到落地、Claude Skills 完全指南等专题按目录浏览即可640 套 AI 大模型行业报告 经典 PDF 书籍看行业落地案例和别人怎么做的时候用得上大模型零基础到精通教学视频跟着敲一遍比只读文档快得多资料是我自己整理的放在下面这个码上扫码即可获取添加时备注「AI」优先通过。资料按「先路线、再动手、最后查漏」的顺序整理好了建议先看学习路线那一份照着它挑一条适合自己当前基础的路径再往下看。
返回列表