Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

模型蒸馏与时间序列小模型

北京大学光华管理学院

模型蒸馏(Knowledge Distillation, KD)是把大模型能力转化为小模型能力的方法。它的目标不是机械地删掉参数,而是在尽量保留关键预测能力的前提下,降低模型规模、推理成本和部署门槛。本章接在 MoE 之后,说明当我们已经能够组合多个专家时,如何进一步把时间序列基座模型、专家模型或闭源 API 的能力迁移到更小、更便宜、更适合特定业务场景的模型中。

学习目标

完成本章后,你应该能够:

从 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,可以显著减少显存需求,但会引入数值误差。如果直接把一个很大的模型用很粗糙精度装进设备,可能得到一个“大而不准”的模型。另一条路线是先把模型蒸馏到更小规模,再用较高精度运行,得到“小而准”的模型。

剪枝看起来也像蒸馏,但它主要是删结构。蒸馏则强调训练一个学生,让它学会老师输出背后的规律。剪枝可以和蒸馏结合:先设计更小结构,再用老师模型引导训练。

微调与蒸馏也不同。微调通常保留原模型结构,只在新数据上调整参数或适配层。蒸馏则可以改变模型结构,让学生模型更小。实际项目中,常常会把微调、量化、剪枝和蒸馏组合使用。

蒸馏的基本损失函数

蒸馏的核心是定义“学生和老师有多像”。一个常见训练目标可以写成:

L=αLtrue(y,ystudent)+(1α)Lteacher(yteacher,ystudent)\mathcal{L} = \alpha\,\mathcal{L}_{\text{true}}(y, y_{\text{student}}) + (1-\alpha)\,\mathcal{L}_{\text{teacher}}(y_{\text{teacher}}, y_{\text{student}})

第一项让 Student Model 拟合真实值。第二项让 Student Model 模仿 Teacher Model。α\alpha 控制真实标签和老师输出之间的权衡。

如果老师输出的是概率分布,可以使用 KL distance(Kullback-Leibler divergence, KL):

KL(pteacherpstudent)\mathrm{KL}(p_{\text{teacher}} \,\|\, p_{\text{student}})

它衡量老师分布和学生分布之间的差距。对分类任务,例如“明天是否会发生需求”“未来是否上涨”,可以让学生模仿老师的类别概率。对概率预测任务,可以让学生模仿老师给出的分位数、分布参数或采样分布。

如果老师输出的是点预测,可以使用 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。但组合越复杂,越需要严格验证,避免只是在训练集上贴近老师,未来却不稳定。

时间序列蒸馏流程

一个面向时间序列预测的蒸馏流程可以分为七步。

  1. 选择 Teacher Model,例如 Chronos、TimeGPT、TimesFM、Moirai 或企业内部模型。

  2. 准备领域数据,包括目标序列、时间列、序列 ID、外生变量和预测步长。

  3. 让 Teacher Model 对训练窗口和验证窗口生成预测、分位数或概率分布。

  4. 设计 Student Model,例如减少 Transformer 层数、hidden size 和 attention head。

  5. 定义蒸馏损失,同时包含真实值误差和老师输出误差。

  6. 在滚动窗口或留后集上验证 Student Model。

  7. 比较老师、学生、简单基线和业务规则的精度、延迟、成本和稳定性。

需要注意,蒸馏不是先看测试集再调学生模型。所有权重、损失和超参数都应来自训练集或验证集。最终测试集要模拟真实未来,只用于最后评估。

在多序列任务中,数据格式通常仍然是长表:

含义
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 训练时,一方面拟合真实未来,一方面模仿老师输出。

一个简化训练目标可以写成:

L=0.5MAE(ytrue,ystudent)+0.5MAE(yteacher,ystudent)\mathcal{L} = 0.5\,\mathrm{MAE}(y_{\text{true}}, y_{\text{student}}) + 0.5\,\mathrm{MAE}(y_{\text{teacher}}, y_{\text{student}})

如果老师能输出分位数,还可以让学生同时学习中位数、10% 分位数和 90% 分位数。这样学生不只学一条曲线,也学老师对不确定性的表达。

为什么 Student 可能超过 Teacher

Student Model 不一定只能模仿 Teacher Model。它也可以在目标场景中超过老师。

原因很简单:Teacher Model 是通用模型,要兼顾很多场景;Student Model 可以只服务一个场景。比如老师在公开时间序列上训练,覆盖零售、能源、交通、金融和传感器数据;学生只做某家企业的周度销量预测。只要领域数据足够、损失函数合适,学生就可能在这个窄场景中比老师更稳定。

这也是蒸馏与领域迁移的结合。老师提供通用先验,学生吸收领域数据。最终学生模型不是老师的缩小复制品,而是“老师知识 + 领域校正”的结果。

不过,这种超过必须通过严格评估证明。不能只看训练集,也不能只看一个漂亮案例。应在多个滚动窗口、多个 horizon、多个序列组上比较:

如果学生只是平均误差略低,却错过关键尖峰,业务上未必更好。

工程细节

蒸馏看起来是模型压缩,实际很大程度上是工程工艺。以下细节会显著影响结果。

窗口切分:训练窗口、验证窗口和预测 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,但对特定用户、特定企业或特定领域很有价值。

对预测人员来说,这改变了角色。未来不一定是亲自从零训练每个模型,而是要判断:

模型变小以后,人的责任并没有消失。相反,模型选择、数据边界、评估设计和业务解释会变得更重要。

与 MoE 的关系

MoE 和蒸馏可以结合使用。

一种方式是 先 MoE 后蒸馏。先用多个专家模型和 gating 得到一个强预测系统,再训练一个 Student Model 模仿这个系统的输出。这样可以把复杂专家团队压缩成一个小模型,便于部署。

另一种方式是 先蒸馏后 MoE。先把几个大专家分别蒸馏成小专家,再用 MoE 组合它们。这样专家库仍然保留差异,但每个专家都更轻。

还可以 蒸馏 gating。如果一个复杂平台已经能根据序列特征选择专家,可以训练一个小 gating 模型模仿它的选择逻辑。这样,模型选择经验也能被压缩。

时间序列预测很适合这种组合。趋势、季节、节假日、外生变量、高频模式和间歇性需求可以由不同专家处理;每个专家又可以通过蒸馏降低成本。最终系统既有分工,又能部署。

实施清单

做一个时间序列蒸馏项目前,至少检查以下问题。

  1. Teacher Model 是否可用,是否能稳定复现输出?

  2. 是否有足够领域数据支持 Student Model 学习?

  3. 目标是压缩、迁移、纠正,还是三者都有?

  4. Student Model 的结构为什么适合部署环境?

  5. 损失函数是否同时包含真实值和老师输出?

  6. 是否有滚动窗口或留后测试模拟真实未来?

  7. 是否比较了简单基线、Teacher 和 Student?

  8. 是否报告模型大小、延迟、内存和成本?

  9. 是否检查关键业务样本,而不只看平均误差?

  10. 是否记录模型版本、数据版本和蒸馏配置?

如果这些问题没有回答清楚,蒸馏模型即使能跑,也不应直接进入业务决策。

小结

模型蒸馏把大模型能力转化为小模型能力。它不是简单删参数,而是通过 Teacher Model 引导 Student Model 学习输出、概率分布、中间表示或预测行为。蒸馏可以压缩模型、迁移领域能力,也可以在特定任务上纠正和增强老师模型。

对时间序列预测来说,蒸馏的价值在于把时间序列基座模型变成可部署工具。Chronos、TimeGPT、TimesFM 或企业内部模型可以作为老师,小型 Transformer、LSTM、树模型或业务模型可以作为学生。最终是否成功,不取决于概念是否先进,而取决于评估证据:小模型是否在目标 horizon、目标领域和目标业务成本下足够好。

练习

  1. 用自己的话解释为什么蒸馏不同于直接训练小模型。

  2. 为一个电商销量预测任务设计 Teacher Model 和 Student Model。

  3. 写出一个同时拟合真实值和老师预测的蒸馏损失函数。

  4. 比较量化、剪枝、微调和蒸馏的区别。

  5. 说明为什么 Student Model 可能在某个细分任务上超过 Teacher Model。

  6. 设计一个滚动窗口评估方案,比较 Teacher、Student 和 Naive 基线。

  7. 如果只能调用闭源 API,如何构造 response distillation 数据集?

  8. 讨论一个适合 embedded AI 的预测场景,并说明为什么需要蒸馏。

  9. 为蒸馏后的模型设计一张部署报告表,包含精度、延迟、模型大小和成本。

  10. 说明 MoE 和蒸馏如何组合成一个低成本预测平台。

参考文献

References
  1. 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
  2. Garza, A., Challu, C., & Mergenthaler-Canseco, M. (2024). TimeGPT-1. 10.48550/arXiv.2310.03589
  3. Alammar, J., & Grootendorst, M. (2024). Hands-On Large Language Models: Language Understanding and Generation. O’Reilly Media.