
1. 从点名说起蒸馏争议到底在吵什么最近圈子里讨论度很高的一件事是几家中国大模型公司被海外同行公开点名说它们蒸馏了自己的模型。消息传开之后评论区基本分成两派一派觉得这是抄作业被抓包另一派觉得蒸馏本来就是公开技术凭什么你能用我不能用。我个人的看法是这件事的技术含量远低于它的情绪含量——真正值得聊的不是谁对谁错而是蒸馏这个动作本身到底在做什么、偷走的究竟是什么。先把概念摆正。所谓模型蒸馏Knowledge Distillation最早可以追溯到 Hinton 在 2015 年前后提出的思路让一个体积小、推理快的学生模型去模仿一个体积大、能力强的教师模型的输出分布。注意这里模仿的不是权重不是训练数据而是输出——具体说是 logits 或者概率分布。学生模型通过最小化自己和教师模型输出之间的差异通常用 KL 散度衡量把教师模型想问题的方式压缩进自己的参数里。那偷走的到底是什么我的理解是三层东西第一层是软标签soft label。传统训练用的是硬标签比如一张图是猫就是[0, 1]。教师模型给出的可能是[0.05, 0.92, 0.03]这个分布里藏着类间相似度的信息——它告诉学生模型这只猫有 5% 像狗、3% 像狐狸。这种信息是硬标签给不了的也是蒸馏最核心的价值。第二层是决策边界。教师模型在大量样本上划出的分类面学生模型通过模仿输出间接学到了这个边界的位置和形状。第三层是能力上限的锚点。一个 70B 的模型能做的事7B 的模型靠自己从零训练很难达到但通过蒸馏7B 可以逼近 70B 在特定任务上的表现。所以当一家公司被指蒸馏另一家的模型时指控的实质是你用了我的输出分布作为训练信号而没有为此付费或获得授权。这跟抄代码不一样代码是明确的著作权客体而模型输出分布的法律地位目前在全球范围内都还很模糊。这也是为什么这类争议往往停留在舆论层面很难走到法律层面。提示蒸馏本身是学术界公开、合法、被广泛使用的技术。争议的焦点从来不是能不能蒸馏而是蒸馏谁和有没有获得许可。2. 蒸馏的技术谱系不止一种偷法很多人一听到蒸馏就以为只有一种做法其实这个家族挺大的。不同的蒸馏方式偷的东西不一样技术难度和效果也差很多。我把常见的几类拆开讲。2.1 响应蒸馏最直接也最容易被发现响应蒸馏Response-based Distillation就是前面说的标准做法学生模型直接对齐教师模型的输出 logits 或概率分布。损失函数通常长这样import torch import torch.nn.functional as F def distillation_loss(student_logits, teacher_logits, labels, T4.0, alpha0.7): # 软目标损失学生模仿教师的概率分布 soft_loss F.kl_div( F.log_softmax(student_logits / T, dim-1), F.softmax(teacher_logits / T, dim-1), reductionbatchmean ) * (T * T) # 硬目标损失学生仍然要对齐真实标签 hard_loss F.cross_entropy(student_logits, labels) return alpha * soft_loss (1 - alpha) * hard_loss这里的温度系数 T是关键。T 越大教师输出的概率分布越平滑类间关系暴露得越充分T 越小分布越尖锐接近硬标签。实践中 T 一般取 2 到 10 之间太大反而会让分布过于均匀丢失区分度。alpha控制软硬损失的权重通常软目标占大头。这种蒸馏最容易被发现因为学生模型的输出分布会带着教师模型的指纹——比如在某些边界样本上学生和教师的错误模式高度一致。做模型指纹检测的研究抓的就是这种统计相关性。2.2 特征蒸馏模仿中间层的表示特征蒸馏Feature-based Distillation不满足于模仿最终输出而是让学生模型的中间层表示去对齐教师模型的中间层。做法是加一个投影层把学生的隐层维度映射到教师的维度然后最小化两者的距离class FeatureDistillLoss(torch.nn.Module): def __init__(self, student_dim, teacher_dim): super().__init__() self.proj torch.nn.Linear(student_dim, teacher_dim) def forward(self, student_feat, teacher_feat): projected self.proj(student_feat) return F.mse_loss(projected, teacher_feat.detach())这种方式的难点在于层与层的对应关系。教师有 80 层学生只有 32 层哪一层对哪一层常见做法是按相对深度对齐或者用注意力机制自动学习对齐关系。特征蒸馏偷的是教师模型内部的特征提取能力比响应蒸馏更深一层但也更难做——如果学生和教师架构差异太大强行对齐反而会拖累学生。2.3 关系蒸馏学的是样本之间的关系关系蒸馏Relation-based Distillation更巧妙它不关心单个样本的输出而是关心样本对或样本组之间的关系。比如教师认为样本 A 和样本 B 很像学生也要认为它们很像。这种蒸馏传递的是结构知识对架构差异的容忍度更高。2.4 数据蒸馏与思维链蒸馏当下最热的两条路这两年真正让蒸馏争议升温的是两种新形态数据蒸馏不直接对齐输出而是用教师模型生成大量高质量的训练数据问答对、推理过程、代码等然后拿这些数据去微调学生模型。这条路绕开了 logits 对齐从外部看就是我用自己生成的数据训练自己的模型很难被直接抓到把柄。但如果生成的数据分布高度依赖某个特定教师模型本质上还是在借它的能力。思维链蒸馏CoT Distillation让教师模型输出详细的推理步骤学生模型学习这些步骤。这是当前小模型能力跃升的主要手段之一。一个 7B 模型如果能学到 70B 模型的推理模式在很多任务上就能打出远超自身体量的表现。蒸馏类型模仿对象技术难度被检测难度典型场景响应蒸馏输出 logits低低同架构压缩特征蒸馏中间层表示中中跨架构迁移关系蒸馏样本间关系中高中结构化知识迁移数据蒸馏生成的数据低高通用能力提升思维链蒸馏推理过程中高推理能力迁移注意数据蒸馏和思维链蒸馏之所以难被检测是因为它们不依赖对教师模型 API 的高频调用而是把教师能力固化进了数据集里。这也是为什么很多公司宁愿走这条路。3. 为什么蒸馏在工程上如此诱人站在工程角度蒸馏几乎是绕不开的选择。我接触过的团队里只要涉及模型落地十有八九会考虑蒸馏。原因很实在。3.1 推理成本是硬约束一个 70B 的模型即使用 4-bit 量化部署起来也需要相当可观的显存推理延迟在高并发场景下很难接受。而一个 7B 的模型单卡就能跑延迟低一个数量级。如果蒸馏能让 7B 在目标任务上达到 70B 九成的效果这笔账谁都会算。我做过一个粗略的测算假设 70B 模型单次推理成本是 7B 的 10 倍日调用量 100 万次一年下来成本差距是相当惊人的数字。对于创业公司来说这不是要不要蒸馏的问题而是不蒸馏就活不下去的问题。3.2 私有化部署的刚需很多企业客户要求模型私有化部署数据不能出内网。这种情况下你不可能给客户塞一个需要八卡集群的巨无霸。蒸馏出来的小模型能在客户的单机环境里跑起来这才是能签单的前提。3.3 特定任务的能力聚焦通用大模型什么都会一点但在某个垂直任务上未必比专门蒸馏过的小模型强。比如法律文书摘要、医疗问答、工业质检报告生成用一个通用大模型去做既贵又不一定准。用教师模型在这个领域生成高质量数据蒸馏一个小模型往往效果更好、成本更低。3.4 蒸馏是能力平权的手段从行业整体看蒸馏让没有能力从零训练大模型的团队也能做出可用的产品。这本身是好事——它降低了创新门槛。问题在于当教师是别人的商业模型时这个平权就变成了搭便车。提示判断一个蒸馏项目是否合规关键看教师模型的来源。用自己训练的教师模型蒸馏自己的学生模型完全没问题用开源许可允许的模型做教师通常也没问题用闭源商业 API 的输出大规模训练自己的模型就要看服务条款怎么写了。4. 被点名背后检测蒸馏的技术手段既然蒸馏这么普遍那被点名是怎么做到的总不能靠猜。实际上检测蒸馏已经形成了一套方法论我把它拆成几个层次。4.1 输出指纹最基础的检测最直接的办法是构造一批探针样本同时喂给疑似学生模型和教师模型比较两者的输出分布。如果学生模型在大量样本上的输出与教师高度相关比如 KL 散度显著低于随机基线就有蒸馏嫌疑。但这个方法有个前提你得能访问教师模型的输出。对于闭源模型厂商自己当然能访问所以厂商指控别人蒸馏技术上是有依据的。4.2 行为一致性测试看错误模式更精细的做法是看错误模式。两个独立训练的模型即使在同样的难题上都会犯错犯错的样本集合也应该是不同的。但如果学生模型和教师模型在错误样本上高度重叠这就很说明问题——因为错误模式是很难通过独立训练复现的。我见过一个有意思的测试给模型一批带有细微陷阱的数学题看它在哪些题上翻车。独立训练的模型翻车点很分散而蒸馏出来的模型翻车点和教师几乎重合。4.3 水印与后门主动埋设的追踪器一些厂商会在自己的模型输出里埋统计水印——比如在特定触发条件下输出会带有某种不易察觉的偏好。如果学生模型也继承了这个偏好就等于带着出身证明。这种做法在学术上叫模型水印Model Watermarking思路是在训练数据或输出分布里注入特定模式使得模型在遇到特定输入时产生可识别的输出。蒸馏会把这个模式一起学过去。4.4 数据分布分析看训练数据的味道如果怀疑对方是数据蒸馏可以分析对方模型的行为特征反推它训练数据的分布。比如一个模型如果在某些特定风格的问答上表现异常好而这些风格恰好是某个教师模型的典型输出风格那就是线索。检测手段原理可靠性局限输出指纹比对比较输出分布相关性中高需要教师输出访问权错误模式重叠比较错误样本集合高需要精心设计探针水印检测检测预埋的触发模式高需要事先埋设数据分布反推分析行为特征反推数据中推断性强易误判注意检测结果往往只能作为嫌疑证据很难作为定罪依据。因为两个模型输出相似也可能是训练数据相似、架构相似、或者都基于同一个开源基座。这就是为什么这类争议通常停留在舆论层面。5. 蒸馏、微调、RL别把三件事混为一谈热搜词里同时出现了蒸馏微调RL我发现很多人把这三个概念搅在一起。它们确实相关但解决的是不同问题混用会导致技术判断失误。5.1 微调在已有能力上做适配**微调Fine-tuning**是在一个预训练好的模型基础上用特定领域的数据继续训练让模型适配某个任务或风格。它改变的是模型的行为倾向不是能力上限。你微调一个 7B 模型做客服它可能变得很会回答客服问题但它的推理能力还是 7B 的水平。微调的数据通常是人工标注或收集的真实数据成本主要在数据标注上。5.2 蒸馏把大模型的能力搬到小模型蒸馏的核心是能力迁移从强模型到弱模型。它改变的是学生的能力上限——一个蒸馏得当的 7B可以在特定任务上逼近 70B。蒸馏的数据可以是用教师模型生成的也可以是真实数据配合教师输出。5.3 RL用奖励信号优化行为强化学习RL特别是 RLHF基于人类反馈的强化学习是用奖励信号来优化模型输出。它不直接教模型正确答案是什么而是告诉模型这个回答好那个回答差让模型自己去调整策略。RL 擅长对齐人类偏好、提升回答质量但训练不稳定、成本高。5.4 三者的关系与组合实际工程中这三者经常组合使用。一个典型的流程是先用教师模型蒸馏出一个基础学生模型能力迁移再用领域数据微调任务适配最后用 RL 做偏好对齐质量优化# 概念性流程非可直接运行代码 # 阶段一蒸馏 student distill(teacher_model, student_arch, unlabeled_data) # 阶段二微调 student finetune(student, domain_dataset, lr2e-5, epochs3) # 阶段三RL 对齐 student rlhf(student, reward_model, prompts)理解这个组合关系很重要。当有人说我们用了蒸馏RL你要问清楚蒸馏解决的是能力问题RL 解决的是偏好问题两者不能互相替代。技术解决的问题数据来源成本主要在哪对能力上限的影响微调任务适配人工标注/收集数据标注基本不变蒸馏能力迁移教师模型生成教师调用/算力显著提升RL偏好对齐人类反馈/奖励模型标注训练算力间接提升6. 实操视角如果我要做一个蒸馏项目抛开争议从纯技术角度一个蒸馏项目该怎么做我按自己的经验给一条可落地的路径。6.1 先明确目标和约束动手之前先回答几个问题目标任务的评测指标是什么学生模型的参数量和延迟上限是多少教师模型用哪个有没有合规风险我见过太多团队一上来就闷头蒸馏结果做完了发现学生模型根本部署不了或者效果提升微乎其微。目标不清晰蒸馏就是烧算力。6.2 教师模型的选择教师模型不是越大越好。太大的教师学生学不动而且调用成本高。经验法则是教师比学生大 5 到 10 倍比较合适。7B 的学生配 70B 的教师是常见组合。如果教师是闭源 API要仔细看服务条款确认是否允许用其输出训练其他模型。这一步很多人会忽略但恰恰是合规风险所在。6.3 数据构造蒸馏的胜负手蒸馏效果好不好八成看数据。我的经验是数据要覆盖目标任务的真实分布不能只用教师模型随机生成的通用问答思维链数据要保留完整推理过程不要只留最终答案数据量不是越多越好几万条高质量数据往往胜过几十万条低质数据要做数据去重和清洗教师模型生成的数据里常有重复和错误一个实用的技巧是先用教师模型在目标任务上跑一遍挑出它答对的样本再对这些样本做思维链展开作为训练数据。这样数据质量有保证。6.4 训练配置的关键参数# 典型蒸馏训练配置示例 config { learning_rate: 1e-5, # 比常规微调略低避免破坏预训练知识 batch_size: 64, epochs: 3, # 蒸馏通常 2-3 轮足够多了容易过拟合 temperature: 4.0, # 软目标温度 alpha: 0.7, # 软目标权重 warmup_ratio: 0.1, max_seq_length: 2048, }学习率要低因为蒸馏是在已有预训练模型上做精细调整学习率太高会把原有能力冲掉。轮数不要多蒸馏数据通常比较集中训练太久会过拟合到教师的具体输出上反而损失泛化性。6.5 评测别只看 loss蒸馏训练时 loss 下降不代表效果好。一定要在独立的任务评测集上验证而且要和教师模型、原始学生模型做三方对比。我习惯看三个指标目标任务准确率、通用能力保持度、推理延迟。通用能力保持度经常被忽略。有些团队蒸馏完发现目标任务涨了但模型变傻了其他任务全崩。这是因为蒸馏数据太单一把模型带偏了。解决办法是在蒸馏数据里混入一定比例的通用数据。提示蒸馏后一定要做回归测试确认模型没有在非目标能力上出现明显退化。这一步能帮你避免上线后的意外。7. 争议之外蒸馏对行业意味着什么聊完技术回到最开始那个问题7 家公司被点名到底偷走了什么我的判断是它们偷的不是代码不是权重而是教师模型在大量样本上积累的决策智慧。这种智慧以输出分布的形式存在蒸馏把它转移到了学生模型里。从技术上说这是合法的能力迁移从商业伦理上说如果未经授权大规模使用闭源商业模型的输出确实有搭便车之嫌。但这件事的另一面是蒸馏是技术民主化的重要推手。没有蒸馏只有少数巨头能玩大模型有了蒸馏中小团队也能做出可用的产品。这个价值不能因为几起争议就被否定。真正需要建立的是一套清晰的规则什么情况下可以用别人的模型输出做训练什么情况下不行授权和付费机制怎么设计。这需要行业、法律和技术社区共同探索不是靠几次点名就能解决的。从从业者角度我的建议很朴素做蒸馏项目之前先把合规问题想清楚。用开源许可明确的模型做教师或者用自己训练的模型做教师都是稳妥的选择。如果要用闭源商业 API先读服务条款必要时主动联系对方获取授权。技术上的事好解决合规上的坑踩一次可能就伤筋动骨。最后分享一个我自己的观察那些真正做得好的蒸馏项目往往不是简单抄教师模型的输出而是在蒸馏的基础上做了大量自己的数据工程和任务设计。蒸馏只是起点不是终点。把教师的能力搬过来之后怎么在自己的场景里用好才是真正拉开差距的地方。