华盛顿大学和谷歌研究中心的一个团队最近开源了 Distilling Step-by-Step(逐步蒸馏),一种用于微调规模较小的语言模型的技术。与标准微调相比,逐步蒸馏需要的训练数据更少,并且生成的模型更小,但模型性能却优于参数规模是它 700 倍的小样本提示大型语言模型 (LLM)。
虽然 LLM 一般可以在提示较少的情况下在多种任务上有良好的表现,但由于其内存和算力要求过高,模型的托管是比较有挑战的。规模较小的模型在微调后也可以有良好的表现,但这需要工程师手动创建针对具体任务优化的数据集。逐步蒸馏的关键思想是使用 LLM 自动生成一个小型微调数据集,其中的数据有一个输入和一个输出标签,以及选择这个输出标签的“理由”。微调过程会训练这个小模型来预测输出标签并生成对应的理由。在 NLP 基准上评估时,小型微调模型的性能优于 540B PaLM 模型,同时仅需要这个基准测试的全部微调数据的 80%。据谷歌称:
我们展示了,逐步蒸馏既减少了构建针对特定任务的较小模型所需的训练数据集规模,也减少了实现甚至超越小样本提示 LLM 的性能水平所需的模型大小。总的来说,逐步蒸馏提出了一种可以高效利用资源的范例,可以解决模型大小和所需训练数据之间的权衡问题。
研究表明,增加 LLM 中的参数规模可以提高其性能,目前最先进的模型(例如 PaLM)拥有数百亿个参数。然而,这些大型模型价格昂贵,且难以用于推理,因为它们需要多个并行连接的 GPU 才能把这么多参数保存在内存里。最近的研究开发出了规模稍小的模型(例如 Meta 的 Llama 2),其性能表现差不多,但参数少了一个数量级;然而,这些小一些的模型还是很庞大,需求的算力也很高。
要做出在特定任务上表现良好的小模型的一种方法,是使用针对具体任务收集的数据集来微调小规模语言模型。虽然这个数据集可能相对较小(大约有数千个示例),但其数据收集起来可能还是费时费钱。另一种选择是知识蒸馏,也就是使用大型模型作为较小模型的老师。 InfoQ 最近报道了谷歌开发的一项技术,使用 PaLM LLM 来创建训练数据集,最后生成的微调模型的性能可与规模大 10 倍的 LLM 相媲美。
逐步蒸馏确实需要微调数据集,但它减少了创建高性能模型所需的数据量。源数据集通过思维链提示输入 PaLM LLM,要求模型给出其答案的理由。输出结果是修正后的微调数据集,其中包含原始输入和答案以及理由。这个较小的目标模型经过微调来执行两项任务:回答原始问题并生成理由。
谷歌使用四个 NLP 基准测试评估了他们的技术,每个基准都包含一个微调数据集。他们使用逐步蒸馏来修正这些数据集,并使用了参数不到 1B 的微调 T5 模型。他们发现,这些模型在仅使用数据集的一小部分数据的情况下,性能就比基线微调模型要好;在某些情况下只要 12.5% 的数据就有这样的表现。他们还发现,他们的 770M 参数模型在 ANLI 基准测试中的性能优于大它 700 倍的 540B 参数 PaLM,同时只需要 80% 的微调数据集数据。
在 X(以前的 Twitter)上关于这项工作的讨论中,人工智能企业家 Otto von Zastrow 写道:
这些结果非常厉害。我会把这种办法叫做合成数据生成,而不是蒸馏,我真的很好奇,如果你根据每个示例问题的合成理由来训练原始的 LLM 会发生什么事情。
逐步蒸馏的源代码和训练数据集可在 GitHub 上获取。 Google Cloud 的 Vertex AI 平台还提供该算法的非公开预览。
原文链接:
评论