大模型微调技术 --> P-Tuning v1和 P-Tuning v2

P-Tuning 是一种通过引入可学习的 提示 向量来增强预训练语言模型能力的技术,属于提示学习的一种。

1.背景

GPT 在 NLP 领域经过 finetuning 之后很难击败 BERT,主要是因为现在预训练模型的方法有很多种(主要是 MLM),但在 finetune 的时候,常常和预训练不一致。于是 P-tuning: GPT Understands, Too 这篇论文被提出。

2.P-Tuning v1

1.摘要

手动的离散提示通常导致一个不稳定的性能——比如,在提示中改变一个词可能导致性能大幅度下降。于是提出了新颖的方法 —— P-Tuning,它采用连续的提示 embedding 与离散提示 结合在一起。P-Tuning 不仅能够通过最小化各种离散提示之间的差距来稳定训练,还能在很多基准测试中提高性能。

2.介绍

预训练模型一般都可以通过手动编写提示模版进一步的提升性能。

但是,手动的离散提示有很大程度的不稳定性。

如图所示,仅仅改变一个单词,就导致了准确率大幅度的变化,但是 P-Tuning 基本稳定。

在这里插入图片描述

为了减少不稳定性,我们利用可训练的连续的提示 embeddings 与离散提示串联(和离散提示结合起来)。

具体来说,给定离散提示作为输入,P-Tuning 将 连续的提示嵌入 和 离散的提示 token 连接起来,并将它们作为 LM 的输入。通过反向传播更新连续提示以优化任务目标。

直觉上,连续的提示将一定程度的可学习性融入到了输入中,这抵消了离散提示中微小变化的影响。

3.方法

  • 传统方法

    Prompting 被提出用一种离散 token 的形式。每个体式被描述成一个模板 T = { [ D 0 : i ] , x , [ D ( i + 1 ) : j ] , y , [ D ( j + 1 ) : k ] } T=\{[D_{0:i}], x, [D_{(i+1):j}], y, [D_{(j+1):k}]\} T={[D0:i],x,[D(i+1):j],y,[D(j+1):k]},他能组织标注数据成文本 token 的序列,以便任务能被重新阐述为一个文本填空问题。

    “The capital of [INPUT] is [LABEL].” → “The capital of Britain is [MASK].

    离散的提示和输入一起被映射成输入的嵌入。

    在这里插入图片描述

    但是由上述表格发现,这样不稳定。所以提出了 P-Tuning ,使用连续的提示嵌入去提升和稳定 prompting

  • P-Tuning

    在这里插入图片描述

    定义 [ P i ] [P_i] [Pi] 是第 i 个连续提示嵌入。P-Tuning 的提示模版变成了如下

    T = { [ P 0 : i ] , x , [ P ( i + 1 ) : j ] , y , [ P ( j + 1 ) : k ] } T = \{[P_{0:i}], x, [P_{(i+1):j}], y, [P_{(j+1):k}]\} T={[P0:i],x,[P(i+1):j],y,[P(j+1):k]}

    P-Tuning 利用额外的嵌入函数 f : [ p i ] → h i f:[p_i] → h_i f:[pi]hi 将模版映射到如下。

    在这里插入图片描述

    最好,更新 embedding { P i } i = 1 k \{P_i\}^k_{i=1} {Pi}i=1k 去优化任务损失函数。

  • Prompt Encoder

    在上述框架中,我们使用映射函数 f 将可训练嵌入 {P} 映射到模型输入 {h}。

    我们的直觉是,与使用独立的可学习嵌入式相比,使用映射函数可以更方便地模拟不同提示嵌入式之间的依赖关系

  • **总结(借鉴该链接)**

    Prompt 其实就是将微调任务换成了填空任务,来贴近 MLM 任务,效果很取决于模版好不好

    作者为了解决这个问题,提出了 P-Tuning把原本由模版产生的提示 token ,改成用 embedding 的形式,那这些 embedding 怎么来的呢?其实就是直接创造了新的词 [prompt1] - [prompt10] ,然后输入一个神经网络。这些词原本的预训练模型也没有看过,也不在乎他是不是自然语言,因为我们希望的是利用这些模版学习到怎样完成下游任务,而这些模版就是经过参数化后,找到的一群参数,至于它本身是什么样的字符或符号并不需要太在意,背后学到的参数才是最重要的。

    不同于 finetune 的方法差别在哪里呢?P-Tuning 让预训练模型参数固定,只学习橙色部分的 prompt token,这样做的原因是利用之前学习到的大量文本中的知识,达到更好的效果。而 finetune 要调整整个模型参数,常常因为预训练模型和下游任务不一样,导致灾难性遗忘问题,打乱原本学习到的参数。

4.实验结果

  • 知识探究准确率,P-Tuning 比 手动提示和离散提示的方法都好

    在这里插入图片描述

  • P-Tuning 在 BERT 和 GPT 中表现优异,看数据,貌似对于GPT系列提升更大

    在这里插入图片描述

在这里插入图片描述

3.P-Tuning V2

在实践中,V2 比 V1 更加常用

1.引言

在这里插入图片描述

当预训练语言模型的参数很少时,P-tuning效果显然很差,而只有当参数规模达到100亿时,才勉强达到Fine-tuning效果。

传统的方法是 fine-tune ,很费内存。

Prompting 虽然不需要训练,但是离散的提示可能导致较低的性能(与 fine-tune 相比)

prompt tuning,他思想是只微调连续的提示,即增加可训练的连续嵌入在原始的输入序列列,只有连续的提示嵌入会被更新。

尽管P-Tuning 改善了很多任务,但是他仍然不如 fine-tune ,尤其是低于 10B 的模型中。

而且在一些困难的任务中,性能可能更差

基于以上考虑,作者又提出了 P-Tuning v2

他是一个深度提示微调的一个优化和适应实现,他最显著的改善源自于应用连续的 prompt 给预训练模型的每一层,而不仅仅是在输入层

2.P-Tuning v2

首先分析了一下 之前的 P-Tuning 性能不够好的原因,作者的猜想是缺乏普遍性。

  • 缺乏跨尺度的普遍性
  • 缺乏跨任务的普遍性

所以提出了 P-tuning v2

  1. 深度 Prompt Tuning

    在这里插入图片描述

    之前的方法是只在输入序列加上提示嵌入。这导致了两个挑战:

    首先,大量的可调整的参数是有限的,因为序列长度的限制

    其次,输入嵌入相对来说不是直接影响模型精度的。

    为了处理这些挑战,P-tuning v2 如图二右侧的深度提示微调的方法。在不同层的提示被加入作为前缀 token

    一方面,P-tuning v2 有了更多的可调整的任务特定参数(从 0.01% 到 0.1%-3%),这允许更多的任务能力

    另一方面,提示增加到了更深的层中,可以更直接的影响模型的精度

  2. 优化和实现

    1. 重参数化

      以前的工作通常利用一个重参数化编码器,比如 MLP来转换可训练的嵌入。然而对于 NLU,作者发现他的有用性取决于任务和数据集。对某些数据集,MLP 可能对结果影响很小甚至是负面影响

    2. 提示长度

      提示长度是一个重要的角色在 P-Tuning v2 中。作者发现不同的 NLU 任务通常以不同的提示长度实现最佳性能。

      一般来说,简单的分类任务可以使用短的提示长度(少于 20),复杂的序列标注任务可以是更长的(大于 100)

    3. 多任务学习

      可选的,

    4. 分类头

      使用语言建模头来预测 言语者 一直是提示调整的核心,但我们发现它在全数据设置中是不必要的,并且与序列标记不兼容。相反,P-tuning v2 在 token 之上应用随机初始化的分类头,如 BERT 中那样。

      在这里插入图片描述

      表 1:P-tuning v2 和现有 Prompt Tuning 方法之间的概念比较(KP:知识探测;SeqTag:序列标记;Re-param.:重新参数化;No verb.:无语言器)。

3.实验

挑选部分 NLU task,包括:

GLUE(SST-2、MNLI-m);
SuperGLUE(RTE、BoolQ、CB);
实体识别(CoNLL03、OntoNotes 5.0、CoNLL04);
ExtractiveQA(SQuAD1.1、SQuAD2.0);
Semantic Role Labelling(CoNLL05、CoNLL12)。

Baseline选择:

PT-2:本文提出的P-tuning V2;
MPT-2:本文提出的P-tuning V2,并采用Multi-task learning方法;
PT:P-tuning;
FT:传统的Fine-tuning方法;

在这里插入图片描述

表 2:SuperGLUE 开发集的结果。 P-tuning v2 超越了 P-tuning 在小于 10B 的模型上,匹配不同模型尺度的微调性能。 (FT:微调;PT:Lester et al. (2021) & P-tuning;PT-2:P-tuning v2;粗体:最好;下划线:第二好)。

在这里插入图片描述

表 3: 命名实体识别(NER)、问题解答(提取式 QA)和语义角色标记(SRL)的结果。
NER 和 SRL 中的所有指标均为 micro-fl 分数。(FT:微调;PT:P-tuning & Lester 等人(2021 年);PT-2:P-tuning v2;MPT-2:多任务 P-tuning v2;粗体:最佳;下划线:次佳)。

4.结论

  • P-tuning在复杂的NLU任务上效果很差;
  • P-tuning V2可以与传统Fine-tuning有差不多的效果;
  • Multi-task P-tuning V2效果更好,分析认为可能是变相的数据增强带来的影响。

4.P-Tuning 超参数微调

这两种方法中,P-Tuning v2更常用,因为它的性能更接近全参数微调,且应用场景更广泛。v1主要用于分类等简单任务,v2则可以应用于生成、理解等各类任务。

1.超参数

P-Tuning v1的关键超参数:

  1. prompt长度(prompt_length)
    • 含义:可训练的连续提示标记数量
    • 建议值:
      • 简单任务:10-20
      • 中等任务:20-50
      • 复杂任务:50-100
    • 调优策略:
      • 从小值开始(如20)
      • 如果效果不好可以逐步增加
      • 注意增加prompt长度会增加训练难度
  2. 提示编码器结构(prompt encoder)
    • LSTM隐藏维度
      • 建议值:512-2048
      • 一般设为基座模型隐藏维度的1/2到1/1
    • LSTM层数
      • 建议值:2-3层
      • 更多层可能导致训练不稳定
    • MLP层数和维度
      • 层数:通常2层
      • 维度:可以逐层递减(如2048->1024)
  3. 初始化策略(init_method)
    • 随机初始化
    • 从词表采样
    • 基于任务相关词的embedding
    • 建议:先尝试随机初始化,如果效果不好再尝试其他方法

P-Tuning v2的关键超参数:

  1. 每层prompt长度(prefix_length)
    • 建议值:
      • 小模型(7B以下):32-64
      • 中型模型(7B-70B):64-128
      • 大模型(70B+):128-256
    • 调优建议:
      • 任务复杂度越高,需要更长的prefix
      • 模型越大,可以使用更长的prefix
  2. prefix添加的层(target_layers)
    • 选项:
      • 全部层
      • 部分层(如前1/3或前1/2)
      • 间隔添加(如每隔2层)
    • 建议:
      • 默认全部层
      • 如果显存不足,可以选择性添加
      • 通常前面的层更重要
  3. prefix投影(prefix_projection)
    • 投影维度
      • 建议值:原始维度的1/4到1/2
      • 例如:原始1024->投影256
    • 是否使用投影
      • 默认开启
      • 可以显著减少参数量
      • 通常对性能影响不大

典型配置示例:

  1. P-Tuning v1:
v1_config = {"prompt_length": 20,"encoder": {"lstm_hidden": 1024,"lstm_layers": 2,"mlp_hidden": [1024, 512],"dropout": 0.1},"init_from_vocab": True
}
  1. P-Tuning v2:
v2_config = {"prefix_length": 64,"num_target_layers": "all",# 或具体层数"prefix_projection": True,"projection_dim": 256,"dropout": 0.1
}

2.调参建议

  1. 优先级顺序
    • v1: prompt长度 > 编码器结构 > 初始化策略
    • v2: 层的选择 > prefix长度 > 投影维度
  2. 调优策略
    • 从保守配置开始
    • 逐步增加复杂度
    • 注意监控训练稳定性
  3. 常见问题和解决方案
    • 训练不稳定:
      • 减小prompt/prefix长度
      • 降低学习率
      • 增加预热步数
    • 效果不好:
      • 增加长度
      • 尝试不同的初始化(v1)
      • 添加更多层(v2)

5.总结

  • v2通常是更好的选择,除非:
    • 计算资源极其有限
    • 任务非常简单
    • 只需要处理分类任务
  • 资源受限时的简化建议:
    • v1:使用更短的prompt,简化编码器
    • v2:减少目标层数,使用更激进的投影

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/3504.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Angular引用控件类

说明: angular 在一个控件类里面,引入另外一个控件类,这样做的好处,就是代码分离,当你一个页面存在多少类似于独立的界面时,可以使用这种方式,分离代码 更好维护程序 效果图: step…

124.WEB渗透测试-信息收集-ARL(15)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:123.WEB渗透测试-信息收集-ARL(14) 点击fofa任务下发&#xff08…

Linux命令 - 关于命令及其使用

文章目录 1 什么是命令?2 识别命令3 命令帮助文档4 命令别名 1 什么是命令? 命令可以是以下四种形式之一: 可执行程序:就像我们所看到的位于/usr/bin目录中的文件一样,这一类程序可以是用诸如C和C语言编写的程序编译…

【万字详文介绍】:迭代扩张卷积神经网络(IDCNN)

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

220V变5V300mA非隔离芯片WT5104

220V变5V300mA非隔离芯片WT5104 WT5104特点包括: - 宽输入电压:85VAC~265VAC,适应全球电网电压波动。 - 输出规格:稳定5V直流电,最大电流500mA,适用于轻功率电子设备。 - 工作模式灵活:支持CCM…

WonderWorld: Interactive 3D Scene Generation from a Single Image 论文解读

目录 一、概述 二、相关工作 1、新视图生成 2、单视图3D场景生成 3、视频生成 4、快速的3D场景表示 三、WonderWorld 1、FLAGS表示 2、引导深度扩散模块 3、单视角层次生成 4、基于几何的初始化 surfel表示 5、阶段一——生成3D场景部分 6、阶段二——用户交互控…

kkfileview4.2.1 LibreOffice_7.1.4_Linux_x86-64_rpm.tar.gz

问题 java.lang.IllegalStateException: officeHome doesnt exist or is not a directory: optlibreoffice7.1 安装 kkfileview4.2.1 LibreOffice_7.1.4_Linux_x86-64_rpm.tar.gz 测试 全过程脚本 [zengwenfenglocalhost Desktop]$ pwd /home/zengwenfeng/Desktop [zengwe…

可编辑71页PPT | 企业架构及典型设计方案

荐言分享:企业架构(Enterprise Architecture, EA)是战略与技术之间的桥梁,旨在确保企业的信息系统、业务流程、组织结构和技术基础设施能够协同工作,以支持企业的整体战略目标。它通过定义一套标准化的框架、原则、模型…

python代码获取zabbix上机器磁盘使用率

1.需要先给机器打上标记os_type: Linux或者os_type: Windows 2.代码请求获取数据: 先装一下相关的数据包 pip install pyzabbix from pyzabbix import ZabbixAPI import requests import urllib3 import concurrent.futuresclass ZabbixInfo():def __init__(self…

一个完整的crm系统都应该具备哪些功能?CRM系统功能盘点

前段时间我们去拜访一位企业老板,正好他们在开会,团队正在讨论如何与一位潜在的大客户达成交易。 客户对产品表现出浓厚的兴趣,也提出了一些具体的问题,例如上一次交易的详细信息、服务响应时间以及可能的折扣方案,但…

导师双选系统开发:Spring Boot技术详解

第一章 绪论 1.1 选题背景 如今的信息时代,对信息的共享性,信息的流通性有着较高要求,尽管身边每时每刻都在产生大量信息,这些信息也都会在短时间内得到处理,并迅速传播。因为很多时候,管理层决策需要大量信…

CTF顶级工具与资源

《Web安全》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484238&idx1&snca66551c31e37b8d726f151265fc9211&chksmc0e47a12f793f3049fefde6e9ebe9ec4e2c7626b8594511bd314783719c216bd9929962a71e6&scene21#wechat_redirect 《网安面试指南》h…

数列分块入门

本期是数列分块入门。其中的大部分题目来自hzwer在LOJ上提供的数列分块入门系列。 Blog:here (其实是对之前分块的 blog 的整理补充) sto hzwer orz %%% [转载] ---------------------------------------------------------------------------------…

模型自动绑骨,在线生成动画,神奇的网站《Mixamo》

英文名mixamo 网站地址:Mixamohttps://www.mixamo.com/#/首先进入需要注册,国内的手机号就可以,但是会有一些慢,多试几次 1、进入界面如下 2、载入自己的模型 2、绑定骨骼 拖动这几个有颜色的圈圈分别对应右图位置,点…

2024 CSS保姆级教程四

CSS中的动画 CSS动画(CSS Animations)是为层叠样式表建议的允许可扩展标记语言(XML)元素使用CSS的动画的模块​ 即指元素从一种样式逐渐过渡为另一种样式的过程​ 常见的动画效果有很多,如平移、旋转、缩放等等&#…

Docker安装anythingllm

拉镜像 docker pull mintplexlabs/anythingllm 启动 anythingllm docker run -d --name anythingllm --add-hosthost.docker.internal:host-gateway --env STORAGE_DIR/app/server/storage --health-cmd "/bin/bash/usr/local/bin/docker-healthcheck.sh || exit 1"…

格行:从新晋网红到国货之光,它究竟做对了什么?

作为一家迅速崛起的新消费品牌,近两年来,格行饱受质疑。 无论是商家还是消费者,都有人对其爱之恨之,喜欢它的人,认为它是正义的化身,价格的屠夫,国货的骄傲,原本需要花几百才能买到…

小菜家教平台(二):基于SpringBoot+Vue打造一站式学习管理系统

目录 前言 今日进度 详细过程 一、数据库重构 二、编写登录接口 相关知识点 前言 昨天我们重启了小菜家教平台的开发,创建了新项目并初步进行了配置,今天我们继续。大家要是有需要源码的话可以在评论区跟我说,博客中就不添加源码了~ 今…

数学期望和联合概率密度

数学期望的定义 数学期望是描述随机变量平均趋势的一个重要统计量。根据随机变量的类型(离散或连续),数学期望的定义有所不同。 离散型随机变量的数学期望: 若离散型随机变量 X X X取值为 x 1 , x 2 , … , x n , … x_1,x_2,\do…

MRCTF2020:你传你ma呢

文件上传题先判断黑白名单过滤,先传个最简单的木马 这里上传不了php文件,猜测可能是对php文件进行了过滤,将文件改为任意后缀这里改为.abc 还是上传不成功,猜测可能对MIME也做了过滤,将Content-Type更改为image/jpeg再…