论文笔记 P-Tuning v2 与微调性能相等的提示性优化

P-tuningv2是一种优化连续提示的方法,旨在解决小规模模型在NLU任务上的不足,通过在多层添加连续prompt,提高了任务特定参数,增强了模型预测能力。相比于前作,P-tuningv2在序列标注等任务上有显著提升,且在全监督学习环境中表现与微调相当,提供了一种微调的替代方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看刘鹏飞写的关于prompt的综述,论文太长了。。 只能看一部分记录一部分笔记,离散的prompt理解起来较容易,所以重点记录一下关于continuous prompt的笔记,P-tuning v2也提到了之前一些论文的工作,所以今天记录下这篇论文相关的笔记,提到之前论文中的部分也大概写写。

论文地址

https://arxiv.org/pdf/2110.07602.pdf​arxiv.org/pdf/2110.07602.pdf

1. Abstract

Prompt tuning是之前其他论文提出的一种方法,通过冻结语言模型仅去调整连续的prompts,在参数量超过10B的模型上,效果追上了fine-tune,但是在normal-sized模型上表现不好,并且无法解决序列标注任务。针对这两个问题,作者提出了P-tuning v2。

2. Related work

这篇论文跟之前的prompt tuning, prefix tuning 和p-tuning

### P-tuning v2微调原理详解 P-tuning v2 是一种针对预训练语言模型的提示微调方法,由清华大学的研究团队提出。该方法的核心目标是通过设计特定的连续型提示(continuous prompt),使模型能够更好地适应各种自然语言处理任务,尤其是对于较小规模的语言模型[^1]。 #### 提示学习的基础概念 传统的迁移学习通常依赖于全量参数微调(fine-tuning),即调整整个模型的所有权重来适配下游任务。然而,这种方法存在两个主要问题:一是计算成本高,二是容易过拟合到小型数据集上。相比之下,提示学习(prompt learning)仅优化少量可学习参数,从而显著降低资源消耗并提高泛化能力。P-tuning v2 就是在这一背景下提出的改进版本[^3]。 #### 连续型提示的设计 在 P-tuning v2 中,引入了一组虚拟标记(virtual tokens),这些标记被嵌入到输入序列中作为额外的信息源。具体来说,假设原始输入为 \(X\),则新的输入形式可以表示为 \([P, X]\),其中 \(P\) 表示一组长度固定的连续型提示向量。这些提示向量会被初始化并通过梯度下降算法进行更新,以便最大化目标任务上的表现。 以下是实现过程中的几个关键技术点: 1. **提示初始化策略** - 初始阶段,提示向量可以通过随机方式或者基于某些启发式规则设定其值域范围。 - 实验表明,采用正态分布采样的初始值往往能带来更稳定的学习曲线。 2. **联合优化机制** - 不同于早期版本只关注提示本身的质量提升,P-tuning v2 同时考虑到了如何让基础模型更好地响应所给定的提示信号。 - 此外还探索了多种损失函数组合方案以进一步增强整体框架的有效性[^2]。 3. **跨模态扩展潜力** - 鉴于当前多模态应用日益增多的趋势,研究者也尝试验证此技术能否顺利迁移到图像-文本等领域内的复杂场景之中去。 ```python import torch from transformers import BertTokenizer, BertForMaskedLM tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertForMaskedLM.from_pretrained('bert-base-uncased') def create_continuous_prompt(prompt_length=10): """创建一个指定长度的连续型提示""" return torch.randn((1, prompt_length, model.config.hidden_size)) # 假设我们有一个大小为10的连续型提示 continuous_prompt = create_continuous_prompt() input_ids = tokenizer("This is a test sentence.", return_tensors="pt")["input_ids"] inputs_embeds = model.bert.embeddings(input_ids) # 将连续型提示拼接到实际输入之前 full_inputs_embeds = torch.cat([continuous_prompt, inputs_embeds], dim=1) attention_mask = torch.ones(full_inputs_embeds.shape[:2]) outputs = model(inputs_embeds=full_inputs_embeds, attention_mask=attention_mask) logits = outputs.logits ``` 上述代码片段展示了如何构建并利用连续型提示完成一次前向传播操作。值得注意的是,在真实应用场景下还需要定义合适的反向传播路径以及相应的超参调节流程等细节部分。 --- #### 性能比较分析 通过对多个基准测试集合上的实验结果对比发现,当应用于中小规模预训练模型时,P-tuning v2 显著优于其他几种主流的方法论,包括但不限于标准 Fine-Tuning 和初代 Prompt Tuning 技术。特别是在 SuperGLUE 数据集中,它能够在低于十亿参数级别的条件下达到甚至超越完全微调所带来的收益水平。 综上所述,凭借创新性的架构设计思路及其卓越的实际运用成效,使得 P-tuning v2 成为了当下极具竞争力的一项研究成果之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

强化学习曾小健

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值