【大模型简介】LLM Fine-tunning
摘要:为了进一步了解大模型,我查阅学习了三种预训练大型语言模型的微调技术:参数高效的fine-tuning(PEFT)、Prompt-tuning、以及Instruction-Tuning。
1 Parameter-efficient fine-tuning
参数高效的fine-tuning,简称PEFT。
旨在在尽可能减少所需的参数和计算资源的情况下,实现对预训练语言模型的有效微调。
1.1 Distillation 蒸馏
训练一个较小的模型来模仿一个较大的预训练模型的行为。
预训练模型生成“教师”预测结果,然后用于训练较小的“学生”模型。通过这样做,学生模型可以从较大模型的知识中学习,而无需存储所有参数。
1.2 Adapter training 适配器训练
适配器是添加到预训练模型中的小型神经网络,用于特定任务的微调。
这些适配器只占原始模型大小的一小部分,这使得训练更快,内存需求更低。适配器可以针对多种任务进行训练,然后插入到预训练模型中以执行新任务。
1.3 Progressive shrinking 渐进收缩
在fine-tuning期间逐渐减小预训练模型的大小。
从一个大模型开始,逐渐减少参数的数量,直到达到所需的性能。这种方法可以产生比从头开始训练的模型性能更好的小型模型。
2 Prompt-tuning
- 重点:调整输入提示(input prompt)而非修改模型参数。
- 这意味着预训练模型保持不变,只有输入提示被修改以适应下游的任务。通过设计和优化一组提示,可以使预训练模型执行特定任务。
- 思考:只要我们把希望输出的部分删除掉,然后尽量构造与该输出有关的其它tokens即可。
- Input: The man went to the [MASK1] . He bought a [MASK2] of milk.
- Labels: [MASK1] = store; [MASK2] = gallon.
- 对比传统fine-tuning:预训练模型被修改的程度
- fine-tuning修改模型的权重,而提示调整只修改模型的输入。
- 因此,prompt-tuning调整比精调的计算成本低,需要的资源和训练时间也更少。
- 此外,prompt-tuning比精调更灵活,因为它允许创建特定任务的提示,可以适应各种任务。
2.1 Prefix tuning
前缀调整涉及学习特定任务的连续提示,在推理过程中将其添加到输入之前。通过优化这个连续提示,模型可以适应特定任务而不修改底层模型参数,这节省了计算资源并实现了高效的精调。
2.2 P-Tuning
P-Tuning涉及训练可学习的“提示记号”参数,这些参数与输入序列连接。这些提示记号是特定于任务的,在精调过程中进行优化,使得模型可以在保持原始模型参数不变的情况下在新任务上表现良好。
3 Instruction-Tuning
3.1 对比Prompt-tuning
- 与Prompt不同,Instruction通常是一种更详细的文本,用于指导模型执行特定操作或完成任务。
- Instruction可以是计算机程序或脚本,也可以是人类编写的指导性文本。Instruction的目的是告诉模型如何处理数据或执行某个操作,而不是简单地提供上下文或任务相关信息。
- 因此,Prompt和Instruction都是用于指导模型生成输出的文本,但它们的目的和使用方式是不同的。Prompt更多地用于帮助模型理解任务和上下文,而Instruction则更多地用于指导模型执行具体操作或完成任务。
3.2 对比SFT
- 指令微调可以被视为有监督微调(Supervised Fine-Tuning,SFT)的一种特殊形式。
- 但是,它们的目标依然有差别。
- SFT:使用标记数据对预训练模型进行微调
- 指令微调:通过在包括(指令,输出)对的数据集上进一步训练大型语言模型(LLMs)的过程
- 指令微调的特殊之处在于其数据集的结构,即由人类指令和期望的输出组成的配对。
3.3 InstructGPT举例
- 准备自然语言指令集:针对特定任务,准备一组自然语言指令,描述任务类型和任务目标,例如情感分类任务的指令可以是“该文本的情感是正面的还是负面的?”。
- 准备训练数据集:针对特定任务,准备一个标记化的数据集,其中每个数据样本都包含输入文本和标签,例如情感分类任务的标签可以是“正面”或“负面”。
- 将自然语言指令和数据集转换为模型输入:将自然语言指令和数据集转换为模型输入,例如对于情感分类任务,将自然语言指令和文本拼接作为输入,例如:“该文本的情感是正面的还是负面的?这家餐厅的食物很好吃。”
- 在指令上进行微调:在指令上进行微调,以适应特定任务的需求,提高模型在任务上的性能。
3.4 技术总结
方法 | 原理 | 优势 | 缺点 |
---|---|---|---|
LoRA | 将模型权重分解为低秩分量进行更新,使调优局限在相关任务子空间 | 减少调优的参数量,降低计算内存 | 低秩分解可能削弱模型表征能力 |
HINT | 使用超网络根据指令和少量样例生成参数化模块进行模型调优 | 可以处理长指令,避免重复计算 | 调优模块性能可能弱于全量调优 |
Qlora | 对模型权重进行量化,只调整低秩适配器参数 | 减少参数内存,兼容量化 | 量化会损失部分精度 |
LOMO | 融合梯度计算和更新,避免完整梯度存储 | 减少梯度内存占用 | 需要精心设计保证收敛稳定 |
Delta-tuning | 将调优参数限制在低维流形上 | 提供理论分析,参数高效 | 低维流形假设可能不够准确 |
总体评估:
- 通过参数量减少、梯度压缩、量化等方式来降低计算和内存消耗。
- 这些方法在降低资源占用方面非常有效,但也存在一定的缺点,如精度损失、收敛稳定性等问题。
3.5 数据集总结
类别 | 侧重 | 解释 |
---|---|---|
泛化到未见任务 | 任务泛化能力 | 包含多样化的任务,每个任务都有专门的指令和数据样例。模型在这类数据集上训练后,可以泛化到未见过的新任务上。 |
在单轮中遵循用户指令 | 单轮指令理解能力 | 包含指令及其对应的响应,用于训练模型单轮回复用户指令。训练后,模型可以理解指令并作出回复。 |
像人类一样提供帮助 | 连续多轮对话能力 | 包含多轮闲聊对话。训练后,模型可以进行多轮交互,像人类一样提供帮助。 |
4 Chain-of-Thought
Chain-of-thought 是一种处理复杂问题或执行多步骤任务的技巧,通常用于大型预训练语言模型中。这种方法允许模型在多个步骤中生成连贯的回答,从而更好地解决问题或完成任务。
在 Chain-of-thought 方法中,模型的输出被视为一个序列,每个部分都是一个独立的“思考链”或步骤。模型通过将先前的输出作为后续输入的一部分来迭代地生成这些部分,这样可以让模型在一定程度上模拟人类解决问题的过程。
有时,模型可能无法生成正确的答案,或者在多次迭代中陷入死循环。
4.1 数学问题举例
- 将问题输入模型:“计算 3 * (4 + 5)”
- 模型输出第一步的结果:“计算 4 + 5”
- 将上一步的结果作为输入,再次输入模型:“计算 3 * 9”
- 模型输出最终结果:“结果是 27”
4.2 GPT-3训练模型
- 收集大量的语料库
- 包括各种主题和风格的文本
- 各种来源:网站、社交媒体、新闻、书籍等。
- 对语料库进行预处理
- 分词、标记化、去除停用词、处理语法结构等。
- 定义上下文窗口:型需要考虑的前面和后面的文本内容。
- 将训练过程分解为一系列逐步更复杂的子任务。例如,可以将训练过程分解为理解语法和词汇、生成单词和短语、生成连贯的句子和段落、理解上下文等子任务。
- 为每个子任务定义适当的训练目标和损失函数,并使用训练数据来训练模型。例如,为了训练模型理解上下文,可以定义一个损失函数,它评估模型生成的响应与上下文的相关性。
- 在训练完成后,使用测试数据来评估模型的性能。例如,检查模型是否能够生成连贯的响应,以及是否能够维护文本中的思维链。
- 迭代地对模型进行微调和优化。
5 Reference
预训练大语言模型的三种微调技术总结:fine-tuning、parameter-efficient fine-tuning和prompt-tuning | 数据学习者官方网站(Datalearner)
实际案例说明AI时代大语言模型三种微调技术的区别——Prompt-Tuning、Instruction-Tuning和Chain-of-Thought | 数据学习者官方网站(Datalearner)
大语言模型的指令微调(Instruction Tuning)最全综述:从数据集到技术全解析 | 数据学习者官方网站(Datalearner)
版权声明:
作者:Zhang, Hongxing
链接:http://zhx.info/archives/301
来源:张鸿兴的学习历程
文章版权归作者所有,未经允许请勿转载。