链载Ai

标题: 大模型微调基本概念指北 [打印本页]

作者: 链载Ai    时间: 2 小时前
标题: 大模型微调基本概念指北

本文主要分享一下大模型微调相关的基本概念,包括大模型(GPT)训练流程、微调(SFT)方法&分类&框架&最佳实践、强化学习(RLHF),最后则是分享了如何训练垂直领域大模型。


本文是参考网上博客、文章后进行总结而成,旨在让刚接触大模型的同学阅读后能对大模型训练的各个阶段有一个大致的概念。大佬可以直接跳过,或者也可以帮忙看下写错没有哈哈~

如果你在阅读过程中发现文中存在错误,请一定留言指正,感谢~

1. 大模型训练流程

ChatGPT 是如何炼成的

ChatGPT 是如何炼成的,或者说如何训练出一个大模型?

GPT 训练流程图如下:

图源:medium.com[1]

图中的 Reward Modeling 和 Reinforcement Learning 可以看做一步,即 RLHF,因此训练一个大模型一般可以分为三步:

预训练由于对算力和数据需求都比较大,因此一般玩家不会涉及到预训练,更多的是基于开源的基础模型(LLama、Baichuan、Qwen、ChatGLM...)做微调、强化学习以满足自身需求。

模型名称各部分的含义

Qwen1.5-14B-Chat-GQPT-Int4 为例,可以分为 5 个部分,具体含义如下图:

5 个参数含义如下:

我们需要注意的就是是否经过微调、量化:

如何选择合适的模型?

2. 微调(SFT)

什么是大模型微调

大模型微调,通常指有监督微调(Supervised Fine-Tuning, SFT),是在预训练模型(一般称为“基座模型”)的基础上进行的训练过程。

预训练模型通常已经掌握了广泛的语言知识和语义表示,但为了让模型在特定任务或领域上表现得更好,我们会在特定任务的数据集上对其进行微调。

为什么需要微调

微调是优化大模型在特定任务或领域表现的关键步骤。通过微调,模型不仅能在通用任务上表现出色,还能在特定应用场景中更好地满足用户的需求。它在任务性能、领域适应性、数据利用效率和计算成本等方面具有显著的优势。

具体为:

微调方法分类

微调根据更新参数量不同可以分为以下两种:

理论上,预训练和微调都可以做全量参数更新和部分参数更新,但是一般实际训练时都是 预训练 + 全量,微调 + 部分参数更新 这样组合的

FFT 的原理,就是用特定的数据,对大模型进行训练,将 W 变成W′,_W_′相比 W,最大的优点就是上述特定数据领域的表现会好很多。

但 FFT 也会带来一些问题,影响比较大的问题,主要有以下两个:

另外,随着模型规模变得越来越大,这使得在消费级硬件上进行全量微调变得不可行,这也给参数高效微调技术研究提供了空间。

PEFT 主要想解决的问题,就是 FFT 存在的上述两个问题,PEFT 也是目前比较主流的微调方案。

Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning[2] 论文里系统地概述和比较了参数高效微调方法,涵盖了 2019 年 2 月至 2023 年 2 月之间发表的 40 多篇论文,作者在文中将 PEFT 分为三类:

常见的 PEFT 方法:BitFit、Prompt Tuning、Prefix Tuning、P-Tuning、P-Tuning V2、Adapter Tuning、LoRA、QLoRA、MAM Adapter、UniPELT、 Freeze tuning 等等。

大致介绍:

各自的特点:

这部分微调技术也可以按照 PEFT 进行分类:

现在比较主流的几种 PEFT:Prompt Tuning、Prefix Tuning、LoRA、QLoRA。

训练框架选择

比较主流的几个微调工具:

快速实验选择 Transformers 即可,超大规模的选择 NVIDIA/Megatron-LM,普通规模就选择使用较为简单的 hiyouga/LLaMA-Factory。

3. SFT 最佳实践

数据集准备

数据集的质量对模型微调至关重要,毫不夸张的说,微调后的模型效果 80%取决于 SFT 训练数据,少量高质的数据要比大量低质或者普通的数据要好很多。

1)数据集格式

问答格式可以处理成多种文件格式, 例如 JSONL, Excel File, CSV; 核心是要保持两个独立的字段, 即问题和答案

例如:

[
{
"question":"特种珊瑚是一种海洋动物吗?",
"answer":"特种珊瑚虽然生活在海洋中,但它属于珊瑚软体类的石珊瑚目,是一种动物。而海洋动物是海洋中所有异养型生物的总称,包括鱼类、鲸类、浮游动物和游泳动物等,特种珊瑚只是其中的一种。"
}
]

2)Prompt 优化

3)数据规模、数据多样性

在 SFT 上数据规模的重要性低于数据质量, 通常 1 万条左右的精标数据即可发挥良好的效果

在扩充数据规模时需要注意数据多样性,多样性的数据可以提高模型性能

在不扩大提示多样性的情况下扩大数据量时,收益会大大减少,而在优化数据质量时,收益会显著增加。

4)数据质量

挑选质量较高的数据,可以有效提高模型的性能。

数据质量用户需尽量自己把控,避免出现一些错误,或者无意义的内容。虽然平台也可以提供数据质量筛选的能力,但不可避免出现错筛的情况。

数据质量可以通过 ppl、reward model,文本质量分类模型等方式进行初步评估。经过人工进行后续筛选。

SFT 超参数调整

比如 10 万个样本 2-3 个 epoch 内为佳,2 ~ 5 万个样本 一般是 4-5 个 epoch 并且领域增强的 SFT 数据不需要太多,质量一定要把握好,一般的领域总结回复的任务几百条数据即可( 个人经验 ),视情况而定;小数据量可以适当增大 epoch,让模型充分收敛。

一般只需要关注以下 三个超参数的调整

4. 什么是强化学习(RLHF)

RLHF 是一种训练方式,并不是类似 Lora 这种的训练方法,RLHF 可以分为三阶段:

相比于 RLHF 现在好像 DPO 比较火

5. 如何训练垂直领域大模型?

1)选择 Base 模型还是 Chat 模型?

对模型进行微调,都有可能触发灾难性遗忘。

在进行领域任务的 SFT 时,模型会重新调整对话任务相关的参数,而这些调整可能会干扰或破坏模型原先在通用对话任务上所学到的知识。这种现象就是灾难性遗忘。

即:灾难性遗忘 会导致模型通用能力降低。

因为 Chat 模型就是在 Base 模型基础上做了微调以适应对话任务,掌握了生成对话内容的能力的 SFT 模型,因此再对 Chat 模型做 SFT 触发 灾难性遗忘 风险就比较高,相比之下 Base 因为没经过微调,因为触发 灾难性遗忘 的风险会比较低。

因此选择哪种模型取决于我们的场景:

2)是否需要继续预训练(Continue PreTraining)?

因此,一般有两种选择

在此基础上,还可以通过强化学习进一步提升模型效果。

那么,最终一个完整的训练垂直领域大模型可以分为以下三步

6. 小结

1)大模型训练流程

2)微调

3)SFT 最佳实践

4)强化学习 RLHF

5)如何训练垂直领域大模型







欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5