[LLM面试题] 指示微调(Prompt-tuning)与 Prefix-tuning区别
一、提示调整(Prompt Tuning)
Prompt Tuning是一种通过改变输入提示语(input prompt)以获得更优模型效果的技术。举个例子,如果我们想将一条英语句子翻译成德语,可以采用多种不同的方式向模型提问,如下图所示:

这个案例采用的是硬提示调优(hard prompt tuning) 方法,因为它直接修改了离散的输入标记(input tokens),而这些标记是不可再分的。
译者注:在自然语言处理领域,一般将文本进行分词处理,将一个句子拆分为一个个离散的单词或标点符号作为input token。每个token代表一个离散的语义单位,模型可以根据这些token进行语义理解和生成回复。
例如,对于句子 "你好,很高兴见到你!",可以将其分解为以下离散的input token:
[ "你", "好", ",", "很", "高兴", "见到", "你", "!" ]
这些离散的token可以作为模型的输入,用于训练或生成对话回复。注意,在使用离散的input token时需要将其转换为对应的向量表示(如词嵌入表示),以便模型能够对其进行处理和学习。
与硬提示调优(hard prompt tuning)相反,软提示调优(soft prompt tuning)方法(Lester等人,2021年[1])将输入标记(input tokens)的嵌入(embeddings)与可通过反向传播算法(backpropagation)进行优化的可训练张量(tensor)连接起来,以提高模型在目标任务上的性能。
伪代码如下所示:

与离散的文本prompt不同,软提示(soft prompts)是通过反向传播算法(back-propagation)获得的,因此可以根据已标注数据集的损失函数反馈(loss feedback)进行调整。
相较于全参数微调(full-finetuning),软提示调优(soft prompt tuning)具有更高的参数效率(more parameter-efficient),但使用软提示调优的模型性能可能稍逊一筹,如下图所示。

二、前缀调优(Prefix Tuning)
目前,有一种特殊的、被独立开发的prompt tuning方式被称为前缀调优(prefix tuning) (Li & Liang 2021[2])。其思想是将可训练的张量(trainable tensors)添加到每个Transformer块中,而非像soft prompt tuning中那样只添加输入嵌入(input embeddings)。同时,通过全连接层(fully connected layers,两层并且具有非线性激活函数的小型多层感知机)获取soft prompt embedding。
译者注: 在使用深度学习模型进行自然语言处理任务时,input embeddings常作为模型的第一层进行使用,将离散的input token转换为连续的向量表示,从而实现对文本的有效建模和处理。
前缀调优技术将预定义的prompt嵌入到模型中,以影响模型的生成行为。这项技术可以改变模型对输入的解释方式,使得模型能够更好地根据prompt生成相应的输出。
下图说明了常规Transformer块和经过前缀(prefix)修改的Transformer块之间的区别。

请注意,在上图中,“全连接层”是指一个小型多层感知机(由两个全连接层和一个非线性激活函数组成)。这些全连接层将soft prompt嵌入到一个与transformer块输入具有相同维度的特征空间(feature space)中,以确保两层连接时的兼容性。
使用Python伪代码,可以说明常规Transformer块和经过前缀(prefix)修改的Transformer块之间的区别:

根据提出prefix tuning的论文,该方法在仅训练0.1%的参数的情况下,实现了与微调所有层相当的模型性能(该实验基于GPT-2模型)。此外,在大多数情况下,prefix tuning的表现甚至优于微调所有层,可能是因为该方法涉及的参数较少,有助于减少对较小目标数据集的过拟合问题。
最后,为了澄清推理过程中soft prompts的使用方式,请注意以下几点:在学习了soft prompts后,在我们针对特定任务对模型进行微调时,我们必须将其(soft prompts)作为前缀(prefix)提供。这样做可以使模型根据特定任务自定义其回答。此外,我们可以拥有多个soft prompts,每个对应于不同的任务,并且在推理过程能够提供相应的前缀,以最好地去处理特定任务。
三、两者区别
在性能方面,soft prompt tuning和prefix tuning孰强孰弱?不幸的是,就性能而言,目前尚无直接比较soft prompt tuning和prefix tuning的研究结果,因为这它们是独立开发并同时发布的方法,各自的论文中未进行直接的比较。此外,在我查阅参数高效型大语言模型(parameter-efficient LLM)的最新文献中,并没有找到同时包含这两种方法的基准测试(benchmark) 。
在prefix tuning这种方法中,通过向输入序列(input sequence)插入特定任务的前缀(a task-specific prefix)来修改模型的更多层、,因此需要微调更多的参数。另一方面,soft prompt tuning仅涉及对input prompt embeddings进行微调,因此更新的参数较少。这使得soft prompt tuning可能比prefix tuning更轻量化(parameter-efficient),但也可能限制了其适应更广泛目标任务的能力。
就性能方面而言,我们可以合理地期望prefix tuning可能表现得更好,因为它能够调整更多的模型参数以便适应更广泛的新任务。然而,这可能是以增加计算资源的消耗和提高模型出现过拟合的风险为代价的。另一方面,soft prompt tuning可能具有更高的计算效率,但由于微调的参数较少,可能会导限制模型的性能。
四、总结
好啦,以上就是Prefix Tuning 和 Prompt Tuning的介绍,结合了伪代码进行辅助讲解,更容易理解这两者的区别,而不是文绉绉的文本介绍,对于面试者来说增加容易理解。
相关文章:

[LLM面试题] 指示微调(Prompt-tuning)与 Prefix-tuning区别
一、提示调整(Prompt Tuning) Prompt Tuning是一种通过改变输入提示语(input prompt)以获得更优模型效果的技术。举个例子,如果我们想将一条英语句子翻译成德语,可以采用多种不同的方式向模型提问,如下图所示…...

【CubeMX+STM32】SD卡 U盘文件系统 USB+FATFS
本篇,将使用CubeMXKeil, 创建一个 USBTF卡存储FatFS 的虚拟U盘读写工程。 目录 一、简述 二、CubeMX 配置 SDIO DMA FatFs USB 三、Keil 编辑代码 四、实验效果 串口助手,实现效果: U盘,识别效果: 一、简述 上…...
在JVM的栈(虚拟机栈)中,除了栈帧(Stack Frame)还有什么?
在JVM的栈(虚拟机栈)中,除了栈帧(Stack Frame),还有其他一些与方法调用相关的重要信息。栈的主要作用是存储方法调用的执行过程中的上下文信息,栈帧是其中最关键的组成部分。 栈的组成 栈帧&am…...
# 解析Excel文件:处理Excel xlsx file not supported错误 [特殊字符]
解析Excel文件:处理Excel xlsx file not supported错误 🧩 嘿,数据分析的小伙伴们!👋 我知道在处理Excel文件的时候,很多人可能会遇到这样一个错误:Excel xlsx file not supported。别担心&…...
图片下载不下来?即便点了另存为也无法下载?两种方法教你百分之百下载下来
前言,我要讲的是网站没有禁鼠标右键,可以右键,也可以打开控制台,图片也不用付费这种。 一、用鼠标按住图片直接往桌面拖动,也可以打开开发者工具,在里面往外拖。 二、这个方法很有意思,在电脑的…...
Unity项目实战-Player玩家控制脚本实现
玩家控制脚本设计思路 1. 代码演变过程 1.1 初始阶段:单一Player类实现 最初的设计可能是一个包含所有功能的Player类: public class Player : MonoBehaviour {private CharacterController controller;private Animator animator;[SerializeField] …...
CP AUTOSAR标准之ICUDriver(AUTOSAR_SWS_ICUDriver)(更新中……)
1 简介和功能概述 该规范指定了AUTOSAR基础软件模块ICU驱动程序的功能、API和配置。 ICU驱动程序是一个使用输入捕获单元(ICU)来解调PWM信号、计数脉冲、测量频率和占空比、生成简单中断和唤醒中断的模块。 ICU驱动程序提供服务 信号边缘通知控制唤醒中断周期信号时间测…...
Python3 ImportError: cannot import name ‘XXX‘ from ‘XXX‘
个人博客地址:Python3 ImportError: cannot import name XXX from XXX | 一张假钞的真实世界 例如如下错误: $ python3 git.py Traceback (most recent call last):File "git.py", line 1, in <module>from git import RepoFile &quo…...

[学习笔记] Kotlin Compose-Multiplatform
Compose-Multiplatform 原文:https://github.com/zimoyin/StudyNotes-master/blob/master/compose-multiplatform/compose.md Compose Multiplatform 是 JetBrains 为桌面平台(macOS,Linux,Windows)和Web编写Kotlin UI…...

【R语言】t检验
t检验(t-test)是用于比较两个样本均值是否存在显著差异的一种统计方法。 t.test()函数的调用格式: t.test(x, yNULL, alternativec("two.sided", "less", "greater"), mu0, pairedFALSE, var.equalFALSE, co…...
flutter ListView Item复用源码解析
Flutter 的 ListView 的 Item 复用机制是其高性能列表渲染的核心,底层实现依赖于 Flutter 的渲染管线、Element 树和 Widget 树的协调机制。以下是 ListView 复用机制的源码级解析,结合关键类和核心逻辑进行分析。 1. ListView 的底层结构 ListView 的复…...
Spring Boot 配置 Mybatis 读写分离
JPA 的读写分离配置不能应用在 Mybatis 上, 所以 Mybatis 要单独处理 为了不影响原有代码, 使用了增加拦截器的方式, 在拦截器里根据 SQL 的 CRUD 来路由到不同的数据源 需要单独增加Mybatis的配置 Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) t…...

网络初识-
网络的相关概念 一、局域网和广域网 将各种计算机、外部设备等相互连接起来,实现在这个范围内数据通信和资源共享的计算机网络。它的覆盖范围通常在几百米到几公里之内。例如,一个小型企业的办公室,通过交换机将多台电脑连接在一起…...
DNS污染:网络世界的“隐形劫持”与防御
在互联网的底层架构中,DNS(域名系统)如同数字世界的“导航员”,将用户输入的域名翻译成机器可读的IP地址。然而,DNS污染(DNS Poisoning)正像一场无声的“地址篡改”危机,威胁着全球网…...

MQTT(Message Queuing Telemetry Transport)协议(三)
主题是什么 2. TCP 协议封装 tcp.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>// 建立 TCP 连接 int tcp_connect(const char *server_ip, int s…...
多核cpu与时间片多线程的问题
在多核处理器中,每个核心可以独立运行一个线程。操作系统负责管理和调度这些线程,以确保高效利用处理器资源。下面详细解释如何获取时间片以及四个线程如何在四个核心上同时工作。 ### 时间片和调度 #### 1. 时间片(Time Slice)…...

电脑出现蓝屏英文怎么办?查看修复过程
电脑出现蓝屏英文是一种常见的电脑故障,它通常表示电脑遇到了严重的错误,需要停止运行以防止进一步的损坏。电脑蓝屏英文的原因可能有很多,比如硬件故障、驱动程序错误、系统文件损坏、病毒感染等。那么,当电脑出现蓝屏英文时&…...
安卓基础(第一集)
SharedPreferences(本地存储简单数据) 在 Android 中,SharedPreferences 用于存储小型数据。 (1)存储数据 // 获取 SharedPreferences 对象 SharedPreferences sharedPreferences getSharedPreferences("MyPre…...
【从零开始入门unity游戏开发之——C#篇56】C#补充知识点——模式匹配
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...

【数据可视化-16】珍爱网上海注册者情况分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...