### GPT Understands, Too (P-tuning)
根据训练目标,预训练语言模型能够划分为三种类型:
1. 单向语言模型:GPT,用于自然语言生成任务
2. 双向语言模型:BERT,用于自然语言理解任务
3. 混合语言模型:UniLM,是上述两种方法的结合

在以前,研究者们认为GPT类型的模型在自然语言理解任务上表现不好。随着GPT-3的出现,这个看法被打破了。只要设计出合适的prompt,单向语言模型也能够在自然语言理解任务上有出色表现。
但prompt的设计并不容易,往往一个单词的改变就会使最终结果产生巨大改变,例如下面这个表格。

这篇文章的目的就是设计一个自动的生成连续prompt的方法,来提升模型的效果,本文将该方法称为P-tuning。P-tuning仅仅修改了模型的输入部分,采用了一种连续的表征来代替人工设计的离散prompt。
假设一个人工设计的离散模版用下面的公式表示:

其中p代表模版token,x代表数据的原始输入,y代表数据的标签;那么P-tuning的模版可以用下面的公式表示:

其中h代表P-tuning的连续prompt表征,e代表一个预训练的语言模型,x代表数据的原始输入,y代表数据的标签。在面对下游任务时,通过优化h来进行模型优化:

连续prompt在设计时如果是随机初始化的话,优化器很容易陷入局部最优,另外,可以很容易想到的是,连续的prompt embedding之间应该不是相互独立的,而应该是含有依赖关系的。因此作者在这里设计了一个双向LSTM模型来生成prompt embedding。

该图显示了在LAMA-34k的效果,其中MP代表手动设计的prompt。

该图显示了在LAMA-29k上的实验效果,可以看到和MP对比的话,P-tuning的效果有明显提升,和FT对比的话,效果也不错。

该表格显示了:
1. 基于bert-base模型,在5/7的数据集上,P-tuning的效果比finetune等更好。
2. 基于gpt模型,在全部的数据集上,P-tuning的效果都比finetune等更好。
3. 对比gpt-base和bert-base,在6/7的数据集上,基于P-tuning,gpt-base的效果都更好。
4. 这个实验颠覆了我们以前的认知:即在自然语言理解任务上,双向模型比单向模型更好。

下图是关于few-shot的实验:

### P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks
提出P-Tuning v2的原因:
1. 先前的工作显示,Prompt tuning在normal-sized的预训练模型上效果一般;
2. 现有的Prompt tuning方法在较难的文本序列问题上效果不好;

P-Tuning v2的思路来源:
基于prefix-tuning设计的优化版本 (Li and Liang, 2021)

具体介绍:
在P-Tuning中,continuous prompt被插入到输入序列的embedding里,除了语言模型的第一层之外,其他层的prompt embddding都来自于上一层。这样的设计存在两个问题:
1. 约束了要优化的参数量。由于模型的input text的长度是一定的,一般是512,那么prompt的长度就不能过于长。
2. 当模型层数很深时,tuning时模型的稳定性难以保证;模型层数越深,在第一层输入的prompt对后面的影响是难以预估的,这会影响模型的稳定性。
P-Tuning v2的改进在于,将只在第一层插入continuous prompt修改为在许多层都插入continuous prompt,层与层之间的continuous prompt是相互独立的。这样一来,在模型tuning时,可训练的参数就增多了,从0.01%增加到了0.1%-3%。

除了这个在模型结构上的重大修改之外,还有一些优化手段。
1. Reparameterization:之前的方法(例如P-Tuning/prefix-tuning)为了增强模型鲁棒性,提升训练速度和模型表现,针对continuous prompt设计了LSTM/MLP等Reparameterization的方法。但是在实践中,作者发现这些设计并不一定有效。
2. Prompt length:在不同的任务上的表现和prompt的长度有关系。
3. Multi-task learning:多任务学习能够很大的提升模型表现。
实验对比:

这个实验显示,在复杂任务(例如RTE, BoolQ,CB)上,可以看到PT的效果相比于FT要差的多。而P-Tuning v2的差别则没那么大,甚至更好。表格的后两行是在超大模型上的表现的对比,可以看到PT和FT的效果逐步接近了。这个实验证明了该论文在一开始提出的观点。

这个实验在对比了在一些偏难的任务上的模型效果。
消融实验:

这个实验将Prompt depth作为变量进行了实验,在左图上发现,在模型的5-24层添加prompt能够达到和所有层都添加prompt一致的效果。另外,在深层添加prompt的效果总是好于在浅层添加。

这个实验是关于Embedding v.s. MLP reparameterization,以及Prompt Length的消融实验。对于简单的NLU任务,较短的提示足以获得最佳性能;对于较难的序列任务,通常,超过 100 的提示会有所帮助。

p-tuning代码实现的理解:https://zhuanlan.zhihu.com/p/459305102

P-tuning v1 v2相关推荐

  1. IGMP V1 V2 V3 定义和区别

    先来认识一下IGMP这个协议吧,它的全称是Internet Group Management Protocol,它和unicast和multicast的区别是它是发往一组计算机(属于它这个组播组的所有 ...

  2. PyTorch 实现经典模型7:YOLO (v1, v2, v3, v4)

    YOLO (v1, v2, v3, v4) 网络结构 YOLO v3 网络结构 代码 Ref <机器爱学习>YOLO v1深入理解 <机器爱学习>YOLOv2 / YOLO90 ...

  3. Android Studio 打包 V1 V2 签名

    前言 以前AS打包都是填完key信息就ok了,AS后面更新之后,打包的签名版本多了V1,V2选择,该如何选择呢? v1与v2的区别 Android 7.0中引入了APK Signature Schem ...

  4. 使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow)

    使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow) [尊重原创,转载请注明出处]https://blog.csdn.net/guyueali ...

  5. 经典卷积神经系列(Inception v1\v2\v3\v4、ResNet、ResNext、DenseNet、SENet)

    写在前面:此文只记录了下本人感觉需要注意的地方,不全且不一定准确.详细内容可以参考文中帖的链接,比较好!!! 经典的CNN:Inception v1\v2\v3\v4.Resnet.Resnext.D ...

  6. split(v1,v2)用于把一个字符串分割成字符串数组

    split(v1,v2) 参数: v1   必填,此为字符串或正则表达式,从该参数指定的地方开始分割 v2   可选.该参数可指定返回的数组的最大长度.如果设置了该参数,返回的子串不会多于这个参数指定 ...

  7. 维数定理(手推!):证明dim(v1)+dim(v2) = dim(v1+v2) + dim(v1∩v2)

    网上看了很多相关的推导,基本大同小异,相关链接(https://www.cnblogs.com/wdfrog/p/8258417.html) 弄的模棱两可,这里自己手推一下,希望能弄的明白一点,在张凯 ...

  8. 一篇文章看明白 Android v1 v2 签名机制

    Android - v1 & v2 签名机制 相关系列 一篇文章看明白 Android 系统启动时都干了什么 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制 一篇文章看明 ...

  9. FATE学习:配置文件解析及V1/V2版本对比

    综述 为了让任务模型的构建更加灵活,目前 FATE 使用了一套自定的领域特定语言 (DSL) 来描述任务. 在 DSL 中,各种模块(例如数据读写 data_io,特征工程 feature-engin ...

  10. android打包v1和v2,关于Android Studio 打包 V1 V2 签名的选择问题

    前言 以前as打包都是填完key信息就ok了,as后面更新之后,打包的签名版本多了v1,v2选择,该如何选择呢? v1与v2的区别 android 7.0中引入了apk signature schem ...

最新文章

  1. opencv上gpu版surf特征点与orb特征点提取及匹配实例
  2. 怎样去除excel表中的虚线_Excel教程:F1键强大的功能,你会用吗?
  3. freertos心跳中断_FreeRTOS 在STM32上的移植 V1.0
  4. Spring-Security 简介、入门案例详解、安全框架、权限验证 SSM项目 使用 JavaConfig配置
  5. 本周不容错过的的9篇NLP论文 | PaperDaily #21
  6. (11)vue.js 指令(3)
  7. QQ音乐限制专辑重复购买 此前已取消人气榜等非作品类排名
  8. Octopress使用中经验总结
  9. 组件三层_Java三层架构原理与作用小结
  10. mysql 查询的关键词的执行顺序
  11. Win10系统中英文切换
  12. 数据结构——栈(链栈)
  13. 数据库系统(DBS)组成
  14. fedora26下解决wps字体缺失(添加windows字体)
  15. SVN历史版本比较报错:Bad URL passed to RA layer
  16. Matlab绘制各种小波函数及尺度函数图
  17. 实战小米官网静态页面1:导航栏部分
  18. Google创始人布林与谷歌员工开会:未正式退出中国
  19. java 配置excel版本_JAVA实现Excel导入/导出 以及excel样式设置
  20. 开源夏令营《基于HackRF开发GPS信号仿真模拟器》工作总结(三)

热门文章

  1. C4D 内置渲染器 学习笔记
  2. 电脑5个神操作,带你飞的节奏。
  3. macos 安装和使用 adb工具箱,找不到adb (zsh: command not found: adb)
  4. win10系统office2019下载安装
  5. 泄题了!Java程序员最可能被考到的14个面试题
  6. 《你的知识需要管理》阅读
  7. 25分钟安装体验产品,薅150元京东购物卡,特殊方法随时删除
  8. 清华3名博士生,随导师跳槽南科大!导师跳槽换导师是下下策?
  9. 牛逼!一文看尽2020上半年阿里、腾讯、百度入选AI顶会论文
  10. php网站留言,php实现网站留言板功能,php实现留言板_PHP教程