大模型训练流程(二)指令微调

本文探讨了如何通过指令微调来增强大型语言模型的能力和可控性,重点关注数据集的构建,包括不同类型的任务和结构,以及模型评测的关键指标,如知识、推理和对话能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.目的

指令微调是一种通过在由(指令,输出)对组成的数据集上进一步训练LLMs的过程。其中,指令代表模型的人类指令输出代表遵循指令的期望输出。这个过程有助于弥合LLMs的下一个词预测目标与用户让LLMs遵循人类指令的目标之间的差距

指令微调可以被视为有监督微调(Supervised Fine-Tuning,SFT)的一种特殊形式。但是,它们的目标依然有差别。SFT是一种使用标记数据对预训练模型进行微调的过程,以便模型能够更好地执行特定任务。而指令微调是一种通过在包括(指令,输出)对的数据集上进一步训练大型语言模型(LLMs)的过程,以增强LLMs的能力和可控性。指令微调的特殊之处在于其数据集的结构,即由人类指令和期望的输出组成的配对。这种结构使得指令微调专注于让模型理解和遵循人类指令

总的来说,指令微调是有监督微调的一种特殊形式,专注于通过理解和遵循人类指令来增强大型语言模型的能力和可控性。虽然它们的目标和方法相似,但指令微调的特殊数据结构和任务关注点使其成为SFT的一个独特子集。

2.数据集处理

一些研究表明,增加构建的指令中的任务数量可以更好地提高LLM的泛化能力。同时,可以在微调指令中加入一些预训练数据,这可以使微调过程更加稳定

2.1 指令数据集的结构

指令数据集中的每个实例由三个元素组成:

  1. 一个指令,它是指定任务的自然语言文本序列(例如,为XX写一封感谢信给XX,写一篇关于XX主题的博客,等等);
  2. 为上下文提供补充信息的可选输入;
  3. 以及基于指令和输入的预期输出。
    在这里插入图片描述

2.2 构建中文指令数据的几种方式

  • 纯人工构建,包括指令(instruct、prompt)和回应(response),这种方式成本较高,只应用在安全性等部分类型数据上。
  • 基于大模型的蒸馏,参考self-instruct的方式,构建种子指令,通过调用大模型(GPT3.5等)构建指令以及对应的回应。这种方式成本更低、效率更高,但是会掺杂部分错误。
  • 从英文指令数据翻译到中文指令数据,这种方式也可以很快构建中文指令数据,缺点一是数据中不可避免地存在翻译错误,二是因文化差异带来的语言习惯、价值观差异。

2.3 指令微调的数据集分为以下三大类:

  • 泛化到未见任务(侧重任务泛化能力)
    包含多样化的任务,每个任务都有专门的指令和数据样例。模型在这类数据集上训练后,可以泛化到未见过的新任务上。

  • 在单轮中遵循用户指令(侧重单轮指令理解能力)
    包含指令及其对应的响应,用于训练模型单轮回复用户指令。训练后,模型可以理解指令并作出回复。

  • 像人类一样提供帮助(侧重连续多轮对话能力)
    包含多轮闲聊对话。训练后,模型可以进行多轮交互,像人类一样提供帮助。

2.4 数据构建条件:

  1. 代表性。应该选择多个有代表性的任务
  2. 数据量每个任务实例数量不应太多(比如数百个)否则可能会潜在地导致过拟合问题并影响模型性能
  3. 不同任务数据量占比。应该平衡不同任务的比例,并且限制整个数据集的容量(通常几千或几万),防止较大数据集压倒整个分布

3.模型评测

  • 为确保在对齐指令上微调后,SFT模型在预训练阶段获得的通用能力以及上下文学习能力没有大幅下降。注意不能在一堆 benchmark 上看平均分数,因为平均值差异不大,并且很多任务没有代表性;只在核心的有区分度的 benchmark 评测,包括:知识蕴含能力(MMLU),推理能力(GSM8k / BBH ),代码能力(Human Eval / MBPP) 以及数学能力(MATH )。
  • 另一方面,需要评测模型生成的回复是否和人类对齐。对齐能力可以通过人工评测,评价的内容包括真实性,有用性,无害性(helpfulness,harmlessness,honesty)等等,也可以通过一个足够大的,已经训练好了的RM进行评测。
### 关于大语言模型指令微调的方法、教程或最佳实践 #### 指令微调概述 指令微调是一种提升模型性能的有效策略,通过特定示例训练机器学习模型,使其能够更好地理解并响应查询。为了实现这一目标,所使用的数据集应当精确反映预期的应用场景和需求[^1]。 #### 数据准备 用于微调的数据集至关重要,它不仅决定了模型的学习方向也影响最终效果。因此,在收集和整理这些资料时需特别注意其质量以及与目标任务的相关度。高质量且针对性强的数据能显著改善模型的表现。 #### 实践指南 针对具体实施过程中的指导原则如下: - **选择合适的框架**:根据项目特点挑选适合自己的开发环境和技术栈; - **定义清晰的任务描述**:确保每一个输入都有明确对应的输出形式; - **迭代优化参数配置**:不断调整超参直至获得满意的结果为止; ```python from transformers import AutoModelForCausalLM, Trainer, TrainingArguments model_name = "your-pretrained-model" train_dataset = ... # Your training dataset here eval_dataset = ... # Evaluation set if available training_args = TrainingArguments( output_dir="./results", per_device_train_batch_size=8, num_train_epochs=3, ) model = AutoModelForCausalLM.from_pretrained(model_name) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=eval_dataset ) trainer.train() ``` 此段代码展示了如何利用Hugging Face Transformers库来进行简单的因果语言建模任务上的微调工作流程[^4]。 #### 应用领域 经过良好设计的指令微调方案可以在多个行业找到广泛用途,比如自然语言处理(NLP),聊天机器人客服系统等领域都能见到此类技术的身影。随着研究进展和社会需求变化,更多创新性的应用场景也将被发掘出来[^2]。 #### 工具资源推荐 对于希望进一步探索该主题的人来说,《一文搞定 大语言模型(LLM)微调方法》提供了详尽的操作手册及案例分享,而《深入浅出大模型微调》则更侧重理论基础建设方面的讨论[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自律也自由

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值