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

2 大模型高效参数微调;prompt tunning

近年来,以GPT为代表的大型预训练模型(Pre-trained Language Models, PLMs)在自然语言生成任务中表现出色。为了更好的适配下游任务,传统的全参数微调(Fine-tuning)需要为每个下游任务存储和更新数十亿参数,这对计算资源和存储成本提出了巨大挑战。针对这个问题,GPT3中提出了prompt工程,然而大模型对用户设计的prompt比较敏感,因而也难以保证效果。在此背景下,Prompt Tuning作为一种轻量高效的微调方法备受关注,仅需对每一个任务训练一个提示向量,就可以大大提高大模型在这项任务的表现

一、什么是Prompt Tuning?

传统的Fine-tuning通过在预训练模型的基础上添加任务相关层(如分类器)并更新所有参数来适应具体任务。然而,这种方法有两个主要缺陷:

  • 参数低效:每个下游任务需独立保存完整模型副本。
  • 灾难性遗忘:微调可能覆盖预训练模型中的通用知识。

相比之下,Prompt Tuning的核心思想是通过在输入中插入可学习提示(Prompt),以极小的参数调整来适配下游任务。这种方法仅需优化提示相关的参数(通常占总参数的0.1%~1%),而冻结原始模型参数。如Figure1所示,Prompt Tuning所需要训练的参数最小。prompt Design就是Prompt工程,是不可训练的。

Figure1、不同微调方法所更新的参数

二、Prompt Tuning训练过程

2.1、设计提示模板

在原始输入前添加 k 个可学习的提示嵌入(例如 [P1][P2][P3][P4]),并拼接模板引导输出。例如:
Input: [P1][P2][P3][P4] 这部电影很有趣。总体评价是 [MASK] 的

其中,

    • [P1]-[P4]:可训练的提示,相当于4个待学习的token。每个P的嵌入维度与文本嵌入的维度一致,比如768。
    • [MASK]:模型需预测的位置,映射到标签(如“好”→“正面”,“差”→“负面”)。
    • 对于k的选择,论文中做了实验,20个性价比最高,如Figure3所示。本文中仅以4个作为例子。

Figure3

2.2、输入编码

    • 输入文本被转换为嵌入向量。
    • 提示嵌入原始输入的嵌入向量拼接后输入冻结的预训练模型(如 GPT3)。

2.3、计算损失

    • 模型预测 [MASK] 位置的 token 概率(如“好”的概率为 0.8,“差”为 0.2)。
    • 根据真实标签(假设是“正面”),计算交叉熵损失:Loss = -log(P("好"))

2.4、反向传播

    • 仅更新提示嵌入的参数[P1]-[P4] 嵌入向量)。
    • 预训练模型的参数保持冻结。

3、预测过程

Prompt Tuning训练完毕后,可学习提示嵌入的向量就保持不变,对该任务下的所有问题都使用这个提示嵌入。换言之,不管用户输入的问题是什么,只要是同一个任务下的问题,所插入的提示嵌入[P1]-[P4]都是一样的。要适配多任务,就需要为每一个任务训练一个可学习的提示嵌入。

3.1、添加训练后的提示

新输入 特效很棒,但剧情糟糕。 与前缀提示拼接:
[P1][P2][P3][P4] 特效很棒,但剧情糟糕。总体评价是 [MASK] 的。

其中,“总体评价是 [MASK] 的”是人工针对这项任务所设计的模板。要注意的是,训练后得到的是P1-P4四个嵌入向量,而不是4个token。需要对输入文本进行embedding后再与学习到的提示嵌入进行拼接。

3.2、模型推理

冻结的预训练模型处理整个输入序列,预测 [MASK] 位置的 token 概率(例如“差”的概率为 0.7)。

3.3、映射到标签

根据 [MASK] 预测结果(“差”),输出类别为“负面”。

4、参考文献

【1】 The Power of Scale for Parameter-Efficient Prompt Tuning


http://www.dtcms.com/a/267465.html

相关文章:

  • (LeetCode 每日一题) 1394. 找出数组中的幸运数 (哈希表)
  • Vue前端项目接收webSocket信息
  • uniapp 国密sm2加密
  • 国产数据库之达梦DM:破甲成蝶
  • php协程
  • 【内存】Linux 内核优化实战 - net.ipv4.tcp_tw_reuse
  • Spring boot之身份验证和访问控制
  • FreeCAD傻瓜教程-拉簧拉力弹簧的画法及草图的附着位置设定和Part工作台中形体构建器的妙用
  • C#扩展方法全解析:给现有类型插上翅膀的魔法
  • spring中 方法上@Transation实现原理
  • Flink-Source算子状态恢复分析
  • 机器视觉对位中的常见模型与技术原理
  • HTML网页应用打包Android App 完整实践指南
  • 【Project】基于kafka的高可用分布式日志监控与告警系统
  • openstack安装并初始化
  • 智能自主运动体的革命:当AI学会奔跑与协作 ——从单机定位到群体智能的跨越
  • 2025年的前后端一体化CMS框架优选方案
  • 未来趋势:AI与量子计算对服务器安全的影响
  • 博弈论基础-笔记
  • RTX5可以在中断中调用的API
  • 08_容器化与微服务:构建弹性架构
  • Ubuntu 22.04 修改默认 Python 版本为 Python3 笔记
  • Hbase2.6.2集群部署(最新版)
  • spring-initializer
  • OneCode MQTT插件开发实战:基于Paho.Client的物联网通信解决方案
  • python使用fastmcp包编写mcp服务端(mcp server)
  • ServiceNow CAD项目实战详细解析
  • PPT文字精简与视觉化技巧
  • StarRocks × Tableau 连接器完整使用指南 | 高效数据分析从连接开始
  • Eureka和Nacos都可以作为注册中心,它们之间的区别