模型微调-书生浦语大模型实战营学习笔记4&大语言模型7
大语言模型-7.模型微调
书生浦语大模型实战营学习笔记-4.模型微调
本节对应的视频教程为B站链接。笔记对视频的理论部分进行了整理。部分内容参考李宏毅2024春《生成式人工智能导论》和三分钟学会大模型PEFT的LORA算法 lora_rank, lora_alpha
大模型的训练过程
模型视角
这里原视频用的“分类”这个名字,我看到的时候还有点懵😂,后来才意识到这里说的是大模型的训练过程。
是的,意识到这点以后你就知道,这一节讲的内容和后面实操的内容差的有点多。。。
这里有两个概念。不过在了解这两个概念之前,我们先从模型的角度看看当今LLM都是如何训练出来的。
我们知道当今LLM的训练方式就是基于文字接龙:
但是不同阶段使用的训练数据不同。
Pretrain
首先,模型使用网上爬取的资料随意进行文字接龙训练,这个过程是Self-supervised Learning(自监督学习)的过程:
训练结束后,语言模型学了很多东西却不知道使用方法。就好像人有上乘内功却不知道使用的方法。
GPT、GPT2、GPT3都是使用这种方式完成训练的,只不过训练数据规模大小不一样。因为这一过程就叫“生成式预训练(Generative PreTraining)”,简称GPT——这就是GPT的名字来源
Instruction Fine-tuning
然后,使用一部分有标注数据在第一步自监督学习的基础上进行Instruction Fine-tuning。
InstructGPT就是使用这两步训练出来的。
但是数据标注太花费人力了,所以在这一步,有很多不同的做法,但是简单地概括,一派是要训练一堆专才,一派是要训练一个通才:
Reinforcement Learning from Human Feedback (RLHF)
RLHF就是用生成文本的人工反馈作为性能衡量标准,或者更进一步用该反馈作为损失来优化模型:
我们在使用GPT时,如果让它重新生成过答案,就会有human feedback的结果评价按钮,RLHF的数据即来源于此。
总结
三阶段对比如下:
好,下面再回过头来看视频中的两个概念:
- 增量预训练微调
- 使用场景:让基座模型学习到一些新知识,如某个垂类领域的常识
- 训练数据:文章、书籍、代码等
- 指令跟随微调
- 使用场景:让模型学会对话模板,根据人类指令进行对话
- 训练数据:高质量的对话、问答数据
这两个概念对应于模型训练的不同阶段:
所以,这里的“基座模型”指的就是经过Pretrain阶段得到的模型;
- 在成为“专才” 的道路上,需使用高质量数据进行“增量预训练微调”。这一步算是二次预训练;之后直接使用“指令跟随微调”
- 在成为“通才” 的道路上,直接使用“指令跟随微调” Instruction Fine-tuning,得到的模型就是对话模型。
- 如果不进行训练,直接使用模型,模型就意识不到你在问它问题:
数据视角
从互联网上爬出的数据显然不能直接拿来训练,需要进行一系列预处理。
首先,要将原始数据进行清理(数据清洗):
然后对数据进行格式转换,使其变为标准格式:
之后添加对话模板。格式转换后即可直接替换对话模板。
实际上,对话模板中还会有起始符和结束符。
训练完成后,在推理过程中仍然有添加与解除模板的过程:
LoRA
这里给个简单的例子便于大家理解LoRA:
对于模型有权重weight:
我们可以只更新低秩矩阵 \(LoraA\) 和 \(LoraB\) 来完成对模型的整体更新:
这样更新耗费的资源更少,效果却差不多。
QLoRA
QLoRA就是量化了的LoRA:
同时,引入了Paged Optimizers,它可以避免梯度检查点操作时内存爆满导致的内存错误。
XTuner
视频后面还有一些对于XTuner的介绍。
另外,关于使用XTuner微调大模型,我们有一个实操供参考。
推荐阅读
- 模型量化相关的内容:https://www.cnblogs.com/xiangcaoacao/p/17683893.html
- 知乎大佬手撕QLoRA:https://zhuanlan.zhihu.com/p/654967425