详解大模型微调方法Prompt Tuning(内附实现代码)


Prompt Tuning是现在大模型微调方法中的一种常用方法,本文通过解读5篇论文来了解Prompt Tuning方法演进的过程。分别是Prefix-Tuning、P-Tuning v1、Parameter-Efficient Prompt Tuning、P-Tuning v2。

1. Prefix-Tuning:Optimizing Continuous Prompts for Generation

Finetuning之前是使用大模型进行下游任务重训的方法,但由于大模型参数量过大,Finetuning需要大量的数据,以及更多的算力去更新学习参数,不够实用。在2021年提出的prefix-tuning算法,并在自然语言生成任务(NLG, Nature Language Generation)上做了验证。这里注意区分下另一个NLP的概念,在NLP中还一类任务叫自然语言理解(NLU, Nature Language Understanding)。

在Prompt思想的启发下,在Prefix-Tuning中提出了给每一个input输入增加一个连续的任务相关的embedding向量(continuous task-specific vectors)来进行训练。

在这里插入图片描述

这里的连续(continuous)是相对于人工定义的文本prompt token的离散(discrete)来说的,例如一个人工定义的prompt token数组是['The', 'movie', 'is', '[MASK]'],把其中的token The替换成一个embedding向量做为输入的话,其中embedding就是连续的(continuous)表达方式。在下游任务重训的时候固定原有的大模型所有参数,只用重训跟下游任务相关的前缀向量(prefix embedding)即可。

对于自回归的LM模型(例如GPT-2)来说,会在原有prompt之前增加prefix(z = [PREFIX; x; y]);对于encoder+decoder的LM模型(例如BART)来说,会分别在encoder和decoder的输入前加上prefix(z = [PREFIX; x; PREFIX'; y],)。如下图所示,P_idx表示加的前缀序列, h对应的是可学习的参数, 用Pθ=[h1, h2, h3, ...]表示可学习参数矩阵。

在这里插入图片描述

直接学习参数效果不好,所以使用MLP网络对进行了reparameter修正,即Pθ[i,:] = MLP(Pθ'[i,:]),重训完只用保存prefix的相关参数。

huggingface peft关于prefix-tuning的核心代码实现在

### 大模型微调技术详解 #### 微调大模型的原因 为了使通用的大语言模型(LLM)更适用于特定领域或任务,通常需要对其进行微调。这是因为未经调整的通用模型可能无法完全满足具体场景下的需求[^1]。 #### 微调的技术背景 数据规模对预训练模型性能有重要影响。更大的数据集有助于模型学习更多样化的特征和模式,从而提升其能力和适用范围。例如,在GPT系列模型的发展历程中,从GPT-1到GPT-3,随着数据量的增长,模型能力显著增强,可处理的任务类型也更加广泛[^2]。 #### 常见的大模型微调方法 以下是六种常见的大模型微调方式: 1. **全参数微调 (Full Fine-Tuning)** 这是最直接的方法,即更新整个模型的所有参数以适配新任务的数据分布。尽管这种方法效果较好,但它需要大量的计算资源以及足够的标注数据来防止过拟合[^2]。 2. **固定层微调 (Freeze Layers Fine-Tuning)** 在此方法下,仅允许部分顶层网络权重被修改而冻结其他底层权重不变。这样既能减少内存消耗又能加快收敛速度,适合于中小型下游任务[^2]。 3. **低秩分解微调 (Low-Rank Adaptation, LoRA)** 使用低秩矩阵近似代替原有高维参数矩阵来进行优化,通过引入少量额外参数实现高效自适应调整,特别适用于大规模稀疏化环境中的快速原型设计与部署[^2]。 4. **提示学习微调 (Prompt Learning Fine-Tuning)** 不改变原始模型结构本身而是利用精心设计好的输入模板引导模型生成期望输出结果。这种方式无需重新训练大量参数即可获得良好表现,尤其当目标样本数量有限时非常有效。 5. **参数高效微调 (Parameter-Efficient Fine-Tuning, PFT)** 只针对某些新增子模块或者轻量化组件执行局部精细化调节过程而不涉及整体架构变动;相比传统方案可以大幅降低存储开销并保持较高精度水平[^2]。 6. **知识蒸馏微调 (Knowledge Distillation Fine-Tuning)** 将大型教师模型的知识迁移到较小的学生模型上完成最终应用落地工作流构建流程简化的同时还能维持接近原版质量标准。 ```python # 示例代码展示如何加载预训练模型并进行简单的全参微调 from transformers import AutoModelForSequenceClassification, AutoTokenizer model_name = "bert-base-uncased" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained(model_name) # 定义损失函数与优化器 import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.AdamW(model.parameters(), lr=1e-5) # 训练循环省略... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值