如何通过LoRA微调实现大模型自我认知的?
摘要:本文主要分享如何使用 LLaMAFactory 实现大模型微调,基于 Qwen1.5-1.8B-Chat 模型进行 LoRA 微调,修改模型自我认知。 本文的一个目的:基于 Qwen1.5-1.8B-Chat 模型进行微调,修改模型自我认证
本文主要分享如何使用 LLaMAFactory 实现大模型微调,基于 Qwen1.5-1.8B-Chat 模型进行 LoRA 微调,修改模型自我认知。
本文的一个目的:基于 Qwen1.5-1.8B-Chat 模型进行微调,修改模型自我认证。
修改前对于 Qwen1.5-1.8B-Chat 模型,用户问你是谁?时模型一般会回答我是阿里云自主研发的超大规模语言模型,我叫通义千问。
我们希望在微调之后,对于同样的问题,模型能回答我是 Archer,由 意琦行 研发。
1. 训练相关概念
上一篇文章 GPT 是如何炼成的:大模型微调基础概念指北 中分享了模型训练的相关概念,这里简单复习一下。
ChatGPT 是如何炼成的?
ChatGPT 是如何炼成的,或者说如何训练出一个大模型?
训练一个大模型一般可以分为三步:
1)预训练(Pre Training,PT):提供海量数据,通过无监督预训练,花费大量算力得到一个基座模型
比如 Llama 3 在 24K GPU 集群上训练,使用了 15T 的数据
此时模型有预测下一个 token 的能力,但是离对话 / 问答 模型还差一点,可能不会回复你的问题,反而给你生成一个类似的问题
2)指令微调(Supervised Fine-Tuning, SFT):在基座模型上微调,让模型能够适用特定任务,最终得到一个 SFT 模型
比如为了让模型成为问答助手,需要让模型学习更多的问答对话,从而学习到我们输入问题的时候,模型应该输出答案,而不是输出一个类似的问题。
这些问答对话由人类准备的,包括问题和正确的回答。
3)强化学习(Reinforcement Learning from Human Feedback, RLHF):通过人类反馈进一步优化模型的生成质量,使其生成的回答更符合用户的期望和人类的价值观。
一般根据 3H 原则进行打分:
Helpful:判断模型遵循用户指令以及推断指令的能力。
Honest:判断模型产生幻觉( 编造事实)的倾向。
Harmless:判断模型的输出是否适当、是否诋毁或包含贬义内容。
为了简化这一过程,一般是先训练一个用于打分的模型,即:奖励模型(Reward Model,RW),让奖励模型来代替人实现强化学习
预训练由于对算力和数据需求都比较大,因此要求比较高,一般用户不会涉及到预训练。
更多的是基于开源的基础模型(LLama、Baichuan、Qwen、ChatGLM...)等做微调、强化学习以满足自身需求。
微调
什么是大模型微调?
大模型微调,也称为Fine-tuning,是指在已经预训练好的大型语言模型基础上(一般称为“基座模型”),使用特定的数据集进行进一步的训练,让模型适应特定任务或领域。
微调方法
上一篇中介绍了比较主流的训练方法,这里简单提一下:
微调根据更新参数量不同可以分为以下两种:
全量参数更新 Full Fine-tuning(FFT):即对预训练模型的所有参数进行更新,训练速度较慢,消耗机器资源较多。
参数高效微调 Parameter-Efficient Fine-Tuning(PEFT):只对部分参数做调整,训练速度快,消耗机器资源少。
理论上,预训练和微调都可以做全量参数更新和部分参数更新,但是一般实际训练时都是 预训练 + 全量,微调 + 部分参数更新 这样组合的。
其中 PEFT 是一系列方法的统称,Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning 论文里系统地概述和比较了参数高效微调方法,涵盖了 2019 年 2 月至 2023 年 2 月之间发表的 40 多篇论文。
文中作者将高效微调方法分为三类:
添加额外参数 A(Addition-based)
类似适配器的方法(Adapter-like methods)
软提示(Soft prompts)
选取部分参数更新 S(Selection-based)
引入重参数化 R(Reparametrization-based)
选择合适的微调方法和框架可以显著提高效率,减少资源消耗,并帮助研究者和开发者更好地适应和优化特定任务。
具体就不介绍了,感兴趣的同学可以跳转论文查看~
现在比较主流的几种 PEFT:Prompt Tuning、Prefix Tuning、LoRA、QLoRA。
微调框架
比较主流的几个微调、训练工具:
huggingface/transformers:最基础的一个库,提供了丰富的预训练模型和微调工具,支持大多数主流的NLP任务(如文本分类、序列标注、生成任务等)。
