大模型微调的 7 种主流方法详解
大型语言模型微调的基础理论与经典网络结构,重点解析了 LoRA、QLoRA、适配器调整、前缀调整、提示调整、P-Tuning 及 P-Tuning v2 等七种参数高效微调(PEFT)技术。文章对比了各方法的原理、优缺点及适用场景,并提供了微调策略选择建议及实施最佳实践,帮助开发者在资源受限情况下实现模型适配。

大型语言模型微调的基础理论与经典网络结构,重点解析了 LoRA、QLoRA、适配器调整、前缀调整、提示调整、P-Tuning 及 P-Tuning v2 等七种参数高效微调(PEFT)技术。文章对比了各方法的原理、优缺点及适用场景,并提供了微调策略选择建议及实施最佳实践,帮助开发者在资源受限情况下实现模型适配。

本文深入分析了大型模型微调的基本理念和多样化技术,细致介绍了 LoRA、适配器调整 (Adapter Tuning)、前缀调整 (Prefix Tuning) 等多个微调方法。详细讨论了每一种策略的基本原则、主要优点以及适宜应用场景,使得读者可以依据特定的应用要求和计算资源限制,挑选最适合的微调方案。
大型语言模型 (LLM) 的训练过程通常分为两大阶段:
在这个阶段,大型模型会在大规模的无标签数据集上接受训练,目标是使模型掌握语言的统计特征和基础知识。此期间,模型将掌握词汇的含义、句子的构造规则以及文本的基本信息和上下文。 需特别指出,预训练实质上是一种无监督学习过程。完成预训练的模型,亦即基座模型 (Base Model),拥有了普遍适用的预测能力。例如,GLM-130B 模型、OpenAI 的四个主要模型均属于基座模型。
预训练完成的模型接下来会在针对性的任务数据集上接受更进一步的训练。这一阶段主要涉及对模型权重的细微调整,使其更好地适配具体任务。最终形成的模型将具备不同的能力,如 gpt code 系列、gpt text 系列、ChatGLM-6B 等。
直观上,大型模型微调即是向模型'输入'更多信息,对模型的特定功能进行'优化',通过输入特定领域的数据集,使模型学习该领域知识,从而优化大模型在特定领域的 NLP 任务中的表现,如情感分析、实体识别、文本分类、对话生成等。
其核心理由是,微调能够'装备'大模型以更精细化的功能,例如整合本地知识库进行搜索、针对特定领域问题构建问答系统等。 以 VisualGLM 为例,作为一个通用多模态模型,当应用于医学影像判别时,就需要输入医学影像领域的数据集以进行微调,以此提升模型在医学影像图像识别方面的表现。 这与机器学习模型的超参数优化类似,只有在调整超参数后,模型才能更好地适应当前数据集;同时,大型模型可以经历多轮微调,每次微调都是对模型能力的优化,即我们可以在现有的、已经具备一定能力的大模型基础上进一步进行微调。
以 GPT 系列中的 Transformer 为例,这种深度学习模型结构通过自注意力机制等技巧解决了相关问题。正是得益于 Transformer 架构,基于 GPT 的大型语言模型取得了显著的进展。 Transformer 模型架构包含了众多模块,而我们讨论的各种微调技术通常是对这些模块中的特定部分进行优化,以实现微调目的。
要深入理解各类微调手段,首先需要对网络架构有一个基本的认识。以下以 Transformer 为例,阐述各个模块的作用:
输入嵌入层(Input Embedding)
编码器层(Encoder,左边)
解码器层(Decoder,右侧)
输出嵌入层和输出过程
大型模型的全面微调(Fine-tuning)涉及调整所有层和参数,以适配特定任务。此过程通常采用较小的学习率和特定任务的数据,可以充分利用预训练模型的通用特征,但可能需要更多计算资源。
参数高效微调(Parameter-Efficient Fine-Tuning,PEFT)旨在通过最小化微调参数数量和计算复杂度,提升预训练模型在新任务上的表现,从而减轻大型预训练模型的训练负担。 即使在计算资源受限的情况下,PEFT 技术也能够利用预训练模型的知识快速适应新任务,实现有效的迁移学习。因此,PEFT 不仅能提升模型效果,还能显著缩短训练时间和计算成本,使更多研究者能够参与到深度学习的研究中。
PEFT 包括 LoRA、QLoRA、适配器调整 (Adapter Tuning)、前缀调整 (Prefix Tuning)、提示调整 (Prompt Tuning)、P-Tuning 及 P-Tuning v2 等多种方法。
LoRA(Low-Rank Adaptation)是一种旨在微调大型预训练语言模型(如 GPT-3 或 BERT)的技术。其核心理念在于,在模型的决定性层次中引入小型、低秩的矩阵来实现模型行为的微调,而无需对整个模型结构进行大幅度修改。 这种方法的优势在于,在不显著增加额外计算负担的前提下,能够有效地微调模型,同时保留模型原有的性能水准。
LoRA 的操作流程如下:
以一个具体实例来说,假设我们手头有一个大型语言模型,它通常用于执行广泛的自然语言处理任务。现在,我们打算将其微调,使其在处理医疗健康相关的文本上更为擅长。 采用 LoRA 方法,我们无需直接修改模型现有的大量权重。相反,只需在模型的关键部位引入低秩矩阵,并通过这些矩阵的乘积来进行有效的权重调整。这样一来,模型就能更好地适应医疗健康领域的专业语言和术语,同时也避免了大规模权重调整和重新训练的必要。
QLoRA(Quantized Low-Rank Adaptation)是一种结合了 LoRA(Low-Rank Adaptation)方法与深度量化技术的高效模型微调手段。QLoRA 的核心在于:
量化过程的挑战在于设计合适的映射和量化策略,以最小化精度损失对性能的影响。在大型模型中,这种方法可以显著减少内存和计算需求,使得在资源有限的环境下部署和训练成为可能。
与 LoRA 技术类似,适配器调整的目标是在保留预训练模型原始参数不变的前提下,使模型能够适应新的任务。适配器调整的方法是在模型的每个层或选定层之间插入小型神经网络模块,称为'适配器'。这些适配器是可训练的,而原始模型的参数则保持不变。
适配器调整的关键步骤包括:
例如,如果我们有一个大型文本生成模型,它通常用于执行广泛的文本生成任务。若要将其微调以生成专业的金融报告,我们可以在模型的关键层中加入适配器。在微调过程中,仅有适配器的参数会根据金融领域的数据进行更新,使得模型更好地适应金融报告的写作风格和术语,同时避免对整个模型架构进行大幅度调整。
LoRA 与适配器调整的主要区别在于:
与传统的微调范式不同,前缀调整提出了一种新的策略,即在预训练的语言模型(LM)输入序列前添加可训练、任务特定的前缀,从而实现针对不同任务的微调。这意味着我们可以为不同任务保存不同的前缀,而不是为每个任务保存一整套微调后的模型权重,从而节省了大量的存储空间和微调成本。
前缀实际上是一种连续可微的虚拟标记(Soft Prompt/Continuous Prompt),与离散的 Token 相比,它们更易于优化并且效果更佳。这种方法的优势在于不需要调整模型的所有权重,而是通过在输入中添加前缀来调整模型的行为,从而节省大量的计算资源,同时使得单一模型能够适应多种不同的任务。前缀可以是固定的(即手动设计的静态提示)或可训练的(即模型在训练过程中学习的动态提示)。
提示调整是一种在预训练语言模型输入中引入可学习嵌入向量作为提示的微调方法。这些可训练的提示向量在训练过程中更新,以指导模型输出更适合特定任务的响应。
提示调整与前缀调整都涉及在输入数据中添加可学习的向量,这些向量是在输入层添加的,但两者的策略和目的不同:
以下是两者的训练示例,以说明它们的不同:
提示调整示例:
[Prompt1][Prompt2] '这部电影令人振奋。'[Prompt1][Prompt2] 作为引导模型的内部提示,这里的问题是隐含的,即判断文本中表达的情感倾向。前缀调整示例:
[Prefix1][Prefix2][Prefix3] 'I want to watch a movie.'P-Tuning(基于提示的微调)和提示调整都是为了调整大型预训练语言模型(如 GPT 系列)以适应特定任务而设计的技术。两者都利用预训练的语言模型执行特定的下游任务,如文本分类、情感分析等,并使用某种形式的'提示'或'指导'来引导模型输出,以更好地适应特定任务。
提示调整与 P-Tuning 的主要区别在于:
P-Tuning 中使用 LSTM(长短期记忆网络)作为生成虚拟标记嵌入的工具,利用了 LSTM 的以下优势:
这些特性使得 LSTM 特别适合处理复杂任务和需要细粒度控制的应用场景。然而,这些优势也伴随着更高的计算复杂度和资源需求,因此在实际应用中需要根据具体需求和资源限制来权衡使用 LSTM 的决策。
P-Tuning v2 是 P-Tuning 的进一步改进版,在 P-Tuning 中,连续提示被插入到输入序列的嵌入层中,除了语言模型的输入层,其他层的提示嵌入都来自于上一层。这种设计存在两个问题:
P-Tuning v2 的改进在于,不仅在第一层插入连续提示,而是在多层都插入连续提示,且层与层之间的连续提示是相互独立的。这样,在模型微调时,可训练的参数量增加了,P-Tuning v2 在应对复杂的自然语言理解 (NLU) 任务和小型模型方面,相比原始 P-Tuning 具有更出色的效能。
除了以上 PEFT,当前还存在 PILL(Pluggable Instruction Language Learning)、SSF(Scaling & Shifting Your Features)等其他类型的微调方法。
PILL是 PEFT 的一个特定实现,特别关注于如何通过插入可训练的模块或插件来提升模型的任务适应性。这些插件被设计为与原始模型协同工作,以提高模型在处理特定任务时的效率和效果。
SSF核心思想是对模型的特征(即模型层的输出)进行缩放(Scaling)和位移(Shifting)。简单来说,就是通过调整特征的比例和偏移量来优化模型的性能。 这种方法可以在改善模型对特定任务的响应时,不需要调整或重新训练模型中的所有参数,从而在节省计算资源的同时保持或提升模型性能。这对于处理大规模模型特别有效,因为它减少了训练和调整所需的资源和时间。
综上所述,微调是一种强大的工具,它能够使大型预训练模型适应于特定的任务和应用场景。正确选择和应用微调策略对于实现高效且有效的模型性能至关重要。
为了在实际项目中成功应用上述微调技术,建议遵循以下最佳实践:
大模型微调技术正在快速发展,从全量微调到参数高效微调(PEFT),再到各种变体(如 P-Tuning v2, QLoRA),开发者有了更多选择。选择合适的微调方法需要在性能、成本和开发效率之间找到平衡。随着技术的演进,未来可能会出现更多高效的微调算法,帮助我们在有限的资源下充分发挥大模型的潜力。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online