大语言模型微调框架学习记录: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应用需要具备的特性抽象成这六个模块,面向开发端。

在实战操作中,PEFT库可以用来微调BERT模型,以进行文本情感分类任务。首先,我们需要准备一个包含大量文本和标签的数据集,用于训练和验证BERT模型。然后,我们需要利用PEFT库中提供的工具和接口,将数据集转换成BERT模型可接受的格式,并进行数据预处理,如分词和填充等操作。 接着,我们可以利用PEFT库中提供的预训练模型,加载BERT模型参数和网络结构,并在数据集上进行微调微调的过程中,我们可以通过调整学习率、批大小和训练轮数等超参数,来优化模型的性能。在每个训练轮数结束后,我们可以利用PEFT库中的评估工具对模型进行评估,以了解模型在验证集上的性能表现。 最后,当模型在验证集上的性能达到满意的水平后,我们可以使用PEFT库提供的保存模型工具,将微调后的BERT模型保存下来,以备在实际应用中使用。通过PEFT库的实战操作,我们可以有效地利用BERT模型进行文本情感分类任务,提高模型的准确性和泛化能力,从而更好地满足实际应用的需求。 PEFT库的实战操作不仅帮助我们更好地理解和使用BERT模型,也为我们提供了一套完整的工具和流程,使得模型训练和应用变得更加简单和高效。 PEFT库实战(一): lora微调BERT(文本情感分类) 的操作流程清晰,易于上手,为我们在文本情感分类任务中的应用提供了有力的支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值