ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT
寫在最前面,23年2.27日起,我個人和十來位博士朋友精讀100篇ChatGPT相關技術的論文(每天一篇,100天讀完100篇,這100篇的論文清單見此文),過程中幾乎每天都會不斷優化本文,優化記錄見本文文末的“后記”中..
前言
自從我那篇Transformer通俗筆記一經發布,然后就不斷改、不斷找人尋求反饋、不斷改,其中一位朋友倪老師(之前我司NLP高級班學員現課程助教老師之一)在謬贊Transformer筆記無懈可擊的同時,給我建議到,“后面估計可以嘗試嘗試在BERT的基礎上,講一講prompt學習了”
再然后,當我還在各種改Transformer筆記的時候,12月初突然出來了一個ChatGPT刷爆朋友圈,即便很多之前不接觸AI的朋友也在問ChatGPT這種類似聊天機器人卻遠勝一般聊天機器人各種問題(上一次出現這種盛況的還是16年的AlphaGo)。
據我觀察,大家問ChatGPT的問題千奇百怪
- 有的讓他算經典的雞兔同籠問題(一個籠子里裝有雞和兔子,數頭的話一共35個頭,數腳的話一共94只腳,問籠中分別有多少只雞和兔子),且也能在和人類自然而流暢的互動中舉一反三
- 有的讓其根據要求排查代碼bug,要知道此前debug想尋求幫助
要么問人(問熟人用社交軟件,問陌生人則類似那種問答網站,持續問一般得付費,畢竟沒人樂意持續免費答疑大量技術難題)
要么Google搜有沒人遇到類似的問題(但別人遇到的問題很難與你的百分百一致)
要么用Codex這類代碼軟件,但在和人類的互動交互上,還不是那么善解人意
所以ChatGPT就相當于你寫代碼或各類問題的私人顧問,而這個私人顧問能瞬間、精準理解你的意圖,不會讓你像用以前那種聊天機器人經常覺得智障甚至對牛彈琴,加之其背后依托的是人類級百科全書式的資料庫,所以有人驚呼:ChatGPT會不會替代Google這類搜索引擎。
雖然大部分技術者對待ChatGPT還是比較冷靜的,畢竟它給的答案不像權威技術專家那樣具備足夠的公信力,也不像Google給出來源從而不能比較好的驗證其正確程度,但最近遇到的幾件事改變了我的一些看法
總之中文資料里,可能因為instructGPT/ChatGPT剛出來不久的緣故,兼顧可讀性和細節性的文章少的可憐
考慮到ChatGPT非一蹴而就,而是經過了各個前置技術的發展、迭代、結合而成,故逐一闡述
- 2017年之前早已有之的一些數學/AI/RL等基礎技術,比如微積分、概率統計、最優化、策略梯度、TRPO算法(2015年提出)
- 2017年6月OpenAI聯合DeepMind首次正式提出的:Deep Reinforcement Learning from Human Preferences,簡稱RLHF
- 2017年7月的OpenAI團隊提出的對TRPO算法的改進:PPO算法
| 關于RL所需的微積分/概率統計基礎修訂在了《概率統計極簡入門:通俗理解微積分/期望方差/正態分布前世今生(23修訂版)》 |
| 關于RL所需的最優化基礎修訂在了《一文通透優化算法:從梯度下降、SGD到牛頓法、共軛梯度(23修訂版)》 |
| 關于RL、策略梯度、TRPO、PPO則寫在了此文《強化學習極簡入門:通俗理解MDP、DP MC TC和值函數、策略梯度、PPO》 |
- 2017年6月的Transformer/Self-Attention
關于transformer/self-attention,除了本文,更可以看下上篇《Transformer通俗筆記:從Word2Vec、Seq2Seq逐步理解到GPT、BERT》
? - 2018年6月的GPT(Generative Pre-trained Transformer),其關鍵構成是基于Transformer-Decoder的Masked Self-Attention
- 2019年2月的融合prompt learning的GPT2,prompt learning的意義在于不用微調也能做任務
- 2020年5月的GPT3,參數規模到了1750億,終于真正做到預訓練之后不用再微調模式,通過In-context learning(簡稱ICL)開啟prompt新范式,且你可能沒想到的是,這一年的9月份OpenAI已經開始研究GPT3與RLHF的結合了,且此時用的策略優化方法為PPO
? - 2021年7月的Codex,通過對GPT3進行大量的代碼訓練迭代而出Codex,從而具備代碼/推理能力
- 2021年9月Google提出的FLAN大模型:基于指令微調技術Instruction Fine-Tuning (IFT)
- 2022年1月的Google研究者提出的思維鏈技術(Chain of Thought,簡稱CoT)
? - 2022年3月的OpenAI正式發布instructGPT:GPT3 + instruction tuning + RLHF + PPO,其中,instruction tuning和prompt learning的核心區別在于instruction tuning會提供更多的指令引導模型輸出更符合預期的結果,例如
提示學習:給女朋友買了這個項鏈,她很喜歡,這個項鏈太____了
指令微調:判斷這句話的情感:給女朋友買了這個項鏈,她很喜歡。選項:A=好;B=一般;C=差
你也可以暫簡單理解instruction tuning為帶人類指令的prompting - 2021年第4季度逐步發展而來的GPT3.5,并于22年不斷融合Codex、InstructGPT的技術能力
- 2022年11月的ChatGPT:語言模型層面的核心架構是GPT3.5(基于Transformer-Decoder的Masked Self-Attention且融合了Codex的代碼/推理能力、instruction tuning等技術) + RLHF + PPO3
? - 2023年3月中旬,OpenAI正式對外發布GPT-4,增加了多模態(支持圖片的輸入形式),且ChatGPT底層的語言模型直接從GPT3.5升級到了GPT4
如你所見,自從1.6日開始寫ChatGPT筆記,1.15日發布本文,但為把ChatGPT背后所涉及的關鍵技術闡述細致、透徹,故本文越寫越長,長到最后成了一個系列,有的內容抽離出去獨立成文,有的還在不斷完善
第一部分 從RL、策略梯度到TRPO、PPO算法、RLHF
再次強調說明下,本第一部分在23年2.10日有個重要修改
- 2.10日之前,考慮到本文的主旨核心ChatGPT用到了RLHF和PPO,所以本文的第一部分從強化學習講到PPO算法,畢竟雖然只是想重點介紹下PPO,但寫到最后還是把PPO所有相關的前置知識都細致介紹了個遍,不然,總感覺有細節沒交待而不夠透徹
- 2.10日之后,又考慮到有些朋友可能對RL細節有所了解,或者更多希望整體了解ChatGPT整體架構而暫不細究其所用的策略迭代算法PPO的前置技術、RL細節
綜上,為兼顧兩者,且加之為避免本文篇幅過長而影響完讀率,故把下面原先第一部分的大部分內容抽取出來放到了新一篇RL筆記里進一步細致闡述:強化學習極簡入門:通俗理解MDP、DP MC TC和Q學習、策略梯度、PPO
第一部分 RL基礎:什么是RL與MRP、MDP
1.1 入門強化學習所需掌握的基本概念
- 1.1.1?什么是強化學習:依據策略執行動作-感知狀態-得到獎勵
- 1.1.2 RL與監督學習的區別和RL方法的分類
1.2 什么是馬爾科夫決策過程
- 1.2.1 MDP的前置知識:隨機過程、馬爾可夫過程、馬爾可夫獎勵
- 1.2.2 馬爾可夫決策過程(MDP):馬爾可夫獎勵(MRP) + 智能體動作因素
第二部分 RL進階之三大表格求解法:DP、MC、TD
2.1 動態規劃法
- 2.1.1 什么是動態規劃
- 2.1.2 通過動態規劃法求解最優策略
2.2 蒙特卡洛法
2.3 時序差分法及與DP、MC的區別
第三部分 價值學習:從n步Sarsa算法到Q-learning、DQN
3.1 TD(0)控制/Sarsa(0)算法與TD(n)控制/n步Sarsa算法
3.2 Q-learning
- 3.2.1 重要性采樣:讓同策略完成到異策略的轉變
- 3.2.2?Sarsa算法與Q-learning更新規則的對比
3.3 DQN
第四部分 策略學習:從策略梯度、Actor-Criti到TRPO、PPO算法
4.1 策略梯度與其突出問題:采樣效率低下
- 4.1.1 什么是策略梯度和梯度計算/更新的流程
- 4.1.2 避免采樣的數據僅能用一次:重要性采樣(為采樣q解決p從而增加重要性權重)
4.2 優勢演員-評論家算法(Advantage Actor-Criti):為避免獎勵總為正增加基線
4.3 基于信任區域的TRPO:加進KL散度解決兩個分布相差大或步長難以確定的問題
1.4 近端策略優化PPO:解決TRPO的計算量大的問題
如上所述,PPO算法是針對TRPO計算量的大的問題提出來的,正因為PPO基于TRPO的基礎上改進,故PPO也解決了策略梯度不好確定學習率Learning?rate?(或步長Step?size)?的問題
畢竟通過上文,我們已經得知
具體做法是,PPO算法有兩個主要的變種:近端策略優化懲罰(PPO-penalty)和近端策略優化裁剪(PPO-clip),其中PPO-penalty和TRPO一樣也用上了KL散度約束。
近端策略優化懲罰PPO-penalty的流程如下
首先,明確目標函數,咱們需要優化,讓其最大化
『注:如果你想仔細摳接下來各種公式但一上來就被上面這個弄迷糊了,說明還是需要先看下上文說過的這篇RL極簡入門,而一旦踏入RL,便得做好兩萬五千里的準備,當然,如果只是想了解ChatGPT背后大概的技術原理,可以不用細摳PPO的公式怎么來的,不影響你對ChatGPT整體架構的理解,且下文會講其在ChatGPT中是如何運用的』
接下來,先初始化一個策略的參數,在每一個迭代里面,我們用前一個訓練的迭代得到的actor的參數與環境交互,采樣到大量狀態-動作對,?根據交互的結果,估測
所以需要最后使用 PPO 的優化公式:
當然,也可以把上述那兩個公式合二為一『如此可以更直觀的看出,PPO-penalty把KL散度約束作為懲罰項放在了目標函數中(可用梯度上升的方法去最大化它),此舉相對TRPO減少了計算量』
上述流程有一個細節并沒有講到,即是怎么取值的呢,事實上,是可以動態調整的,故稱之為自適應KL懲罰(adaptive KL penalty),具體而言
- 先設一個可以接受的 KL 散度的最大值
假設優化完以后,KL 散度值太大導致,意味著?與差距過大(即學習率/步長過大),也就代表后面懲罰的項懲罰效果太弱而沒有發揮作用,故增大懲罰把增大 - 再設一個 KL 散度的最小值
如果優化完以后,KL散度值比最小值還要小導致,意味著?與??差距過小,也就代表后面這一項的懲罰效果太強了,我們怕它只優化后一項,使與??一樣,這不是我們想要的,所以減小懲罰即減小
總之,近端策略優化懲罰可表示為
當然,如果覺得計算 KL散度很復雜,則還有一個PPO2算法,即近端策略優化裁剪PPO-clip,詳見RL極簡入門一文
1.5?模仿學習(逆強化學習)思路下的RLHF:從人類反饋中學習
1.5.1 什么是模仿學習(逆強化學習)
雖然RL理論上雖不需要大量標注數據,但實際上它所需求的reward會存在缺陷:
比如游戲AI中,reward的制定非常困難,可能要制定成百上千條游戲規則,這并不比標注大量數據來得容易,又比如自動駕駛的多步決策(sequential decision)場景中,學習器很難頻繁地獲得reward,容易累計誤差導致一些嚴重的事故
再比如聊天機器人方面,不好定義什么是好的對話、什么是不好的對話,當然,對此可以收集很多人類的對話當做范例,如此,模仿學習思路下的從人來反饋中學習(對應論文為:Deep Reinforcement Learning from Human Preferences 2017,簡稱RLHF)應運而生
RLHF試圖解決的問題是,在獎勵函數不夠明確的情況下,通過基于人類對事物比較的偏好而非絕對獎勵值訓練獎勵函數
模仿學習的思路是不讓模型在人類制定的規則下自己學習,而是讓模型模仿人類的行為。而逆強化學習就是模仿學習的其中一種,何謂逆強化學習呢?
- 原來的強化學習里,有Environment和Reward Model(由獎勵函數推出什么樣的策略/動作是最好的),但逆強化學習沒有獎勵函數,只有一些人類/專家的示范,怎么辦呢
- 可以通過人類標注數據訓練得到Reward Model(相當于有了人類標注數據,則相信它是不錯的,然后反推人類因為什么樣的獎勵函數才會采取這些行為)
- 有了獎勵函數之后,就可以使用一般的強化學習的方法去找出最優策略/動作
1.5.2?RLHF:從人類反饋中學習
實際上,RLHF(Reinforcement Learning with Human Feedback)這一概念最早是在2008年《TAMER:Training an Agent Manually via Evaluative Reinforcement》一文中被提及的
在2017年前后,深度強化學習(Deep Reinforcement Learning)逐漸發展并流行起來,如你所見,2017年6月由OpenAI聯合Google DeepMind一塊推出《Deep Reinforcement Learning from Human Preferences》,也簡稱RLHF
當讓一個強化學習智能體探索環境并與之交互(比如Atari游戲),RLHF的核心步驟如下圖所示:
再之后,OpenAI團隊通過下述兩篇論文進一步闡述了RLHF
- Fine-Tuning Language Models from Human Preferences?(Zieglar et al. 2019)
在Reward model的訓練中,我們需要人的參與,human labelers給policy模型生成的文本打分,這個分數作為reward model學習的標簽 Reward mode訓練好后,那么在訓練policy model時,Reward model便可以完全取代human labeler打分,分數作為信號傳給policy model,再利用OpenAI默認的策略優化算法PPO來訓練 - Learning to summarize with human feedback?(Stiennon et al., 2020)
如你所見,OpenAI團隊在2020年9月的這篇論文里就已經提出了類似instructGPT/ChatGPT的訓練模式: 1 根據人工標注數據微調監督模型
所謂微調,即指當我們預訓練出一個語言模型后,為了更好的讓它完成咱們手頭上的任務,會通過一定的樣例/樣本對該模型的參數做一定的調整或適配
2 訓練一個獎勵函數(下文會詳述reward的這個損失函數,這里暫且做個粗略理解,即相當于reward不再是人直接給了,而是用高質量標注訓練一個好的reward模型) 3 有了reward,接下來便可以通過PPO優化原始監督模型的策略(下文也會詳細闡述這個公式)
第二部分 從GPT/GPT2/GPT3到GPT3.5/GPT4:微調到prompt學習的過渡
2.1 GPT:基于Transformer Decoder預訓練 + 微調/Finetune
NLP自發展以來,先后經歷了4種任務處理范式
具體而言,即手工設計一系列特征模板,來輸入模型。模型對任務的處理結果高度依賴于特征模板的設計,同時也高度依賴領域專家的知識。舉個例子,比如對于條件隨機場CRF模型,業界甚至有一個專門的庫CRF++幫助自動生成大量的隨機模板然后輸入模型進行訓練,從而避免對領域專家的過度依賴
神經網絡學派開始流行以后,處理范式基本基本是預訓練后的詞嵌入表征 + 模型架構的調整,在這個時期,一方面的工作在詞嵌入上,比如NNLM/CBOW/SKIP/GRAM/GLOVE/ELMO等,另一方面的工作則在模型架構上,比如BI-LSTM/SEQ2SEQ架構在神經機器翻譯領域NMT的應用等
相比于第二范式而言,第三范式的優點在于更進一步減少了人工的參與,不再需要對于每個任務采取不同的模型架構,而是在超大的文本數據集上預訓練一個具備泛化能力的通用的模型,然后再根據下游任務本身的特點對模型進行針對性的微調即可,使得一個模型解決多種任務成為可能,比如GPT1模型
在這個過程我們往往不對預訓練語言模型改動太多,我們希望是通過對合適prompt的利用將下游任務建模的方式重新定義,這則是GPT2、GPT3的特點
2.1.1 GPT = Multi-Head Attention層 + Feed forward層 + 求和與歸一化的前置LN層 + 殘差
GPT由openAI在2018年通過此論文“Improving Language Understanding by Generative Pre-Training”提出,在GPT 被提出之前
故如何利用容易獲取的大規模無標注數據來為模型的訓練提供指導成為亟待解決的第一個問題
因此如何將從大規模無標注數據上學習到的表征應用到不同的下游任務成為亟待解決的第二個問題
在上一篇Transformer筆記中,我們已經了解到:GPT是“Generative Pre-Training Transformer”的簡稱,從名字看其含義是指的生成式的預訓練,它和BERT都是(無監督)預訓練-(監督)微調模式的典型代表
- 第一階段,在未標記數據上使用語言建模目標來學習神經網絡模型的初始參數
- 第二階段,針對目標任務使用相應的標記數據對這些參數進行微調
之所以叫微調是因為在這個階段用的數據量遠遠小于第一階段,并且基本沒有更改模型架構和引入過多新的參數
由于Decoder具備文本生成能力,故作為側重生成式任務的GPT選擇了Transformer Decoder部分作為核心架構
不過,與原始的Transformer Decoder相比,GPT所用的結構刪除了Encoder-Decoder Attention,只保留了多頭注意力層Multi-Head Attention層和前饋神經網絡Feed forward層,最后再加上求和與歸一化的前置LN層 + 殘差
通過這樣的結構,GPT便可以利用無標注的自然語言數據進行訓練:根據給定的前個token,預測第??個token,訓練過程中使用的是基于最大似然估計的損失函數,即讓模型預測的概率分布盡可能接近實際下一個單詞的分布
其中的關鍵便是這個Masked Self-Attention,模型通過自注意力機制可以學習序列中不同位置之間的依賴關系,即在處理每個位置的信息時,模型會考慮序列中和該位置的信息有關聯的其他所有位置上的信息,這種機制使得模型能夠有效地處理長距離依賴關系
2.1.2 什么是Self-Attention與Masked Self-Attention
所謂自注意力,即指當我們需要用到自注意力編碼單詞的時候,會按下面幾個步驟依次處理(配圖來自此文)
之后對每個token都進行上述同樣的三步操作,最終會得到每個token新的表示向量,新向量中包含該token的上下文信息,之后再將這些數據傳給Transformer組件的下一個子層:前饋神經網絡
至于所謂Masked Self-Attention就是在處理當前詞的時候看不到后面的詞。舉個例子,處理“it”的時候,注意力機制看不到“it”后面的詞,但會關注到“it”前面詞中的“a robot”,繼而注意力會計算三個詞“it”、“a”、“robot”的向量及其attention分數的加權和
更多細節可以看下上篇BERT筆記(特別是此前還不了解Transformer的),或此文:圖解注意力機制
2.2 GPT2承1啟3:基于prompt嘗試舍棄微調 直接Zero-shot?Learning
雖然GPT1的預訓練加微調的范式僅需要少量的微調和些許的架構改動,但能不能有一種模型完全不需要對下游任務進行適配就可以表現優異?GPT2便是在往這個方向努力:不微調但給模型一定的參考樣例以幫助模型推斷如何根據任務輸入生成相應的任務輸出
最終,針對小樣本/零樣本的N-shot Learning應運而生,分為如下三種
- Zero-shot?Learning?(零樣本學習),是指在沒有任何樣本/示例情況下,讓預訓練語言模型完成特定任務
相當于不再使用二階段訓練模式(預訓練+微調),而是徹底放棄了微調階段,僅通過大規模多領域的數據預訓練,讓模型在Zero-shot?Learming的設置下自己學會解決多任務的問題,而且效果還不錯(雖然GPT2通過Zero-shot?Learming在有些任務的表現上尚且還不如SOTA模型,但基本超越了一些簡單模型,說明潛力巨大),你說神不神奇?
這就好比以前我們剛開始學解題時,聽老師講了一系列知識和方法之后,老師為了讓我們更好的解題,在正式答題考試之前,會先通過幾個樣題讓我們找找感覺,方便在樣題中微調或修正自己對所學知識/方法的理解
Zero-shot?Learming則相當于沒有練手/預熱、沒有參考樣例/演示/范本,學完知識/方法之后直接答題! - One?shot?Learning?(單樣本學習),顧名思義,是指在只有一個樣本/示例的情況下,預訓練語言模型完成特定任務
- Few-shot?Learning?(少樣本或小樣本學習),類似的,是指在只有少量樣本/示例的情況下,預訓練語言模型完成特定任務
此外,只需將自然語言的任務示例和提示信息作為上下文輸入給GPT-2,它就可以在小樣本的情況下執行任何NLP任務,包括所謂的完形填空任務,比如
假如我要判斷“我喜歡這個電影" 這句話的情感(“正面" 或者 "負面"),原有的任務形式是把他看成一個分類問題
輸入:我喜歡這個電影
輸出:“正面" 或者 "負面"
而如果用GPT2去解決的話,任務可以變成“完形填空",
輸入:我喜歡這個電影,整體上來看,這是一個 __ 的電影
輸出:“有趣的" 或者 "無聊的"
加的這句提示“整體上來看,這是一個 __ 的電影”對于讓模型輸出人類期望的輸出有很大的幫助。
這個所謂的提示用NLP的術語表達就是prompt,即給預訓練語言模型的一個線索/提示,幫助它可以更好的理解人類的問題
例如有人忘記了某篇古詩,我們給予特定的提示,他就可以想起來,例如當有人說:
大家自然而然地會想起來下一句詩:黃河入海流
亦或者,搜索引擎,可以根據我們的輸入,進行輸出的提示:
2.3 GPT3:In-context learning正式開啟prompt新范式(小樣本學習)
2.3.1 GPT3在0樣本、單樣本、小樣本下的突出能力
GPT3簡單來說,就是規模大、有錢多金、效果出奇好,具體而言,它的參數規模達到了1750億,并且使用45TB數據進行訓練,其預訓練任務就是“句子接龍”,給定前文持續預測下一個字,而且更為關鍵的是,在小樣本的情況下,其性能表現一度超越SOTA模型
為形象描述,舉一個GPT3在0樣本、單樣本、少量樣本下的機器翻譯使用范例,如下圖
- 圖中右側是普通模型微調的過程,模型通過大量訓練預料進行訓練,然后基于特定的任務數據進行梯度迭代更新(gradient update),訓練至收斂后的模型才具備良好的翻譯能力
- 圖中左側是GPT3分別在0樣本(只給出任務描述)、單樣本(只給出任務描述+一個翻譯樣本)、小樣本(給出任務描述+少量樣本)的情況下所展示出的能力
一方面,單樣本也好 小樣本也好,更多只是作為例子去提示模型,模型不利用樣本做訓練,即不做模型參數的任何更新
二方面,人們一度驚訝于其在0樣本下如此強大的學習能力,使得很多人去研究背后的n Context Learning
畢竟,我們知道普通模型微調的原理:拿一些例子當作微調階段的訓練數據,利用反向傳播去修正LLM的模型參數,而修正模型參數這個動作,確實體現了LLM從這些例子學習的過程
但是,In Context Learning只是拿出例子讓LLM看了一眼,并沒有根據例子,用反向傳播去修正LLM模型參數的動作,就要求它去預測新例子
此舉意味著什么呢?
1?既然沒有修正模型參數,這意味著LLM并未經歷一個修正過程,相當于所有的舉一反三和推理/推斷的能力在上一階段預訓練中便已具備(或許此舉也導致參數規模越來越大),才使得模型在面對下游任務時 不用微調、不做梯度更新或參數更新,且換個角度講,如此巨大規模的模型想微調參數其門檻也太高了
2 預訓練中 好的預訓練數據非常重要,就好比讓模型在0樣本下翻譯英語到法語,那預訓練數據中 必然有大量英語、法語的文本數據
3 抓什么樣的數據 多大規模 怎么喂給模型等等一系列工程細節,這塊是導致很多模型效果有差距的重要原因之一
2.3.2?In Context Learning(ICL)背后的玄機:隱性微調?
零樣本下 模型沒法通過樣本去學習/修正,但即便是少樣本下,也有工作試圖證明In Context Learning并沒有從樣本中學習,比如“Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?”,它發現了:
比如下圖中,無論是分類任務(圖中上部分),還是多項選擇任務(圖中下部分),隨機標注設置下(紅)模型表現均和正確標注(黃)表現相當,且明顯超過沒有in-context樣本的zero-shot設置(藍) 這起碼說明了一點:In Context Learning并沒有提供給LLM那個從映射到 的映射函數信息:,否則的話你亂換正確標簽,肯定會擾亂這個 映射函數,也就是說,In Context Learning并未學習這個輸入空間到輸出空間的映射過程
總之,這個工作證明了In Context Learning并未學習映射函數,但是輸入和輸出的分布很重要,這兩個不能亂改
有些工作認為LLM還是從給出的示例學習了這個映射函數,不過是種隱式地學習
- 比如“What learning algorithm is in-context learning? Investigations with linear models”認為Transformer能夠隱式地從示例中學習 到 的映射過程,它的激活函數中包含了一些簡單映射函數,而LLM通過示例能夠激發對應的那一個
- 而“Why Can GPT Learn In-Context? Language Models Secretly Perform Gradient Descent as Meta-Optimizers”這篇文章則將ICL看作是一種隱式的Fine-tuning
2.4 Prompt技術的升級與創新:指令微調技術(IFT)與思維鏈技術(CoT)
2.4.2 Google提出FLAN大模型:基于指令微調技術Instruction Fine-Tuning (IFT)
OpenAI的GPT3雖然不再微調模型(pre-training + prompt),但Google依然堅持預訓練 + 微調的模式
2021年9月,谷歌的研究者們在此篇論文中《Finetuned Language Models Are Zero-Shot Learners》提出了基于Instruction Fine-Tuning(指令微調,簡稱IFT)的FLAN大模型,極大地提升了大語言模型的理解能力與多任務能力,且其在很多任務上的零樣本學習能力超過GPT3(畢竟指令微調的目標之一即是致力于improving zero-shot generalization to tasks that were not seen in training),最終達到的效果就是:遵循人類指令,舉一反三地完成任務
有兩點值得注意的是
We take a pretrained language model of 137B parameters and perform instruction tuning—finetuning the model on a mixture of more than 60 NLP datasets expressed via natural language instructions.
We refer to this resulting model as FLAN, for Finetuned Language Net
至于IFT的數據通常是由人工手寫指令和語言模型引導的指令實例的集合,這些指令數據由三個主要組成部分組成:指令、輸入和輸出,對于給定的指令,可以有多個輸入和輸出實例
相比于GPT-3,且區別在于Finetune,FLAN的核心思想是,當面對給定的任務A時,首先將模型在大量的其他不同類型的任務比如B、C、D...上進行微調,微調的方式是將任務的指令與數據進行拼接(可以理解為一種Prompt),隨后給出任務A的指令,直接進行推斷,如下圖所示
例如,我們的最終目標是推理任務
在面對翻譯任務時可以給出指令“請把這句話翻譯成西班牙語”
在面對常識推理任務時可以給出指令“請預測下面可能發生的情況”
相當于通過指令微調之后,模型可以更好的做之前預訓練時沒見過的新任務且降低了對prompt的敏感度(某些場景下不一定非得設計特定prompt才能激發模型更好的回答),這或許也啟發了OpenAI重新注意到了微調這一模式,從而在InstructGPT中針對GPT3做Supervised fine-tuning(簡稱SFT,某種意義上可以認為是做指令微調)
2.4.1 基于思維鏈(Chain-of-thought)技術下的prompt
為讓大語言模型進一步具備解決數學推理問題的能力,22年1月,谷歌大腦團隊的Jason Wei、Xuezhi Wang等人提出了最新的Prompting機制——Chain of Thought(簡稱CoT),簡言之就是給模型推理步驟的prompt,讓其學習人類如何一步步思考/推理,從而讓模型具備基本的推理能力,最終可以求解一些簡單甚至相對復雜的數學推理能力
以下是一個示例(下圖左側為standard prompting,下圖右側為基于Cot的prompt,高亮部分為chain-of-thought),模型在引入基于Cot技術的prompt的引導下,一步一步算出了正確答案,有沒有一種眼前一亮的感覺?相當于模型具備了邏輯推理能力
那效果如何呢,作者對比了標準prompting、基于Cot技術的prompting分別在這三個大語言模型LaMDA、GPT、PaLM(除了GPT由openAI發布,另外兩個均由Google發布)上的測試結果,測試發現:具有540B參數的PaLM模型可以在一個代表小學水平的數學推理問題集GSM8K(GSM8K最初由OpenAI于2021年10月提出)上的準確率達到了60.1%左右
很快,這項技術引起了很多人的關注,比如不論是few-shot還是zero-shot,在加入Cot技術之后,都能回答此前不能回答的某些數學推理問題,甚至出現了風靡一時的“let's think step by step”的梗(通過該條語句可以激發模型的推理能力)
2.5 GPT3到GPT3.5:從instructGPT到ChatGPT的迭代過程
據OpenAI官網對GPT3.5的介紹,GPT3.5從2021年第四季度開始就混合使用文本和代碼進行訓練,我們來看下GPT3.5的各個系列模型及其各自的發展演變脈絡圖
基于GPT3的發展路線:一條是側重代碼/推理的Codex,一條側重理解人類的instructGPT
- 第一條線:為了具備代碼/推理能力:GPT3 + 代碼訓練 = Codex
2020 年5-6月,OpenAI先后發布了
GPT3的論文《Language Models are Few-Shot Learners》
GPT-3的最大規模的版本——175B(1750億參數)大小的API?Davinci(有著2048個詞的上下文窗口),此時的GPT3還只能寫一些簡單的代碼和做一些簡單的數學題
2021 年7月,OpenAI發布Codex的論文《Evaluating Large Language Models Trained on Code》,其中初始的Codex是根據120億參數的GPT-3變體進行微調的,且通過對159GB的Python代碼進行代碼訓練
后來這個120 億參數的模型演變成OpenAI API中的code-cushman-001,且大眾意外的發現,它具備較強的代碼/推理能力
代碼能力好理解,通過大量的代碼訓練,但其推理能力是如何獲取到的呢,其中關鍵在于很多代碼是為了解決數學推理問題,訓練中可以用『類似后續22年年初Google一些研究者定義的CoT技術』獲取推理能力,當然,此時文本上的能力尚且偏弱 - 第二條線:為了更好理解人類:GPT3 + 指令學習 + RLHF = instructGPT
上文第一部分已經提到過,根據OpenAI的這篇論文《Learning to summarize with human feedback (Stiennon et al., 2020)》可知,2020年openAI便再研究GPT3與RLHF的結合了,但此時還是會經常一本正經的胡說八道,且很容易輸出負面甚至帶有危害的內容(畢竟人類言論中存在不少不友好的言論)
在OpenAI于2021年徹底加強Codex之后,終于有時間解決模型與人類對話的問題了,于是在2022年3月,OpenAI發布遵循人類指令學習的論文(指令學習可以認為就是指令微調instruct tuning):Training language models to follow instructions with human feedback,這就是instructGPT,且把RLHF用得更好了
其核心API就是instruct-davinci-beta和text-davinci-001(當然,文本上的能力不錯但代碼/推理上的能力偏弱)
基于GPT3.5的發展路線:增強代碼/推理能力且更懂人類終于迭代出ChatGPT
- 首先,融合代碼/推理與理解人類的能力,且基于code-cushman-002迭代出text-davinci-002
2022年4月至7月,OpenAI開始對code-davinci-002(有著8192個token的上下文窗口)模型進行Beta測試,也稱其為Codex(當配備完善的思維鏈時,其在GSM8K等數學測試數據上的表現十分優異)
2022 年5-6月發布的text-davinci-002是一個基于code-davinci-002的有監督指令微調(即在code-davinci-002基礎上加入supervised instruction tuning) 模型
在text-davinci-002上面進行指令微調很可能降低了模型的上下文學習能力,但是增強了模型的零樣本能力(更懂人類) - 其次,為了進一步理解人類:text-davinci-002 + RLHF =?text-davinci-003/ChatGPT
text-davinci-003、ChatGPT都是基于text-davinci-002基礎上改進的基于人類反饋的強化學習的指令微調模型 (instruction tuning with reinforcement learning from human feedback)
text-davinci-003恢復了一些在text-davinci-002中丟失的部分上下文學習能力(比如在微調的時候混入了語言建模) 并進一步改進了零樣本能力(得益于RLHF,生成更加符合人類期待的反饋或者說模型與人類對齊)
至于ChatGPT則更不用說了,其對應的API為gpt-3.5-turbo(由23年3.2日OpenAI最新發布)
??代碼/推理能力強大,考慮到Codex學習了大量的開源代碼,由此是不也能理解為何ChatGPT具備那么強大的編碼及debug能力了,且訓練代碼中包含不少解決數學問題的代碼,加上對代碼注釋的學習(基于一些代碼和代碼描述的樣式/范例使用類似CoT這樣的技術學習),是不是也就能學會代碼背后的推理能力呢
? 而且理解人類的能力前所未有
2.6 ChatGPT初版與InstructGPT的差別:基于GPT3還是GPT3.5微調
通過OpenAI公布的ChatGPT訓練圖可知,ChatGPT的訓練流程與InstructGPT是一致的,差異只在于
- InstructGPT(有1.3B 6B 175B參數的版本),是在GPT-3(原始的GPT3有1.3B 2.7B 6.7B 13B 175B等8個參數大小的版本)上做Fine-Tune
- 22年11月份的初版ChatGPT是在GPT-3.5上做Fine-Tune
2.7 ChatGPT改進版:底層語言模型從GPT3.5升級到GPT4
23年3月14日(國內3.15凌晨),OpenAI正式對外發布GPT4,之前訂閱ChatGPT plus版的可以直接體驗GPT4
根據OpenAI官網發布的《GPT-4 Technical Report》可知?
“GPT-4 is a Transformer-style model pre-trained to predict the next token in a document, using both publicly available data (such as internet data) and data licensed from third-party providers. The model was then fine-tuned using Reinforcement Learning from Human Feedback (RLHF)”
RLHF的作用在于
對于某些特定任務,The GPT-4 base model is only slightly better at this task than GPT-3.5; however, after RLHF post-training we observe large improvements over GPT-3.5
RBRMs相當于是零樣本下GPT-4的決策依據或者分類器
這些分類器在RLHF微調期間為GPT-4策略模型提供了額外的獎勵信號,以生成正確回答為目標,從而拒絕生成有害內容
第三部分 InstructGPT/ChatGPT訓練三階段及多輪對話能力
3.1?InstructGPT訓練三階段
3.1.1 ChatGPT的前身之InstructGPT:基于RLHF手段微調的GPT
根據InstructGPT的原始論文可知,InstructGPT的訓練分為三個階段(總體上結合了無監督預訓練、有監督微調、強化學習(RLHF),先是有監督微調“經過無監督預訓練好的GPT”,然后基于人類偏好訓練一個獎勵函數,最終在最大化獎勵函數的目標下通過PPO算法來更新微調過的GPT3的參數):
階段1:利用人類的問答數據去對GPT3進行有監督訓練出SFT模型(作為baseline)
首先,OpenAI是先設計了一個prompt dataset,里面有大量的提示樣本,給出了各種各樣的任務描述,其次,找了一個團隊對這個prompt dataset進行標注(本質就是人工回答問題)
最后,用這個13k大小的標注好的數據集(問題-答案對)比如微調GPT3,這個微調好的GPT3我們稱之為SFT模型(監督微調,全稱Supervised fine-tuning,簡稱SFT),它作為baseline具備了最基本的預測能力
? 說白了,讓人類就一些問題寫出人工答案,再把這些問題和答案丟給模型學習,這便是有監督訓練,但人類不可能針對所有問題都寫出答案給到模型(如果人類能把所有問題都標注/回答了,那還要模型干嘛,^_^)
? 所以我們需要讓模型學到人類的喜愛偏好(訓練出一個RM模型代替人類當裁判,避免讓實驗人員守在電腦前對模型吐出來的結果不停地打分)
? 繼而在遵循這種喜愛偏好下生成人類期待的答案,想達到這個效果就是得讓模型明確什么是更好的輸出,怎么明確?通過獎懲!
階段2:通過RLHF的思路訓練一個獎勵模型RM
首先通過『移除了最后一層unembedding layer的上一階段的SFT模型』初始化出我們的RM模型,且最后大小縮減到6B
然后回答一個規模大小為33k的數據集的一些問題比如,接著針對每個問題收集4個不同的輸出從而獲取4個回答
可能有的讀者會疑問為何有多個輸出,原因在于模型每次預測一個詞都有對應的概率,根據不同的概率大小可以采樣出很多答案,比如通過beam search保留k個當前最優的答案(beam search相當于貪心算法的加強版,除了最好的答案外,還會保留多個比較好的答案供選擇)
接著人工對這4個回答的好壞進行標注且排序,排序的結果用來訓練一個獎勵模型RM,具體做法就是學習排序結果從而理解人類的偏好
但通過人來標注/排序的結果訓練出獎勵模型之后怎么用呢,這就是訓練階段3要做的事情
階段3:通過訓練好的RM模型預測結果且通過PPO算法優化模型策略
首先讓第一階段微調好的SFT模型初始化出一個PPO模型(可理解為帶著RL且初始版本為SFT的模型,后續通過PPO算法迭代策略。若不了解什么是RL的務必先看下本文第一部分強調過的:RL極簡入門)
然后去回答規模大小為31k且不帶人類任何標注的一些問題比如
此時不再讓人工評估好壞,而是讓階段2訓練好的獎勵模型RM去給PPO模型的預測結果比如進行打分進而排序(看是否優質,比如是否迎合人類偏好)
之后通過不斷更大化獎勵而優化PPO模型的生成策略(策略更好 回答更好),策略優化的過程中使用PPO算法
最后,根據優化后的策略再次生成??RM再評估 模型再優化后再生成,如此循環進行,直到策略最優為止,更多細節下文詳述
值得一提的是,上文反反復復提到策略,那怎么理解這個經常在RL中出現的“策略”呢,舉幾個例子
- 類似于一個人做事如果有好的策略或方法論,他便能有更好的行為或效率,從而把事情做更好
- 再比如一家公司如果有好的經營策略,這家公司便能有更好的經營結果,從而取得更好的業績
- 對于模型也是一樣的,如果它有更好的生成策略,它便能給人類提供更好的回答
此外,可能有讀者疑問,InstructGPT之所以使用RLHF的思路,只是為了訓練獎勵函數么?事實上,還有額外多方面的用途
以往的GPT訓練,都是基于大量無標注的語料,這些語料通常收集自充斥大量“行話”、“黑話”的互聯網中,這樣訓練出來的語言模型,它可能會有虛假的、惡意的或者有負面情緒等問題的輸出
因此,通過人工干預微調GPT,使其輸出對用戶友好(避免亂說話),且更好的和人類對話,所以,對InstructGPT的簡單理解,可以是基于人類反饋的強化學習(RLHF)手段微調的GPT。
接下來,我們分別具體闡述上面的階段2、階段3。
3.1.2 instructGPT訓練階段2:如何對多個輸出排序及如何訓練RM模型
可能又有讀者有疑問了,即instructGPT中,人類對模型的多個輸出做個排序,為什么就能夠提供監督信號,或者說在訓練RM時如何怎么做到loss的梯度回傳?
訓練RM的核心是由人類對SFT生成的多個輸出(基于同一個輸入)進行排序,再用來訓練RM。按照模仿學習的定義,直觀上的理解可以是,RM在模仿人類對語句的排序思路,說白了,就是上文提到過的RLHF。
那么到底是如何模仿的呢,或者說如何實現梯度回傳?
這里我們代入一個場景,假設你向一個六歲小孩解釋什么是登陸月球或什么是RL,如下圖
針對這個損失函數需要逐一說明的是
有一點要提下的是,RLHF中的rank就好比監督學習中的弱標注——它并不提供直接的監督信號。但通過學習簡單的排序,RM可以學到人類的偏好
為何是排序,而非直接打分呢,道理很簡單,排序相比打分更容易接近客觀事實,即不同的標注員,打分的偏好會有很大的差異(比如同樣一段精彩的文本,有人認為可以打1.0,但有人認為只能打0.8),而這種差異就會導致出現大量的噪聲樣本,若改成排序,則不同標注員的排序一致性相比打分一致性就大大提升了
如此,通過這種形式的梯度回傳,RM逐漸學會了給D這類語句以高排名甚至打出一個高分,給A、B以低排名甚至打出一個低分,從而模仿到了人類偏好。到了這一步,不妨可以這么簡單理解RLHF:所謂的基于人類反饋的強化學習,某種意義上來說,就是由人類的偏好來充當reward
3.1.3 instructGPT訓練階段3:如何通過PPO算法進一步優化模型的策略
簡而言之,階段3可以用下圖形象化表示
具體而言,instructGPT原始論文中的目標函數如下所示
InstructGPT這篇論文吧,對大家實在是太友好了,友好到全篇論文就只給了兩個公式(獎勵函數的損失函數以及上面這個目標函數),關鍵這兩個公式都還只是簡寫,針對這個目標函數在和交大張老師及七月在線趙、倪等老師核對之后,發現實際中真正要算的時候,需要如下展開下
為何呢?考慮到大部分文章在分析上面的目標函數時基本都是人云亦云、一帶而過,故再逐一拆接下這個目標函數,分為三個部分
怎么避免它兩相差太多呢?這就是PPO要做的事情(通過KL散度衡量兩個策略的概率分布之間的差距,從而使得咱們在優化策略時限制參數更新的范圍) 其中,?KL獎勵系數控制 KL 懲罰
好,接下來,重點來了,簡言之,/與PPO算法表達式中的一一對應,比如與環境交互的等同于原始策略,具體而言,有以下4點
①?已經掌握人類偏好的RM模型一旦判定現有回答的不夠好,便得更新,但如果一旦變化,會導致后續計算一系列問答評分時中的發生變化(策略一變軌跡必變),進而已采樣的問答數據 便沒法繼續使用,而只能不斷采樣一批批新的問答數據(更新后,得采樣新一批數據;再更新后,再采樣新一批數據..)
②?為避免一更新便只能重復采樣一批批新問答數據,說白了,保護(數據)現場,我們改讓去和環境交互『始終固定住不變,且基于重要性采樣的原則,增加重要性權重』
然后為了最大化獎勵而不斷迭代(相當于在策略下模型回答的好不好始終由RM模型評判),迭代過程中可重復用已有數據反復驗證
③?迭代中我們追求整個目標函數最大化,等同于要求最小(畢竟KL散度越小代表兩個策略之間的差距越小)
至于如果忘了KL散度公式的具體表達或者忘了怎么推導而來的,可以看下RL極簡入門關于TRPO的部分 ④?直到迭代出最優策略(是否最優裁判RM模型說了算)
之所以加最后的這個偏置項,是防止ChatGPT在RL的訓練過程中過度優化,從而避免過于放飛自我,通過某種刁鉆的方式取悅人類,而不是老老實實地根據人類的問題給出正確答案
3.2 InstructGPT如何更好的構建多輪對話能力
這里我們先從自然語言任務中最基本的語言模型簡單說起。一個語言模型大概是說,當你給定前面的若干個詞后,它會給你下一個詞;而當你有了下一個詞后,它會再給你接一個詞,以此遞推
這就好比我們使用手機輸入法,你打出一些詞句后,輸入法會提供若干個候選詞——這里的手機輸入法其實就是一個語言模型。那么如何利用這個最基本的語言模型來建模多輪對話問題呢?
在強化學習中,我們有智能體/模型和環境交互這樣的范式。但是在ChatGPT所使用的訓練方式中,環境從某種意義上說被直接被獎勵模型RM取代了,如下圖
這里我們明白了在語言模型場景下強化學習的狀態和動作對應什么,那么獎勵Reward呢?由于上文已經分析過instructGPT的目標函數了,這里就不再贅述,直接上圖:
至此,還有一個細節問題,即獎勵函數是對整個輸入語句和整個輸出語句而言的,而我們又在之前討論過,智能體是根據一個一個詞來去拼湊出整個回答的。圖中的獎賞函數只能給出完整回答的獎賞,那么在智能體生成回答的過程中,每個動作action給出的詞對應的獎賞是什么呢?
這個細節在InstructGPT的論文中并沒有給出。幸運的是,上文提到過的這篇論文《Learning from summarize from Human feedback》中的一個引腳標注給出了這個疑問的答案
論文里說,獎賞模型只在最終生成回答之后才給出獎賞,在中間的過程中是不給出獎賞的。在這里論文里沒有使用回答一詞,而是使用總結一詞,因為它的任務是將一篇長文章進行歸納總結
換言之,只有在ChatGPT輸出了EOS token的時候,整個軌跡才結束(EOS token是NLP中用來表示一段話結束的標志)
總結上文,可得
考慮到多輪對話場景里,存在某一輪對話中的代詞指向上一輪對話中的某個人或物的可能,為此,ChatGPT多輪對話的核心關鍵是
在回答用戶問題的過程中,每段對話都是一個個序列
把之前的部分對話內容(對歷史對話數據的規模做個限制,比如限制在8K大小)都保存下來,和當前的輸入一起作為輸入給模型,這些信息被編碼成一個向量作為模型的輸入
且得益于Transformer的自注意力機制,使得模型能夠理解不同對話歷史之間的依賴關系,并在生成回答時考慮到之前的對話歷史
此外,模型還使用位置編碼來區分每個對話歷史的位置,確保模型可以正確地捕捉到對話歷史的順序信息
3.3 低成本實現ChatGPT迷你版訓練過程的開源項目
雖說GPT3在2020年就出來了,但OpenAI并未開源,所以直到一年半后以后才有國內外各個團隊比如DeepMind等陸續復現出來,這些大廠的復現代碼我們自然無法窺知一二,畢竟人家也未開源出來
但GitHub上有一個基于Colossal-AI低成本實現ChatGPT迷你版訓練過程的開源項目(基于GPT3 + RLHF + PPO)則可以看下,雖只是類似GPT3與RLHF的結合(如本文開頭所說,OpenAI早在2020年便已經對外宣布GPT3與RLHF的研究了),但可以增進我們對ChatGPT的理解
畢竟ChatGPT現在沒論文、沒開源,連所基于的GPT3.5的參數規模尚無準確定論,所以只能通過GPT3 + RLHF來推測或研究ChatGPT之其中一二,但該項目有幾個不錯的特點
但如果想訓練OpenAI原生的1750億參數版本的GPT3,就不只是有GPU就完事了,而是得用64張AI 100(即便經過一系列內存開銷上的優化,也得至少32張AI 100,單張AI 100售價10萬以上,且現在還經常沒貨),這樣的硬件要求是大部分個人是無法具備的,所以該開源項目提供了單GPU、獨立4/8-GPUs 的ChatGPT迷你版
此外,據鐘博士在我所維護的『Machine Learning讀書會群』里所說,Colossal-AI的并行效率確實不錯,是新加坡的一個初創團隊推出的,但目前尚沒有團隊采用Colossal-AI框架來做主訓練框架訓練175b級別的超大模型,可以再了解下Meta家訓練OPT用的Metaseq
后記(含修改/優化/完善記錄)
事實上,可能很多朋友也已經意識到,本文的前大部分內容里,GPT-N理解起來相對輕松(包括Transformer通過理解上篇BERT筆記不算特別復雜),而instructGPT/ChatGPT的整體架構思想也不算復雜,但其中涉及到的RL部分則讓想深挖細節的初學者變得立馬吃力起來(除非你已“入一定門”,或者你有課程/老師可以不斷問),比如一個PPO算法,要真正把這個概念講清楚、講透徹且從零推到尾則沒那么容易了。
以下是本文的部分修改/優化/完善記錄
1.22日,優化關于“instructGPT:如何基于RLHF運用到多輪對話場景”中的部分描述
且為避免篇幅過長而影響完讀率,權衡之下把擴展閱讀下的SeqGAN相關內容刪除
2.25日,新增關于"GPT3到GPT3.5:從instructGPT到ChatGPT的迭代過程"的部分
相比前幾天有了質的提升
?之前哪怕修改十幾次也都是1.x版本,今天的這個版本可以稱之為2.0版本了,還會不斷完善
且修正為:SFT就是基線模型 最后不用去更新它的策略,更新的是論文中命名為PPO模型的策略
且在本文最后附上了“ChatGPT相關技術的100篇論文必讀榜”
且刪除關于“近端策略優化裁剪PPO-clip”的介紹,畢竟詳細的可以查看另一篇RL極簡入門
故為方便大家一目了然,已把該目標函數展開了下
3.8日,通過再次回顧GPT3的論文,補充關于為何GPT3不需要微調的原因,且修正個別不太精準的描述
為了寫本筆記,過去兩個月翻了大量中英文資料/paper(中間一度花了大量時間去深入RL),大部分時間讀的更多是中文資料,2月最后幾天讀的更多是英文paper,正是2月底這最后幾天對ChatGPT背后技術原理的研究才真正進入狀態(后還組建了一個“ChatGPT之100篇論文閱讀組”,我和10來位博士、業界大佬從23年2.27日起100天讀完ChatGPT相關技術的100篇論文,榜單見此文),當然 還在不斷深入,由此而感慨:?
- 讀的論文越多,你會發現大部分人對ChatGPT的技術解讀都是不夠準確或全面的,畢竟很多人沒有那個工作需要或研究需要,去深入了解各種細節
- 因為100天100篇這個任務,讓自己有史以來一篇一篇一行一行讀100篇,?之前看的比較散 不系統 摳的也不細
比如回顧“Attention is all you need”這篇后,對優化上一篇Transformer筆記便有了很多心得
總之,讀的論文越多,博客內相關筆記的質量將飛速提升 自己的技術研究能力也能有巨大飛躍
參考文獻與推薦閱讀
?此外,寫過圖解Word2vec、圖解transformer的Jay Alammar也寫過:圖解GPT2(其翻譯版)、圖解GPT3(其翻譯版)
GPT系列論文閱讀筆記,另 300行代碼實現GPT:GitHub - karpathy/minGPT: A minimal PyTorch re-implementation of the OpenAI GPT (Generative Pretrained Transformer) training
此外,FLAN-T5原始論文:Scaling Instruction-Finetuned Language Models,這是對T5的解讀之一
總結
以上是生活随笔為你收集整理的ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP/IP详解 第七章 防火墙和网
- 下一篇: 如何给宝宝起个好名?三点原则!起名有道,