【大模型】大模型微調方法總結(四)

1. P-Tuning v1

1.背景

????????大模型的Prompt構造方式嚴重影響下游任務的效果。比如:GPT-3采用人工構造的模版來做上下文學習(in context learning),但人工設計的模版的變化特別敏感,加一個詞或者少一個詞,或者變動位置都會造成比較大的變化。

????????P-Tuning,在《GPT Understands, Too》中被提出,該方法將離散的Prompt轉換為可以學習的Embedding層,并用MLP+LSTM的方式來對Prompt Embedding進行一層處理,成功地實現了模版的自動構建。

2.技術原理

????????P-Tuning 提出將 Prompt 轉換為可以學習的 Embedding 層,并考慮到直接對 Embedding 參數進行優化會存在這樣兩個挑戰:

? ? ? ? 1.Discretenes: 對輸入正常語料的 Embedding 層已經經過預訓練,而如果直接對輸入的 ????????????????prompt embedding進行隨機初始化訓練,容易陷入局部最優。

? ? ? ? 2.Association:沒法捕捉到 prompt embedding 之間的相關關系。

????????基于此,作者提出了P-Tuning,設計了一種連續可微的virtual token(同Prefix-Tuning類似)。該方法將Prompt轉換為可以學習的Embedding層,并用MLP+LSTM的方式來對Prompt Embedding進行一層處理。

????????相比Prefix Tuning,P-Tuning加入的可微的virtual token僅限于輸入層,沒有在每一層都加;另外,virtual token的位置也不一定是前綴,插入的位置是可選的。這里的出發點實際是把傳統人工設計模版中的真實token替換成可微的virtual token。

????????優化virtual token:經過預訓練的LM的詞嵌入已經變得高度離散,如果隨機初始化virtual token,容易優化到局部最優值;這些virtual token理論是應該有相關關聯的,要對這種關聯進行建模。作者發現的是用一個prompt encoder來編碼收斂更快,效果更好。也就是說,用一個LSTM+MLP去編碼這些virtual token以后,再輸入到模型。換言之,P-tuning并不是隨機初始化幾個新token然后直接訓練的,而是通過一個小型的LSTM模型把這幾個Embedding算出來,并且將這個LSTM模型設為可學習的。

????????選擇雙向長短期記憶網絡 (LSTM),使用 ReLU 激活的兩層多層感知器 (MLP) 來對prompt embedding 進行一層處理來鼓勵離散性。

????????將LSTM作為prompt-encoder,并進行隨機初始化。GPT模型仍然會被全部凍結,只更新LSTM的參數。LSTM的參數是所有任務同時共享的,但是LSTM為不同的task輸出unique virtual token embeddings。virtual token embedding和Prompt Tuning以一樣的方式插入input token中。

class PromptEncoder(torch.nn.Module):......def forward(self, indices):input_embeds = self.embedding(indices)if self.encoder_type == PromptEncoderReparameterizationType.LSTM:output_embeds = self.mlp_head(self.lstm_head(input_embeds)[0])elif self.encoder_type == PromptEncoderReparameterizationType.MLP:output_embeds = self.mlp_head(input_embeds)else:raise ValueError("Prompt encoder type not recognized. Please use one of MLP (recommended) or LSTM.")return output_embeds

2.?P-Tuning v2

1.背景

????????之前的Prompt Tuning和P-Tuning等方法存在兩個主要的問題:

? ? ? ?1.缺乏模型參數規模和任務通用性。

????????缺乏規模通用性:Prompt Tuning論文中表明當模型規模超過100億個參數時,提示優化可以與全量微調相媲美。但是對于那些較小的模型(從100M到1B),提示優化和全量微調的表現有很大差異,這大大限制了提示優化的適用性。

????????缺乏任務普遍性:盡管Prompt Tuning和P-tuning在一些 NLU 基準測試中表現出優勢,但提示調優對硬序列標記任務(即序列標注)的有效性尚未得到驗證。

????????2.缺少深度提示優化,在Prompt Tuning和P-tuning中,連續提示只被插入transformer第一層的輸入embedding序列中,在接下來的transformer層中,插入連續提示的位置的embedding是由之前的transformer層計算出來的,這可能導致兩個可能的優化挑戰。

????????由于序列長度的限制,可調參數的數量是有限的。

????????輸入embedding對模型預測只有相對間接的影響。

????????考慮到這些問題,作者提出了Ptuning v2,它利用深度提示優化(如:Prefix Tuning),對Prompt Tuning和P-Tuning進行改進,作為一個跨規模和NLU任務的通用解決方案。

2.技術原理???????

?????????針對?P-Tuning v1存在的局限論文《P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》P-Tuning v2 的目標就是要讓 Prompt Tuning 能夠在不同參數規模的預訓練模型、針對不同下游任務的結果上都達到匹敵 Fine-tuning 的結果。也就是說當前 Prompt Tuning 方法在這兩個方面都存在局限性。基于此,P-Tuning V2進行了下述改進:
????????1.在每一層都加入了Prompts tokens作為輸入,而不是僅僅加在輸入層,這與Prefix Tuning的做法相同。這樣得到了更多可學習的參數,且更深層結構中的Prompt能給模型預測帶來更直接的影響。

????????2.去掉了重參數化的編碼器。以前的方法利用重參數化功能來提高訓練速度和魯棒性(例如,用于prefix-tunning的 MLP 和用于 P-tuning的 LSTM)。在 P-tuning v2 中,作者發現重參數化的改進很小,尤其是對于較小的模型,同時還會影響模型的表現。

????????3.針對不同任務采用不同的提示長度。提示長度在提示優化方法的超參數搜索中起著核心作用。在實驗中,我們發現不同的理解任務通常用不同的提示長度來實現其最佳性能,這與Prefix-Tuning中的發現一致,不同的文本生成任務可能有不同的最佳提示長度。比如簡單分類任務下 length=20 最好,而復雜的任務需要更長的 Prompt Length。

????????4.可選的多任務學習。先在多任務的Prompt上進行預訓練,然后再適配下游任務。一方面,連續提示的隨機慣性給優化帶來了困難,這可以通過更多的訓練數據或與任務相關的無監督預訓練來緩解;另一方面,連續提示是跨任務和數據集的特定任務知識的完美載體。比如說,在NER中,可以同時訓練多個數據集,不同數據集使用不同的頂層classifer,但是prefix continuous prompt是共享的。

????????可以看到右側的p-tuning v2中,將continuous prompt加在序列前端,并且每一層都加入可訓練的prompts。在左圖v1模型中,只將prompt插入input embedding中,會導致可訓練的參數被句子的長度所限制。

? ? ? ? 另外在V2中,移除了Reparameterization,舍棄了詞匯Mapping的Verbalizer的使用,重新利用CLS和字符標簽,來增強通用性,這樣可以適配到序列標注任務。此外,作者還引入了兩項技術:

? ? ? ? 1.Deep Prompt Encoding:采用 Prefix-tuning 的做法,在輸入前面的每層加入可微調的參數。使用無重參數化編碼器對pseudo token,不再使用重參數化進行表征(如用于 prefix-tunning 的 MLP 和用于 P-tuning 的 LSTM),且不再替換pre-trained word embedding,取而代之的是直接對pseudo token對應的深層模型的參數進行微調。

? ? ? ? 2.Muliti-task learning:基于多任務數據集的Prompt進行預訓練,然后再適配到下游任務。對于pseudo token的continous prompt,隨機初始化比較難以優化,因此采用multi-task方法同時訓練多個數據集,共享continuous prompts去進行多任務預訓練,可以讓prompt有比較好的初始化。

peft_config = PrefixTuningConfig(task_type="SEQ_CLS", num_virtual_tokens=20)
model = AutoModelForSequenceClassification.from_pretrained(model_name_or_path, return_dict=True)
model = get_peft_model(model, peft_config)

Reference:

1.大模型煉丹術:大模型微調的常見方法 - 知乎?

2.大模型微調之P-tuning方法解析 | 美熙智能

3.Prompt Tuning和P-Tuning的區別在哪里? - 知乎

4.大模型微調總結

5.詳解大模型微調方法Prompt Tuning(內附實現代碼)

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

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

相關文章

MySQL存儲引擎 INNODB和MYISAM

存儲引擎概述 什么是存儲引擎 是數據庫底層軟件組件,數據庫管理系統使用數據索引進行創建、查詢、更新和刪除數據操作。不同的存儲引擎提供不同的存儲機制、索引技巧】鎖定水平等功能,使用不同的存儲引擎可以獲得特定的功能 MySQL5.7支持的存儲引擎 …

大數據面試之Hadoop

目錄 介紹下Hadoop Hadoop的特點 說下Hadoop生態圈組件及其作用 Hadoop主要分哪幾個部分?他們有什么作用? Hadoop 1.x,2x,3.x的區別 Hadoop集群工作時啟動哪些進程?它們有什么作用? 在集群計算的時候,什么是集群的主要瓶頸 搭建Ha…

用英文介紹美國總統Trump: Donald J. Trump Twice Impeached (2017 – 2021)

Donald J. Trump: Twice Impeached (2017 – 2021) Link: https://www.youtube.com/watch?vJ7RC2DKf6rs&listPLybg94GvOJ9E-ZM1U6PAjgPUmz-V4-Yja&index45 Summary Summary of Donald Trump’s Rise and Presidency Donald John Trump, originally from Queens, Ne…

網頁中如何接入高德地圖【靜態地圖篇】

接入高德地圖 登錄高德開放平臺創建應用添加key創建靜態地圖文檔說明markers 網頁應用總結 登錄高德開放平臺 高德開放平臺 創建應用 點擊我的應用 -> 創建應用 添加key 調相關接口都需要用到這個key! 創建靜態地圖 靜態地圖API文檔 文檔說明 服務地址…

基于上一篇博客,用阻塞隊列實現異步下單

在上一篇博客中,我們介紹了如何利用 Redis 和 Lua 腳本來高效處理秒殺活動中的高并發請求,保證用戶體驗。本文將進一步優化秒殺系統,通過引入阻塞隊列實現異步下單,從而提高系統的整體性能和穩定性。 引言 秒殺活動往往伴隨著極…

ArmSoM-Sige7/5/1 和樹莓派5規格比較

引言 在當今快速發展的嵌入式系統領域,選擇一款性能強大、功能豐富的開發板對于項目的成功至關重要。本文將介紹并比較 Sige7、Sige5、Raspberry Pi 5 和 Sige1 這四款開發板的關鍵規格和特性,幫助開發者和愛好者選擇最適合其需求的平臺。 ArmSoM-Sige…

使用模板方法設計模式封裝 socket 套接字并實現Tcp服務器和客戶端 簡單工廠模式設計

文章目錄 使用模板方法設計模式封裝套接字使用封裝后的套接字實現Tcp服務器和客戶端實現Tcp服務器實現Tcp客戶端 工廠模式 使用模板方法設計模式封裝套接字 可以使用模塊方法設計模式來設計套接字 socket 的封裝 模板方法(Template Method)設計模式是一…

【深度學習】深度學習基礎

李宏毅深度學習筆記 局部極小值與鞍點 鞍點其實就是梯度是零且區別于局部極小值和局部極大值的點。 鞍點的叫法是因為其形狀像馬鞍。鞍點的梯度為零,但它不是局部極小值。我們把梯度為零的點統稱為臨界點(critical point)。損失沒有辦法再下…

使用Flink CDC實現 Oracle數據庫數據同步(非SQL)

文章目錄 前言一、開啟歸檔日志二、創建flinkcdc專屬用戶2.1 對于Oracle 非CDB數據庫,執行如下sql2.2 對于Oracle CDB數據庫,執行如下sql 三、指定oracle表、庫級啟用四、使用flink-connector-oracle-cdc實現數據庫同步4.1 引入pom依賴4.1 Java主代碼4.1…

Docker Desktop 簡易操作指南 (Windows, macOS, Linux)

1. 下載最新版本 Docker Desktop https://www.docker.com/products/docker-desktop/ 2.啟動 Docker Desktop 3.常用命令(在 cmd 或 Terminal 中執行) #列出所有鏡像(Images) docker images #列出所有容器(Containers&…

OpenSSL/3.3.0: error:0A00018A:SSL routines::dh key too small

php curl解決辦法: curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, ‘DEFAULTSECLEVEL1’); python 解決辦法: from twisted.internet.ssl import AcceptableCiphers from scrapy.core.downloader import contextfactory contextfactory.DEFAULT_CIPHERS AcceptableCiphers.from…

CSS 核心知識點 - grid

思維導圖 參考網址: https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_grid_layout 一、什么是 grid? CSS Grid布局是在CSS3規范中引入的一種新的布局方式,旨在解決傳統布局方法(如浮動、定位、表格布局)存在的許多問題。C…

Spring Boot 集成 MyBatis-Plus 總結

Spring Boot 集成 MyBatis-Plus 總結 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 在Java開發中,Spring Boot以其簡潔和高效的特點,…

Oh My Zsh Git 插件

以下是一些常見的別名和它們對應的 Git 命令: g: gitga: git addgaa: git add --allgapa: git add --patchgau: git add --updategb: git branchgba: git branch -agbd: git branch -dgbda: git branch --no-color --merged | command grep -vE “^(||*|\s*(main|m…

第十九站:Java鈦藍——區塊鏈技術的新探索

在區塊鏈技術的新探索中,Java作為一門成熟的編程語言,正在通過Hyperledger Fabric和Web3j等技術實現其在區塊鏈領域的應用。以下是對這些技術的簡要介紹和如何使用Java源代碼與它們進行交互的講解。 Hyperledger Fabric Hyperledger Fabric是一個由Lin…

React.js 全面解析:從基礎到實戰案例

引言: React.js,由Facebook推出并維護的開源JavaScript庫,以其組件化思想、虛擬DOM技術和聲明式編程風格,成為構建用戶界面的首選工具之一。本文將系統性地介紹React的基礎概念、核心特性,并通過實際案例展示基礎屬性…

DataWhale-吃瓜教程學習筆記(四)

學習視頻:第3章-二分類線性判別分析_嗶哩嗶哩_bilibili 西瓜書對應章節: 3.4 文章目錄 - 算法原理- 損失函數推導-- 異類樣本中心盡可能遠-- 同類樣本方差盡可能小-- 綜合 知識點補充 - 二范數二范數(2-norm)詳解定義幾何意義性質…

vue3中省市區聯動在同一個el-form-item中咋么設置rules驗證都不為空的效果

在開發中出現如下情況&#xff0c;在同一個el-form-item設置了省市區三級聯動的效果 <el-form-item label"地區" prop"extraProperties.Province"><el-row :gutter"20"><el-col :span"12"><el-select v-model&qu…

OpenHarmony開發實戰:HDF驅動開發流程

概述 HDF&#xff08;Hardware Driver Foundation&#xff09;驅動框架&#xff0c;為驅動開發者提供驅動框架能力&#xff0c;包括驅動加載、驅動服務管理、驅動消息機制和配置管理。并以組件化驅動模型作為核心設計思路&#xff0c;讓驅動開發和部署更加規范&#xff0c;旨在…

Unity3D Excel表格數據處理模塊詳解

一、引言 在Unity3D開發中&#xff0c;我們經常需要處理大量的數據&#xff0c;這些數據可能是游戲配置、角色屬性、道具信息等。Excel表格作為一種常見的數據存儲方式&#xff0c;具有結構清晰、易于編輯的特點&#xff0c;因此被廣泛應用于游戲開發中。本文將詳細介紹如何在…