EMLP2021 | Google大模型微调经典论文prompt tuning

news/2025/2/20 8:47:43/

一、概述

title:The Power of Scale for Parameter-Efficient Prompt Tuning

论文地址:https://arxiv.org/abs/2104.08691

代码:GitHub - google-research/prompt-tuning: Original Implementation of Prompt Tuning from Lester, et al, 2021

1.1 Motivation

  1. 大模型对每个任务训练一个模型,开销和部署成本都比较高(一个大模型的权重可能要40G,多个任务成本比较高)。
  2. discrete prompts(离散prompts)是指人工设计prompts提示语加入到模型中,这样成本比较高,并且效果好像不太行。

1.2 Methods

  1. 方案概述:通过反向传播更新参数来学习prompts,而不是人工设置prompts,同时冻结模型原始权重,只训练prompts参数,训练完以后,用同一个模型可以做多任务推理,而不用像原始model tuning方法一样,对每个任务都训练一个模型了。

  1. 与prefix-tuning的不同:prefix-tuning是更新transformer所有中间层,prompt-tuning只在输入的embedding端添加,所以叫prompt tuning。

1.3 Conclusion

  1. 可以作为一个有竞争力的方案将大模型适配到下游任务中,在SuperGLUE上也取得不错的结果(T5),比GPT-3的few-shot效果好不少。

  1. 随着模型尺寸增加,prompt tuning和model tuning(全参数微调)gap消失。

  1. prompt tuning(全量微调)比model tuning在zero-shot上的效果好很多。说明其有比较强的跨领域的迁移学习,能提升generalization,同时表明冻结大模型的参数,将更新限制在少量轻量级的参数上可能还有防止过拟合的效果。

1.3 Interpretability

  • prompt design:
    • 很好解释
  • prompt tuning:
    • 不好解释,所以利用学到的embeding,利用cosin相似度找到最相近的一些词,来看最终学到了什么prompt,发现还是和理想的prompt词差别不是特别大
    • 用label的embedding进行初始化,发现tuning后embedding基本不变,而随机初始化或者sample初始化,也发现是在label附近继续找,说明模型可能就是想让label作为prompt。
    • prompt设置比较长后(100),发现有些token会找到相同的邻居,说明太长了可能会超过prompt此处的容量。

二、实验

1 模型参数消融实验

  • 在prompt长度,prompt初始化方法,预训练方法,训练步数上都做了消融实验,模型变大后,超参数影响都不大了
    • prompt长度:超过20效果就不错了
    • 初始化方法:随机初始化效果很差
    • 预训练方法:LM比span corruption要好
    • 训练步数:训练越长效果越好

2 参数的量级对比

  • Model Tuning:更新所有参数
  • pre-fix tuning:更新activations
  • WARP:更新输入输出层
  • Prompt Tuning:prompt embedding更新
  • prompt design:只需要添加prompt提示语

http://www.ppmy.cn/news/96885.html

相关文章

educoder实训——密码设置与安全性分析+Python 计算思维训练_公式编程

文章目录 随机生成一个n位密码任务描述编程要求代码将随机生成的n位密码MD5加密任务描述编程要求代码生成黑客密码字典任务描述编程要求代码模拟碰撞破解MD5密码任务描述编程要求代码检查密码是否泄漏任务描述编程要求代码字典增加元素任务描述代码字典的属性

如何使用Node.js REPL

目录 1、Nodejs REPL 2、_特殊变量 3、向上箭头键 4、点命令 5、从JavaScript文件运行REPL 1、Nodejs REPL REPL代表Read-Evaluate-Print-Loop,是交互式解释器。 node命令是我们用来运行Node.js脚本的命令: node script.js 如果我们运行node命令…

数组指针、二级指针传参

void test(int **p){}//二级指针接受 int main() { int a 0; int* p &a; int** pp &p; int* arr[10] { 0 }; test(pp);//二级指针传参 test(&p);//一级指针的地址 test(arr);//指针数组,存放指针地址的数组 return…

【Linux】可重入VS线程安全

文章目录 概念常见的线程不安全的情况常见的线程安全的情况常见的不可重入的情况常见的可重入的情况可重入与线程安全联系可重入与线程安全区别 概念 线程安全: 多个线程并发同一段代码时,不会出现不同的结果 常见对全局变量或者静态变量进行操作,并且没有锁保护的…

聊聊如何使用Js写一个简单的二级联动和三级联动呢?

前言:咳咳哈,大佬说:"这不是有手就行了?"好吧,这里不做过多罗里吧嗦,真的不过多吹,我们在下面直接上代码上注释。 文章目录: 原Js二级联动实现原Js三级联动实现 一、二级…

List Set Map Queue Deque 之间的区别是什么?

List Set Map Queue Deque 之间的区别是什么? 1. Java 集合框架有那些接口?2. List Set Map Queue Deque 之间的区别是什么? 1. Java 集合框架有那些接口? List、Set、Map、Queue、Deque 2. List Set Map Queue Deque 之间的区别…

Spring学习记录

目录 工厂模式的三种形态 简单工厂模式 代码: 运行结果: 总结: 工厂模式 代码: 运行结果: 总结: 抽象工厂模式 代码: 运行结果: 总结: bean的单例与多例 设置 …

Eureka 服务注册源码探秘——图解、源码级解析

🍊 Java学习:社区快速通道 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年5月2日 🍊 点…