当前位置: 首页 > 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.lryc.cn/news/581265.html

相关文章:

  • 【Linux】自旋锁和读写锁
  • 全素山药开发指南:从防痒处理到高可用食谱架构
  • DeepSeek扫雷游戏网页版HTML5(附源码)
  • C#指针:解锁内存操作的底层密码
  • 机械时代的计算
  • 【Linux】常用基本指令
  • 爬虫工程师Chrome开发者工具简单介绍
  • 推荐算法系统系列五>推荐算法CF协同过滤用户行为挖掘(itembase+userbase)
  • Python实例题:基于 Python 的简单电子词典
  • 洛谷刷题9
  • Django中关于templates目录和static目录存放位置的总结
  • Django跨域
  • python使用fastmcp包编写mcp服务端(mcp_server)和mcp客户端(mcp_client)
  • jxWebUI--用数据表输入输出数据
  • 前端进阶之路-从传统前端到VUE-JS(第三期-VUE-JS配套UI组件的选择)(Element Plus的构建)
  • SQL 表结构转 Go、Java、TS 自定义实体类,支持自编模板
  • 学习日志04 python
  • 解决kali Linux在VMware中的全局缩放问题
  • Linux:多线程---深入互斥浅谈同步
  • jvm架构原理剖析篇
  • Python之--基本知识
  • App爬虫实战篇-以华为真机手机爬取集换社的app为例
  • 11_架构演进:从单体到云原生的蜕变
  • 【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
  • Apache 配置文件提权的实战思考
  • Feign调用报“请求方法POST不支持“错误
  • 在sf=0.1时测试fireducks、duckdb、polars的tpch
  • 《设计模式之禅》笔记摘录 - 4.抽象工厂模式
  • pagecache过多导致oom的排查记录
  • 单用户模式、紧急模式、救援模式有什么区别