当前位置: 首页 > news >正文

【第四章:大模型(LLM)】10.微调方法与实战-(3)P-tuning v2

第四章:大模型(LLM)

第十部分:微调方法与实战

第三节:P-tuning v2


1️⃣ 背景与动机

  • P-tuning(v1) 通过可学习的提示编码器(如 BiLSTM/MLP)生成连续的提示向量,已经比 Prompt Tuning 更强大。

  • 但在更大规模模型(如 GPT-2, GPT-3, BERT-large)上,P-tuning 仍存在:

    • 任务泛化能力不足。

    • 实现复杂(需要设计提示编码器)。

    • 对生成类任务支持有限。

P-tuning v2 被提出,目标是:

  • 统一 NLP 各类任务(分类、生成、抽取等)。

  • 等效替代全参数微调,在效果上接近甚至持平。

  • 同时保持 参数高效(只需微调少量参数)。


2️⃣ 核心思想

P-tuning v2 的核心是 Prefix Tuning + 可学习虚拟 token 的结合:

  1. 每一层 Transformer 的注意力层(Self-Attention),为 Key/Value 添加一组可学习的前缀向量。

  2. 与 Prompt Tuning 不同:

    • Prompt Tuning 只在输入 embedding 层添加提示。

    • P-tuning v2 在所有层注入提示信息,增强模型表达能力。

  3. 相比 P-tuning v1,去掉了复杂的 BiLSTM/MLP 编码器,采用更简洁的实现。


3️⃣ 方法原理

(1) 前缀化注意力机制

在第 l 层注意力中:

\text{Attn}(Q, K, V) = \text{Softmax}\left(\frac{Q [K;K_p]^T}{\sqrt{d}} \right)[V;V_p]

  • K_p, V_p:可学习的前缀向量(prefix embedding)。

  • 将它们拼接到原始 Key/Value 前,使模型在计算注意力时“预先关注”这些前缀信息。

(2) 多层注入
  • 在每一层的 Self-Attention 都加入前缀向量。

  • 前缀向量在不同层共享或独立可学习,灵活可调。


4️⃣ 与其他方法的比较

方法注入位置是否逐层参数开销效果
Prompt Tuning输入 embedding仅输入层极小效果有限
P-tuning v1输入 embedding(编码器生成)仅输入层效果较好
Prefix TuningKV Cache每层中等效果好
P-tuning v2KV Cache每层中等接近全参数微调

5️⃣ 特点与优势

统一性:可处理分类、生成、抽取等各种任务。
高效性:仅需训练前缀向量(通常占模型参数的 0.1%~1%)。
效果强大:在 GLUE、SuperGLUE 等基准测试中,性能接近甚至超越全参数微调。
简洁实现:无需额外提示编码器,直接在 Transformer 内部注入参数。


6️⃣ PyTorch 伪代码

import torch
import torch.nn as nnclass PrefixLayer(nn.Module):def __init__(self, num_heads, prefix_len, dim):super().__init__()self.prefix_len = prefix_lenself.num_heads = num_headsself.dim = dim# 可学习的前缀 Key/Valueself.prefix_key = nn.Parameter(torch.randn(prefix_len, num_heads, dim))self.prefix_value = nn.Parameter(torch.randn(prefix_len, num_heads, dim))def forward(self, K, V):# 拼接前缀到原始 K/VK = torch.cat([self.prefix_key, K], dim=0)V = torch.cat([self.prefix_value, V], dim=0)return K, V

在实际实现中,需要在 Transformer 的每一层 Attention 前调用该模块。


7️⃣ 总结

  • P-tuning v1:提示编码器生成输入前缀 → 提升了表达能力,但实现复杂。

  • P-tuning v2:直接在每层 Attention 引入可学习前缀 → 简洁高效,效果媲美全参数微调。

  • 地位:P-tuning v2 被认为是 Prompt Tuning/Prefix Tuning 的统一框架,奠定了后续 LoRA、Adapter 等方法的基础。

http://www.xdnf.cn/news/1455967.html

相关文章:

  • 机器学习如何精准预测高值
  • JavaEE 进阶第二期:开启前端入门之旅(二)
  • 《A Study of Probabilistic Password Models》(IEEE SP 2014)——论文阅读
  • 随时随地写代码:Jupyter Notebook+cpolar让远程开发像在本地一样流畅
  • java面试中经常会问到的Redis问题有哪些(基础版)
  • Nano-banana 模型对接教程:最懂创作者的 AI 模型,比GPT-4o还强!
  • Redis(43)Redis哨兵(Sentinel)是什么?
  • 【OpenHarmony文件管理子系统】文件访问接口解析
  • 【笔记】Software Engineering at Google
  • Java Stream 流式操作举例
  • 深度学习篇---SENet
  • AI安全必修课:模型偏见检测与缓解实战
  • 使用 Sentry 为 PHP 和 Web 移动小程序提供多平台错误监控
  • 温湿度监控的科技之处是能够将样本的运行数据以数字化的方式展现在管理者面前吗?
  • UE5 UAT
  • iSCSI IP-SAN 部署实战
  • SMARTGRAPHQA —— 基于多模态大模型的PDF 转 Markdown方法和基于大模型格式校正方法
  • 滑动窗口题目:水果成篮
  • C 盘清理技巧分享:释放磁盘空间,提升系统性能
  • ArcGIS学习-15 实战-建设用地适宜性评价
  • 适应新环境:Trae编辑器下的IDEA快捷键定制
  • 解密大语言模型推理:Prompt Processing 的内存管理与计算优化
  • C++语言编程规范-常量
  • 既“强悍”又“灵活”,部署在用户身边,将直播延迟压缩至毫秒级
  • Kafka 学习教程:从基础概念到实践操作
  • 分析流程自动优化!Fabarta个人专属智能体「数据分析」新功能介绍
  • 打工人日报#20250904
  • docker中的mysql变更宿主机映射端口
  • 以StarRocks为例讲解MPP架构和列式存储
  • vscode launch.json 中使用 cmake tools 扩展的命令获取可执行文件目标文件名