Experience Replay
模型已经学会把客户的提问分派给“配送”和“退货”两个部门。现在你要继续训练它识别投诉,比如“商品送到时已经损坏”。如果在接下来的练习里它只看到投诉,那么对从前熟悉的“包裹在哪里?”,它可能会处理得更差。完整的旧存档已经无法取得。那么,能不能至少回头用上留存下来的几条消息呢?
Experience Replay (ER) 的做法是保存一部分早先的样本,并在训练中重新使用它们。在简单的版本里,我们往一批新数据中掺入来自记忆的样本,这块记忆称为 replay buffer。它是存放回放数据的容器,而不是模型全部知识的记录。Chaudhry et al., Continual Learning with Tiny Episodic Memories, §2, 算法 1 描述了这种合在一起的训练。

下一次练习里放进了什么
在存档丢失之前,我们记下了四条消息以及它们的正确部门。现在我们有四条新的投诉。没有回放时,模型在四条新消息上学习。有了回放,它还会在四条旧消息上练习:再次得到信号,知道“包裹在哪里?”属于配送。在这个小例子里我们用上了整个缓冲区;较大的缓冲区通常提供的是随机抽取的一批。
不过,只数记忆里有几个位置是不够的。保存下来的四条配送提问里,一条退货的样本也没有。把其中两条换成“怎么把买的东西寄回去?”和“我想退一件衬衫”之后,回放的数量不变,却覆盖了原先的两个部门。下面的实验统计的是一批数据里的样本;它并不预测模型的准确率。
回放只对手头有的数据起作用
模型得到的是练习早先答案的机会,而不是保住所有能力的保证。随机抽出的小样本可能把少见的类别完全漏掉;研究者在缓冲区非常小时观察到过这样的问题(同一篇论文的 §4.4)。我们的消息是自拟的例子,不是那些实验的结果。学习的效果必须在单独的、没有用于训练的旧消息和新消息上检验。缓冲区还会占用存储空间,并且要求把选中的数据保留下来。
另见:Reservoir Sampling——一种决定数据流中哪些样本进入固定大小缓冲区的方法,它给每个样本同等的机会。
在游戏中,在 Reinforcement Learning [Polski](根据奖励来学习行动)里,保存的是情境、行动、奖励和下一个情境。对这些记录随机抽取,可以减少对紧接着发生的事件的依赖(Mnih et al., Human-level control through deep reinforcement learning, Methods, “Training algorithm for deep Q-networks”)。这与带有正确部门的消息是不同的数据;Atari 上的结果不应直接搬到 LLM 上。
- Continual Learning 确定的是在保留原有能力的前提下继续学习这一目标;ER 是实现它的方法之一。
- Catastrophic Forgetting [Polski] 描述的是旧能力的显著退化,而回放可以减轻这种退化。
- Fine-tuning [Polski] 是对模型的继续训练;replay 改变的是其数据的选取。仅仅把旧消息粘贴进对话,并不是这样的模型更新。
文字和插图在 AI 的协助下完成。消息和演示是自拟的简化教学示例;插图是比喻,而不是模型构造的示意图。