LEARNING DYNAMICS OF LLM FINETUNING【論文閱讀筆記】

LEARNING DYNAMICS OF LLM FINETUNING

一句話總結

作者將LLM的學習動力機制拆解成AKG三項,并分別觀察了SFT和DPO訓練過程中??正梯度信號??和??負梯度信號??的變化及其帶來的影響,并得到以下結論:

  1. ??SFT通過梯度相似性間接提升無關回答置信度??;
  2. ??DPO負梯度回傳會引發confidence(softmax score) 向模型訓練前confidence最高的token聚集:DPO中正樣本與 負樣本之間的margin雖然在增大,但正樣本的confidence上漲幅度沒有訓練前模型最中意的答案的confidence漲得快

吐槽一下,這篇非常不適合LLM伴讀和粗讀,因為符號多,符號的描述寫的很松散,圖表的講解非常碎(一張圖的解釋可能會橫跨兩個subsection),我開始用LLM伴讀給我弄的非常混亂,自己粗讀發現跳過一兩段可能一個符號什么意思就不知道了。最后老老實實一行一行讀。雖然作者的工作非常詳實,但是……只能說這種寫法不坑老實人吧。

↓↓↓這里先補充一下Learning Dynamic的分析邏輯↓↓

學習動力機制(Learning Dynamic)指什么?

Learning Dynamic,簡單來說,就是研究每次模型經過一個batch的數據訓練后,參數發生了變化,這個變化如何影響模型的表現。具體來說,哪些方面變好了?哪些方面變差了?

用來描述哪些方面變好,哪些方面變差的工具就是先做一個觀察數據集,這個數據集是靜態的。

觀察一個batch的訓練后,觀察數據集里的<哪些樣本>的預測結果有<什么樣>的變化,就是研究Learning Dynamic。

為了銜接論文里的公式,這里把上面學習動力機制研究的公式寫出來

第一步:定義,參數更新對特定樣本的輸出的影響
f ( x ; θ ) = π ( z ( x ; θ ) ) f(x;θ)=π(z(x;θ)) f(x;θ)=π(z(x;θ)) π π π是最后一層的softmax函數, x o x_o xo?指的是觀察集的樣本。
—>參數更新 Δ θ Δθ Δθ 會導致輸入 x x x的輸出變化是
Δ f ( x o ; θ ) ≈ ? θ f ( x o ; θ ) ? Δ θ Δf(x_o;θ)≈?_θf(x_o;θ)?Δθ Δf(xo?;θ)?θ?f(xo?;θ)?Δθ

第二步:展開 第一項

? θ f ( x o ; θ ) = ? π ( z ( x o ; θ ) ) ? z ? softmax雅可比? J π ( z ) ? ? θ z ( x o ; θ ) ? logits的梯度 \nabla_\theta f(x_o;\theta) = \underbrace{\frac{\partial \pi(z(x_o;\theta))}{\partial z}}_{\text{softmax雅可比 } J_\pi(z)} \cdot \underbrace{\nabla_\theta z(x_o;\theta)}_{\text{logits的梯度}} ?θ?f(xo?;θ)=softmax雅可比?Jπ?(z) ?z?π(z(xo?;θ))????logits的梯度 ?θ?z(xo?;θ)??

第三步: Δ θ Δθ Δθ 把梯度替換成 當批次樣本 { x 1 , . . . , x i , . . . x n } \{x_1,...,x_i,...x_n\} {x1?,...,xi?,...xn?} 帶來的梯度

Δ θ Δθ Δθ 替換成 Δ θ = ? η ? θ L ( θ ) Δθ=?η? _{θ}L(θ) Δθ=?η?θ?L(θ) 即學習率乘以梯度

? θ L ( θ ) = 1 n ∑ i = 1 n ( π ( z ( x i ; θ ) ) ? y i ) ? ? ? θ z ( x i ; θ ) ? 通過鏈式法則: ? L ? z ? ? z ? θ \nabla_\theta L(\theta) = \frac{1}{n} \sum_{i=1}^n \underbrace{\left( \pi(z(x_i;\theta)) - y_i \right)^\top \cdot \nabla_\theta z(x_i;\theta)}_{\text{通過鏈式法則:} \frac{\partial L}{\partial z} \cdot \frac{\partial z}{\partial \theta}} ?θ?L(θ)=n1?i=1n?通過鏈式法則:?z?L???θ?z? (π(z(xi?;θ))?yi?)???θ?z(xi?;θ)??

第四步:兩個展開式帶回源式
Δ f ( x ; θ ) ≈ ? η n ∑ i = 1 n [ J π ( z ( x ; θ ) ) ? ? θ z ( x ; θ ) ] ? [ ( π ( z ( x i ; θ ) ) ? y i ) ? ? ? θ z ( x i ; θ ) ] \Delta f(x;\theta) \approx -\frac{\eta}{n} \sum_{i=1}^n \left[ J_\pi(z(x;\theta)) \cdot \nabla_\theta z(x;\theta) \right] \cdot \left[ \left( \pi(z(x_i;\theta)) - y_i \right)^\top \cdot \nabla_\theta z(x_i;\theta) \right] Δf(x;θ)?nη?i=1n?[Jπ?(z(x;θ))??θ?z(x;θ)]?[(π(z(xi?;θ))?yi?)???θ?z(xi?;θ)]
第五步:把gradient乘積寫成NTK項
Δ f ( x ; θ ) ≈ ? η n J π ( z ( x ; θ ) ) ∑ i = 1 n ? ? θ z ( x ; θ ) , ? θ z ( x i ; θ ) ? ? NTK項? K ( x , x i ) ? ( π ( z ( x i ; θ ) ) ? y i ) Δf(x;θ) ≈ -\frac{η}{n} J_π(z(x;θ)) \sum_{i=1}^n \underbrace{\left\langle \nabla_θ z(x;θ), \nabla_θ z(x_i;θ) \right\rangle}_{\text{NTK項 } \mathbf{K}(x, x_i)} \cdot \left( π(z(x_i;θ)) - y_i \right) Δf(x;θ)?nη?Jπ?(z(x;θ))i=1n?NTK?K(x,xi?) ??θ?z(x;θ),?θ?z(xi?;θ)????(π(z(xi?;θ))?yi?)
最終
Δ f ( x o ; θ ) ≈ ? η n ? J π ( z ( x o ; θ ) ) ? softmax非線性效應 ? ∑ i = 1 n K ( x o , x i ) ? 樣本相關性 ? ( π ( z ( x i ; θ ) ) ? y i ) ? 訓練樣本誤差 \Delta f(x_o;\theta) \approx -\frac{\eta}{n} \cdot \underbrace{J_\pi(z(x_o;\theta))}_{\text{softmax非線性效應}} \cdot \sum_{i=1}^n \underbrace{\mathbf{K}(x_o, x_i)}_{\text{樣本相關性}} \cdot \underbrace{\left( \pi(z(x_i;\theta)) - y_i \right)}_{\text{訓練樣本誤差}} Δf(xo?;θ)?nη??softmax非線性效應 Jπ?(z(xo?;θ))???i=1n?樣本相關性 K(xo?,xi?)???訓練樣本誤差 (π(z(xi?;θ))?yi?)??
最終這個式子里面的第一項、第二項和第三項分別對應了文章公式3的 AKG。
其中K的部分,代表了在函數空間中的樣本相關性(不是兩個樣本乍看之下像不像,而是通過梯度核(NTK)映射之后像不像。文章在分析SFT時會一直用這個角度
G是訓練樣本誤差帶來的影響,這個在DPO分析中還會被拆成正負兩項(因為DPO用的是margin)

關鍵細節與結論

1. G項給SFT帶來的是訓練Token的confidence上升

這里的confidence指的是Token的輸出概率(softmax之后的score)
在這里插入圖片描述
看上圖中左側第一張圖,灰色是本步驟之前的這個樣本的詞表上的所有Score的曲線。藍色就是這一步訓練之后,詞表上所有詞的Score的變化。
這是很符合直覺的,也是論文的前菜.(但是這張圖特別不好,把后面要說的東西的分析也放這兒了,看著很亂。大概是因為投稿篇幅的關系,作者壓進來了)

2. SFT中 出現在訓練集里的y,會在掛羊頭賣狗肉的情況下也很自信

在這里插入圖片描述
文中figure3的這張圖,展示的是
π ( y u + ∣ x u ) π(y_{u^+}|x_u) π(yu+?xu?) -虛線, π ( y j ∣ x u ) π(y_{j}|x_u) π(yj?xu?)-藍色線, 和 π ( y t e s t + ∣ x u ) π(y_{test^+}|x_u) π(ytest+?xu?)-橙色線 在訓練過程中的變化。( π π π是softmax函數,這三條線都對應的是模型分)
其中 π ( y u + ∣ x u ) π(y_{u^+}|x_u) π(yu+?xu?) 就是訓練集中樣本A 對應的答案A的概率;
π ( y j ∣ x u ) π(y_{j}|x_u) π(yj?xu?)是訓練集中樣本A作為context(或者說prompt),后面接樣本B的正確答案y_j的時候的score
π ( y t e s t + ∣ x u ) π(y_{test^+}|x_u) π(ytest+?xu?) 是訓練集中樣本A作為context,后面接測試集中某個樣本的正確答案的時候的score。
如果按照我們的希望🔽

給定樣本A的prompt,樣本B的正確答案作為output的時候,這個答案是錯的,他的confidence不應該上漲。
但在作者的實驗記錄下,這一數值上漲了。這就是作者認為SFT中一部分幻覺的來源

3. K項給SFT帶來的是意思相近和格式相近的答案的confidence的上升

作者在分析的時候使用的是DPO數據集(Antropic-HH 和UltraFeedback),盡管他在訓練SFT的時候僅適用了 DPO數據集中的prefer樣本 y u + y_{u^+} yu+?,但在分析中他同時分析了less prefer(負樣本) y u ? y_{u^-} yu??
下圖中, y u + y_{u^+} yu+? 是DPO樣本集中<正樣本>
y u ? y_{u^-} yu?? 是DPO樣本集中<負樣本>
y g p t s + y_{gpts^+} ygpts+? 是用GPT針對DPO樣本集中<正樣本>做的同意改寫樣本
y g p t s ? y_{gpts^-} ygpts?? 是用GPT針對DPO樣本集中<負樣本>做的同意改寫樣本
y h u m y_{hum} yhum? 是隨機的一個句子(跟訓練樣本無關)
y j ≠ u + y_{{j≠u}^+} yj=u+? 是訓練集中另一個樣本的<正樣本>
y t e s t + y_{{test}^+} ytest+? 是測試集中某個樣本的<正樣本>
y r n d y_{{rnd}} yrnd? 是隨機英文詞組成的字符串(連句子都不是)
在這里插入圖片描述
基于以上符號意義,觀察上圖,藍色部分confidence上漲,橙色就是下降。上圖中左側多個列都顯示,每訓練25步 [ x u ; y u ] [x_u;y_u] [xu?;yu?]就觀察一次,發現一些語義或者格式相似( y g p t s + y_{gpts^+} ygpts+?)的樣本的confidence也上漲了。
同時亂序的字符串( y h u m y_{hum} yhum? y r n d y_{rnd} yrnd?)訓練的時候,其他有正常語義的答案的confidence都會降低。因為,用K來衡量的距離跟這些亂序的答案的距離是很大的,Learning Dynamic的角度上看這些confidence也確實應該下降。
》最炸裂的其實是這個圖的最后一列 DPO這列,這列引入的是下面一個結論

4. DPO中的負梯度會給所有未被訓練的答案打負分

作者實驗中發現,如果下圖左1所示,在用DPO訓練很多個epoch的過程中,根據訓練樣本正確答案改寫的正樣本 y g p t s + y_{gpts^+} ygpts+? (語義相同)和 y g p t f + y_{gptf^+} ygptf+? (格式相同)的confidence都在持續下降。
這是與我們的直覺相反的。
在這里插入圖片描述
同時,上圖左2顯示,不僅DPO中正樣本的改寫樣本的confidence在持續下滑,負樣本的confidence也在持續下滑(仔細看數軸,這組斜率更大)
看上圖的左4,在訓練中的正樣本和負樣本的confidence的變化是:正樣本的confidence先上漲后下滑,到第四個epoch,連正樣本的confidence都比訓練前要低了;而負樣本的confidence全程咔咔下跌。
那正負樣本的confidence都跌了,誰漲了呢?(畢竟是用softmax轉換過的score,有人跌就有人漲)
答:看第左5,圖中的黑線是模型在DPO之前(如果按照RL的說法,可以說是reference model)最prefer的答案的概率。

整個訓練過程,reference model中概率最高的token的概率漲的最猛,比訓練的正樣本y還猛。

5. 這種錯位的虹吸效應的源頭是DPO的負梯度影響

文中的大部分拆解都沿用了經典的拆分方案。DPO上做了一個變化,把G分成了正負兩部分。
在這里插入圖片描述
這里有個比較討厭的東西 χ u ? χ^-_u χu?? 這個符號其實是附錄中下面高亮部分的意思,就是 x u x_u xu?是一樣的,y不一樣。這么表示其實有點討厭,一來是符號不在公式附近(在附錄B),二來這么寫其實挺容易讓人誤解的。
在這里插入圖片描述
前面這種奇怪的現象主要來自于負梯度的回傳,也就是 G ? G^- G?的部分。
在附錄中,作者還展示了reference model對 y u + y_{u^+} yu+?分布形狀不同的時候 ,DPO的負梯度帶來的影響差別。
在這里插入圖片描述
上面這個分析有個需要注意的點,就是這個DPO是off-policy的(雖然我們說DPO的時候通常就是off-policy的),即完全是靜態的樣本集,正樣本和負樣本都不是通過play逐步變化的。

那如果是on-policy的,也就是隨著模型訓練,概率分布有變化的時候(或者 y u + = y u ? y_{u^+}=y_{u^*} yu+?=yu?? y u ? = y u ? y_{u^-}=y_{u^*} yu??=yu?? u ? u^* u?指的就是reference model最中意的答案。)負梯度帶來的影響是什么樣的?
灰線是訓練前,藍線是訓練后
在這里插入圖片描述
看圖的第三行,在原先分布是有幾個特殊token的概率較高的情況下, y u ? y_{u^-} yu??直接作用到reference模型概率最高的token上時,其他概率相對較高的token的概率被直接抬起來很多。
看圖的第四行,在原先分布是有幾個特殊token的概率較高的情況下, y u ? y_{u^-} yu??直接作用到reference模型概率很低的token時,原先概率最高的token的概率被大大提升了。而不是所有概率高的token的概率都提升了,而是效用集中到一個token上。

評價

多于1個epoch問題就會逐漸凸顯

在作者原文的大部分實驗圖中,都能看到,盡管DPO帶來的擠壓效應在多個epoch之后就顯得非常病態。在實際訓練過程中,其實也是這樣的,不管是SFT還是DPO,在已知–>“全參數微調可以讓模型在一個epoch之內完成記憶”<–這個前提下,訓練超過1個epoch都要非常小心。而且在準備樣本的過程中也要考慮,樣本實際重復的情況來算實際epoch數。

定點制作DPO數據效果會很好

我這里提供的是論文作者論述以外,一個自己之前實踐上的經驗:制作兩個只有關鍵知識點不同,其他描述完全相同的樣本,比如“上海迪士尼上午9點開園”和“上海迪士尼上午10點開園”,這個會很大程度上提高模型的知識矯正(更新)效率。比unlearning還快。

完全靜態的DPO樣本集,會很快打亂SFT中已經訓練好的模式

同樣是跟作者的認知比較像的,如果先訓練SFT把想要的模式注入到LLM里,然后用DPO來訓,前面SFT的勝利成果可能在很小的樣本量下就不行了。原因就在于SFT注入的本身就是一個模型原來并不prefer的格式。而且注入的點可能覆蓋面并不夠大(小樣本的時候)

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

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

相關文章

Mac 下載 PicGo 的踩坑指南

Mac 下載 PicGo 的踩坑指南 一、安裝問題 下載地址&#xff1a;https://github.com/Molunerfinn/PicGo/releases 下載之后直接安裝即可&#xff0c;此時打開會報錯&#xff1a;Picgo.app 文件已損壞&#xff0c;您應該將它移到廢紙簍。 這是因為 macOS 為了保護用戶不受惡意…

Element UI 設置 el-table-column 寬度 width 為百分比無效

問題描述&#xff1a; 想要每列寬度不同&#xff0c;不想使用 px 固定值&#xff0c;將 width 設置成百分比&#xff0c;但是每一列還是很窄 原因&#xff1a; el-table 組件會被 vue 解析成 html&#xff0c;vue 直接把百分號去掉把數值當做列寬來呈現&#xff0c;所以&#x…

第五篇:Python面向對象編程(OOP)深度教程

1. 類與對象 1.1 基本概念 ??類??是創建對象的藍圖,定義了對象的??屬性??(數據)和??方法??(行為)。??對象??是類的實例化實體,每個對象擁有獨立的屬性值和共享的類方法 ??示例??:定義Dog類 class Dog:species = "Canis familiaris" …

【數據結構】2.順序表實現通訊錄

文章目錄 一、通訊錄的要求二、通訊錄的具體實現0、 準備工作1、通訊錄的初始化2、通訊錄的銷毀3、通訊錄的展示4、通訊錄添加數據5、通訊錄刪除數據6、通訊錄的查找7、通訊錄的修改8、保存通訊錄數據到文件9、讀取文件內容到通訊錄 三、 通訊錄的完整實現 一、通訊錄的要求 通…

程序化廣告行業(79/89):技術革新與行業發展脈絡梳理

程序化廣告行業&#xff08;79/89&#xff09;&#xff1a;技術革新與行業發展脈絡梳理 大家好&#xff01;一直以來&#xff0c;我都熱衷于在技術領域不斷探索&#xff0c;也深知知識共享對于進步的重要性。寫這篇博客&#xff0c;就是希望能和大家一起深入研究程序化廣告行業…

【C++游戲引擎開發】第9篇:數學計算庫GLM(線性代數)、CGAL(幾何計算)的安裝與使用指南

寫在前面 兩天都沒手搓實現可用的凸包生成算法相關的代碼&#xff0c;自覺無法手搓相關數學庫&#xff0c;遂改為使用成熟數學庫。 一、GLM庫安裝與介紹 1.1 vcpkg安裝GLM 跨平臺C包管理利器vcpkg完全指南 在PowerShell中執行命令&#xff1a; vcpkg install glm# 集成到系…

python文件打包無法導入ultralytics模塊

&#x1f4a5;打包的 .exe 閃退了&#xff1f;別慌&#xff01;教你逐步排查 PyInstaller 打包的所有錯誤&#xff01; &#x1f6e0; 運行 .exe 查看報錯信息? 正確姿勢&#xff1a; ? importlib 動態導入導致打包失敗?什么是動態導入&#xff1f;? 解決方式&#xff1a; …

【React框架】什么是 Vite?如何使用vite自動生成react的目錄?

什么是 Vite&#xff1f; Vite 是一個基于原生 ES Modules 開發的前端構建工具&#xff0c;由 Evan You&#xff08;Vue 的作者&#xff09;開發。它最大的特點包括&#xff1a; 極速冷啟動&#xff1a;因為利用了瀏覽器原生的 ES Modules&#xff0c;所以在開發時無需等待整…

深入解讀 React 純組件(PureComponent)

什么是純組件&#xff1f; React 的純組件(PureComponent)是 React.Component 的一個變體&#xff0c;它通過淺比較(shallow comparison)props 和 state 來自動實現 shouldComponentUpdate() 方法&#xff0c;從而優化性能。 核心特點 1. 自動淺比較&#xff1a; PureCompon…

JavaScript數組方法:`some()`的全面解析與應用

文章目錄 JavaScript數組方法&#xff1a;some()的全面解析與應用一、some()方法的基本概念語法參數說明返回值 二、some()方法的核心特點三、基礎用法示例示例1&#xff1a;檢查數組中是否有大于10的元素示例2&#xff1a;檢查字符串數組中是否包含特定子串 四、實際應用場景1…

判斷兩個 IP 地址是否在同一子網 C

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> // 將點分十進制的 IP 地址轉換為 32 位無符號整數 unsigned int ip_to_uint(const char *ip) { struct in_addr addr; if (inet_pton(AF_INET, ip, &am…

React 組件樣式

在這里插入圖片描述 分為行內和css文件控制 行內 通過CSS中類名文件控制

尚硅谷Java第 4、5 章IDEA,數組

第 4 章&#xff1a;IDEA的使用 第 5 章&#xff1a;數組 5.1 數組的概述 數組(Array)&#xff1a;就可以理解為多個數據的組合。 程序中的容器&#xff1a;數組、集合框架&#xff08;List、Set、Map&#xff09;。 數組中的概念&#xff1a; 數組名 下標&#xff08;或索…

SQL注入基本原理靶場實現

? 一、前言 SQL注入漏洞(SQL injection)是WEB層面高危的漏洞之一&#xff0c;也是常見的攻擊方式。 二、本質 1、什么是SQL注入 SQL 注入是一種利用應用程序對用戶輸入數據過濾不嚴格&#xff0c;將惡意 SQL 代碼插入到正常 SQL 語句中&#xff0c;從而操控數據庫查詢邏輯的…

圖像預處理(OpenCV)

1 圖像翻轉(圖像鏡像旋轉) 在OpenCV中&#xff0c;圖片的鏡像旋轉是以圖像的中心為原點進行鏡像翻轉的。 cv2.flip(img,flipcode) 參數 img: 要翻轉的圖像 flipcode: 指定翻轉類型的標志 flipcode0: 垂直翻轉&#xff0c;圖片像素點沿x軸翻轉 flipcode>0: 水平翻轉&…

PCDN收益高低的關鍵因素

PCDN&#xff08;P2P內容分發網絡&#xff09;收益好的三個主要關鍵因素是&#xff1a;硬件配置與性能、網絡環境與質量、業務調度與策略。 1. 硬件配置與性能 設備穩定性與兼容性 PCDN節點需長時間穩定運行&#xff0c;硬件性能直接影響收益。例如&#xff0c;使用高性能CPU、…

『生成內容溯源系統』詳解

生成內容溯源系統詳解 1. 定義與核心目標 生成內容溯源系統&#xff08;Generative Content Provenance System&#xff09;是指能夠追蹤AI生成內容的來源、生成過程、版權歸屬及修改歷史的技術體系。其核心目標是&#xff1a; 驗證真實性&#xff1a;證明內容由特定AI模型生…

conda如何安裝和運行jupyter

在Conda環境中安裝和運行Jupyter Notebook是一項常見且實用的任務&#xff0c;特別是在數據科學和機器學習項目中。以下是使用Conda安裝和運行Jupyter Notebook的步驟&#xff1a; 安裝Jupyter Notebook 首先&#xff0c;確保你的Conda是最新的。打開終端或Anaconda Prompt&a…

QML之Flickable(滾動區域)

Flickable 是 QML 中用于創建可滾動區域的基礎組件&#xff0c;它比 ScrollView 提供更底層的控制&#xff0c;適合需要自定義滾動行為的場景。 基本用法 qml import QtQuick 2.15Flickable {width: 200height: 200contentWidth: 400 // 內容總寬度contentHeight: 800 // 內…

【NumPy科學計算引擎:從基礎操作到高性能實踐】

目錄 前言&#xff1a;技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析關鍵技術模塊說明技術選型對比 二、實戰演示環境配置核心代碼實現運行結果驗證 三、性能對比測試方法論量化數據對比結果分析 四、最佳實踐推薦方案 ?常見錯誤 ?調試技巧 五、應用…