模型蒸馏与时间序列小模型
模型蒸馏(Knowledge Distillation, KD)是把大模型能力转化为小模型能力的方法。它的目标不是机械地删掉参数,而是在尽量保留关键预测能力的前提下,降低模型规模、推理成本和部署门槛。本章接在 MoE 之后,说明当我们已经能够组合多个专家时,如何进一步把时间序列基座模型、专家模型或闭源 API 的能力迁移到更小、更便宜、更适合特定业务场景的模型中。
学习目标¶
完成本章后,你应该能够:
解释为什么大模型不能直接部署到所有预测场景中。
区分模型剪枝(pruning)、量化、微调、迁移学习和知识蒸馏。
说明教师模型(Teacher Model)和学生模型(Student Model)的角色。
理解为什么先训练大模型、再蒸馏小模型不同于直接训练小模型。
设计时间序列蒸馏中的数据、损失函数和评估流程。
判断蒸馏模型在成本、精度、隐私和边缘部署中的价值与边界。
从 MoE 到蒸馏¶
上一章讨论了 MoE。MoE 的基本思想是把多个专家模型的预测按权重组合起来。每个专家不必在所有场景都最强,只要在某一类问题上有专长,就能为最终预测提供贡献。权重可以等分,也可以由历史误差、序列特征或 gating 网络学习出来。
这个思想在大模型预测中很重要,因为训练和调用巨型模型的成本很高。如果只做财务预测、电商预测、库存预测或某个具体行业的时间序列预测,大模型中大量能力可能不会被用到。一个通用模型可能懂语言、代码、图像和推理,但当前任务只需要处理季节性销量和促销冲击。此时,直接调用完整大模型就会浪费算力、内存和调用费用。
MoE 解决的是“多个专家怎样分工和组合”。蒸馏解决的是另一个问题:如果某个大模型已经学到了很多知识,但我们只需要其中一部分能力,能否把这些能力压缩到一个更小的模型中?这就是从大模型走向可部署小模型的关键。
蒸馏这个词很形象。化学中,蒸馏是从混合物中提取更关键、更纯净的部分;模型蒸馏则是从庞大模型中提取当前任务真正需要的知识。一个 70B 参数模型很强,但一张常见 RTX 4090 只有 24GB 显存,无法完整加载这类模型。即使硬件能勉强运行,推理速度、能耗和成本也可能无法接受。
更重要的是,70B 参数并不意味着每个参数都对你的任务有用。如果你只做电商月销量预测,模型中关于诗歌、代码、图像描述和通用聊天的大量能力可能都不是关键。蒸馏要做的,就是让一个小模型尽量保留当前任务需要的能力,而不是保留大模型的全部能力。
为什么不直接训练小模型¶
既然最后想要小模型,为什么不一开始就训练一个小模型?这个问题很自然,也是理解蒸馏的关键。
直接训练小模型的难点在于,小模型参数空间更小,表达能力受限。如果训练数据有限、任务复杂或优化空间非凸(non-convex),小模型很容易停在一个不好的局部最优(local optimum)。大模型参数多、容量大,可以先在更大的空间中学习复杂结构,再把这种结构通过输出、概率分布或中间表示传给小模型。
可以把 Teacher Model 看成一个强先验(strong prior)。它在大规模数据和复杂训练过程中,已经探索过很多可能的规律。Student Model 不再从零开始摸索,而是在老师模型的引导下学习:哪些方向更有希望,哪些模式更重要,哪些输出分布更合理。
可以用一个“抓小偷”的例子理解蒸馏。假设要在北京发现所有偷盗行为,最极端的办法是给每个人身边都放一个监测器。这相当于一个过参数化大模型,覆盖范围极广,但成本极高。之后我们根据数据发现:某些时间段风险更低,某些区域风险更低,某些楼宇有监控和门禁,于是可以减少这些地方的部署,把资源集中在更有风险的区域。这样系统变小了,但仍然保留了捕捉关键信号的能力。
蒸馏也是这样。先让大模型覆盖尽可能多的场景,再根据目标任务把不必要的部分压缩掉。最终的小模型不必拥有老师的全部能力,只要在目标任务上接近甚至超过老师,就有部署价值。
Teacher Model 与 Student Model¶
蒸馏通常有两个角色。
| 角色 | 含义 | 典型特点 |
|---|---|---|
| Teacher Model | 老师模型 | 大、强、训练成本高、覆盖场景广 |
| Student Model | 学生模型 | 小、快、部署便宜、面向特定任务 |
Teacher Model 可以是一个开源预训练模型、时间序列基座模型、企业内部大模型,也可以是只能通过 API 调用的闭源模型。对本书来说,Chronos 和 TimeGPT 分别代表本地开源时间序列基座模型与远程 API 时间序列基座模型两种 teacher 来源 Ansari et al., 2024Garza et al., 2024。Student Model 通常结构更小,参数更少,部署环境更轻量。
蒸馏不是简单裁剪。直接删掉一半层数或一半参数,并不保证剩下的模型仍然知道怎么预测。真正的蒸馏要让 Student Model 学习 Teacher Model 的行为,例如输出值、概率分布、隐藏表示或决策边界。
在时间序列预测中,Teacher Model 可能是 Chronos、TimeGPT、TimesFM、Moirai 或企业内部模型;Student Model 可能是一个小型 Transformer、轻量 LSTM、TCN、树模型,甚至是一个面向特定业务的回归模型。关键不是学生模型形式必须与老师完全相同,而是它能否在目标任务上继承老师的有用能力。
蒸馏的三个目标¶
蒸馏至少有三个常见目标。
第一是 压缩模型规模。大模型参数多,推理慢,占用内存大。蒸馏后的小模型可以降低延迟、减少 GPU/CPU 占用,并让模型进入手机、手表、边缘设备(edge devices)、本地服务器或普通业务系统。
第二是 领域迁移。开源时间序列基座模型的训练数据可能和你的业务不完全一致。它可能在公开时间序列、电商数据或通用文本上训练,而你关心的是电力负荷、旅游需求、学生成绩、医院物资或量化交易。蒸馏可以把老师模型的通用能力迁移到你的领域数据中。
第三是 任务纠正和增强。Student Model 不一定永远弱于 Teacher Model。如果你只关心多步预测、关键尖峰、非零需求日或某个特殊业务指标,可以让 Student Model 在这些目标上继续训练。它可能在整体能力上不如老师,但在目标任务上更稳定、更便宜、更可控。
这也是蒸馏和普通压缩的区别。压缩只关心变小;蒸馏关心“小模型是否学到了目标任务需要的知识”。一个好的 Student Model 应该是面向使用场景的模型,而不是老师模型的简单低配版。
蒸馏、量化、剪枝和微调¶
蒸馏经常和几种相近方法一起出现,需要区分。
| 方法 | 核心动作 | 主要目的 | 风险 |
|---|---|---|---|
| 量化 | 降低参数数值精度,例如 16-bit 到 8-bit 或 4-bit | 减少内存和加速推理 | 精度损失、数值不稳定 |
| 剪枝 | 删除权重、神经元、attention head 或网络层 | 缩小模型结构 | 删掉关键能力 |
| 微调 | 在领域数据上继续训练原模型或适配层 | 让模型适应新场景 | 成本高、过拟合、遗忘 |
| 蒸馏 | 训练小模型模仿大模型行为 | 迁移知识并降低部署成本 | 学错老师、评估不足 |
量化可以让更大模型塞进有限硬件。例如把参数压缩到 4-bit,可以显著减少显存需求,但会引入数值误差。如果直接把一个很大的模型用很粗糙精度装进设备,可能得到一个“大而不准”的模型。另一条路线是先把模型蒸馏到更小规模,再用较高精度运行,得到“小而准”的模型。
剪枝看起来也像蒸馏,但它主要是删结构。蒸馏则强调训练一个学生,让它学会老师输出背后的规律。剪枝可以和蒸馏结合:先设计更小结构,再用老师模型引导训练。
微调与蒸馏也不同。微调通常保留原模型结构,只在新数据上调整参数或适配层。蒸馏则可以改变模型结构,让学生模型更小。实际项目中,常常会把微调、量化、剪枝和蒸馏组合使用。
蒸馏的基本损失函数¶
蒸馏的核心是定义“学生和老师有多像”。一个常见训练目标可以写成:
第一项让 Student Model 拟合真实值。第二项让 Student Model 模仿 Teacher Model。 控制真实标签和老师输出之间的权衡。
如果老师输出的是概率分布,可以使用 KL distance(Kullback-Leibler divergence, KL):
它衡量老师分布和学生分布之间的差距。对分类任务,例如“明天是否会发生需求”“未来是否上涨”,可以让学生模仿老师的类别概率。对概率预测任务,可以让学生模仿老师给出的分位数、分布参数或采样分布。
如果老师输出的是点预测,可以使用 MAE、MSE 或 Huber loss 衡量二者差距。对时间序列预测,损失还可以按 horizon 加权:短期预测和长期预测的重要性不同,多步预测中越往后误差越容易累积。
蒸馏损失不应只看数学方便。它要服务业务目标。如果库存任务更怕缺货,损失函数就应对低估需求赋予更高代价;如果金融任务更怕极端亏损,损失就应关注尾部风险。
几种蒸馏层次¶
蒸馏可以发生在不同层次。
基于响应的蒸馏(response-based distillation) 只关心最终输出。Teacher Model 给出预测值、类别或文本答案,Student Model 学习产生相似输出。这种方法适合闭源 API,因为我们拿不到老师模型内部参数,只能观察输入和输出。
概率或 logits 蒸馏(probability or logits distillation) 关心输出分布。分类或 token 模型会给出 logits(逻辑值)或概率分布,Student Model 学习老师的“软标签”(soft labels)。软标签比硬标签包含更多信息:老师不仅告诉学生正确答案,还告诉学生其他候选答案有多接近。
Token-level distillation 适用于 Transformer 类模型。Chronos 类时间序列模型会把数值序列 token 化;学生可以在每个 token 的概率分布上模仿老师。这样学习的是序列局部结构,而不只是最终预测值。
特征或表示蒸馏(feature or representation distillation) 让学生模仿老师的中间表示,例如 embedding、hidden state(隐藏状态)或 attention pattern(注意力模式)。它适合老师和学生结构相近的情况,但实现更复杂。
Prediction-level distillation 在时间序列中很常见。老师对未来多个 horizon 给出预测,学生学习这些预测曲线、分位数或分布。它可以忽略模型内部结构,直接服务最终 forecast。
这些层次可以组合使用。比如一个学生模型同时拟合真实值、老师点预测、老师分位数和某个中间 embedding。但组合越复杂,越需要严格验证,避免只是在训练集上贴近老师,未来却不稳定。
时间序列蒸馏流程¶
一个面向时间序列预测的蒸馏流程可以分为七步。
选择 Teacher Model,例如 Chronos、TimeGPT、TimesFM、Moirai 或企业内部模型。
准备领域数据,包括目标序列、时间列、序列 ID、外生变量和预测步长。
让 Teacher Model 对训练窗口和验证窗口生成预测、分位数或概率分布。
设计 Student Model,例如减少 Transformer 层数、hidden size 和 attention head。
定义蒸馏损失,同时包含真实值误差和老师输出误差。
在滚动窗口或留后集上验证 Student Model。
比较老师、学生、简单基线和业务规则的精度、延迟、成本和稳定性。
需要注意,蒸馏不是先看测试集再调学生模型。所有权重、损失和超参数都应来自训练集或验证集。最终测试集要模拟真实未来,只用于最后评估。
在多序列任务中,数据格式通常仍然是长表:
| 列 | 含义 |
|---|---|
unique_id | 序列编号 |
ds | 时间戳 |
y | 目标变量 |
| 外生变量列 | 促销、节假日、价格、天气、事件等 |
Student Model 应在和 Teacher Model 相同的信息边界下训练。老师看不到未来促销之外的信息,学生也不能看;否则学生可能看似超过老师,实际是因为数据泄漏。
以 Chronos 类模型为例¶
Chronos 类模型提供了一个直观例子。它把原始时间序列转成 token,再用类似 Transformer 的结构做编码、解码和预测。用户下载预训练 checkpoint 后,可以在本地加载模型,输入历史序列并得到未来预测。
如果要把 Chronos 类模型蒸馏成更小版本,可以先拿到 Teacher Model 的 checkpoint。开源模型通常来自 Hugging Face 或其他模型仓库。checkpoint 记录了模型在某个训练阶段的参数状态。你不一定知道它完整训练工艺,但至少能加载它的结构和权重。
然后设计 Student Model。假设 Teacher Model 有 12 层 Transformer,可以把学生设为 6 层;如果 hidden size 很大,可以减半;如果有 12 个 attention head,可以减到 6 个。参数量通常不会只线性减少,因为 Transformer 中很多矩阵维度相乘,hidden size 减半可能带来更大幅度压缩。
接下来,用领域数据生成老师预测。比如用 M4、M5、电力负荷或企业销量数据,把历史窗口交给 Teacher Model,记录未来 horizon 的点预测和分位数预测。Student Model 训练时,一方面拟合真实未来,一方面模仿老师输出。
一个简化训练目标可以写成:
如果老师能输出分位数,还可以让学生同时学习中位数、10% 分位数和 90% 分位数。这样学生不只学一条曲线,也学老师对不确定性的表达。
为什么 Student 可能超过 Teacher¶
Student Model 不一定只能模仿 Teacher Model。它也可以在目标场景中超过老师。
原因很简单:Teacher Model 是通用模型,要兼顾很多场景;Student Model 可以只服务一个场景。比如老师在公开时间序列上训练,覆盖零售、能源、交通、金融和传感器数据;学生只做某家企业的周度销量预测。只要领域数据足够、损失函数合适,学生就可能在这个窄场景中比老师更稳定。
这也是蒸馏与领域迁移的结合。老师提供通用先验,学生吸收领域数据。最终学生模型不是老师的缩小复制品,而是“老师知识 + 领域校正”的结果。
不过,这种超过必须通过严格评估证明。不能只看训练集,也不能只看一个漂亮案例。应在多个滚动窗口、多个 horizon、多个序列组上比较:
Student 是否超过 Teacher。
Student 是否超过简单基线。
Student 是否降低延迟和成本。
Student 是否保留预测区间覆盖率。
Student 是否在关键业务样本上稳定,例如高需求日或非零需求日。
如果学生只是平均误差略低,却错过关键尖峰,业务上未必更好。
工程细节¶
蒸馏看起来是模型压缩,实际很大程度上是工程工艺。以下细节会显著影响结果。
窗口切分:训练窗口、验证窗口和预测 horizon 要模拟真实使用场景。不能把未来信息泄漏进历史窗口。
尺度处理:不同序列量级差异大时,需要标准化、log 变换或按序列 scaling(尺度变换)。否则大销量序列会主导损失。
数据增强:适度噪声、重采样或窗口扰动可以提高学生模型稳定性,但过度增强会改变真实数据分布。
temperature:在概率或 logits 蒸馏中,temperature 可以让老师输出分布更平滑或更尖锐。太尖锐的分布像硬标签,信息少;太平滑则可能模糊关键差异。
学习率:蒸馏时学习率通常比从头训练更低。目标是精细迁移,而不是让学生模型大幅震荡。
batch size 和调度:batch size(批大小)、warmup(预热)、weight decay(权重衰减)、early stopping(早停)和学习率调度都影响收敛。很多成功蒸馏依赖长期经验,而不是一次运行就能稳定得到。
老师预测缓存:如果 Teacher Model 很大,每次训练都实时调用会很贵。可以提前把老师输出缓存下来,但要记录模型版本、输入窗口和生成参数,保证可复现。
评估维度:蒸馏完成后,不能只报告精度。还要报告模型大小、推理延迟、内存占用、每千次预测成本和失败案例。
我们特别提醒:蒸馏本身不一定省算力。训练期间可能需要运行 Teacher Model、Student Model 和大量验证流程,成本仍然高。蒸馏的收益主要体现在部署之后:推理更快、更便宜、更适合本地或边缘设备。
闭源模型的输出蒸馏¶
如果 Teacher Model 不开源,例如只能通过 API 调用,就无法拿到 checkpoint 和中间层。这时仍然可以做响应蒸馏(response distillation)。若 teacher 是大语言模型,还要先理解其 token、embedding、上下文窗口和生成机制,避免把一次文本输出误当作稳定知识来源 Alammar & Grootendorst, 2024。
基本做法是准备一批输入样本,把它们发送给 Teacher API,记录输出结果,然后训练自己的 Student Model 模仿这些输入输出。对预测任务来说,输入可以是历史序列、外生变量和任务说明;输出可以是点预测、分位数或结构化 JSON。
这种方法有实际价值,但必须谨慎。
第一,API 输出可能随模型版本变化。必须记录调用日期、模型名、参数、prompt 模板和返回格式。
第二,闭源模型输出不一定是事实标签。学生如果只学习老师错误,就会复制错误。最好同时使用真实标签约束。
第三,要注意服务条款、数据权限和模型许可。不是所有 API 输出都允许用于训练另一个模型。
第四,闭源模型的行为可能依赖 prompt 和上下文。如果 prompt 变化,老师输出会变,学生学到的能力也会变化。
因此,输出蒸馏适合做原型和内部工具,但进入生产前必须经过合规、评估和数据治理检查。
嵌入式 AI 与个人化模型¶
我们还要讨论一个未来趋势:AI 可能从云端大模型走向嵌入式 AI(embedded AI)。现在很多 AI 工具仍然把指令发送到云端,由云端大算力返回结果。未来,更多模型会嵌入手机、手表、车载设备、企业本地服务器或专用硬件中,在不联网时也能完成有效工作。
这些设备不可能长期运行巨大模型,因此蒸馏会变得更重要。一个健康手表可能不需要通用聊天模型全部能力,只需要理解个人心率、睡眠、运动和生活习惯;一个库存设备可能只需要预测本仓库的补货风险;一个量化工具可能只需要某些市场结构和风险信号。
这意味着未来可能出现“蒸馏服务”。客户提供目标数据、业务场景和性能要求,服务商帮助把时间序列基座模型蒸馏成一个专属小模型,再部署到本地或边缘设备。这个小模型可能只有几十 MB 或几百 MB,但对特定用户、特定企业或特定领域很有价值。
对预测人员来说,这改变了角色。未来不一定是亲自从零训练每个模型,而是要判断:
哪个 Teacher Model 可信?
领域数据是否足够支持蒸馏?
Student Model 应该保留哪些能力?
精度、成本、隐私和延迟如何权衡?
蒸馏后的模型什么时候需要重新训练?
模型变小以后,人的责任并没有消失。相反,模型选择、数据边界、评估设计和业务解释会变得更重要。
与 MoE 的关系¶
MoE 和蒸馏可以结合使用。
一种方式是 先 MoE 后蒸馏。先用多个专家模型和 gating 得到一个强预测系统,再训练一个 Student Model 模仿这个系统的输出。这样可以把复杂专家团队压缩成一个小模型,便于部署。
另一种方式是 先蒸馏后 MoE。先把几个大专家分别蒸馏成小专家,再用 MoE 组合它们。这样专家库仍然保留差异,但每个专家都更轻。
还可以 蒸馏 gating。如果一个复杂平台已经能根据序列特征选择专家,可以训练一个小 gating 模型模仿它的选择逻辑。这样,模型选择经验也能被压缩。
时间序列预测很适合这种组合。趋势、季节、节假日、外生变量、高频模式和间歇性需求可以由不同专家处理;每个专家又可以通过蒸馏降低成本。最终系统既有分工,又能部署。
实施清单¶
做一个时间序列蒸馏项目前,至少检查以下问题。
Teacher Model 是否可用,是否能稳定复现输出?
是否有足够领域数据支持 Student Model 学习?
目标是压缩、迁移、纠正,还是三者都有?
Student Model 的结构为什么适合部署环境?
损失函数是否同时包含真实值和老师输出?
是否有滚动窗口或留后测试模拟真实未来?
是否比较了简单基线、Teacher 和 Student?
是否报告模型大小、延迟、内存和成本?
是否检查关键业务样本,而不只看平均误差?
是否记录模型版本、数据版本和蒸馏配置?
如果这些问题没有回答清楚,蒸馏模型即使能跑,也不应直接进入业务决策。
小结¶
模型蒸馏把大模型能力转化为小模型能力。它不是简单删参数,而是通过 Teacher Model 引导 Student Model 学习输出、概率分布、中间表示或预测行为。蒸馏可以压缩模型、迁移领域能力,也可以在特定任务上纠正和增强老师模型。
对时间序列预测来说,蒸馏的价值在于把时间序列基座模型变成可部署工具。Chronos、TimeGPT、TimesFM 或企业内部模型可以作为老师,小型 Transformer、LSTM、树模型或业务模型可以作为学生。最终是否成功,不取决于概念是否先进,而取决于评估证据:小模型是否在目标 horizon、目标领域和目标业务成本下足够好。
练习¶
用自己的话解释为什么蒸馏不同于直接训练小模型。
为一个电商销量预测任务设计 Teacher Model 和 Student Model。
写出一个同时拟合真实值和老师预测的蒸馏损失函数。
比较量化、剪枝、微调和蒸馏的区别。
说明为什么 Student Model 可能在某个细分任务上超过 Teacher Model。
设计一个滚动窗口评估方案,比较 Teacher、Student 和 Naive 基线。
如果只能调用闭源 API,如何构造 response distillation 数据集?
讨论一个适合 embedded AI 的预测场景,并说明为什么需要蒸馏。
为蒸馏后的模型设计一张部署报告表,包含精度、延迟、模型大小和成本。
说明 MoE 和蒸馏如何组合成一个低成本预测平台。
参考文献¶
- Ansari, A. F., Stella, L., Turkmen, C., Zhang, X., Mercado, P., Shen, H., Shchur, O., Rangapuram, S. S., Arango, S. P., Kapoor, S., Zschiegner, J., Maddix, D. C., Wang, H., Mahoney, M. W., Torkkola, K., Wilson, A. G., Bohlke-Schneider, M., & Wang, Y. (2024). Chronos: Learning the Language of Time Series. 10.48550/arXiv.2403.07815
- Garza, A., Challu, C., & Mergenthaler-Canseco, M. (2024). TimeGPT-1. 10.48550/arXiv.2310.03589
- Alammar, J., & Grootendorst, M. (2024). Hands-On Large Language Models: Language Understanding and Generation. O’Reilly Media.