返回首页

Roadmap
更新于 2026年11月7日 全文 2245 字未阅读

微调、蒸馏与提示工程#

上一节我们把 LLM 的内部构造讲清楚了。但真正落到工程上,还有一个绕不开的问题:一个什么都会的通用模型,怎么才能变成我业务里那个能干活的助手?

上一节介绍的通用 LLM,其实有好几个名字:

  • 基础 LLM(foundation LLM)

  • 基座 LLM(base LLM)

  • 预训练 LLM(pre-trained LLM)

不管叫什么,它们都是被喂了大量自然语言训练出来的——多到足以“懂得”语法、词汇和习语。这样的模型能就它训练过的话题写出有用的句子,甚至能写诗这类传统上被算作“创造性”的任务。

但要留意一点:它的生成式输出,并不是回归、分类这类常见 ML 问题的答案。 在这些场景里,基础 LLM 更适合当一个平台,而不是答案本身。

要把一个基础 LLM 变成满足某个应用需求的方案,得靠一个叫微调(fine-tuning)的过程。而在微调之后,还有一个叫 蒸馏(distillation)的次级过程,用它生成参数量更少的版本。

这一节的路线图大致是这样:先用微调把模型调教到能用,再用蒸馏把它压小;然后介绍一条不动模型、只动提示词的捷径——提示工程;再讲离线推理怎么绕开“模型太大、线上太慢”的现实;最后落到负责任地使用 LLM。

微调#

先看第一步:微调。

研究显示,基础语言模型的模式识别能力非常强,有时候学某个具体任务,只需要相对少量的额外训练就能上手。这段额外训练能让模型在该任务上做出更好的预测,它就叫微调(fine-tuning),作用是把 LLM 的“实用面”解锁出来。

微调用的是针对你这个应用将要执行的任务准备的样本。工程师有时只用几百条、几千条训练样本,就能完成一次微调。

不过,训练样本虽然少,标准微调的计算开销依然很大。原因在于:标准微调在每一次反向传播(backpropagation)迭代时,都要更新每一个参数的权重与偏置。

好在有一个更聪明的办法——参数高效微调(parameter-efficient tuning):它在每次反向传播迭代时,只调整参数的一个子集(冻结某些层的权重参数)。

最后有一点很容易被忽略:微调后模型的预测通常确实比基础 LLM 更好,但它的参数量和基础 LLM 是一样的。一个一百亿参数的基础 LLM,微调之后还是一百亿参数。

蒸馏#

微调解决了“能不能用”,却没解决“跑不跑得起”。

大多数微调后的 LLM 参数量都非常庞大,因此基础 LLM 要生成一次预测,需要消耗巨量的算力与环境资源。还要注意一点:这些参数里有很大一部分,对某个具体应用来说其实是无关的。

蒸馏(distillation)正是为这件事准备的:它造出一个更小版本的 LLM。蒸馏后的 LLM 生成预测快得多,所需的算力与环境资源也少得多。不过,蒸馏模型的预测效果,通常不如原来的 LLM 那么好。回想一下前面那条经验:参数量更多的 LLM,几乎总是比参数量更少的 LLM 预测得更好。

点击了解蒸馏是怎么工作的

最常见的蒸馏形式,是用离线推理给数据打标签。这批带标签的数据再用来训练一个新的、更小的模型(称为学生模型),它能被更经济地部署上线。带标签的数据就像一条通道,把大模型(称为教师模型)的知识输送给小模型。

举个例子。假设你需要的是一个能在线给评论打“有毒”分数的模型,用于自动审核评论。这种情况下,你可以用一个体量很大的离线“毒性”打分器给训练数据打标签,再用这批训练数据蒸馏出一个小到足以在线服务、能够处理实时流量的毒性打分模型。

教师模型有时能提供比它自己训练时见过的还多的带标签数据。另外,教师模型也可以不只传一个二元的“是 / 否”标签,而是给出一个数值分数送给学生模型。数值分数比二元标签携带更丰富的训练信号,让学生模型不仅能预测正面和负面两类,还能预测那些边界模糊的类别。

更多关于模型蒸馏原理的介绍可以参见 模型蒸馏的原理是什么?温度有什么用?起底LLM中的蒸馏技术! 中的介绍。

提示工程#

如果说微调和蒸馏都要动模型本身,那么还有一条路可以走:提示工程(prompt engineering)。

提示工程让 LLM 的终端用户去定制模型的输出——也就是说,由用户来澄清希望 LLM 该如何回应自己的提示词。

人从示例里学得最好,LLM 也一样。给 LLM 看一个示例,这就叫单样本提示(one-shot prompting)。比如,你希望模型按下面的格式输出水果所属的科属:

用户输入水果的名字:LLM 输出该水果所属的科属。

单样本提示的做法是:先给 LLM 看一个上述格式的示例,再让它照着补全一个新的输入。例如:

peach: drupe
apple: ______

一个示例有时候就够了。如果够了,LLM 就会输出一个有用的预测,比如:

apple: pome

但另一些情况下,一个示例并不够用,用户得给 LLM 看多个示例。例如下面这个提示里就包含了两个示例:

plum: drupe
pear: pome
lemon: ____

给出多个示例,就叫少样本提示(few-shot prompting)。你可以把上面这段提示的前两行,当成训练示例来看。

那么,一个示例都不给,LLM 还能给出有用的预测吗(这叫零样本提示,zero-shot prompting)?有时候能,但 LLM 是喜欢上下文的。没有上下文时,下面这个零样本提示返回的可能是那家科技公司的信息,而不是水果的信息:

apple: _______

更多有关少样本提示(情境学习)的介绍可以参见文章GPT-2与GPT-3模型 第10.14.4节内容 。

注意: 提示工程不会改变模型的参数。提示词只是借助 LLM 已经具备的模式识别能力。

离线推理#

接下来我们绕开模型本身,从部署方式上另想办法。

LLM 的参数量有时实在太大,导致在线推理(online inference)对于回归、分类这类现实任务而言,慢到根本没法用。于是很多工程团队换用离线推理(offline inference,也叫批量推理或静态推理)。换句话说:模型不在接到请求的那一刻才做预测,而是提前把预测算出来,再把结果缓存起来。

如果 LLM 一周或一月只需要做一次这个任务,那跑得慢一点也不妨事。

举个例子:Google 搜索曾用 LLM 做离线推理,缓存了 50 多种语言里 800 多个新冠病毒疫苗的同义词,然后用这份缓存下来的清单,在实时流量里识别与疫苗有关的查询。

负责任地使用 LLM#

最后聊一个容易被跳过、但其实相当重要的前提。

和任何形式的机器学习一样,LLM 通常会继承两类数据的偏见:

  • 它接受训练所用的数据。

  • 它做蒸馏所用的数据。

要想公平、负责任地使用 LLM,请遵循数据模块与公平性模块中给出的准则。

练习:检查你的理解#

关于 LLM,下面哪一条说法是对的?

  • A. 微调后的 LLM 参数量比它所基于的基础语言模型更少。

  • B. 蒸馏得到的 LLM 参数量比它所衍生自的基础语言模型更少。

  • C. 随着用户做越来越多的提示工程,LLM 的参数量会不断增长。


关键术语:

  • 反向传播(Backpropagation)
  • 蒸馏(Distillation)
  • 少样本提示(Few-shot prompting)
  • 微调(Fine-tuning)
  • 离线推理(Offline inference)
  • 单样本提示(One shot prompting)
  • 在线推理(Online inference)
  • 参数高效微调(Parameter efficient tuning)
  • 提示工程(Prompt engineering)
  • 零样本提示(Zero-shot prompting)

Help Center

阅读 --