大模型高效微调详解-从Adpter、PrefixTuning到LoRA

adpter,prefixtuning,lora · 浏览次数 : 0

小编点评

1. Prefix Tuning 2. Promot Tuning 3. Low-Rank Adaption of LLMs (LoRA) 4. Prompt Tuning里程碑作品:The Power of Scale for Parameter-Efficient Prompt Tuning 5. Understanding Parameter-Efficient Finetuning of Large Language Models: From Prefix Tuning to LLaMA-Adapters

正文

一、背景

目前NLP主流范式是在大量通用数据上进行预训练语言模型训练,然后再针对特定下游任务进行微调,达到领域适应(迁移学习)的目的。
image

指令微调是预训练语言模型微调的主流范式

其目的是尽量让下游任务的形式尽量接近预训练任务,从而减少下游任务和预训练任务之间的Gap, 实现预训练语言模型适应下游任务,而非下游任务去适应模型。

image

指令微调的效果要优于基于Zero/Few-shot的提示词工程的上下文学习。

image

但随着预训练语言模型进入LLM时代,其参数量愈发庞大。全量微调模型所有参数所需的显存早已水涨船高。

例如:

  • 全参微调Qwen1.5-7B-Chat预估要2张80GB的A800,160GB显存(需要确认一下😮)
  • 全参微调Qwen1.5-72B-Chat预估要20张80GB的A800,至少1600GB显存😱。

而且,通常不同的下游任务还需要LLM的全量参数,对于算法服务部署来说简直是个灾难

当然,一种折衷做法就是全量微调后把增量参数进行SVD分解保存,推理时再合并参数😓

image

为了寻求一个不更新全部参数的廉价微调方案,之前一些预训练语言模型的高效微调(Parameter Efficient, PEFT)工作,要么插入一些参数或学习外部模块来适应新的下游任务。

image

接下来将介绍如下4个PEFT方法(重点是主流的LoRA);

  • Adatper Tuning
  • Prompt Tuning
  • Prefix Tuning
  • LoRA

image

二、参数高效微调

2.1 Adapter Tuning

Adapter Tuning试图在Transformer Layer的Self-Attetion+FFN之后插入一个先降维再升维的MLP(以及一层残差和LayerNormalization)来学习模型微调的知识。
image

Adapter即插入的FF up + FF Down。
image

在微调时,Transformer Layer原有的所有参数冻结,反向传播后仅更新Adapter参数。

缺点:需要修改原有模型结构,同时还会增加模型参数量。

2.2 Promot Tuning

https://arxiv.org/abs/2104.08691

Prompt Tuning设计了一种prefix prompt方法,即在模型输入的token序列前添加前缀prompt token,而这个前缀prompt token的embedding是由网络学到。

Prompt Tuning可以看做token已经确定,但是embedding是可以学的。它相当于仅用prompt token的embedding去适应下游任务,相比手工设计或挑选prompt,它是一种Soft的prompt(软提示),

image

给定\(n\)个token组成的输入序列 \(\{{x}_{1} , {x}_{2}, \ldots,{x}_{T}\}\),其对应token embedding矩阵为 \(\mathbf{X}_{e} \in \mathbb{R}^{n \times d}\)\(d\)代表嵌入维度。

Soft-prompts对应参数\(\mathbf{P}_{e} \in \mathbb{R}^{p \times d}\)\(p\)代表prompt的长度。

然后,将prompt拼接到输入前面,就能得到完整的模型输入
\([\mathbf{P}_{e} ; \mathbf{X}_{e}] \in \mathbb{R}^{(p+n) \times d}\) 。这个新的输入将会送入模型\(f([\mathbf{P}; \mathbf{X}]; \Theta, \Theta_{p})\),以最大化交叉熵损失来最大化条件概率 \(Pr_{\Theta, \Theta_{p}}(\mathbf{Y} | [\mathbf{P}; \mathbf{X}])\),以拟合其标签token序列 \(\mathbf{Y}\)

在针对下游任务微调时,Prompt Tuning将冻结原始LLM的参数,只学习独立的prompt token参数

参数化的prompt token加上输入的token送入模型进行前向传播,反向传播只更新prompt token embedding的参数

在针对不同的下游任务微调时,就可以分别学习不同的Task Specifical的Prompt Token参数。

image

  • Soft Prompt Tuning在模型增大时可以达到接近fine-tuning的效果。
  • 离散的Prompt Tuning(Prompt Design)基本不能达到fine-tuning的效果;

image

Promot Tuning方法的参数成本是\(ed\),其中\(de\)是提示长度,\(d\)是token嵌入维度。

提示越短,必须调整的新参数就越少,那么调参的目标是就是找到表现仍然良好的最小prefix prompt长度。

2.3 Prefix-Tuning

image

为了避免人为的离散Prompt选取优化,Prefix-Tuning提出可学习的Prefix Prompt。

image

Prefix-Tuning提出可学习的Prompt,即:learns a sequence of prefixes that are prepended at every transformer layer

image

Prefix tuning为\(l\)层的Transformer Layer的每层多头注意力的键和值都配置了可学习的prefix vectors.
image

Two sets of prefix vectors \(\mathbf{P}_{k}\), \(\mathbf{P}_{v} \in \mathbb{R}^{l\times d}\) are concatenated with the original key \(\mathbf{K}\) and value \(\mathbf{V}\)

image

看到这里可以知道,Prefix-Tuning可以算是Promot Tuning的一个特例(Promot Tuning只在输入侧加入可学习的Prefix Prompt Token)

2.4 LoRA

为缓解该问题,LoRA(Low-Rank Adaption of LLMs),即LLMs的低秩适应,被提出用于高效参数微调。

LoRA的核心思想,是假设LLM在下游任务上微调得到的增量参数矩阵\(\Delta \mathbf{W}\)是低秩的

\(\Delta \mathbf{W}\)是存在冗余参数的高维矩阵,但实际有效矩阵是更低维度的

image

相关论文表明训练学到的过度参数化的模型实际上存在于一个较低的内在维度上

类似于机器学习中的降维算法,假设高维数据实际是在低维的流形上一样

因此,将\(\Delta \mathbf{W} = \mathbf{B} \mathbf{A}\)用两个更参数量更小的矩阵\(\mathbf{B}\in \mathbb{R}^{r \times d}\)\(\mathbf{A}\in \mathbb{R}^{d \times r}\)进行低秩近似。

其具体操作是,冻结了预训练的模型权重,并将可训练的LoRA秩分解矩阵注入到LLM的每个
Transformer Decoder层中,从而大大减少了下游任务的可训练参数数量。

image

LoRA 方法的计算流程如图对于该权重的输入\(\mathbf{x}\)来说,输出为下式:

\[\mathbf{h} = (\mathbf{W}_{0} + \Delta \mathbf{W} ) \mathbf{x} = \mathbf{W}_{0}\mathbf{x} + \mathbf{B}\mathbf{A} \mathbf{x} \]

其中,\(\mathbf{W}_{0} \in \mathbb{R}^{d \times d}\)为设预训练权重。初始化时,矩阵 \(\mathbf{B}\) 通过高斯函数初始化,矩阵 \(\mathbf{A}\)
全零初始化,使得训练开始之前旁路对原模型不造成影响,即参数改变量为0。

对于使用LoRA的模型来说,由于可以将原权重与训练后权重合并,因此在推理时不存在额外的开销。

Prefix Tuning是指在输入序列前缀添加连续可微的软提示作为可训练参数。

由于模型可接受的最大输入长度有限,随着软提示的参数量增多,实际输入序列的最大长度也会相应减小,影响模型性能。

三、适用范围

近来LLM主要是指,Decoder-Only架构的大规模预训练语言模型。

毕竟,同等参数规模和训练数据量,Encoder-Decoder架构的T5和Bart在生成任务熵,相比Decoder-Only架构并不具备优势。更不用说,Encoder-Only架构的BERT了。

但是,所有使用Transformer架构的算法都可以使用上述PEFT方法。

针对主流的Decoder Only的生成式因果语言模型,其训练范式具体是:
image

图片源自:《大规模语言模型:从理论到实践》

  • 预训练(Pretraining):基于海量语料进行Transformer Decoder架构的自回归预训练,拟合语料序列的条件概率分布\(P(w_i |w_{i}, ..., w_{i-1})\),从而压缩信息,最终学到一个具备长上下文建模能力的超大规模神经语言模型,即LLM
  • 有监督微调(Supervised Finetuning):基于高质量的指令数据(用户输入的提示词 + 对应的理想输出结果)微调LLM,从而得到有监督微调模型(SFT模型)。SFT模型将具备初步的指令理解能力和上下文理解能力(预训练得到的LLM在指令微调的过程中被引导如何使用其学到的知识)
    进一步基于结果有排序指令样本,
  • 奖励建模(Reward Modeling):奖励阶段试图构建一个文本质量对比模型(相当于一个Critor)。对同一个提示词,它将对SFT模型给出的多个不同输出的质量做排序。奖励模型可通过二分类模型,对输入的两个结果之间的优劣进行判断。
  • 强化学习(Reinforcement Learning):强化学习阶段将根据给定的提示词样本数据,利用在前一阶段训练的奖励模型,给出SFT模型对用户提示词补全结果的质量评估,并与语言模型建模目标综合得到更好的效果。强化学习微调将在SFT模型基础上,它将使LLM生成的结果文本能获得更高的奖励。

除了预训练,增量预训练、有监督微调、有监督微调、奖励建模、强化学习阶段都可以采用PEFT方式。
image

转载需注明出处
文章首发于知乎:https://zhuanlan.zhihu.com/p/696057719

参考资料

[0] CS224N:Natural Language Processing
with Deep Learning, Sildes (Lecture 11: Prompting, Instruction Finetuning, and RLHF)

[1] PrinCETON LLM课程 Sildes(Prompt as Parameter-Efficient
Fine-Tuning)

[2] 《The Power of Scale for Parameter-Efficient Prompt Tuning》论文阅读 https://zhuanlan.zhihu.com/p/551174711

[3] Prompt Tuning里程碑作品:The Power of Scale for Parameter-Efficient Prompt Tuning https://zhuanlan.zhihu.com/p/551014127

[4] 图解大模型微调系列之:大模型低秩适配器LoRA(https://zhuanlan.zhihu.com/p/646831196)

[5] Understanding Parameter-Efficient Finetuning of Large Language Models: From Prefix Tuning to LLaMA-Adapters https://lightning.ai/pages/community/article/understanding-llama-adapters/

与大模型高效微调详解-从Adpter、PrefixTuning到LoRA相似的内容:

大模型高效微调详解-从Adpter、PrefixTuning到LoRA

一、背景 目前NLP主流范式是在大量通用数据上进行预训练语言模型训练,然后再针对特定下游任务进行微调,达到领域适应(迁移学习)的目的。 指令微调是预训练语言模型微调的主流范式 其目的是尽量让下游任务的形式尽量接近预训练任务,从而减少下游任务和预训练任务之间的Gap, 实现预训练语言模型适应下游任务,

大模型高效微调-LoRA原理详解和训练过程深入分析

博客首发于我的知乎,详见:https://zhuanlan.zhihu.com/p/702629428 一、LoRA原理 LoRA(Low-Rank Adaptation of LLMs),即LLMs的低秩适应,是参数高效微调最常用的方法。 LoRA的本质就是用更少的训练参数来近似LLM全参数微调所

大模型高效开发的秘密武器:大模型低参微调套件MindSpore PET

摘要:本文介绍大模型低参微调套件——MindSpore PET。 本文分享自华为云社区《大模型高效开发的秘密武器——大模型低参微调套件MindSpore PET篇》,作者:yd_280874276 。 人工智能进入“大模型时代”。大模型具备更强泛化能力,在各垂直领域落地时,只需要进行参数微调,就可以

StarCoder2-Instruct: 完全透明和可自我对齐的代码生成

指令微调 是一种技术,它能让大语言模型 (LLMs) 更好地理解和遵循人类的指令。但是,在编程任务中,大多数模型的微调都是基于人类编写的指令 (这需要很高的成本) 或者是由大型专有 LLMs 生成的指令 (可能不允许使用)。 我们推出了一个叫做 StarCoder2-15B-Instruct-v0.

[转帖]全球十大模拟IC厂商排名出炉,TI霸主,微芯上榜

https://www.sohu.com/a/232168751_99984320?qq-pf-to=pcqq.c2c 美高森美和安森美 不是一家.. 前天,IC Insights公布了2017年全球10大模拟芯片厂商营收及排名。据IC Insights统计,2017年全球模拟芯片的市场规模为545

为什么要使用微服务架构?

一、传统的单体架构 1、什么是单体架构? 单体架构(Monolithic Architecture)是一种传统的软件架构模式,将整个应用程序作为一个单一的、统一的单元进行开发、部署和扩展。在单体架构中,所有的功能模块都被打包在一起,共享同一个代码库和数据库。 2、单体架构的缺点 复杂性高 一个大型的

LLM 大模型学习必知必会系列(三):LLM和多模态模型高效推理实践

LLM 大模型学习必知必会系列(三):LLM和多模态模型高效推理实践 1.多模态大模型推理 LLM 的推理流程: 多模态的 LLM 的原理: 代码演示:使用 ModelScope NoteBook 完成语言大模型,视觉大模型,音频大模型的推理 环境配置与安装 以下主要演示的模型推理代码可在魔搭社区免

LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]

LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]

利用英特尔 Gaudi 2 和至强 CPU 构建经济高效的企业级 RAG 应用

检索增强生成 (Retrieval Augmented Generation,RAG) 可将存储在外部数据库中的新鲜领域知识纳入大语言模型以增强其文本生成能力。其提供了一种将公司数据与训练期间语言模型学到的知识分开的方式,有助于我们在性能、准确性及安全隐私之间进行有效折衷。 通过本文,你将了解到英特

智能工作流:Spring AI高效批量化提示访问方案

集用SpringAI搭建系统,依靠线程池\负载均衡等技术进行请求优化,用于解决科研&开发过程中对GPT接口进行批量化接口请求中出现的问题。大语言模型接口以OpenAI的GPT 3.5为例,JDK版本为17。