大语言模型微调框架学习记录:LoRA、全参数、PEFT、RLHF


微调与高效微调简介

讲一些基本概念内容,和之前的猜测不太一样

微调 Fine-Tuning

一般指全参数微调,即全量微调。

高效微调 PEFT

围绕部分参数进行微调的方法,目前比较常用。不过Fine-Tuning也可以代指所有微调方法。OpenAI中的在线微调API Fine-Tuning实际上也是一种高效微调。

基于强化学习的RLHF

OpenAI团队提出,2023年开源。目前最好的实现是DeepSpeedChat库,由微软维护。


下面是一些关于PEFT和RLHF的详细介绍

一、PEFT

目前主流的很多方法,包括LoRA,Prefix Tuning,P-tuning,Prompt Tuning等都属于这类方法。这些方法都被集成到Huggingface的PEFT库中,能够更方便快速的使用。

1.LoRA

Github地址:https://github.com/microsoft/LoRA
paper地址:https://arxiv.org/abs/2106.09685

基于低阶自适应的大语言模型微调方法
可以认为是PEFT的鼻祖,LoRA希望能模拟全量微调的效果。认为大模型内在存在低秩特性,修改模型结构,通过在输入输出之间增加旁路矩阵模拟全量微调,将这个新的旁路矩阵代替原始参数矩阵,即W矩阵,进行微调。
在这里插入图片描述
LoRA目前还在对扩散模型微调任务中也应用很多,比如Stable Diffusion,这可能是很火的原因之一。
具体来讲,参考这篇博客,LoRA可解释为:与原始的transformer不同,LoRA架构增加了右侧的“旁支”,也就是先用一个Linear层A,将数据降维,处理后的这个r维度也就是LORA的秩,是LORA中最重要的一个超参数。一般会远远小于d,尤其是对于现在的大模型,d已经不止是768或者1024,例如LLaMA-7B,每一层transformer有32个head,这样一来d就达到了4096.

接着再用第二个Linear层B,将数据变回d 维。最后再将左右两部分的结果相加融合,就得到了输出的hidden_state。

对于左右两个部分,右侧看起来像是左侧原有矩阵W 的分解,将参数量从d ∗ d 变成了d ∗ r + d ∗ r ,在r < < d 的情况下,参数量就大大地降低了。

LORA的思想,是所有出现大矩阵的地方,理论上都可以用到这样的分解。LORA保留了原来的矩阵W,但是不让W参与训练,所以需要计算梯度的部分就只剩下旁支的A和B两个小矩阵。

2.Prefix Tuning

基于提示词前缀优化的微调方法
2021年斯坦福大学提出的方法。原理:在原始模型上增加一个可训练的Embedding层,用于给提示词增加前缀,提高模型对提示词意图的理解,训练过程中不断优化。

在这里插入图片描述
比如:你提问男主角何时出生?模型会选择所有与男主角出生日期相关信息放进一个提示词,放在你的提问之前作为前缀。不改变原始大模型的任何参数,只改变前面的Embedding层。

3.Prompt Tuning

谷歌提出,一种轻量级方法,相当于Prefix Tuning的简化方法。在原来的大语言模型中挑一些参数进行微调,也就是把Prefix Tuning的Embedding功能通过部分数值的参数实现。即只在输入层加入 prompt tokens。
具有优点:能显示展示提示词如何被修改的。
具体参考这篇
在这里插入图片描述
实验证明了使用自动生成的soft prompt方法进行tuning的效果跟model tuning差不多,同时超过了人工设计的prompt。

4.P-Tuning v2

清华大学提出,Prefix Tuning的改进版本。不仅在输入层添加连续的Promptpts,也在预训练每一层增加连续prompts。很适合CLM类双向大模型微调。
可以参考我的上一篇博客

二、RLHF

基于人工反馈机制的强化学习方法
OpenAI2022.04提出,2023.04左右开源。用于训练InstructGPT模型。
HuggingFace、Pytorch和微软研究院都有RLHF的实现,效果最好的是DeepSpeed库的方法。
在这里插入图片描述
先进行原始语言模型的微调;然后实现奖励模型微调;最后进行RLHF训练。步骤二实际上是训练了一个反馈模型,包括很多人类标准。(之前没接触过强化模型,不过感觉这个实现难度很大。)

三、LangChain介绍

什么是LangChain?

大概可以将它理解为类似机器学习中pipeline的东西。是一个开源工具库,专注于构建和研究基于语言模型的应用。它提供了一套工具和接口,用于方便地在大型语言模型,如GPT-3或其他类似模型上,构建、测试和部署基于语言的应用程序。LangChain 旨在使研究人员和开发人员能够更容易地探索和利用大型语言模型的能力,尤其是在自然语言理解和生成方面。

代表应用:AutoGPT

一经问世,爆火。
可以调用本地电脑工具处理复杂信息,可以围绕目标查资料,反馈与调整。这是一个包装在语言模型外的包装程序,首次将大语言模型接入本地工具,首次尝试串联大语言模型思维链,通过模型外的存储,“记住”人类提示和操作步骤,提升交互体验。
LangChain是一个开发工具,可以用于开发AutoGPT的AI应用。

LangChain六大模块

Models:提供许多接口,包括GPT和ChatGLM-6B,都能通过接口进行调用。
Prompts:提供Prompts模块,用于开发者灵活自定义提示模板。
Chains:认为,AI工具内部执行流程类似流水线,pipeline对应Chains。
Agents:未来AI工具与本地交互是必然结果,通过代理能够使用本地工具。
Memory:需要记忆存储模块。
Index:提供本地索引功能,方便进行本地管理。
LangChain将未来AI应用需要具备的特性抽象成这六个模块,面向开发端。

### Hugging Face PEFT 参数高效微调使用方法 #### 准备环境 为了使用 Hugging Face 提供的 PEFT 技术,在低资源硬件上对大规模模型进行参数高效微调,需先安装必要的库。可以通过 pip 安装 `transformers` 和 `peft` 库[^2]。 ```bash pip install transformers peft ``` #### 加载并准备模型 加载预训练的大规模语言模型,并对其进行 INT8 训练优化以减少内存占用和加速推理过程。这一步骤对于在有限计算资源环境下尤为重要[^4]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer from peft import prepare_model_for_int8_training model_name = "bigscience/bloom-7b1" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) # 对模型应用INT8量化处理 model = prepare_model_for_int8_training(model) ``` #### 配置PEFT适配器 配置特定类型的 PEFT 适配器来执行参数高效的微调操作。这里展示如何设置 LoRA 适配器,这是一种流行的轻量级迁移学习方案[^1]。 ```python from peft import LoraConfig, get_peft_model lora_config = LoraConfig( r=16, lora_alpha=32, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, bias="none", ) # 将LoRA配置应用于原始模型 peft_model = get_peft_model(model, lora_config) ``` #### 微调与评估 利用准备好的数据集对已配置好 PEFT 适配器的模型实施微调流程。此阶段可以采用标准的 PyTorch 或者 Hugging Face Trainer API 进行训练循环控制。 ```python from datasets import load_dataset from transformers import TrainingArguments, Trainer dataset = load_dataset("wikitext", "wikitext-2-raw-v1") training_args = TrainingArguments(output_dir="./results", num_train_epochs=3) trainer = Trainer( model=peft_model, args=training_args, train_dataset=dataset["train"], eval_dataset=dataset["validation"] ) trainer.train() eval_results = trainer.evaluate() print(f"Evaluation results: {eval_results}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值