赞
踩
上周,您被介绍了生成型AI项目的生命周期。您探索了大型语言模型的示例用例,并讨论了它们能够执行的任务类型。
在本课中,您将了解如何提高现有模型在特定用例下的性能的方法。
您还将了解可用于评估您微调后的LLM性能并量化其相对于您开始时的基础模型的改进的重要指标。
让我们首先讨论如何使用指令提示来微调LLM。在课程的早期,您看到一些模型能够识别提示中包含的指令,并正确地执行零样本推理,
而其他一些较小的LLM可能无法执行任务,就像这里显示的示例一样。
您还看到,包括一个或多个您希望模型执行的示例(称为一次性或少次性推理)可能足以帮助模型识别任务并生成一个好的完成。
然而,这种策略有几个缺点。
幸运的是,存在另一种解决方案,您可以利用一种称为微调的过程来进一步训练基础模型。
与使用大量非结构化文本数据通过自监督学习训练LLM的预训练相反,
微调是一个监督学习过程,您使用一个标记示例的数据集来更新LLM的权重。
这些标记示例是提示完成对,
微调过程延长了模型的训练,以提高其在特定任务上生成好的完成的能力。
一种称为指令微调的策略在提高模型在多种任务上的性能方面特别有效。
让我们更仔细地看看这是如何工作的,指令微调使用示例训练模型,这些示例演示了它应如何响应特定的指令。这里有几个示例提示来演示这个想法。两个示例中的指令都是“分类这个评论”,期望的完成是一个以“情感”开头,然后是“正面”或“负面”的文本字符串。
您用于训练的数据集包括许多您感兴趣的任务的提示完成示例对,每个示例都包括一个指令。
例如,如果您想微调模型以提高其摘要能力,您将建立一个以“摘要以下文本”或类似短语开始的示例的数据集。如果您正在提高模型的翻译技能,您的示例将包括像“翻译这个句子”这样的指令。这些提示完成示例允许模型学习生成遵循给定指令的响应。
指令微调,其中所有模型的权重都被更新,被称为全面微调。该过程产生了一个具有更新权重的模型的新版本。重要的是要注意,就像预训练一样,全面微调需要足够的内存和计算预算来存储和处理所有在训练期间被更新的梯度、优化器和其他组件。因此,您可以从上周学到的内存优化和并行计算策略中受益。
那么您实际上如何进行指令微调和LLM呢?第一步是准备您的训练数据。有许多公开可用的数据集已经用于训练早期代的语言模型,尽管它们大多数都没有格式化为指令。幸运的是,开发人员已经组装了提示模板库,这些库可以用于获取现有的数据集,例如亚马逊产品评论的大型数据集,并将它们转换为用于微调的指令提示数据集。
提示模板库包括不同任务和不同数据集的许多模板。这里有三个提示,它们被设计用于与亚马逊评论数据集一起工作,并且可以用于微调用于分类、文本生成和文本摘要任务的模型。
您可以看到,在每种情况下,您都将原始评论(这里称为review_body)传递给模板,其中它被插入到以像“预测相关评级”、“生成星级评论”或“给出以下产品评论的简短句子描述”这样的指令开始的文本中。结果是一个现在包含指令和数据集中的示例的提示。
一旦您准备好了指令数据集,就像标准的监督学习一样,您将数据集划分为训练、验证和测试分割。
在微调期间,您从训练数据集中选择提示并将它们传递给LLM,然后生成完成。接下来,您将LLM的完成与训练数据中指定的响应进行比较。您可以在这里看到,模型做得不是很好,它将评论分类为中性,这有点夸张了。评论显然是非常积极的。记住,LLM的输出是一个概率分布,across tokens跨越令牌。
因此,您可以比较完成的分布和训练标签的分布,并使用标准的crossentropy交叉熵函数来计算两个令牌分布之间的损失。
然后使用计算出的损失来更新模型权重,以标准的反向传播。您将为许多批次的提示完成对进行这样的操作,并在几个时代内更新权重,以便模型在任务上的性能得到提高。
与标准的监督学习一样,您可以定义单独的评估步骤,以使用保留的验证数据集来衡量您的LLM性能。这将给您提供验证准确性,
而在您完成微调后,您可以使用保留的测试数据集进行最终性能评估。这将给您提供测试准确性。
微调过程产生了一个更擅长您感兴趣的任务的基础模型的新版本,通常称为指导模型。使用指令提示进行微调是目前微调LLM最常见的方式。从这一点开始,当您听到或看到“微调”一词时,您可以假设它总是意味着指令微调。
https://www.coursera.org/learn/generative-ai-with-llms/lecture/exyNC/instruction-fine-tuning
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。