万字精研:大型语言模型微调Fine-Tuning技术——14种主流方法的原理、适用场景及实践指南
LLM 训练时间和的成本太过庞大,况且个人卷训练经验极为困难,不妨从微调开始搞起。本文对正经的微调方法进行了总结,继续打怪,继续升级~提示:本文对当前常见的微调技术都进行了罗列,由于结合了论文和网络资料导致文章很长,可以先看总结部分先对概念有些印象,如果需要用到对应的微调技术再进行原理探究。
1.Fine-Tuning概览
模型微调(Fine-tuning)是指在已有的大规模预训练语言模型(如 GPT-3、GPT-4、BERT 等)基础上,针对特定任务或领域进行的二次训练过程。
-
预训练(Pre-train)模型通常在大规模无标注文本数据上进行训练,以学习语言的通用表示和规律。
-
微调则是利用针对性的小规模、有标签的数据集,调整模型参数以使其更好地适应并精准完成特定任务,如文本分类、问答、机器翻译、情感分析等。
1.1 全微调(Full Fine-tuning)
全微调是对整个预训练模型的所有参数进行全面更新和优化。在这一过程中,模型的所有层(包括底层的嵌入层、中间的隐藏层和顶层的输出层)都将参与训练,并根据新任务的数据调整各自的权重。
tip:全微调能够充分利用预训练模型的知识,并在此基础上对模型进行大幅度的调整以适应新的任务需求。适用于新任务与预训练任务相差较大或者需要模型具有极高灵活性和自适应能力的情况。
- 优点
相比于部分微调或使用特定微调技术(如 Adapter、LoRA 等),全微调无需在模型内部添加额外的模块或层,模型结构简单,易于理解和实现。全微调过程中,模型从前向后进行整体训练,可以学习到从输入到输出的完整映射关系,有利于优化全局优化目标,对于某些需要全局信息的任务(如文本生成)可能更为有效。
- 缺点
-
需要更多的计算资源(如 GPU 时间、内存)和更长的训练时间,模型越大越显著。
-
在目标任务数据量有限的情况下,全微调可能导致模型过拟合,即对训练数据学习的过于具体,从而在未见过的数据上表现不佳。需要采取正则化、早停等策略来防止过拟合。
-
对所有参数进行重新训练可能导致模型遗忘部分预训练阶段学到的通用知识,特别是当微调数据集较小且分布与预训练数据相差较大时,模型的泛化能力可能受到负面影响。
-
当需要对同一预训练模型进行多次微调以适应不同任务时,每次全微调都会完全覆盖之前的学习结果。若想保留对多个任务的适应能力,需要分别保存每个任务的微调模型副本,增加了存储成本和模型管理复杂性。
-
若微调过程中出现不良训练现象(如梯度爆炸、优化困难等),可能对预训练模型的内部结构造成破坏,影响其在其他任务上的表现。(相对罕见)
1.2 部分微调 (Partial Fine-tuning/Repurposing 或 Parameter-efficient Fine-Turning,PEFT,参数高效微调)
部分微调仅更新模型的顶层 (靠近输出层) 或一小部分中间层的参数,而保留大部分或全部底层预训练模型参数不变。这可以通过冻结部分层的训练(不让其参数更新)或采用特殊结构(如 Adapter、LoRA 等)来实现。
部分微调旨在保留预训练模型在通用语言理解上的优势,同时以较低的成本对模型进行轻度调整以适应新任务。这种方法适用于新任务与预训练任务较为相关,或者希望尽可能保留预训练模型泛化能力的情况。
- 优点
只训练模型的部分参数,通常意味着更少的参数需要更新,这往往导致更快的收敛速度和更低的训练时间成本。预训练模型的底层通常学习到通用的语言结构和模式,部分微调可以避免这些已习得的通用特征被过度修改,从而保持对基础语言结构的良好捕获能力。少量参数的调整相对不易过拟合特定任务的数据,尤其是在下游任务数据量有限的情况下,有助于保持模型的泛化性能。
当面临多个相关任务时,可以使用同一底层预训练模型,仅针对每个任务微调不同的顶层参数,实现知识的有效共享和跨任务迁移
- 缺点
如果只微调模型的顶层,可能无法充分适应某些复杂或高度专业化的下游任务,因为底层特征可能不足以捕捉到这些任务特有的细微差异。顶层参数的调整空间有限,可能难以达到与全微调相当的性能水平,特别是当预训练模型的底层特征与目标任务不完全匹配时。
部分微调可能需要更精细的超参数调整和学习率策略设计,以确保仅更新的部分参数能够有效学习到新的任务特性,同时避免底层参数的退化。对于某些任务,可能需要模型的不同层次乃至整个网络结构都能适应新任务的特点。部分微调的固定更新范围可能限制了这种灵活性。
部分微调的效果很大程度上取决于预训练模型的质量及其底层特征对目标任务的适用程度。如果预训练模型与目标任务不匹配,部分微调可能无法取得良好效果。
下表是网络上搜集的一些信息,展示了在一张 A100 GPU(80G 显存)以及 CPU 内存 64GB 以上的硬件上进行模型全量微调以及参数高效微调对于 CPU/GPU 内存的消耗情况。
部分微调技术可以粗略分为以下三大类:增加额外参数(A)、选取一部分参数更新(S)、引入重参数化(R)。而在增加额外参数这类方法中,又主要分为类适配器(Adapter-like)方法和软提示(Soft prompts)两个小类。
1.3 快速总结
-
BitFit对微调机制的一种积极探索,也很简单,通过仅调整 bias 效果就能有不错的效果,但没有具体阐述原理,就是通过猜测加实验得到的结果。同时,作者提出一个观点:微调的过程不是让模型适应另外的数据分布,而是让模型更好的应用出本身的表征能力。特点:
-
训练参数量极小(约 0.1%)。
-
在大部分任务上效果会差于 LoRA、Adapter 等方法。
-
Prefix Tuning
在每一个 Transformer 层都带上一些 virtual token 作为前缀,以适应不同的任务。特点:
-
前缀 Token 会占用序列长度,有一定的额外计算开销。
-
Prefix Tuning 的线性插值是比较复杂的。
-
Prompt Tuning该方法可以看着是 Prefix Tuning 的简化版本,针对不同的任务,仅在输入层引入 virtual token 形式的软提示(soft prompt)。特点:* 相对于 Prefix Tuning,参与训练的参数量和改变的参数量更小,更节省显存。
-
对一些简单的 NLU 任务还不错,但对硬序列标记任务(即序列标注)表现欠佳。
-
P-Tuning
将 Prompt 转换为可以学习的 Embedding 层,并用 MLP+LSTM 的方式来对 Prompt Embedding 进行一层处理。相比 Prefix Tuning,仅在输入层加入的可微的 virtual token;另外,virtual token 的位置也不一定是前缀,插入的位置是可选的。特点:
-
引入一个 prompt encoder(由一个双向的 LSTM + 两层 MLP 组成)来建模 virtual token 的相互依赖会收敛更快,效果更好。
-
P-Tuning v2
该方法在每一个 Transformer 层都加入了 prompt token 作为输入,引入多任务学习,针对不同任务采用不同的提示长度。并且回归传统的分类标签范式,而不是映射器。特点:
-
解决了 Prompt Tuning 无法在小模型上有效提升的问题。
-
移除了对模型效果改进较小的重参数化的编码器(如:Prefix Tuning 中的 MLP、P-Tuning 中的 LSTM)。
-
对于一些复杂的硬序列标记任务(即序列标注)取得了不错的效果。
-
Adapter Tuning该方法设计了 Adapter 结构,并将其嵌入 Transformer 的结构里面,针对每一个 Transformer 层,增加了两个 Adapter 结构,在训练时,固定住原来预训练模型的参数不变,只对新增的 Adapter 结构和 Layer Norm 层进行微调。特点:
-
通过在 Transformer 层中嵌入 Adapter 结构,在推理时会额外增加推理时长。
-
AdapterFusion
一种融合多任务信息的 Adapter 的变体,在 Adapter 的基础上进行优化,通过将学习过程分为两阶段来提升下游任务表现。
-
AdapterDrop该方法在不影响任务性能的情况下,对 Adapter 动态高效的移除,尽可能的减少模型的参数量,提高模型在反向传播(训练)和正向传播(推理)时的效率。特点:
-
通过从较低的 Transformer 层删除可变数量的 Adaper 来提升推理速度。当对多个任务执行推理时,动态地减少了运行时的计算开销,并在很大程度上保持了任务性能。
-
LoRA该方法通过低秩分解来模拟参数的改变量,从而以极小的参数量来实现大模型的间接训练。特点:
-
将 BA 加到 W 上可以消除推理延迟。
-
可以通过可插拔的形式切换到不同的任务。
-
设计的比较好,简单且效果好。
-
AdaLoRA
对 LoRA 的一种改进,它根据重要性评分动态分配参数预算给权重矩阵,将关键的增量矩阵分配高秩以捕捉更精细和任务特定的信息,而将较不重要的矩阵的秩降低,以防止过拟合并节省计算预算。
-
QLoRA使用一种新颖的高精度技术将预训练模型量化为 4 bit,然后添加一小组可学习的低秩适配器权重,这些权重通过量化权重的反向传播梯度进行微调。特点:
-
使用 QLoRA 微调模型,可以显著降低对于显存的要求。同时,模型训练的速度会慢于 LoRA。
-
MAM Adapter一种在 Adapter、Prefix Tuning 和 LoRA 之间建立联系的统一方法。最终的模型 MAM Adapter 是用于 FFN 的并行 Adapter 和 软提示的组合。特点:
-
整体上来说,最终的模型 MAM Adapter 效果会优于单个高效微调方法。
-
UniPELT一种将不同的 PELT 方法 LoRA、Prefix Tuning 和 Adapter 作为子模块,并通过门控机制学习激活最适合当前数据或任务的方法。特点:
-
相对于 LoRA,BitFit,Prefix-tuning,训练的参数量更大;同时,推理更耗时;并且,输入会占用额外的序列长度。
-
多种 PELT 方法的混合涉及 PLM 的不同部分对模型有效性和鲁棒性都有好处。
下面分别对部分微调技术进行解析(每种微调技术附加了相对应的论文,方便深入了解):
2. BitFit
BitFit(论文:BitFit: Simple Parameter-efficient Fine-tuning or Transformer-based Masked Language-models)是一种稀疏的微调方法,它训练时只更新 bias 的参数或者部分 bias 参数。涉及到的 bias 参数有 attention 模块中计算 query,key,value 跟合并多个 attention 结果时涉及到的 bias,MLP(多层感知机)层中的 bias,Layernormalization 层的 bias 参数。对于 Transformer 模型而言,可以理解为冻结大部分 transformer-encoder 参数,只更新 bias 参数跟特定任务的分类层参数。
在 Bert-Base/Bert-Large 这种模型里,bias 参数仅占模型全部参数量的 0.08%~0.09%。但是通过在 Bert-Large 模型上基于 GLUE 数据集进行了 BitFit、Adapter 和 Diff-Pruning 的效果对比发现,BitFit 在参数量远小于 Adapter、Diff-Pruning 的情况下,效果与 Adapter、Diff-Pruning 想当,甚至在某些任务上略优于 Adapter、Diff-Pruning。
通过实验结果可以看出,BitFit 微调结果相对全量参数微调而言, 只更新极少量参数的情况下,在多个数据集上都达到了不错的效果,虽不及全量参数微调,但是远超固定全部模型参数的 Frozen 方式。
^Mapping the HuggingFace’s BertLayer bias parameters names to BitFit paper bias notation.^通过对比 BitFit 训练前后的参数,发现很多 bias 参数并没有太多变化(例如:跟计算 key 所涉及到的 bias 参数)。发现计算 query 和将特征维度从 N 放大到 4N 的 FFN 层(intermediate)的 bias 参数变化最为明显,只更新这两类 bias 参数也能达到不错的效果,反之,固定其中任何一者,模型的效果都有较大损失。
^Fine-tuning using a subset of the bias parameters.Reported results are for the BERT(BASE) model.
3.Prefix Tuning
在 Prefix Tuning 之前的工作主要是人工设计离散的模版或者自动化搜索离散的模版。对于人工设计的模版,模版的变化对模型最终的性能特别敏感,加一个词、少一个词或者变动位置都会造成比较大的变化。而对于自动化搜索模版,成本也比较高;同时,以前这种离散化的 token 搜索出来的结果可能并不是最优的。除此之外,传统的微调范式利用预训练模型去对不同的下游任务进行微调,对每个任务都要保存一份微调后的模型权重,一方面微调整个模型耗时长;另一方面也会占很多存储空间。
基于上述两点,Prefix Tuning 提出固定预训练 LM,为 LM 添加可训练、任务特定的前缀,这样就可以为不同任务保存不同的前缀,微调成本也小;同时,这种 Prefix 实际就是连续可微的 Virtual Token(Soft Prompt/Continuous Prompt),相比离散的 Token,更好优化,效果更好。
- 原理
Prefix Tuning(论文:Prefix-Tuning: Optimizing Continuous Prompts for Generation),在输入 token 之前构造一段任务相关的 virtual tokens 作为 Prefix,然后训练的时候只更新 Prefix 部分的参数,而 PLM(预训练模型)中的其他部分参数固定。针对不同的模型结构,需要构造不同的 Prefix。
-
针对自回归架构模型
:在句子前面添加前缀,得到 z = [PREFIX; x; y],合适的上文能够在固定 LM 的情况下去引导生成下文(比如:GPT3 的上下文学习)。 -
针对编码器 - 解码器架构模型
:Encoder 和 Decoder 都增加了前缀,得到 z = [PREFIX; x; PREFIX0; y]。Encoder 端增加前缀是为了引导输入部分的编码,Decoder 端增加前缀是为了引导后续 token 的生成。
该方法其实和构造 Prompt 类似,只是 Prompt 是人为构造的 “显式” 的提示,并且无法更新参数,而 Prefix 则是可以学习的 “隐式” 的提示。
同时,为了防止直接更新 Prefix 的参数导致训练不稳定和性能下降的情况,在 Prefix 层前面加了 MLP 结构,训练完成后,只保留 Prefix 的参数。
除此之外,通过消融实验证实,只调整 embedding 层的表现力不够,将导致性能显著下降,因此,在每层都加了 prompt 的参数,改动较大。
有实验也对比了位置对于生成效果的影响,Prefix-tuning 也是要略优于 Infix-tuning 的。其中,Prefix-tuning 形式为 [PREFIX; x; y],Infix-tuning 形式为 [x; INFIX; y]。所以我们只考虑使用 prefix 就可以了。
- 再举个具象化🌰:
假设我们有一个大型的预训练语言模型,比如 BERT,它已经在大量的文本数据上进行了训练,学会了语言的很多基本规则和模式。现在,我们想要将这个模型微调到一个新的任务上,比如情感分析,即判断一段文本是正面情绪还是负面情绪。
在传统的微调方法中,我们可能会在 BERT 模型的顶部添加一个或多个全连接层,然后在整个模型上进行反向传播,更新所有的权重以适应新任务。这可能会导致大量的计算资源消耗,并且如果新任务的数据集不够大,还可能导致过拟合。
使用 Prefix Tuning 的方法,我们可以这样做:
-
添加前缀:对于 BERT 模型中的每个参数(比如,每个自注意力头的权重矩阵),我们在它们前面添加一个小的可学习向量,这个向量可以看作是参数的 “前缀”。
-
训练前缀:在训练过程中,我们只更新这些前缀向量,而不更新原始的 BERT 模型参数。这样,原始模型的知识得以保留,只有这些前缀向量会根据新任务进行调整。
-
适应新任务:通过学习这些前缀向量,模型能够适应情感分析任务的特点,比如识别正面或负面情绪的关键词汇和模式。
-
减少计算资源:由于我们只更新了一小部分参数(即前缀向量),所以相比于更新整个模型,Prefix Tuning 大大减少了所需的计算资源。
-
避免过拟合:由于原始模型参数保持不变,Prefix Tuning 有助于保持模型的泛化能力,避免过拟合到新任务的特定数据上。6.灵活性:这种方法可以很容易地应用到不同的任务和模型上,只需要在参数前添加前缀并进行训练即可。
4. Prompt Tuning
离散的 prompts(指人工设计 prompts 提示语加入到模型)方法,成本比较高,并且效果不太好。通过反向传播更新参数来学习 prompts(将 prompt 工作交给机器设计),而不是人工设计 prompts;同时冻结模型原始权重,只训练 prompts 参数,训练完以后,用同一个模型可以做多任务推理。
- 原理
Prompt Tuning(论文:The Power of Scale for Parameter-Efficient Prompt Tuning),该方法可以看作是 Prefix Tuning 的简化版本,它给每个任务定义了自己的 Prompt,然后拼接到数据上作为输入,但只在输入层加入 prompt tokens,并且不需要加入 MLP 进行调整来解决难训练的问题。
随着预训练模型参数量的增加,Prompt Tuning 的方法会逼近全参数微调的结果。
tip:Prompt Tuning 还提出了 Prompt Ensembling,在一个批次(Batch)里同时训练同一个任务的不同 prompt(即采用多种不同方式询问同一个问题),这样相当于训练了不同模型,比模型集成的成本小多了。
除此之外,Prompt Tuning 论文中还探讨了 Prompt token 的初始化方法和长度对于模型性能的影响。通过消融实验结果发现,与随机初始化和使用样本词汇表初始化相比,Prompt Tuning 采用类标签初始化模型的效果更好。不过随着模型参数规模的提升,这种 gap 最终会消失。
Prompt token 的长度在 20 左右时的表现已经不错(超过 20 之后,提升 Prompt token 长度,对模型的性能提升不明显了),同样的,这个 gap 也会随着模型参数规模的提升而减小(即对于超大规模模型而言,即使 Prompt token 长度很短,对性能也不会有太大的影响)。
^Prompt length&Prompt initialization^
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈
![](https://img-blog.csdnimg.cn/img_convert/9106a0d7f28e6255807f197c86e845c5.jpeg)
5.P-Tuning
P-Tuning 的提出主要是为了解决一个问题:大模型的 Prompt 构造方式严重影响下游任务的效果。比如:GPT-3 采用人工构造的模版来做上下文学习(in context learning),但人工设计的模版的变化特别敏感,加一个词或者少一个词,或者变动位置都会造成比较大的变化。
同时,近来的自动化搜索模版工作成本也比较高,以前这种离散化的 token 的搜索出来的结果可能并不是最优的,导致性能不稳定。基于此,P-Tuning 出现了,设计了一种连续可微的 virtual token(同 Prefix-Tuning 类似)。
- 原理
P-Tuning(论文:GPT Understands, Too),该方法将 Prompt 转换为可以学习的 Embedding 层,并用 MLP+LSTM 的方式来对 Prompt Embedding 进行一层处理。
相比 Prefix Tuning,P-Tuning 加入的可微的 virtual token,但仅限于输入层,没有在每一层都加;另外,virtual token 的位置也不一定是前缀,插入的位置是可选的。这里的出发点实际是把传统人工设计模版中的真实 token 替换成可微的 virtual token。
经过预训练的 LM 的词嵌入已经变得高度离散,如果随机初始化 virtual token,容易优化到局部最优值,而这些 virtual token 理论是应该有相关关联的。因此,作者通过实验发现用一个 prompt encoder 来编码会收敛更快,效果更好。即用一个 LSTM+MLP 去编码这些 virtual token 以后,再输入到模型。
从对比实验证实看出,P-Tuning 获得了与全参数一致的效果。甚至在某些任务上优于全参数微调。
通过实验可以发现,相同参数规模,如果进行全参数微调,Bert 的在 NLU 任务上的效果,超过 GPT 很多;但是在 P-Tuning 下,GPT 可以取得超越 Bert 的效果。
6.P-Tuning v2
Prompt Tuning 和 P-Tuning 等方法存在两个主要的问题:
-
第一,缺乏模型参数规模和任务通用性。
-
缺乏规模通用性
:Prompt Tuning 论文中表明当模型规模超过 100 亿个参数时,提示优化可以与全量微调相媲美。但是对于那些较小的模型(从 100M 到 1B),提示优化和全量微调的表现有很大差异,这大大限制了提示优化的适用性。 -
缺乏任务普遍性
:尽管 Prompt Tuning 和 P-tuning 在一些 NLU 基准测试中表现出优势,但提示调优对硬序列标记任务(即序列标注)的有效性尚未得到验证。 -
第二,缺少深度提示优化,在 Prompt Tuning 和 P-tuning 中,连续提示只被插入 transformer 第一层的输入 embedding 序列中,在接下来的 transformer 层中,插入连续提示的位置的 embedding 是由之前的 transformer 层计算出来的,这可能导致两个可能的优化挑战。
-
由于序列长度的限制,可调参数的数量是有限的。
-
输入 embedding 对模型预测只有相对间接的影响。考虑到这些问题,作者提出了 Ptuning v2,它利用深度提示优化(如:Prefix Tuning),对 Prompt Tuning 和 P-Tuning 进行改进,作为一个跨规模和 NLU 任务的通用解决方案。
-
原理
P-Tuning v2(论文:P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks),该方法在每一层都加入了 Prompts tokens 作为输入,而不是仅仅加在输入层,这带来两个方面的好处:
-
更多可学习的参数(从 P-tuning 和 Prompt Tuning 的 0.01% 增加到 0.1%-3%),同时也足够参数高效。
-
加入到更深层结构中的 Prompt 能给模型预测带来更直接的影响。
具体做法基本同 Prefix Tuning,可以看作是将文本生成的 Prefix Tuning 技术适配到 NLU 任务中,然后做了一些改进:
-
移除重参数化的编码器
。以前的方法利用重参数化功能来提高训练速度和鲁棒性(如:Prefix Tuning 中的 MLP、P-Tuning 中的 LSTM))。在 P-tuning v2 中,作者发现重参数化的改进很小,尤其是对于较小的模型,同时还会影响模型的表现。 -
针对不同任务采用不同的提示长度
。提示长度在提示优化方法的超参数搜索中起着核心作用。在实验中,我们发现不同的理解任务通常用不同的提示长度来实现其最佳性能,这与 Prefix-Tuning 中的发现一致,不同的文本生成任务可能有不同的最佳提示长度。 -
引入多任务学习
。先在多任务的 Prompt 上进行预训练,然后再适配下游任务。多任务学习对我们的方法来说是可选的,但可能是相当有帮助的。一方面,连续提示的随机惯性给优化带来了困难,这可以通过更多的训练数据或与任务相关的无监督预训练来缓解;另一方面,连续提示是跨任务和数据集的特定任务知识的完美载体。我们的实验表明,在一些困难的序列任务中,多任务学习可以作为 P-tuning v2 的有益补充。 -
回归传统的分类标签范式
,而不是映射器。标签词映射器(Label Word Verbalizer)一直是提示优化的核心组成部分,它将 one-hot 类标签变成有意义的词,以利用预训练语言模型头。尽管它在 few-shot 设置中具有潜在的必要性,但在全数据监督设置中,Verbalizer 并不是必须的。它阻碍了提示调优在我们需要无实际意义的标签和句子嵌入的场景中的应用。因此,P-Tuning v2 回归传统的 CLS 标签分类范式,采用随机初始化的分类头(Classification Head)应用于 tokens 之上,以增强通用性,可以适配到序列标注任务。
论文中展示了 P-tuning v2 在不同模型规模下的表现。对于简单的 NLU 任务,如 SST-2(单句分类),Prompt Tuning 和 P-Tuning 在较小的规模下没有显示出明显的劣势。但是当涉及到复杂的挑战时,如:自然语言推理(RTE)和多选题回答(BoolQ),它们的性能会非常差。相反,P-Tuning v2 在较小规模的所有任务中都与微调的性能相匹配。并且,P-tuning v2 在 RTE 中的表现明显优于微调,特别是在 BERT 中。
上面讨论了 P-Tuning v2 无论何种规模都可以与微调相媲美。然而,GLUE 和 SuperGLUE 的大多数任务都是相对简单的 NLU 问题。为了评估 P-Tuning v2 在一些困难的 NLU 挑战中的能力,作者选择了三个典型的序列标注任务(名称实体识别、抽取式问答(QA)和语义角色标签(SRL)),共八个数据集。我们观察到 P-Tuning v2 在所有任务上都能与全量微调相媲美。
论文还通过消融实验研究了不同任务上 Prompt Length 的影响:
-
针对简单任务:如情感分析,较短的 Prompt(~20)即可取得不错的效果。
-
针对复杂任务:如阅读理解,需要更长的 Prompt(~100)。
P-Tuning v2 是一种在不同规模和任务中都可与微调相媲美的提示方法。P-Tuning v2 对从 330M 到 10B 的模型显示出一致的改进,并在序列标注等困难的序列任务上以很大的幅度超过了 Prompt Tuning 和 P-Tuning。P-Tuning v2 可以成为微调的综合替代方案和未来工作的基线(Baseline)。
7. Adapter Tuning
核心思想是通过引入一些额外的模块(适配器)来适配下游任务。Adapter Tuning 的 Adapter 在预训练模型每层中插入用于下游任务的参数(针对每个下游任务,仅增加 3.6% 的参数),在微调时将模型主体冻结,仅训练特定于任务的参数,从而减少了训练时的算力开销。
- 原理
Adapter Tuning(论文:Parameter-Efficient Transfer Learning for NLP),该方法设计了 Adapter 结构,并将其嵌入 Transformer 的结构里面,针对每一个 Transformer 层,增加了两个 Adapter 结构 (分别是多头注意力的投影之后和第二个 feed-forward 层之后),在训练时,固定住原来预训练模型的参数不变,只对新增的 Adapter 结构和 Layer Norm 层进行微调,从而保证了训练的高效性。
每当出现新的下游任务,通过添加 Adapter 模块来产生一个易于扩展的下游模型,从而避免全量微调与灾难性遗忘的问题。
- Adapter 模块
每个 Adapter 模块主要由两个前馈(Feedforward)子层组成,第一个前馈子层(down-project)将 Transformer 块的输出作为输入,将原始输入维度 d(高维特征)投影到 m(低维特征),通过控制 m 的大小来限制 Adapter 模块的参数量,通常情况下,m<<d。然后,中间通过一个非线形层。在输出阶段,通过第二个前馈子层(up-project)还原输入维度,将 m(低维特征)重新映射回 d(原来的高维特征),作为 Adapter 模块的输出。同时,通过一个 skip connection 来将 Adapter 的输入重新加到最终的输出中去,这样可以保证,即便 Adapter 一开始的参数初始化接近 0,Adapter 也由于 skip connection 的设置而接近于一个恒等映射,从而确保训练的有效性。
通过实验发现,只训练少量参数的 Adapter 方法的效果可以媲美全量微调,这也验证了 Adapter 是一种高效的参数训练方法,可以快速将语言模型的能力迁移到下游任务中去。同时,可以看到,Adapter 最佳的中间层特征维度 m 视数据集的大小而异,如:MINI 数据集为 256,最小的 RTE 数据集为 8。如果始终将维度限制在 64,将导致平均准确率略微下降。
结论:Adapter 通过引入 0.5%~5% 的模型参数可以达到不落后全量微调模型 1% 的性能。
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈
![](https://img-blog.csdnimg.cn/img_convert/9106a0d7f28e6255807f197c86e845c5.jpeg)
8.AdapterFusion
为了整合来自多个任务的知识,传统的两个方法是按一定顺序微调(Sequential fine-tuning)或者多任务学习(multi-task learning)。前者的一大问题是需要先验知识来确定顺序,且模型容易遗忘之前任务学到的知识,后者的问题是不同的任务会互相影响,也难以平衡数据集大小差距很大的任务。
而之前的工作,Adapter Tuning 的一个优势就是不用更新预训练模型的参数,而是插入比较少的新的参数就可以很好地学会一个任务。此时,Adapter 的参数某种程度上就表达了解决这个任务需要的知识。作者受此启发,如果想要把来自多个任务的知识结合起来,是否可以考虑把多个任务的 Adapter 的参数结合起来?基于此,作者提出了 AdapterFusion,这是一种新的两阶段学习算法,可以利用来自多个任务的知识。
- 原理
Adapter Fusion(论文:AdapterFusion:Non-Destructive Task Composition for Transfer Learning),一种融合多任务信息的 Adapter 的变体,在 Adapter 的基础上进行优化,通过将学习过程分为两阶段来提升下游任务表现。
-
知识提取阶段
:在不同任务下引入各自的 Adapter 模块,用于学习特定任务的信息。 -
知识组合阶段
:将预训练模型参数与特定于任务的 Adapter 参数固定,引入新参数(AdapterFusion)来学习组合多个 Adapter 中的知识,以提高模型在目标任务中的表现。
对于第一阶段,有两种训练方式,分别如下:
-
Single-Task Adapters(ST-A)
:对于 N 个任务,模型都分别独立进行优化,各个任务之间互不干扰,互不影响。 -
Multi-Task Adapters(MT-A):N 个任务通过多任务学习的方式,进行联合优化。对于第二阶段,为了避免通过引入特定任务参数而带来的灾难性遗忘问题,AdapterFusion 提出了一个共享多任务信息的结构。针对特定任务 m,AdapterFusion 联合了第一阶段训练得到的 N 个 Adapter 信息。固定语言模型的参数跟 N 个 Adapter 的参数,新引入 AdapterFusion 的参数,目标函数也是学习针对特定任务 m 的 AdapterFusion 的参数。
-
AdapterFusion 结构:
AdapterFusion 具体结构就是一个 Attention,它的参数包括 query,key, value 的矩阵参数,在 transformer 的每一层都存在,它的 query 是 transformer 每个子模块的输出结果,它的 key 跟 value 则是 N 个任务的 adapter 的输出。通过 AdapterFusion,模型可以为不同的任务对应的 adapter 分配不同的权重,聚合 N 个任务的信息,从而为特定任务输出更合适的结果。
通过对全量微调、Adapter Tuning、AdapterFusion 这三种方法在各个数据集上进行对比实验可以看出,AdapterFusion 在大多数情况下性能优于全模型微调和 Adapter Tuning,特别在 MRPC 与 RTE 数据集中,性能显著优于另外两种方法。
同时,还可以看到第一阶段采用 ST-A + 第二阶段 AdapterFusion 是最有效的方法,在多个数据集上的平均效果达到了最佳。而第一阶段采用 MT-A + 第二阶段 AdapterFusion 没有取得最佳的效果,在于第一阶段其实已经联合了多个任务的信息了,所以 AdapterFusion 的作用没有那么明显,同时 MT-A 这种多任务联合训练的方式需要投入较多的成本,并不算一种高效的参数更新方式。另外,ST-A 的方法在多个任务上都有提升,但是 MT-A 的方法则不然,这也表明了 MT-A 虽然可以学习到一个通用的表征,但是由于不同任务的差异性,很难保证在所有任务上都取得最优的效果。
总之,通过将适配器的训练分为知识提取和知识组合两部分,解决了灾难性遗忘、任务间干扰和训练不稳定的问题。但是,Adapter 模块的添加也导致模型整体参数量的增加,降低了模型推理时的性能。
9. AdapterDrop
近年来 Adapter 已被证明可以很好地用于机器翻译、跨语言迁移、社区问答和迁移学习的任务组合。尽管它们最近很受欢迎,但 Adapter 的计算效率尚未在参数效率之外得到探索。作者通过对 Adapter 的计算效率进行分析,发现与全量微调相比,Adapter 在训练时快 60%,但是在推理时慢 4%-6%。基于此,作者提出了 AdapterDrop 方法缓解该问题。
- 技术原理
AdapterDrop(论文:AdapterDrop: On the Efficiency of Adapters in Transformers),在不影响任务性能的情况下,对 Adapter 动态高效的移除,尽可能的减少模型的参数量,提高模型在反向传播(训练)和正向传播(推理)时的效率。
实验表明,从较低的 Transformer 层中删除 Adapter 可以显着提高多任务设置中的推理速度。例如,将前五个 Transformer 层中的 Adapter 丢弃,在对 8 个任务进行推理时,速度提高了 39%。并且即使有多个丢弃层,AdapterDrop 也能保持良好的结果。
除此之外,作者还研究了对 AdapterFusion 中的 Adapter 进行剪枝后的效果。
通过实验表明可以移除 AdapterFusion 中的大多数 Adapter 而不影响任务性能。使用剩余的两个 Adapter,实现了与具有八个 Adapter 的完整 AdapterFusion 模型相当的结果,并将推理速度提高了 68%。
因此,作者建议在实际部署这些模型之前执行 AdaperFusion 剪枝。这是一种简单而有效的技术,即使在完全保持性能的情况下也能实现效率提升。总之,AdapterDrop 通过从较低的 Transformer 层删除可变数量的 Adaper 来提升推理速度。当对多个任务执行推理时,动态地减少了运行时的计算开销,并在很大程度上保持了任务性能。
10.LoRA
神经网络包含很多全连接层,其借助于矩阵乘法得以实现,然而,很多全连接层的权重矩阵都是满秩的。当针对特定任务进行微调后,模型中权重矩阵其实具有很低的本征秩(intrinsic rank),因此,论文的作者认为权重更新的那部分参数矩阵尽管随机投影到较小的子空间,仍然可以有效的学习,可以理解为针对特定的下游任务这些权重矩阵就不要求满秩。
- 原理
LoRA(论文:LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS),该方法的核心思想就是通过低秩分解来模拟参数的改变量,从而以极小的参数量来实现大模型的间接训练。在涉及到矩阵相乘的模块,在原始的 PLM 旁边增加一个新的通路,通过前后两个矩阵 A,B 相乘,第一个矩阵 A 负责降维,第二个矩阵 B 负责升维,中间层维度为 r,从而来模拟所谓的本征秩(intrinsic rank)。
可训练层维度和预训练模型层维度一致为 d,先将维度 d 通过全连接层降维至 r,再从 r 通过全连接层映射回 d 维度,其中,r<<d,r 是矩阵的秩,这样矩阵计算就从 d x d 变为 d x r + r x d,参数量减少很多。
在下游任务训练时,固定模型的其他参数,只优化新增的两个矩阵的权重参数,将 PLM 跟新增的通路两部分的结果加起来作为最终的结果(两边通路的输入跟输出维度是一致的),即 h=Wx+BAx。第一个矩阵的 A 的权重参数会通过高斯函数初始化,而第二个矩阵的 B 的权重参数则会初始化为零矩阵,这样能保证训练开始时新增的通路 BA=0 从而对模型结果没有影响。
在推理时,将左右两部分的结果加到一起即可,h=Wx+BAx=(W+BA)x,所以只要将训练完成的矩阵乘积 BA 跟原本的权重矩阵 W 加到一起作为新权重参数替换原本 PLM 的 W 即可,对于推理来说,不会增加额外的计算资源。此外,Transformer 的权重矩阵包括 Attention 模块里用于计算 query, key, value 的 Wq,Wk,Wv 以及多头 attention 的 Wo, 以及 MLP 层的权重矩阵,LoRA 只应用于 Attention 模块中的 4 种权重矩阵,而且通过消融实验发现同时调整 Wq 和 Wv 会产生最佳结果。实验还发现,保证权重矩阵的种类的数量比起增加隐藏层维度 r 更为重要,增加 r 并不一定能覆盖更加有意义的子空间。那么关于秩的选择,通常情况下,rank 为 4,8,16 即可。
通过实验也发现,在众多数据集上 LoRA 在只训练极少量参数的前提下,最终在性能上能和全量微调匹配,甚至在某些任务上优于全量微调。
11.AdaLoRA
在 NLP 领域,对于下游任务进行大型预训练语言模型的微调已经成为一种重要的做法。一般而言,我们会采用对原有的预训练模型进行全量微调的方法来适配下游任务,但这种方法存在两个问题。
-
训练阶段。对于预训练模型进行微调的时候,为了更新权重参数,需要大量的显存来存储参数的梯度和优化器信息,在当今预训练模型的参数变得越来越大的情况下,针对下游任务微调门槛变得越来越高。
-
推理阶段。由于我们训练的时候是对于模型参数进行全量的更新,所以多个下游任务需要为每个任务维护一个大型模型的独立副本,这样就导致我们在实际应用的时候浪费了不必要的存储。
为了解决这些问题,研究者提出了两个主要研究方向,以减少微调参数的数量,同时保持甚至提高预训练语言模型的性能。
-
方向一:添加小型网络模块
:将小型网络模块添加到 PLMs 中,保持基础模型保持不变的情况下仅针对每个任务微调这些模块,可以用于所有任务。这样,只需引入和更新少量任务特定的参数,就可以适配下游的任务,大大提高了预训练模型的实用性。如:Adapter tuning、Prefix tuning、Prompt Tuning 等,这类方法虽然大大减少了内存消耗。但是这些方法存在一些问题,比如:Adapter tuning 引入了推理延时;Prefix tuning 或 Prompt tuning 直接优化 Prefix 和 Prompt 是非单调的,比较难收敛,并且消耗了输入的 token。 -
方向二:下游任务增量更新
:对预训练权重的增量更新进行建模,而无需修改模型架构,即 W=W0+△W。比如:Diff pruning、LoRA 等, 此类方法可以达到与完全微调几乎相当的性能,但是也存在一些问题,比如:Diff pruning 需要底层实现来加速非结构化稀疏矩阵的计算,不能直接使用现有的框架,训练过程中需要存储完整的∆W 矩阵,相比于全量微调并没有降低计算成本。LoRA 则需要预先指定每个增量矩阵的本征秩 r 相同,忽略了在微调预训练模型时,权重矩阵的重要性在不同模块和层之间存在显著差异,并且只训练了 Attention,没有训练 FFN,事实上 FFN 更重要。
基于以上问题进行总结:
-
第一,我们不能预先指定矩阵的秩,需要动态更新增量矩阵的 R,因为权重矩阵的重要性在不同模块和层之间存在显著差异。
-
第二,需要找到更加重要的矩阵,分配更多的参数,裁剪不重要的矩阵。找到重要的矩阵,可以提升模型效果;而裁剪不重要的矩阵,可以降低参数计算量,降低模型效果差的风险。为了弥补这一差距,作者提出了 AdaLoRA,它根据权重矩阵的重要性得分,在权重矩阵之间自适应地分配参数预算。
-
原理
AdaLoRA(论文:ADAPTIVE BUDGET ALLOCATION FOR PARAMETEREFFICIENT FINE-TUNING),是对 LoRA 的一种改进,它根据重要性评分动态分配参数预算给权重矩阵。具体做法如下:
-
调整增量矩分配
。AdaLoRA 将关键的增量矩阵分配高秩以捕捉更精细和任务特定的信息,而将较不重要的矩阵的秩降低,以防止过拟合并节省计算预算。 -
以奇异值分解的形式对增量更新进行参数化,并根据重要性指标裁剪掉不重要的奇异值,同时保留奇异向量
。由于对一个大矩阵进行精确 SVD 分解的计算消耗非常大,这种方法通过减少它们的参数预算来加速计算,同时,保留未来恢复的可能性并稳定训练。
- 在训练损失中添加了额外的惩罚项,以规范奇异矩阵 P 和 Q 的正交性,从而避免 SVD 的大量计算并稳定训练。通过实验证明,AdaLoRA 实现了在所有预算、所有数据集上与现有方法相比,性能更好或相当的水平。例如,当参数预算为 0.3M 时,AdaLoRA 在 RTE 数据集上,比表现最佳的基线(Baseline)高 1.8%。
12. QLoRA
微调大型语言模型 (LLM) 是提高其性能以及添加所需或删除不需要的行为的一种非常有效的方法。然而,微调非常大的模型非常昂贵;以 LLaMA 65B 参数模型为例,常规的 16 bit 微调需要超过 780 GB 的 GPU 内存。虽然最近的量化方法可以减少 LLM 的内存占用,但此类技术仅适用于推理场景。基于此,作者提出了 QLoRA,并首次证明了可以在不降低任何性能的情况下微调量化为 4 bit 的模型。
- 原理
QLoRA(论文:QLORA: Efficient Finetuning of Quantized LLMs),使用一种新颖的高精度技术将预训练模型量化为 4 bit,然后添加一小组可学习的低秩适配器权重,这些权重通过量化权重的反向传播梯度进行微调。QLORA 有一种低精度存储数据类型(4 bit),还有一种计算数据类型(BFloat16)。实际上,这意味着无论何时使用 QLoRA 权重张量,我们都会将张量反量化为 BFloat16,然后执行 16 位矩阵乘法。QLoRA 提出了两种技术实现高保真 4 bit 微调——4 bit NormalFloat(NF4) 量化和双量化。此外,还引入了分页优化器,以防止梯度检查点期间的内存峰值,从而导致内存不足的错误,这些错误在过去使得大型模型难以在单台机器上进行微调。具体说明如下:
-
4bit NormalFloat(NF4)
:对于正态分布权重而言,一种信息理论上最优的新数据类型,该数据类型对正态分布数据产生比 4 bit 整数和 4bit 浮点数更好的实证结果。 -
双量化
:对第一次量化后的那些常量再进行一次量化,减少存储空间。 -
分页优化器
:使用 NVIDIA 统一内存特性,该特性可以在在 GPU 偶尔 OOM 的情况下,进行 CPU 和 GPU 之间自动分页到分页的传输,以实现无错误的 GPU 处理。该功能的工作方式类似于 CPU 内存和磁盘之间的常规内存分页。使用此功能为优化器状态(Optimizer)分配分页内存,然后在 GPU 内存不足时将其自
动卸载到 CPU 内存,并在优化器更新步骤需要时将其加载回 GPU 内存。
实验证明,无论是使用 16bit、8bit 还是 4bit 的适配器方法,都能够复制 16bit 全参数微调的基准性能。这说明,尽管量化过程中会存在性能损失,但通过适配器微调,完全可以恢复这些性能。实验还比较了不同的 4bit 数据类型对效果(zero-shot 均值)的影响,其中,NFloat 显著优于 Float,而 NFloat + DQ 略微优于 NFloat,虽然 DQ 对精度提升不大,但是对于内存控制效果更好。
除此之外,论文中还对不同大小模型、不同数据类型、在 MMLU 数据集上的微调效果进行了对比。使用 QLoRA(NFloat4 + DQ)可以和 Lora(BFloat16) 持平,同时, 使用 QLORA( FP4)的模型效果落后于前两者一个百分点。
作者在实验中也发现了一些有趣的点,比如:指令调优虽然效果比较好,但只适用于指令相关的任务,在聊天机器人上效果并不佳,而聊天机器人更适合用 Open Assistant 数据集去进行微调。通过指令类数据集的调优更像是提升大模型的推理能力,并不是为聊天而生的。总之,QLoRA 的出现给大家带来一些新的思考,不管是微调还是部署大模型,之后都会变得更加容易。每个人都可以快速利用自己的私有数据进行微调;同时,又能轻松的部署大模型进行推理。
13.MAM Adapter
近年来提出了多种参数高效的迁移学习方法,这些方法仅微调少量(额外)参数即可获得强大的性能。虽然有效,但人们对为什么有效的关键要素以及各种高效微调方法之间的联系知之甚少。
下图展示了不同的微调方法,在 Xsum 数据集上做英文文本摘要任务的效果(ROUGE-2 是该任务的评价指标(越大越好))以及其他高效微调方法参数量相对于全参数微调参数量的百分比。图中的左上角的位置是理想化的方法。从图中发现,Adapter,Prefix Tuning 和 LoRA 都是性能比较好的方法。
为什么看起来 Adapter、Prefix Tuning、LoRA(在结构上和公式上)都不太一样,尤其是 Prefix Tuning,但是这三种方法有近似的效果?
基于此,作者分解了当下最先进的参数高效迁移学习方法(Adapter、Prefix Tuning 和 LoRA)的设计,并提出了一种新方法 MAM Adapter,一个在它们之间建立联系的统一框架。具体来说,将它们重新构建为对预训练模型中特定隐藏状态的修改,并定义一组设计维度,不同的方法沿着这些维度变化。
首先,作者通过对 Prefix Tuning 变换,发现 Prefix Tuning 和 Adapters 的公式高度相似。然后,分析不同微调方法的内部结构和结构插入形式的相似之处。下图展示了高效微调方法 Adapter、Prefix Tuning、LoRA 以及新变体(通过更换一些元素,设计了前人的工作里没有的变体) Parallel Adapter、 Scaled PA 的结构。
下表展示了高效微调方法 Adapter、Prefix Tuning、LoRA 以及新变体在新增可训练参数结构形式(functional form)、结构插入形式(Insertion form)、新增结构在 PLM 修改的具体位置(modified representation)、新增结构与 PLM 的组合函数(composition function)。其中,新增可训练参数结构形式为需要学习的部分(注:Prefix Tuning 为经过转换后的格式);插入形式有串联或并联;模型修改的具体位置有 Attention、FFN 层。
- 原理
MAM Adapter(论文:TOWARDS A UNIFIED VIEW OF PARAMETER-EFFICIENT TRANSFER LEARNING),一个在 Adapter、Prefix Tuning 和 LoRA 之间建立联系的统一方法。具体实现:作者对 Adapter 的放置和软提示(soft prompt)进行了详细的调查。得出如下结论:
-
并行放置的 Adapter 优于顺序放置的 Adapter,并且与 FFN 并行放置的 Adapter 优于多头注意力(MHA)并行放置的 Adapter(模型修改的位置如下图中所示,蓝色表示修改 Attention、红色表示修改 FFN)。
-
软提示可以通过仅更改 0.1% 的参数来有效地修改注意力。
然后,提出了 “mix-and-match”(MAM)。因此,最终模型 MAM Adapter 是用 FFN 层的并行 Adapter 和软提示的组合。
通过最终的实验结果,可以看到 MAM Adapter 在仅用了 6.7% 参数量(相比全量微调)的情况下,在 Xsum 和 MT 这两个任务上达到了和全量微调相近的效果,并且该方法大大优于 BitFit 和 Prompt Tuning,并始终优于 LoRA、Adapter 和 Prefix Tuning。
14.UniPELT
近年来,涌现出了许多针对语言模型的参数高效微调(PELT)方法,在模型训练参数极大的减少的情况下,模型效果与全量微调相当。但是不同的 PELT 方法在同一个任务上表现差异可能都非常大,这让针对特定任务选择合适的方法非常繁琐。
基于此,作者提出了 UniPELT 方法,将不同的 PELT 方法作为子模块,并通过门控机制学习激活最适合当前数据或任务的方法。
- 原理
UniPELT(论文:UNIPELT: A Unified Framework for Parameter-Efficient Language Model Tuning)是 LoRA、Prefix Tuning 和 Adapter 的门控组合。
更具体地说,LoRA 重新参数化用于 WQ 和 WV 注意力矩阵,Prefix Tuning 应用于每一 Transformer 层的 key 和 value,并在 Transformer 块的 feed-forward 子层之后添加 Adapter。对于每个模块,门控被实现为线性层,通过 GP 参数控制 Prefix-tuning 方法的开关,GL 控制 LoRA 方法的开关,GA 控制 Adapter 方法的开关。可训练参数包括 LoRA 矩阵 WA(Down)和 WB(Up),提示调优参数 Pk 和 Pv、Adapter 参数和门函数权重。即图中蓝颜色的参数为可学习的参数。
UniPELT 仅用 100 个示例就在低数据场景中展示了相对于单个 LoRA、Adapter 和 Prefix Tuning 方法的显著改进。在更高数据的场景中,UniPELT 的性能与这些方法相当或更好。
实验还对不同 PELT 方法训练时间和推理时间进行了分析。
-
从训练速度来看,UniPELT 比之前微调的方法多一些,但是还在能接受的范围,
-
从推理时间来看,BitFit 方法增加的最少,UniPELT 方法时间增加了 27%。
-
从训练参数量来看,LoRA,BitFit,Prefix-tuning 都比较小,UniPELT 参数量相对会多一些。
总之,本方法始终优于常规的全量微调以及它在不同设置下包含的子模块,通常超过在每个任务中单独使用每个子模块的最佳性能的上限;并且,通过研究结果表明,多种 PELT 方法的混合涉及到 PLM 的不同部分可能对模型有效性和鲁棒性都有好处。
小结:多种不同的高效微调方法对比
-
P-Tuning v2、LoRA 等都是综合评估很不错的高效微调技术。
-
如果显存资源有限可以考虑 QLoRA
-
如果只是解决一些简单任务场景,可以考虑 P-Tuning、Prompt Tuning
下表从参数高效方法类型、是否存储高效和内存高效、以及在减少反向传播成本和推理开销的计算高效五个维度比较了参数高效微调方法。
下表展示了各种参数高效方法的参与训练的参数量、最终模型与原始模型的改变参数(delta 值)以及论文中参与评估的模型的范围(<1B、<20B、>20B)。
从表中可以看到,Prompt Tuning、Prefix Tuning、LoRA 等少部分微调技术针对不同参数规模的模型进行过评估,同时,这几种方式也是目前应用比较多的高效微调方法。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓