陳煥森,中山大學(xué),Datawhile陳煥森,中山大學(xué),曾就職于香港中文大學(xué)(深圳)醫(yī)療大數(shù)據(jù)實(shí)驗(yàn)室,在那里積累了寶貴的工作經(jīng)驗(yàn)和技能。目前,正于Datawhale工作,對數(shù)據(jù)科學(xué)和軟件工程領(lǐng)域都有濃厚興趣。
(InstructGPT) Training language models to follow instructions with human feedback
https://export.arxiv.org/pdf/2203.02155.pdf
今年2月份的時(shí)候,ChatGPT突然間一下子爆火,當(dāng)時(shí)我就很關(guān)心它背后的技術(shù)是什么樣的,所以我在當(dāng)時(shí)參考了一些資料,包括B站的李沐的視頻,以及 huggingface的博客,然后對ChatGPT 背后的技術(shù)做了一個(gè)總結(jié)。
首先我們來回顧GPT系列的技術(shù)是怎么來的?最早2017年由Google的團(tuán)隊(duì)做出來的Transformer,當(dāng)時(shí)只是去解決序列翻譯的問題。然后由OpenAI,最早把這個(gè) Transformer 這個(gè)模型用來去做大規(guī)模的預(yù)訓(xùn)練,叫做GPT,然后緊接著還是 Google,他們內(nèi)部在 Transformer 上做了也是大規(guī)模的預(yù)訓(xùn)練,即Bert。
GPT 跟 Bert 之間的差別在于, GPT 它是致力于解決生成式任務(wù),而 Bert是去做有點(diǎn)像文本填充的任務(wù),從任務(wù)的難度來說的話,還是GPT 系列的任務(wù)會更難一點(diǎn),所以也是李沐老師講的,可能正是因?yàn)檫@類任務(wù)本身的難度決定了 GPT 系列的生成式模型會有更強(qiáng)的性能。也正是 OpenAI這個(gè)團(tuán)隊(duì)致力于不斷地在這條技術(shù)路線上面不斷地砸錢砸資源,才會有今年ChatGPT 的爆火。由于openAI 想要把ChatGPT商業(yè)化,所以并沒有放出來它的模型跟論文。
在此之前OpenAI團(tuán)隊(duì)放出來一篇InstructGPT的論文,用的是跟ChatGPT幾乎一樣的方法,所以ChatGPT的講述會參考這篇InstructGPT。
InstructGPT 是如何工作的呢?它的方法可以分為三個(gè)步驟。首先,在 GPT 的大規(guī)模預(yù)訓(xùn)練模型的基礎(chǔ)上進(jìn)行模型微調(diào),這個(gè)微調(diào)是通過有監(jiān)督學(xué)習(xí)實(shí)現(xiàn)的。第二步是收集對比數(shù)據(jù),然后用這些數(shù)據(jù)來訓(xùn)練獎(jiǎng)勵(lì)模型。第三步是利用獎(jiǎng)勵(lì)模型和強(qiáng)化學(xué)習(xí)策略來優(yōu)化第一步中經(jīng)過微調(diào)的 GPT 3.5 模型。整個(gè)過程可以分為兩個(gè)部分。第一部分是利用大量有監(jiān)督數(shù)據(jù)來訓(xùn)練微調(diào)模型。第二部分也是一種微調(diào),但使用了一些強(qiáng)化學(xué)習(xí)技巧。許多人認(rèn)為,如果模型的數(shù)據(jù)足夠豐富,可以省略第二步和第三步,直接使用第一步微調(diào)的方法來訓(xùn)練一個(gè)類似 ChatGPT 的模型。
那么ChatGPT中為什么第二步和第三步是必要的呢?必要性可能在于采用了一種更經(jīng)濟(jì)高效的方法來進(jìn)一步微調(diào)。讓我們先看一下 InstructGPT論文中的想法,為什么提出了 RL 和 HF?因?yàn)檎Z言模型的訓(xùn)練目標(biāo)與人類指定的目標(biāo)不一致,從本質(zhì)上來說,它仍然是一個(gè)微調(diào)。那么為什么要訓(xùn)練獎(jiǎng)勵(lì)模型以及如何訓(xùn)練獎(jiǎng)勵(lì)模型呢?因?yàn)楠?jiǎng)勵(lì)模型具有更低的標(biāo)注成本,我們可以用獎(jiǎng)勵(lì)模型代替人類提供獎(jiǎng)勵(lì)信號,如圖是在 Hugging Face 的官方博客中展示的。
首先采集的 Prompt 數(shù)據(jù)集,這些數(shù)據(jù)集它是沒有標(biāo)注的,然后讓GPT微調(diào),根據(jù)Prompt生成一些答案,然后人類對這些答案進(jìn)行一個(gè)打分,打分之后由這些答案和這個(gè)分?jǐn)?shù)作為一個(gè)數(shù)據(jù)集來共同訓(xùn)練一個(gè) reward model。它的訓(xùn)練指標(biāo)是一個(gè)label ranking,這是一個(gè) paywise ranking loss,loss 就是每做一次,隨機(jī)抽取兩個(gè)sample,然后由分?jǐn)?shù)更高的一個(gè) sample 來減去分?jǐn)?shù)更低的sample,然后希望能學(xué)習(xí)到人類對這個(gè)更好的生成的答案的偏好,這就是人類反饋的偏好的說法的來源。
之后第二步訓(xùn)練好一個(gè) reward model,它結(jié)合了強(qiáng)化學(xué)習(xí)的手段。還是采集一批無標(biāo)注的Prompt的數(shù)據(jù)集,Prompt數(shù)據(jù)集分別喂到一個(gè)初始化的模型和一個(gè)微調(diào)過的模型中,然后讓它們分別生成一個(gè)答案做對比,其中微調(diào)過的模型需要進(jìn)一步的去利用reward model 來進(jìn)行打分。
PPO-ptx即利用強(qiáng)化學(xué)習(xí)的手段,它利用KL 散度來對比微調(diào)過的模型和原來語言模型的距離。
整個(gè)訓(xùn)練具體目標(biāo)函數(shù)是KL 散度的期望,由獎(jiǎng)賞模型給出的r減去所訓(xùn)練模型和初始的模型的 KL 散度,并計(jì)算出一個(gè)期望,然后再加上GPT 的損失函數(shù)的期望,這樣既保證強(qiáng)化模型的更新能基于 SFT (supervise fine tuning)的模型,又保證不會偏離原來的預(yù)訓(xùn)練模型太遠(yuǎn)。這樣每一次都在一個(gè)可控的范圍內(nèi)進(jìn)行迭代。在李沐老師的這篇論文進(jìn)度里面也提到了,ChatGPT 相比這個(gè)InstructGPT最大的改進(jìn)可能是 reward model 會有計(jì)劃的更新,即在線強(qiáng)化學(xué)習(xí)。
所謂的在線強(qiáng)化學(xué)習(xí)就是 InstructGPT 里面的 reward model,它只更新過一次,或者有限次,但是這個(gè)ChatGPT的 reward model 會周期性地去更新,來保證這個(gè) reward model 的能力能跟得上我們所訓(xùn)練的語言模型。
接下來我們回顧一下這幾個(gè)月,類GPT模型的一些進(jìn)展是怎么樣的。
首先GPT4,它相比 GPT 3. 5,它最大的提升是一個(gè)圖片文本的多模態(tài)。我在搜索過程中發(fā)現(xiàn)就是在 GPT 4 的前后,已經(jīng)有微軟團(tuán)隊(duì)以及谷歌團(tuán)隊(duì)做了一些圖文多模態(tài)模型,分別是 BLIP-2和LLaVA, LLaVA是基于Meta 開源出來LLaMA的模型,進(jìn)一步訓(xùn)練生成的圖文多模態(tài)模型。
與ChatGPT系列結(jié)合更緊密的技術(shù)是上下文的長度,更長的上下文,會讓ChatGPT使用體驗(yàn)會更好。像 GPT 3. 5 原本它只能支持4K的 TOKEN, GPT4支持32K 的長度,最近的GPT 3. 5 它的放出來的 API已經(jīng)能夠支持到16K,這也是一個(gè)不小的進(jìn)步。絕大多數(shù)的大語言大模型還是4K 左右。
增加上下文長度的訓(xùn)練難度是,Attention是一個(gè)0(n2) 的復(fù)雜度,無論是時(shí)間還是空間,它都是0(n2)的推理和訓(xùn)練時(shí)間。也許我們能接受訓(xùn)練0(n2)難度,但是我們在使用時(shí)候要能要保證它的推理速度,至少要解決它0(n2)的時(shí)間復(fù)雜度。
并且,我們在訓(xùn)練的時(shí)候,這個(gè)文本絕大多數(shù)還是一個(gè)比較短的上下文,我們很難去收集很多很長的那種超長的上下文數(shù)據(jù)來做模型的訓(xùn)練。同時(shí)包括我們在訓(xùn)練的時(shí)候希望能夠去對這個(gè)模型的性能進(jìn)行外推,也就是說們用一些比較短的上下文的數(shù)據(jù)來做訓(xùn)練,然后能夠希望它能夠外推到更長的上下文的這個(gè)推理的這個(gè)場景,那么他在外推的時(shí)候,他就會肯定會不可避免地去產(chǎn)生一個(gè)推理性能下降的這么一個(gè)問題。那么也就是說一個(gè)是速度,一個(gè)是性能,這兩個(gè)問題決定了你更長的上下文是很難做的。而 Antropic它的做法用到了圖中所示的兩類技術(shù),這些技術(shù)也是類似的大語言模型,它們要解決這個(gè)更長下文的時(shí)候,都會選擇一些比較通用的技術(shù)。
現(xiàn)在的思路大概是兩類,一類是 attention 的工程化,也就是我可能使用的還是一些比較原始的attention,但是我會把這個(gè) attention 的計(jì)算結(jié)合我們這個(gè)硬件來做一些適配,這是一個(gè)比較工程性的一個(gè)概念。然后第二種就是各種 attention 的變體。
一個(gè)目前來說做得比較好以及接受度比較廣的Attention變體就是GAU,它是有一個(gè)Gate的這么一個(gè)概念,這個(gè) attention 變體的宗旨,就是既能夠結(jié)合局部的注意力,又不要放過一個(gè)全局的注意力?;旧洗蠖鄶?shù)的 attention 變體都在局部和全局這兩個(gè)方向做結(jié)合。
而 attention 工程化中, flush attention目前可以說是把工程化做到極致的方法,如果結(jié)合 GPU來說,比如A100 的話,它有 40GB 的一個(gè)內(nèi)存,但是它的這個(gè)它的核心計(jì)算顯存,可能只有 20 MB。如果你不能夠很好地利用好這個(gè) 20 MB 的計(jì)算顯存的話,你可能會有大量的時(shí)間花在調(diào)度上面。
所以他們就利用了這個(gè) SIM 和 HBM 這兩個(gè)模塊的顯存的大小的之間差異,然后去把這個(gè) attention 的計(jì)算分塊來執(zhí)行原本的attention,避免了頻繁地去調(diào)度,每次只存一次和取一次,它相比原來提升了八九倍的性能,這是我了解到的一個(gè)更長上下文的一個(gè)技術(shù)。
還有一個(gè)GPT 4重點(diǎn)去做的事情是安全可靠性,今年3 月份微軟開放的bing,有些人把它的對話調(diào)教得特別的奇怪,各種各樣奇怪的輸出都會有,那么其實(shí)這就是安全可靠性需要關(guān)注的一個(gè)問題。
GPT 4 它的技術(shù)報(bào)告里面提到,它額外添加了一個(gè)基于規(guī)則的獎(jiǎng)勵(lì)模型,但是它又沒有對這個(gè)東西說做一個(gè)詳細(xì)的說明。圖中所示的是DeepMind 團(tuán)隊(duì)做出來語言大模型,他們也提到了基于規(guī)則的一個(gè)獎(jiǎng)勵(lì)模型,就是他在這個(gè)模型去做微調(diào)的時(shí)候,不僅利用剛才我們提到的人類反饋強(qiáng)化學(xué)習(xí)的加強(qiáng)模型,同時(shí)還做了一些定制化的一些規(guī)則。具體的一個(gè)技術(shù)細(xì)節(jié)大家可以去看一下 sparrow model。然后還有一個(gè)紅藍(lán)對抗,紅藍(lán)對抗就是專門有一個(gè)團(tuán)隊(duì)去不斷地去攻擊這個(gè)模型。
最后還有就是,數(shù)據(jù)集怎么保證更高質(zhì)量?前陣子有一個(gè)做 textbooks is all you need,就是吳恩達(dá)老師一直在提的就是小規(guī)模,但是質(zhì)量高的數(shù)據(jù)集可能對模型更有用。至少在這篇論文的場景下,這個(gè)小規(guī)模高質(zhì)量的數(shù)據(jù)集所訓(xùn)練的小模型能夠很好地打敗,數(shù)據(jù)規(guī)模很大,但是質(zhì)量相對不高的大訓(xùn)練模型。、
另外把模型做大其實(shí)是一件很困難的事情。一個(gè)可行的路徑可能是 MOE 架構(gòu)。MOE 架它的一個(gè)全稱是 mixture of experts,一個(gè)專家混合或者專家集成的模型。他跟我們機(jī)器學(xué)習(xí)里面理解的集成學(xué)習(xí)可能不太一樣,他的moe架構(gòu)有不同的一個(gè)傾向,不同的expert會負(fù)責(zé)不同的功能。然后我每一次去做推理,或者說每次做訓(xùn)練的時(shí)候,我是去激活對應(yīng)對應(yīng)場景下的一個(gè)expert。假如說 GPT 4用了這個(gè)技術(shù),現(xiàn)在我是輸入,給他一個(gè)程序的一個(gè)prompt,那他可能會激活第二個(gè)expert,然后我給它一個(gè)生成小說或者是文本理解的 prompt,它可能就會去激活另一個(gè)export,所以它其實(shí)就是做了一個(gè)功能分區(qū)以及稀疏激活的這么一件事情。
接下來進(jìn)入分享的第二個(gè)階段, Prompt 的使用,以及怎么去利用 Prompt 做一些應(yīng)用。
首先是 prompt 使用,這 prompt 使用就是希望在對話的過程中來解決我們無論是工作還是生活上的一些問題。然后我這邊是參考了兩個(gè)鏈接,參考了這個(gè) open AI 官方的一個(gè) Cookbook 的一個(gè)一些教程,我所有的案例都是從它上面找來的。然后這邊也稍微推薦一下我們這個(gè) datawhale的一個(gè) prompt 使用指南。這里跟之前的open AI Coolbook 不同的是,我們在是在上面沉淀了很多案例,都是由我們的學(xué)習(xí)者沉淀下來。
那么為什么要有prompt?原因是現(xiàn)有的語言模型它對外界的輸入是比較敏感的,你的訓(xùn)練集跟測試集可能不太匹配,所以為了更好地利用這個(gè)語言模型的這能力,我們?nèi)ピ俑莻€(gè)類 ChatGPT 模型去做對話的時(shí)候,需要掌握一定的溝通技巧。
prompt 最早也是最出名的一個(gè)案例,Let's think step by step。上圖的場景是一個(gè)推理題,如果是直接提問會得到一個(gè)錯(cuò)誤的答案,但是不用去做太多修改,只需要在prompt 里面讓他一步一步去做思考。ChatGPT 就能夠得到一個(gè)正確的答案。
至于它很有效的原因是,在訓(xùn)練數(shù)據(jù)集里,Let's think step by step可能才是真正貼合模型訓(xùn)練數(shù)據(jù)集的一個(gè)分布,這是一個(gè)不一定正確,但是比較好理解的解釋。
案例中,根據(jù)提問提供了a、b、 c 三個(gè)選項(xiàng),在沒有去對復(fù)雜任務(wù)做拆分的時(shí)候,模型得到一個(gè)錯(cuò)誤的答案。
這個(gè)場景的宗旨就是先總結(jié)clue 的信息,再讓它去做回答。把它做一個(gè)拆分之后,就能夠得到我們理想的有效答案。同時(shí)拆分之后,我們的子任務(wù)也能夠去更好地聚焦。一個(gè)復(fù)雜任務(wù),你對它提了很多若干個(gè)子任務(wù)的時(shí)候,它可能會丟失掉對于某一個(gè)任務(wù)的注意力。你把它拆分之后,轉(zhuǎn)化成若干個(gè) prompt,然后每個(gè) prompt 回答一個(gè)問題,他就能夠很好地聚焦你的子任務(wù),這是復(fù)雜任務(wù)拆分的好處。
思維鏈就是我們在做 prompt的時(shí)候需要一直秉持的一個(gè)觀念,想讓這個(gè)模型能夠像偵探一樣,一步一步地來思考,當(dāng)你能夠這樣去做的時(shí)候,他往往能給出一些不錯(cuò)的答案。
最后是ChatGPT的prompt應(yīng)用化,即把我們的需求轉(zhuǎn)化成特定的prompt,讓ChatGPT 給出一個(gè)答案的一個(gè)應(yīng)用。這里同樣是參考了 OpenAI 的一個(gè) Cookbook 以及 Langchain 的Python 庫,它致力于解決prompt 應(yīng)用化這個(gè)場景,圖中鏈接是langchain文檔的中文版。
這邊我同樣推薦一下我們Datawhile 4月AIGC活動,活動中Datawhale不僅教大家怎么使用prompt,同時(shí)也有一些團(tuán)隊(duì)或者一些學(xué)習(xí)者去產(chǎn)出一些很好的應(yīng)用,有些應(yīng)用已經(jīng)做得很成熟了。
這是langchain庫的應(yīng)用開發(fā)的思路,如上圖所示。
首先它把某個(gè)特定的 prompt 發(fā)給這個(gè)agent,然后代理把這個(gè) prompt 拆解成不同的任務(wù),它拆解的過程中本身就使用了ChatGPT,然后把這個(gè)prompt拆解的思路其實(shí)跟之前復(fù)雜任務(wù)做拆分是一樣的思路,希望能夠得到更好的答案。然后不同的任務(wù)由ChatGPT 來制定不同的工具生成一個(gè)答案。最后再把這個(gè)把不同工具生成的答案做一個(gè)總結(jié)集合,發(fā)給用戶。
相信我們大家對讀論文,或者是讀一些比較長的書的時(shí)候,我們希望能夠快速地提取里面的一些關(guān)鍵字。可以讓這個(gè)模型快速地把這些文本去做一些總結(jié),甚至我們能夠讓模型先讀一遍我們再去對他做一個(gè)提問,針對這個(gè)模型,針對這個(gè)文本去做一個(gè)回答。
怎么對超長文本進(jìn)行總結(jié),目前主流的做法就是把document 進(jìn)行分割,然后每一個(gè)分割片段去做一次總結(jié),之后把這個(gè)若干個(gè)總結(jié)合并起來,這種方式可能會丟失文本,因?yàn)槊總€(gè) document它是有上下文背景的。
另一種方法是,每一次總結(jié)完之后,把這個(gè)總結(jié)插入到document 2,然后不斷地把總結(jié)插入到下一個(gè)分割文本,最后可能得到更好的總結(jié)。
這是上下文有限制的情況下工程化的解決方案。我們當(dāng)然希望這個(gè)模型能夠有非常,甚至趨于無限的上下文。但現(xiàn)實(shí)中這種分割的方法可能也是一個(gè)不錯(cuò)的一個(gè)手段。
之后我們不僅希望它能夠去做總結(jié),還希望它能針對某一個(gè)文本或者是某一堆數(shù)據(jù),他能夠成為所針對文本或數(shù)據(jù)的專家,我們對他提問的時(shí)候,能針對文本做回答。這其實(shí)就是本地知識庫問答機(jī)器人的概念。
這是 Lang chain中文倉庫里面的一個(gè)案例,只是簡短的一個(gè)代碼,就已經(jīng)完成了對 data 目錄下所有文本的學(xué)習(xí),它把文本去加載,然后做一個(gè)切割,之后再創(chuàng)建問答,讓 ChatGPT 對里面的文本去做總結(jié)。既然是一個(gè)本地庫知識庫,它就需要有一個(gè)記憶的概念,這里面用到了向量數(shù)據(jù)庫來承擔(dān)記憶這個(gè)功能。只用了十多行代碼,就構(gòu)建了一個(gè)問答機(jī)器人,答案的效果也不錯(cuò)。
我們不僅希望能夠做本地的問答,我們更希望能夠做在線問答。這個(gè)案例是 open AI Coolbook 中的一張圖。首先我們把用戶的prompt 去針對搜索引擎做一個(gè)search,然后得到的一系列答案利用chatgpt進(jìn)行一個(gè)重排序,最后再從中抽取整合最佳答案返回給用戶。
新 氦 類 腦 智 能 介 紹
新氦類腦智能由博康控股、楊浦創(chuàng)投、復(fù)旦資管共同出資成立,是上海市類腦芯片與片上智能系統(tǒng)研發(fā)與轉(zhuǎn)化功能型平臺的承載主體,致力于打造基于類腦智能與人工智能芯片的產(chǎn)業(yè)發(fā)展引擎,構(gòu)建集人才、技術(shù)、數(shù)據(jù)、產(chǎn)品及行業(yè)應(yīng)用場景于一體的產(chǎn)業(yè)生態(tài)。在技術(shù)研發(fā)、市場轉(zhuǎn)化與業(yè)務(wù)拓展提供全方位服務(wù),由專業(yè)的芯片及人工智能行業(yè)研發(fā)人員領(lǐng)銜進(jìn)行基礎(chǔ)研究,致力于開發(fā)行業(yè)共性技術(shù)、前沿性及探索性創(chuàng)新技術(shù)。
長 按 二 維 碼 關(guān) 注 新 氦 公 眾 號



滬公網(wǎng)安備 31011002003093號