大模型微調 Prompt Tuning與P-Tuning 的區別?

Prompt TuningP-Tuning 都屬于 參數高效微調方法(PEFT, Parameter-Efficient Fine-Tuning),主要是為了避免對大模型全部參數進行訓練,而是通過小規模參數(prompt embedding)來適配下游任務。但兩者的實現方式和應用場景有一些區別:

提示微調 僅在輸入嵌入層中加入可訓練的提示向量。在離散提示方法的基礎上,提示微調首先在輸入端插入一組連續嵌入數值的提示詞元,這些提示詞元可以以自由形式 或前
綴形式 來增強輸入文本,用于解決特定的下游任務。在具體實現中,只需要
將可學習的特定任務提示向量與輸入文本向量結合起來一起輸入到語言模型中。
P-tuning 提出了使用自由形式來組合輸入文本和提示向量,通過雙向 LSTM
來學習軟提示詞元的表示,它可以同時適用于自然語言理解和生成任務。另一種
代表性方法稱為 Prompt Tuning ,它以前綴形式添加提示,直接在輸入前拼
接連續型向量
。在提示微調的訓練過程中,只有提示的嵌入向量會根據特定任務
進行監督學習,然而由于只在輸入層中包含了極少量的可訓練參數,有研究工作
表明該方法的性能高度依賴底層語言模型的能力 。下圖 展示了提示微調算
法的示意圖。

在這里插入圖片描述


1. Prompt Tuning

  • 提出者:Lester et al., 2021(Google)

  • 核心思想

    • 在輸入序列前面加上 可學習的“虛擬token embedding”(prompt embedding),而不是直接調模型的原始參數。
    • 這些 prompt embeddings 在訓練時會被更新,而模型的其他參數保持凍結。
  • 應用方式

    • 常用于 encoder-decoder模型(如T5) 或 decoder-only(如GPT)任務。
    • 輸入 [Prompt Embeddings] + [下游任務輸入] → 模型輸出。
  • 特點

    • 訓練參數量極小(只訓練 prompt embedding)。
    • Prompt 是直接加在 embedding 層,和 token embedding 維度相同。
    • 更偏向 NLP生成/分類任務

2. P-Tuning

  • 提出者:Liu et al., 2021(清華)

  • 核心思想

    • 最初的 P-Tuning v1:用 連續可學習 embedding 代替離散 prompt。
    • P-Tuning v2(改進版,ACL 2022):通過 深層插入虛擬 prompt embedding 到 Transformer 的多層中(不是只在輸入層)
  • 應用方式

    • 適用于 分類、生成、信息抽取 等多種任務。
    • v2 更適合 小數據集場景,因為它的表示能力比單層 prompt tuning 更強。
  • 特點

    • P-Tuning v1 和 Prompt Tuning 類似,都是加連續 embedding。
    • P-Tuning v2 比 Prompt Tuning 更強,因為不僅在輸入層,而且在 Transformer 各層都插入可學習參數。
    • 表現更接近全參數微調,但仍保持參數高效。

3. 區別總結

對比點Prompt TuningP-Tuning (v1)P-Tuning v2
參數位置輸入層前加虛擬 embedding輸入層前加連續 embedding各層 Transformer 插入虛擬 prompt
訓練參數量極少極少較少(但比 Prompt Tuning 多)
表達能力相對較弱類似 Prompt Tuning更強,接近全量微調
適用任務NLP下游任務(分類、生成)NLP任務小數據/復雜任務,泛化更好
提出方Google (Lester et al., 2021)清華 (Liu et al., 2021)清華 (v2, ACL 2022)

一句話總結

  • Prompt Tuning:只在輸入 embedding 層加可學習 prompt → 輕量但表達能力有限。
  • P-Tuning:不僅能在輸入層加 embedding,還能在 Transformer 深層插入虛擬 prompt(尤其 v2) → 表達能力更強,效果接近全參數微調。

舉例說明。


1. 普通 Embedding(離散 token embedding)

在 NLP 里,輸入通常是離散的 token(如 “apple”、“我”、“中國”)。
這些 token 會先通過 詞表查找 變成向量:

例如詞表大小 = 10000,embedding 維度 = 768:

"apple"   → [0.12, -0.34, 0.98, ... , 0.45]  (768維向量)
"中國"     → [0.87, 0.22, -0.54, ... , -0.11]

這些 embedding 是模型在預訓練時學好的。


2. 虛擬 embedding(virtual tokens / prompt embedding)

  • 意思:人為加一些 不存在于詞表中的“假token”,但是它們有 embedding 向量。
  • 這些向量是 隨機初始化 的,然后通過訓練學習,而不是固定的詞表 lookup。
  • 它們本身沒有對應的文字,只是模型前面附加的“提示信號”。

舉例:

假設我們要做 情感分類(句子 → 積極/消極),輸入是:

"這部電影很精彩"

用 Prompt Tuning 時,可以加 5 個虛擬 token:

[v1][v2][v3][v4][v5] 這部電影很精彩

其中 [v1]...[v5] 就是 虛擬 embedding

[v1] → [0.01, 0.77, -0.32, ...]
[v2] → [0.55, -0.88, 0.14, ...]
...

這些 embedding 不屬于詞表,但會在訓練過程中學會 如何引導模型輸出“積極/消極”


3. 連續 embedding(continuous prompt)

  • 意思:Prompt 不再用自然語言(“Please classify the sentiment…”),而是直接用 連續向量
  • 這個概念最早是 P-Tuning v1 提的,本質和虛擬 embedding 很像,但強調它是 連續空間里的可學習向量,而不是離散 token(不可再映射回“文字”)。

舉例:

離散 prompt(人寫的文字)可能是:

"這部電影很精彩 [MASK]"

連續 prompt(P-Tuning)則是:

[0.12, -0.33, 0.98, ...]  (embedding1)
[0.54,  0.11, -0.66, ...] (embedding2)
[0.22, -0.77, 0.44, ...]  (embedding3)
這部電影很精彩

區別在于:

  • 離散 prompt = 用真實 token(如 “Please”, “answer”)拼出來。
  • 連續/虛擬 prompt = 直接用可訓練的向量,不需要映射回文字。

4. 總結

  • 虛擬 embedding = 給模型輸入前面加“假 token”,它們的 embedding 隨訓練調整。

  • 連續 embedding = 直接訓練連續的 embedding 向量,不一定對應詞表里的任何 token。

  • 本質上兩者差別不大,很多時候是不同論文里對類似概念的叫法,區別主要在:

    • Prompt Tuning 強調 虛擬 token embedding
    • P-Tuning 強調 連續可學習 embedding(不依賴離散 token)

下邊是一個 PyTorch 示例,演示如何在輸入序列前面加上 虛擬/連續 embedding

假設我們有一個簡化的模型(類似 BERT),輸入是 token embedding,我們想在輸入前面加幾個可學習的 prompt embedding


🔹 PyTorch 示例代碼

import torch
import torch.nn as nnclass SimpleModel(nn.Module):def __init__(self, vocab_size=10000, embed_dim=16, prompt_len=5):super().__init__()# 普通 embedding (詞表)self.embedding = nn.Embedding(vocab_size, embed_dim)# prompt embedding (虛擬/連續向量,不屬于詞表)self.prompt_embedding = nn.Parameter(torch.randn(prompt_len, embed_dim))# 一個簡單的分類頭self.fc = nn.Linear(embed_dim, 2)  # 假設2分類任務def forward(self, input_ids):"""input_ids: [batch_size, seq_len]  (普通輸入token的id)"""batch_size = input_ids.size(0)# 1. 把 token id 轉換成 embeddingtoken_embeds = self.embedding(input_ids)  # [batch, seq_len, embed_dim]# 2. prompt embedding (復制到 batch 維度)prompt_embeds = self.prompt_embedding.unsqueeze(0).expand(batch_size, -1, -1)  # [batch, prompt_len, embed_dim]# 3. 拼接 prompt 和原始輸入full_embeds = torch.cat([prompt_embeds, token_embeds], dim=1)  # [batch, prompt_len+seq_len, embed_dim]# 假設我們只取最后一個 token 位置做分類last_hidden = full_embeds[:, -1, :]  # [batch, embed_dim]# 分類logits = self.fc(last_hidden)return logits# ======================
# 🔹 測試
# ======================
batch_size = 2
seq_len = 4
vocab_size = 10000
embed_dim = 16
prompt_len = 5model = SimpleModel(vocab_size, embed_dim, prompt_len)# 模擬兩個樣本,每個長度為4
input_ids = torch.randint(0, vocab_size, (batch_size, seq_len))print("輸入 token ids:\n", input_ids)logits = model(input_ids)
print("輸出 logits:\n", logits)

🔹 運行邏輯說明

  1. 普通 embedding:把輸入 token id 轉成向量。

    • 例如 [12, 87, 325, 99] → 4個 embedding
  2. prompt embedding:訓練時額外引入的向量,例如 5 個虛擬 token

    • 例如 [p1, p2, p3, p4, p5] → 5個 embedding
  3. 拼接輸入

    [p1, p2, p3, p4, p5, token1, token2, token3, token4]
    
  4. 模型只更新 prompt embedding,而原始模型參數可以凍結(只讓 self.prompt_embedding 學習)。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920380.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920380.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920380.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

控制系統仿真之PID校正1-系統固有屬性(四)

一、PID校正概述PID校正是比例(Proportional)積分(Integral)微分(Derivative)校正的簡稱,是歷史最悠久,生命力最強的控制方式。其主要優點有:①原理簡單、使用方便②適應性強,可廣泛…

C語言————斐波那契數列(例題1)

小博在學習c語言時,總是會遇到一些很典型的例題,如:斐波那契數列,漢諾塔問題,冒泡排列問題,等等。小博決定匯總一下,今天講清斐波那契數列,后續持續更新。一、斐波那契數列斐波那契數…

Text to Speech技術詳解與實戰:GPT-4o Mini TTS API應用指南

Text to Speech技術詳解與實戰:GPT-4o Mini TTS API應用指南 一、概述 Text to Speech(TTS,文本轉語音)技術正在廣泛應用于博客配音、多語言音頻輸出與實時語音流等場景。越來越多的開發者希望將自然、流暢的AI語音集成到產品中…

數字ic后端Useful Skew到底怎么玩的?

CCOpt的Useful Skew到底怎么玩的?上圖里,我們可以看到,在CCOpt之前,這個chain上的slack為200ps/-100ps/200ps。我們想修復這-100ps的slack,就有兩個策略了:方法1:把F1的delay提前;方…

Linux 網絡配置與系統管理指南

文章目錄 1. 虛擬機網絡模式 1. 橋接模式 (Bridged) 2. NAT 模式 3. 僅主機模式 (Host-only) 2. 固定IP配置(橋接模式) 配置步驟: 3. 進程管理 1)查看進程:ps命令 2)終止進程 3)進程樹查看 4. 服務管理 1)systemctl管理服務 2)chkconfig服務管理 5. 動態監控 top命令 …

算法學習筆記:雙指針_滑動窗口專題

目錄 1.長度最小的子數組 2.無重復字符的最長子串 3.將x減少到0的最小操作數 4.最大連續1的個數Ⅲ 5.找到字符串中所有字母異位詞 6.水果成籃 7.串聯所有單詞的子串 8.最小覆蓋子串 1.長度最小的子數組:209. 長度最小的子數組 - 力扣(LeetCode&a…

Witsbb健敏思是哪個國家的品牌?澳洲純凈溯源,100+過敏原排除的敏寶專研品牌

在為敏感體質寶寶挑選營養補充品時,“品牌來源是否可靠”“品控標準是否嚴格”往往是寶爸寶媽的首要考量。源自澳大利亞的Witsbb健敏思,作為澳企Forestpark旗下的綜合膳食營養補充品牌,從誕生起便根植于澳洲嚴苛的保健品監管體系,…

gdbserver遠程調試和交叉編譯gdb

1、交叉編譯gdb 1.1下載源碼 Gdb源碼:wget https://ftp.gnu.org/gnu/gdb/gdb-15.2.tar.xz Gdb依賴的源碼:GMP、MPFR、ncurses(圖形庫) GMP源碼:wget https://ftp.gnu.org/gnu/gmp/gmp-6.3.0.tar.xz MPFR源碼&#xff1…

UE5.5模型導入FBX強制x軸向前Force Front XAxis

很多軟件軸向都是不同的 , 所以模型導入虛幻的時候 可以勾選Force Front XAxisUE5.5 在右上角設置 點擊右上角三個點就可以看到強制前X軸

Docker中如何記錄非交互式連接ssh用戶操作的所有命令記錄?

網羅開發(小紅書、快手、視頻號同名)大家好,我是 展菲,目前在上市企業從事人工智能項目研發管理工作,平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術,包括iOS、前端、Harmony OS、Java、Python等方…

渦旋場和撓場的對偶性方程組

要將渦旋場與撓場的動態對偶性以麥克斯韋方程組的形式嵌入愛因斯坦-嘉當理論的彎曲時空框架中。一、符號與幾何基礎1. 基本張量定義 度規張量: g_{\mu\nu} (描述時空彎曲, \mu,\nu 0,1,2,3 )。仿射聯絡: \Gamma^\la…

8.28日QT

思維導圖#include <iostream>using namespace std;int main() {int a0,b0,c0,d0;string i;cout << "請輸入一個字符串" << endl;getline(cin,i);int yi.size()-1;while(1){if(a<i[y]&&i[y]<z){aa1;}else if(A<i[y]&&i[y]…

跨網絡通信:路由器如何實現全球互聯

目錄 一、跨網絡的兩臺主機通信 二、采用不同通信標準的兩個局域網內的主機通信 三、路由器實現的“認路”功能、數據傳輸&#xff1a;封裝與解封裝 四、認識IP地址 五、為什么訪問目標主機需要經過路由器&#xff1f; 1、網絡劃分 2、尋址與轉發 六、目的IP地址的核心意…

HTTP 頭

HTTP 頭&#xff08;HTTP Header&#xff09;是 HTTP 請求/響應中用于傳遞元數據的關鍵部分&#xff0c;分為 請求頭&#xff08;Request Header&#xff09;、響應頭&#xff08;Response Header&#xff09;、通用頭&#xff08;General Header&#xff09; 和 實體頭&#x…

vue 海康視頻插件

背景&#xff1a; 在vue項目中&#xff0c;需要在pc端播放視頻&#xff0c;播放的視頻包括視頻實時、視頻回放等。 寫文思路&#xff1a; 海康視頻對接流程&#xff0c;了解海康視頻插件&#xff0c;前端開發項目并引入依賴&#xff0c;前端開發封裝的組件&#xff0c;組件的調…

【URP】Unity 插入自定義RenderPass

【從UnityURP開始探索游戲渲染】專欄-直達 自定義渲染通道是一種改變通用渲染管道&#xff08;URP&#xff09;如何渲染場景或場景中的對象的方法。自定義呈現通道(RenderPass)包含自己的Render代碼&#xff0c;可以在注入點將其添加到RenderPass中。 添加自定義呈現通道(Rend…

DevSecOps 集成 CI/CD Pipeline:實用指南

就在你以為軟件開發已無簡化的余地時&#xff0c;新的解決方案應運而生 隨著軟件開發幾乎每天都在攀升&#xff0c;組織不斷嘗試以前所未有的速度交付新功能和應用程序。雖然持續集成和持續交付 &#xff08;CI/CD&#xff09; Pipeline 徹底改變了軟件部署&#xff0c;但它們…

vue2+elementui 表格單元格增加背景色,根據每列數據的大小 顏色依次變淺顯示

注釋&#xff1a; vue2elementui 表格列實現一個功能&#xff0c;給定兩個顏色&#xff1a;紅色 #f96d6f 和 綠色 #63be7b&#xff0c;列數據正數時表格單元格背景色為紅色&#xff0c;列數據負數時表格單元格背景色為綠色&#xff0c;根據數據的大小顏色依次越來越淡&#xff…

【JavaEE】(19) MyBatis-plus

一、MyBatis Generator 為 MyBastis 框架設計的代碼生成工具&#xff0c;簡化持久層編碼工作。根據數據庫表自動生成 Java 實體類、Mapper 接口、SQL 的 xml 文件。讓開發者專注于業務邏輯。 1、引入插件 MyBatis 官網搜索 MyBatis Generator 插件&#xff1a;Running MyBatis…

Android之騰訊TBS文件預覽

文章目錄前言一、效果圖二、實現步驟1.去官網注冊并創建應用[騰訊官網](https://console.cloud.tencent.com/tbs/client)2.下載arr文件并引入[騰訊TBS](https://download.csdn.net/download/Android_Cll/91764395)3.application實例化4.activity實例化5.下載網絡文件6.PreviewA…