用通俗易懂的方式讲解:大模型微调方法总结

大家好,今天给大家分享大模型微调方法:LoRA,Adapter,Prefix-tuning,P-tuning,Prompt-tuning。

文末有大模型一系列文章及技术交流方式,传统美德不要忘了,喜欢本文记得收藏、关注、点赞。

文章目录
      • 1、LoRA
      • 2、Adapter
      • 3、Prefix-tuning
      • 4、P-tuning
      • 5、prompt-tuning
      • 用通俗易懂的方式讲解系列
      • 技术交流
      • 参考资料
1、LoRA

paper:LoRA: Low-Rank Adaptation of Large Language Models(https://arxiv.org/pdf/2106.09685.pdf)

code:[GitHub - microsoft/LoRA: Code for loralib, an implementation of “LoRA: Low-Rank Adaptation of Large Language Models”](https://github.com/microsoft/LoRA “GitHub - microsoft/LoRA: Code for loralib, an implementation of “LoRA: Low-Rank Adaptation of Large Language Models””)

简介

自然语言处理目前存在一个重要范式:一般领域数据的大规模预训练,对特定任务或领域的适应(finetune)。

但是随着预训练语言模型越来越大,这个范式存在以下问题:

● 当我们 finetune 大模型时,由于训练成本太高,不太可能重新训练所有模型参数

● 以前的方法(论文发表于 2021 年)都或多或少有其它性能问题,如 adapter 增加了模型层数,引入了额外的推理延迟;prefix-tuning 比较难训练,效果不如直接 finetune。

基于上述背景,论文作者得益于前人的一些关于内在维度(intrinsic dimension)的发现:模型是过参数化的,它们有更小的内在维度,模型主要依赖于这个低的内在维度(low intrinsic dimension)去做任务适配。假设模型在任务适配过程中权重的改变量是低秩(low rank)的,由此提出低秩自适应(LoRA)方法,LoRA 允许我们通过优化适应过程中密集层变化的秩分解矩阵来间接训练神经网络中的一些密集层,同时保持预先训练的权重不变。

方法

LoRA 的实现思想很简单,如下图所示,就是冻结一个预训练模型的矩阵参数,并选择用 A 和 B 矩阵来替代,在下游任务时只更新 A 和 B。

图片

结合图片来看,LoRA 的实现流程如下:

● 在原始预训练语言模型(PLM)旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的内在秩。

● 训练的时候固定 PLM 的参数,只训练降维矩阵 A 与升维矩阵 B。

● 模型的输入输出维度不变,输出时将 BA 与 PLM 的参数叠加。

● 用随机高斯分布初始化 A,用 0 矩阵初始化 B,保证训练的开始此旁路矩阵依然是 0 矩阵。

实现

接下来我们从公式上解释 LoRA 的实现。

假设要在下游任务微调一个预训练语言模型(如 GPT3),则需要更新预训练模型参数,公式表示如下:

W0 是预训练模型初始化的参数,ΔW 就是需要更新的参数。如果是全参数微调,则它的参数量=W0 参数量(如果是 GPT3,则 ΔW≈175B)。从这可以看出要全参数微调大语言模型,小家小户是不可能的。

由于前人的工作发现预训练的语言模型具有较低的“内部维度(intrinsic dimension)”,在任务适配过程中,即使随机投影到较小的子空间,仍然可以有效地学习。因此,LoRA 做的就是增加小参数模块去学习改变量 ΔW。

图片

在训练过程中,W0 是固定不变的,只有 A 和 B 包含训练参数,是变化的。

而在推理的过程中,只需要把改变量放回原模型,就不会有任何延迟。

如果想切换任务,只需要切换任务的过程中,减去 BA,然后换上用其它任务训练好的 BʹAʹ 就可以了。

总结

总的来说,基于大模型的内在低秩特性,增加旁路矩阵来模拟 full finetuning,LoRA 是一个能达成 lightweight finetuning 的简单有效的方案。目前该技术已经广泛应用于大模型的微调,如 Alpaca,stable diffusion+LoRA,而且能和其它参数高效微调方法有效结合,例如 State-of-the-art Parameter-Efficient Fine-Tuning (PEFT)

2、Adapter

paper: Parameter-Efficient Transfer Learning for NLP (https://arxiv.org/pdf/1902.00751.pdf)

MAD-X: An Adapter-Based Framework for Multi-Task Cross-Lingual Transfer(https://arxiv.org/pdf/2005.00052.pdf)

简介

2019 年,Houlsby N 等人将 Adapter 引入 NLP 领域,作为全模型微调的一种替代方案。Adapter 主体架构下图所示。

图片

在预训练模型每一层(或某些层)中添加 Adapter 模块(如上图左侧结构所示),微调时冻结预训练模型主体,由 Adapter 模块学习特定下游任务的知识。每个 Adapter 模块由两个前馈子层组成,第一个前馈子层将 Transformer 块的输出作为输入,将原始输入维度 d 投影到 m,通过控制 m 的大小来限制 Adapter 模块的参数量,通常情况下 m<<d。在输出阶段,通过第二个前馈子层还原输入维度,将 m 重新投影到 d,作为 Adapter 模块的输出(如上图右侧结构)。通过添加 Adapter 模块来产生一个易于扩展的下游模型,每当出现新的下游任务,通过添加 Adapter 模块来避免全模型微调与灾难性遗忘的问题。Adapter 方法不需要微调预训练模型的全部参数,通过引入少量针对特定任务的参数,来存储有关该任务的知识,降低对模型微调的算力要求。

Adapter 算法改进

2020 年,Pfeiffer J 等人对 Adapter 进行改进,「提出 AdapterFusion 算法,用以实现多个 Adapter 模块间的最大化任务迁移」(其模型结构如下图所示)。

图片

AdapterFusion 将学习过程分为两个阶段:

● 1.「知识提取阶段」:训练 Adapter 模块学习下游任务的特定知识,将知识封装在 Adapter 模块参数中。

● 2.「知识组合阶段」:将预训练模型参数与特定于任务的 Adapter 参数固定,引入新参数学习组合多个 Adapter 中的知识,提高模型在目标任务中的表现。

其中首先,对于 N 的不同的下游任务训练 N 个 Adapter 模块。然后使用 AdapterFusion 组合 N 个适配器中的知识,将预训练参数 Θ 和全部的 Adapter 参数 Φ 固定,引入新的参数 Ψ,使用 N 个下游任务的数据集训练,让 AdapterFusion 学习如何组合 N 个适配器解决特定任务。参数 Ψ 在每一层中包含 Key、Value 和 Query(上图右侧架构所示)。

在 Transformer 每一层中将前馈网络子层的输出作为 Query,Value 和 Key 的输入是各自适配器的输出,将 Query 和 Key 做点积传入 SoftMax 函数中,根据上下文学习对适配器进行加权。在给定的上下文中,AdapterFusion 学习经过训练的适配器的参数混合,根据给定的输入识别和激活最有用的适配器。「作者通过将适配器的训练分为知识提取和知识组合两部分,解决了灾难性遗忘、任务间干扰和训练不稳定的问题。Adapter 模块的添加也导致模型整体参数量的增加,降低了模型推理时的性能」

Adapter Fusion 在 Adapter 的基础上进行优化,通过将学习过程分为两阶段来提升下游任务表现。作者对全模型微调(Full)、Adapter、AdapterFusion 三种方法在各个数据集上进行和对比试验。AdapterFusion 在大多数情况下性能优于全模型微调和 Adapter,特别在 MRPC(相似性和释义任务数据集)与 RTE(识别文本蕴含数据集)中性能显著优于另外两种方法。

3、Prefix-tuning

paper:Prefix-Tuning: Optimizing Continuous Prompts for Generation(https://arxiv.org/pdf/2101.00190.pdf)

code:GitHub - XiangLi1999/PrefixTuning: Prefix-Tuning: Optimizing Continuous Prompts for Generation[1]

简介

前缀微调(prefix-tunning),用于生成任务的轻量微调。前缀微调将一个连续的特定于任务的向量序列添加到输入,称之为前缀,如下图中的红色块所示。与提示(prompt)不同的是,前缀完全由自由参数组成,与真正的 token 不对应。相比于传统的微调,前缀微调只优化了前缀。因此,我们只需要存储一个大型 Transformer 和已知任务特定前缀的副本,对每个额外任务产生非常小的开销。

图片

方法

本文考虑两个生成任务:table-to-text 和摘要任务。

图片

对于 table-to-text 任务,本文使用自回归语言模型 GPT-2,输入为 source( x )和 target( y )的拼接,模型自回归地生成:图片

图片

对于摘要任务,本文使用 BART 模型,编码器输入 source 文本 x ,解码器输入 target 黄金摘要( y ),模型预测摘要文本:图片

实现

在传统微调方法中,模型使用预训练参数进行初始化,然后用对数似然函数进行参数更新。

图片

关于前缀/提示的设计,我们可以给模型若干的字词作为提示,比如我们想让模型生成“Obama”,那我们可以在其常见的搭配前加上上下文(例如,Barack),那么 LM 就会把更高的可能性分配给想要的单词。但是对于很多生成任务来说,找到合适的离散的前缀进行优化是非常困难的,尽管它的效果是不错的。因此本文将指令优化为连续的单词嵌入,而不是通过离散的 token 进行优化,其效果将向上传播到所有 Transformer 激活层,并向右传播到后续的 token。严格来说,这比离散提示符更具表达性,后者需要匹配嵌入的真实单词。对于自回归模型,加入前缀后的模型输入表示:

图片

对于编解码器结构的模型,加入前缀后的模型输入表示:

图片

本文构造一个矩阵

图片

去存储前缀参数,该前缀是自由参数。

图片

目标函数依旧是公式(2),但是语言模型的参数是固定的,只更新前缀参数。

除此之外,作者发现直接更新前缀参数会出现不稳定的情况,甚至模型表现还有轻微的下降,因此作者对前缀参数矩阵进行重参数化:

图片

其中:图片在第二维的维数要比 图片小,然后经过一个扩大维数的 MLP,一旦训练完成,这些重参数化的参数就可以丢弃,只保留图片

4、P-tuning

paper:[2103.10385\] GPT Understands, Too[2]

code:[GitHub - THUDM/P-tuning: A novel method to tune language models. Codes and datasets for paper GPT understands, too''.](https://github.com/THUDM/P-tuning "GitHub - THUDM/P-tuning: A novel method to tune language models. Codes and datasets for paper GPT understands, too’'.")

P-tuning 是稍晚些的工作,主要针对 NLU 任务。对于 BERT 类双向语言模型采用模版(P1, x, P2, [MASK], P3),对于单向语言模型采用(P1, x, P2, [MASK]):

图片

同时加了两个改动:

1、考虑到预训练模型本身的 embedding 就比较离散了(随机初始化+梯度传回来小,最后只是小范围优化),同时 prompt 本身也是互相关联的,所以作者先用 LSTM 对 prompt 进行编码;

2、在输入上加入了 anchor,比如对于 RTE 任务,加上一个问号变成[PRE][prompt tokens][HYP]?[prompt tokens][mask]后效果会更好;

p-tuning 的效果很好,之前的 Prompt 模型都是主打小样本效果,而 P-tuning 终于在整个数据集上超越了精调的效果:

图片

5、prompt-tuning

Prompt-tuning 给每个任务定义了自己的 Prompt,拼接到数据上作为输入,同时 freeze 预训练模型进行训练,在没有加额外层的情况下,可以看到随着模型体积增大效果越来越好,最终追上了精调的效果:

图片

同时,Prompt-tuning 还提出了 Prompt-ensembling,也就是在一个 batch 里同时训练同一个任务的不同 prompt,这样相当于训练了不同「模型」,比模型集成的成本小多了。

用通俗易懂的方式讲解系列
技术交流

技术要学会分享、交流,不建议闭门造车。一个人走的很快、一堆人可以走的更远。

建立了大模型技术交流群,大模型学习资料、数据代码、技术交流提升, 均可加知识星球交流群获取,群友已超过2000人,添加时切记的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:机器学习社区,后台回复:技术交流
方式②、添加微信号:mlc2060,备注:技术交流

在这里插入图片描述

参考资料

[1]GitHub - XiangLi1999/PrefixTuning: Prefix-Tuning: Optimizing Continuous Prompts for Generation: https://github.com/XiangLi1999/PrefixTuning

[2][2103.10385] GPT Understands, Too: https://arxiv.org/abs/2103.10385

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

2025最新版优快云大礼包:《AGI大模型学习资源包》免费分享**

一、2025最新大模型学习路线

一个明确的学习路线可以帮助新人了解从哪里开始,按照什么顺序学习,以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛,没有明确的学习路线可能会导致新人感到迷茫,不知道应该专注于哪些内容。

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1级别:AI大模型时代的华丽登场

L1阶段:我们会去了解大模型的基础知识,以及大模型在各个行业的应用和分析;学习理解大模型的核心原理,关键技术,以及大模型应用场景;通过理论原理结合多个项目实战,从提示工程基础到提示工程进阶,掌握Prompt提示工程。

L2级别:AI大模型RAG应用开发工程

L2阶段是我们的AI大模型RAG应用开发工程,我们会去学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3级别:大模型Agent应用架构进阶实践

L3阶段:大模型Agent应用架构进阶实现,我们会去学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造我们自己的Agent智能体;同时还可以学习到包括Coze、Dify在内的可视化工具的使用。

L4级别:大模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,我们会更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调;并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握;而L3 L4更多的是通过项目实战来掌握大模型的应用开发,针对以上大模型的学习路线我们也整理了对应的学习视频教程,和配套的学习资料。

二、大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

三、大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

四、大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

五、大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2025最新版优快云大礼包:《AGI大模型学习资源包》免费分享

<think>首先,用户的问题是关于大型预训练模型微调方法的通俗讲解。用户说:“我想理解如何对大型预训练模型进行微调 请问大型预训练模型 微调方法 通俗讲解”。我需要用中文回答,结构清晰,帮助用户逐步解决问题。 关键点: - 回答必须使用中文。 - 结构清晰,逐步解释。 - 确保回答真实可靠。 - 引用站内内容时,在段落末尾自然地添加引用标识,如[^1]。 站内引用提供了参考: - 引用[1]:解释预训练和微调的区别,何时需要微调。 - 引用[2]:强调预训练是让模型具备能力,微调是让模型在特定任务上更擅长。 - 引用[3]:定义微调是在预训练基础上使用特定任务数据集进行优化。 - 引用[4]:提到微调是核心技术之一。 我需要基于这些,用通俗易懂的语言解释微调方法。 ### 回答结构 1. **引言**:简要介绍预训练和微调的概念。 2. **什么是微调**:通俗解释微调。 3. **为什么需要微调**:解释微调的原因。 4. **微调方法**:描述常见的微调方法。 5. **步骤**:简单说明微调的步骤。 6. **注意事项**:提到一些注意事项,如数据量、过拟合等。 7. **结尾**:总结并生成相关问题。 ### 通俗讲解要点 - 用比喻:比如,预训练就像上大学学基础知识,微调就像毕业后针对特定工作培训。 - 简单语言:避免专业术语过多。 - 结合引用:自然地融入引用内容。 ### 生成相关问题 根据指令,回答后需要生成相关问题。示例中是关于快速排序的问题,所以我应该生成关于微调的相关问题,比如: 1. 微调有哪些具体方法? 2. 如何避免微调时的过拟合? 3. 微调需要多少数据? 4. 微调与提示工程的区别? ### 引用处理 - 在回答中引用段落时,在末尾添加[^1]、[^2]等。 - 引用来自提供的文本:[^1]是引用1,[^2]是引用2,等等。 ### 完整回答框架 - **标题**:可能不需要标题,但可以有一个小标题。 - **内容**: - 开头:重述问题,表示将通俗讲解。 - 解释微调:用简单语言定义。 - 原因:为什么微调。 - 方法:常见方法如全微调、部分微调(LoRA、Adapter)。 - 步骤:简要步骤。 - 注意事项:数据、过拟合。 - 结尾:总结。 - **相关问题**:在最后添加“§§相关问题§§”,然后列出问题。 确保LaTeX格式正确:如果有数学表达式,用$...$或$$...$$,但在这个问题中可能不需要,因为主题是AI模型微调,不是数学密集的。如果有变量,如学习率,可以用$...$。 最终回答用中文。</think>### 通俗讲解大型预训练模型的微调方法 大型预训练模型的微调(Fine-tuning)听起来复杂,但其实就像给一个“万能通才”进行“专项特训”。想象一下,预训练模型(如GPT、BERT)已经在海量通用数据(如互联网文本)上学到了广泛的知识,就像一个人读完大学掌握了基础技能。但面对特定任务(如医学诊断或法律咨询),它可能不够精准——这时微调就上场了,让它“查漏补缺”,更擅长你的具体需求。下面我用简单语言一步步解释,确保你轻松理解。 #### 1. **什么是微调?** 微调就是在预训练模型的基础上,用你的特定任务数据(如1000条医学报告)进行额外训练。预训练让模型具备“通用智能”,而微调是“精修”,针对你的任务优化模型参数。例如,预训练模型可能知道“发烧”是常见症状,但微调后能识别“猫叫综合征”(一种罕见病)的医学特征[^1]。引用[3]总结得清楚:微调的目标是使模型在特定任务中精度更高,比如情感分析或文本生成[^3]。 #### 2. **为什么需要微调?** - **通用模型不够用**:预训练模型学了“通用语义”,但遇到专业领域(如金融术语或方言)时,可能表现差。好比一个懂英语的人,不学医学术语就看不懂病历[^1]。 - **提升任务性能**:如果你的任务数据有独特模式(如电商评论的情感倾向),微调能让模型“本地化”,准确率从70%飙升到90%[^2]。 - **数据适配**:预训练模型用公开数据训练,但你的数据可能有新分布(如公司内部文档),微调能适应这种差异[^4]。 简单说:微调是“锦上添花”,不是“从零造车”。引用[2]强调:预训练让模型“能做事”,微调让它“更擅长事”,但无法让模型做它根本做不到的事(比如让文本模型处理图像)[^2]。 #### 3. **微调方法有哪些?通俗版** 微调方法分两大类,核心是“调整多少参数”: - **全微调(Full Fine-tuning)**: - **做法**:用你的数据重新训练模型所有参数(就像给整个大脑“刷新”)。 - **适用场景**:数据量大(如1万条以上)、任务复杂(如法律合同分析)。 - **优点**:性能提升最大。 - **缺点**:计算资源多(需GPU集群),容易过拟合(如果数据少,模型“死记硬背”反而变差)[^1]。 - **部分微调(Parameter-Efficient Fine-tuning)**: - **做法**:只改少量参数,冻结大部分原模型(像“加个小插件”)。常见方法: - **LoRA(Low-Rank Adaptation)**:添加低秩矩阵,微调关键权重(类似“给模型装个快捷键”)。 - **Adapter**:在模型层间插入小型网络(像“夹心层”),只训练这部分。 - **提示微调(Prompt Tuning)**:调整输入提示词(如加前缀“请分析情感:”),引导模型输出。 - **适用场景**:数据少(如100条)、资源有限(普通电脑就能跑)。 - **优点**:省时省钱,避免过拟合。 - **缺点**:性能略低于全微调[^4]。 引用[1]指出:数据量少时,优先用LoRA或Adapter,避免全微调的过拟合风险[^1]。 #### 4. **微调步骤:简单四步走** 1. **准备数据**:收集任务数据集(如5000条带标签的客服对话),清洗格式(文本转模型可读)。 2. **选择方法**:根据数据量和资源选全微调或部分微调(LoRA最流行)。 3. **训练模型**: - 加载预训练模型(如Hugging Face的BERT)。 - 输入你的数据,设置学习率(如$ \text{lr} = 0.0001 $,控制“学习速度”)。 - 运行训练(几小时到几天)。 4. **评估部署**:测试模型在新数据上的表现,达标后部署到应用。 整个过程就像“教AI学徒”:先让它有基础(预训练),再针对性培训(微调)。 #### 5. **注意事项** - **数据量是关键**:数据充足(>5000条)时微调效果好;数据太少(<100条)易过拟合,建议用部分微调或数据增强[^1]。 - **避免过拟合**:用正则化技术(如Dropout)或早停(Early Stopping),监控验证集损失。 - **资源权衡**:全微调需高性能GPU;部分微调可在消费级硬件运行[^4]。 - **领域适配**:如果任务高度专业化(如生物研究),微调比提示工程(Prompt Engineering)更有效[^3]。 总之,微调是让大型模型“为你所用”的核心技术——它平衡了通用性和专业性,成本远低于从头训练新模型。引用[4]提到:结合预训练、微调、提示工程和RAG(检索增强),能构建强大AI应用[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值