最近ChatGPT可以說是火遍了全世界,作為由知名人工智能研究機構(gòu)OpenAI于2022年11月30日發(fā)布的一個大型語言預(yù)訓(xùn)練模型,他的核心在于能夠理解人類的自然語言,并使用貼近人類語言風(fēng)格的方式來進行回復(fù)。模型開放使用以來,在人工智能領(lǐng)域引起了巨大的轟動,也成功火出了技術(shù)圈。從數(shù)據(jù)上看,ChatGPT用戶數(shù)在5天內(nèi)就達到了100萬,2個月就達到了1億;另外,在很多非人工智能領(lǐng)域,已經(jīng)有機構(gòu)在嘗試用ChatGPT去做一些智能生成的事。例如財通證券發(fā)布了一篇由ChatGPT生成的行業(yè)研報,從研報的可讀性和專業(yè)性上來看,雖然在細節(jié)上有很多需要推敲的地方,但是整體框架內(nèi)容已經(jīng)比較成熟。對于其他內(nèi)容生產(chǎn)者來說,應(yīng)用ChatGPT也能夠提升個人的生產(chǎn)效率。
ChatGPT的強大能力是顯而易見的,但對于人工智能領(lǐng)域不太熟悉的人,對這種黑盒的技術(shù)仍然會擔(dān)憂或者不信任??謶滞ǔ碜杂诓涣私猓虼吮疚膶榇蠹胰嫫饰鯟hatGPT的技術(shù)原理,盡量以簡單通俗的文字為大家解惑。
通過本文,你可以有以下收獲:
1、知道ChatGPT是什么
2、ChatGPT有哪些核心要素
3、ChatGPT能做哪些事
4、ChatGPT不能做哪些事
ChatGPT是什么?
上文說到ChatGPT實際上是一個大型語言預(yù)訓(xùn)練模型(即Large Language Model,后面統(tǒng)一簡稱LLM)。什么叫LLM?LLM指的是利用大量文本數(shù)據(jù)來訓(xùn)練的語言模型,這種模型可以產(chǎn)生出強大的語言關(guān)聯(lián)能力,能夠從上下文中抽取出更多的信息。其實語言模型的研究從很早就開始了,隨著算力的發(fā)展和數(shù)據(jù)規(guī)模的增長,語言模型的能力隨著模型參數(shù)量的增加而提升。下圖分別展示了LLM在參數(shù)量和數(shù)據(jù)量上的進化情況,其中數(shù)據(jù)量圖例展示的是模型在預(yù)訓(xùn)練過程中會見到的token數(shù)量,對于中文來說一個token就相當(dāng)于一個中文字符。
https://www.vinayiyengar.com/2022/08/04/the-promise-and-perils-of-large-language-models/
https://babylm.github.io/
為什么語言模型的參數(shù)量和數(shù)據(jù)量會朝著越來越大的方向發(fā)展呢?在早些時間的一些研究已經(jīng)證明,隨著參數(shù)量和訓(xùn)練數(shù)據(jù)量的增大,語言模型的能力會隨著參數(shù)量的指數(shù)增長而線性增長,這種現(xiàn)象被稱為Scaling Law(下圖左例)。但是在2022年之后,隨著進來對大模型的深入研究,人們發(fā)現(xiàn)當(dāng)模型的參數(shù)量大于一定程度的時候,模型能力會突然暴漲,模型會突然擁有一些突變能力(Emergent Ability,下圖右例),如推理能力、零樣本學(xué)習(xí)能力等(后面均會介紹)。
https://franxyao.github.io/blog.html
ChatGPT真正強大的地方在于他除了能夠充分理解我們?nèi)祟惖膯栴}需求外,還能夠用流暢的自然語言進行應(yīng)答,這是以前的語言模型不能實現(xiàn)的。下面,本文將ChatGPT一分為二,分別從GPT和Chat兩個維度來介紹ChatGPT的機理。值得說明的是:當(dāng)前OpenAI并未放出ChatGPT相關(guān)的訓(xùn)練細節(jié)和論文,也沒有開源代碼,只能從其技術(shù)BLOG上獲取其大致的訓(xùn)練框架和步驟,因此本文介紹的內(nèi)容將根據(jù)后續(xù)實際發(fā)布的官方細節(jié)而更新。
GPT
GPT全稱Generative Pre-training Transformer,由Google在2018年提出的一種預(yù)訓(xùn)練語言模型。他的核心是一個Transformer結(jié)構(gòu),主要基于注意力機制來建模序列中不同位置之間的關(guān)聯(lián)關(guān)系,最后可用于處理序列生成的任務(wù)。通過使用大量的文本數(shù)據(jù),GPT可以生成各種各樣的文本,包括對話、新聞報道、小說等等。上面提到了很多次語言模型,這里簡單給出語言模型主要的涵義:
給定已知的token序列N_t(對中文來說是字符,對英文來說可能是單詞或者詞根),通過語言模型來預(yù)測t+1位置上的token是什么。實際上模型輸出的是所有token在t+1位置上的概率向量,然后根據(jù)概率最大的準(zhǔn)則選擇token。大家在使用ChatGPT的時候,一定有發(fā)現(xiàn)機器人在生成回復(fù)的時候是一個字一個字的順序,背后的機制就是來自于這邊。
cs224n(https://web.stanford.edu/class/cs224n/slides/cs224n-2023-lecture11-prompting-rlhf.pdf)
對語言模型來說,可能大家之前更熟悉的是BERT,BERT是Google在2018年發(fā)布的一種雙向語言模型,發(fā)布后,其在不同語言理解類任務(wù)(如文本分類,信息抽取,文本相似度建模)中都達到了當(dāng)期時間節(jié)點的最好效果。BERT與上述語言模型的機理有所不同,其訓(xùn)練任務(wù)相當(dāng)于讓模型去做完形填空任務(wù)(官方稱為Masked Language Model任務(wù),下文簡稱MLM),并不是遵循文本一個接一個預(yù)測的順序,其模型機制與人類溝通表達的習(xí)慣不太符合。圖中左半部分是BERT的示意圖,右半部是GPT的示意圖,Trm為一個Transformer模型組件,E為輸入的token序列,T為模型生成的token序列。其中,實線部分為該位置的Trm能夠看到哪些其他位置token的上下文知識??梢钥吹?,對于BERT來說,每個位置上的Trm都能看到任意位置的上下文知識,因此其在具體的自然語言理解任務(wù)上會有不錯的效果。而GPT則是遵循傳統(tǒng)語言模型的模式,例如index=1位置的Trm是無法看到index>1的知識的,因此它在自然語言理解任務(wù)上的效果不如BERT,但是在生成任務(wù)上會更符合人類的直覺。業(yè)界把BERT中的MLM模式稱為自編碼形式(auto-encoding),把GPT的模式稱為自回歸形式(auto-regressive)。
https://arxiv.org/abs/2302.09419
大家從BERT和GPT的對比中可以看到,BERT在語言理解上似乎更具優(yōu)勢,那為何現(xiàn)在ChatGPT的模型基座是GPT呢?這就涉及到最近兩年逐漸清晰的NLP任務(wù)大一統(tǒng)趨勢了。
NLP任務(wù)大一統(tǒng)
基于MLM訓(xùn)練范式得到的BERT模型雖然在很多語言理解類任務(wù)上有不錯的效果下游任務(wù),之后整個業(yè)界在處理NLP任務(wù)的時候通常會遵循預(yù)訓(xùn)練模型→下游任務(wù)finetune的流程:
這種方式與傳統(tǒng)的training from scratch相比,對下游任務(wù)數(shù)據(jù)的需求量更少,得到的效果也更優(yōu)。不過,上述方式還是存在一些問題:
處理一個新的任務(wù)就需要標(biāo)注新的語料,對語料的需求比較大,之前已經(jīng)做過的任務(wù)語料無法高效利用。即使是信息抽取下面的不同任務(wù)(如實體識別和關(guān)系抽取兩個任務(wù))也無法通用化。
處理一個新的任務(wù)需要針對任務(wù)特性設(shè)計整體模型方案,雖然BERT模型的底座已經(jīng)確定,但還是需要一定的設(shè)計工作量。例如文本分類的任務(wù)和信息抽取的任務(wù)的模型方案就完全不同。
對于要走向通用人工智能方向的人類來說,這種范式很難達到通用,對每個不同任務(wù)都用單獨的模型方案和數(shù)據(jù)來訓(xùn)練顯然也是低效的。因此,為了讓一個模型能夠盡量涵蓋更多的任務(wù),業(yè)界嘗試了幾種不同的路徑來實現(xiàn)這個目標(biāo)。
對BERT中的MLM進行改造,如引入一些特殊的Mask機制,使其能夠同時支持多種不同任務(wù),典型的模型如UniLM(https://arxiv.org/abs/1905.03197)
引入額外的Decoder,將BERT優(yōu)化改造成能做生成式的模型,典型的工作有BART(https://arxiv.org/abs/1910.134611),T5(https://arxiv.org/pdf/1910.10683.pdf3.pdf333),百度的UIE(將任務(wù)設(shè)計生成text-to-structure的形式實現(xiàn)信息抽取的大一統(tǒng) )。我對T5比較熟悉,之前也寫過相關(guān)的分析,這個工作算是比較早地嘗試將不同任務(wù)通過文本生成的方式進行大一統(tǒng)。如圖所示,T5訓(xùn)練時直接輸入了不同下游NLP任務(wù)的標(biāo)注數(shù)據(jù),通過在原始文本的前端添加任務(wù)的提示文本,來讓模型學(xué)習(xí)不同任務(wù)的特性。如翻譯任務(wù)可以是”translate English to German”,分類任務(wù)可以是跟具體分類目標(biāo)有關(guān)如”cola sentence”,也可以是一種摘要任務(wù)”summarize”。
怎么樣,是不是覺得跟ChatGPT的模式有相似的地方?
這種方式可以同時利用多種NLP任務(wù)相關(guān)的公開數(shù)據(jù)集,一下子就把預(yù)訓(xùn)練任務(wù)從語言模型擴展到了更多任務(wù)類型中,增強了模型的通用性以及對下游任務(wù)的理解能力。
T5數(shù)據(jù)構(gòu)建實例
除了上面兩種方式外,還有其他改造BERT的方法就不窮舉了,如蘇神通過Gibbs采樣來實現(xiàn)BERT模型的文本生成等。(https://kexue.fm/archives/8119)
雖然有很多大一統(tǒng)的路徑,但是OpenAI一直堅持著GPT的方向不斷演化著,2019年他們發(fā)布了GPT2,這個模型相對于GPT來說,主要是擴大了參數(shù)量,擴大了訓(xùn)練語料,在構(gòu)建語料的時候隱式地包含了multitask或者multidomain的特質(zhì),最后在二階段驗證模型的時候并不是直接做有監(jiān)督的finetune,而是繼續(xù)用下游數(shù)據(jù)做無監(jiān)督的訓(xùn)練,最后的效果居然還不錯,證明了只要模型夠大,就能學(xué)到足夠的知識用于處理一些下游任務(wù)。從它的論文名字就可以看出來與其核心思想:Language models are unsupervised multitask learners 。不過彼時,BERT及其各種變種在領(lǐng)域中的應(yīng)用還是更廣的,真正讓GPT系列模型驚艷眾人的工作還是要數(shù)2020年發(fā)布的GPT-3模型。(https://arxiv.org/abs/2005.141655)
GPT-3
首先,說幾個跟GPT-3相關(guān)的數(shù)字:
OpenAI訓(xùn)練初版的GPT-3,比GPT-2整整用了15倍的語料,同時模型參數(shù)量擴展了100多倍。這么多資源的投入,使得GPT-3成為了一個“龐然巨物”,其產(chǎn)生的效果也是驚人的。除了在很多NLP的任務(wù)上有著很不錯的指標(biāo)外,其本身也產(chǎn)生了一種前所未有的能力——In-context learning。
何為In-context learning?
簡單來說,就是模型在不更新自身參數(shù)的情況下,通過在模型輸入中帶入新任務(wù)的描述與少量的樣本,就能讓模型”學(xué)習(xí)”到新任務(wù)的特征,并且對新任務(wù)中的樣本產(chǎn)生不錯的預(yù)測效果。這種能力可以當(dāng)做是一種小樣本學(xué)習(xí)能力??梢詤⒖枷聢D的例子來理解:其中,task description和examples用來幫助模型學(xué)習(xí)新任務(wù),最后的Prompt用來測試模型是否學(xué)會了。
與傳統(tǒng)的小樣本學(xué)習(xí)范式還是有所不同,之前主流的小樣本學(xué)習(xí)范式以Meta-learning為主,通過將訓(xùn)練數(shù)據(jù)拆成不同的小任務(wù)進行元學(xué)習(xí)。在學(xué)習(xí)的過程中,模型的參數(shù)是一直在變化的,這是最大的一個不同點。
那不更新參數(shù)的小樣本學(xué)習(xí)有什么好處呢?
對于大模型來說,這可是極佳的特性。因為大模型的微調(diào)成本通常都極為龐大,很少有公司能夠具備微調(diào)訓(xùn)練的資源。因此,如果能夠通過In-context learning的特性,讓大模型快速學(xué)習(xí)下游任務(wù),在相對較小的成本下(對大模型進行前向計算)快速完成算法需求,可以大大提升技術(shù)部門的生產(chǎn)力。
In-context learning的效果固然驚艷,但是對于一些包含復(fù)雜上下文或者需要多步推理的任務(wù)仍然有其局限性,這也是業(yè)界一直以來致力于讓人工智能擁有的能力——推理能力。那么大模型具有推理能力嗎?對于GPT-3來說,答案是可以有,但有一定的限制。我們先來看看它有的部分。
還記得文章開頭提到的大模型的涌現(xiàn)能力吧,In-context正是屬于當(dāng)模型參數(shù)量達到一定程度后,突然出現(xiàn)的能力之一。那么除此以外,還有什么能力是涌現(xiàn)的呢?答案就是——Chain-of-thought,即思維鏈能力。
怎么理解In-context learning?
GPT-3擁有的In-context learning能力可以說有很大程度來自于其龐大的參數(shù)量和訓(xùn)練數(shù)據(jù),但是具體能力來源仍然難以溯源。不過,最近已經(jīng)有一些論文專門針對其進行了研究,如清華大學(xué)、北京大學(xué)和微軟的研究員共同發(fā)表了一篇論文:https://arxiv.org/abs/2212.105599,探索了GPT作為一個語言模型,可以視作是一個元優(yōu)化器,并可將In-context learning理解為一種隱性的微調(diào)。
何為Chain-of-thought(COT)?
實際上是對輸入的Prompt采用Chain-of-thought的思想進行改寫。傳統(tǒng)的Prompt中,對于一個復(fù)雜或者需要多步計算推導(dǎo)的問題樣例,會直接給出答案作為In-context learning的學(xué)習(xí)范例與新任務(wù)的測試樣例輸入到大模型中。這樣做往往不能得到正確的結(jié)果,如圖所示:(https://arxiv.org/pdf/2205.11916.pdf6.pdf)
然而,當(dāng)我們將上述問題范例中的答案再細化一些,對推到出答案的每一個步驟都寫出來,再將測試樣例一起輸入到模型中,此時模型居然能夠正確回答了,而且也能夠參照范例中的樣例進行一定的推理,如圖所示:
上述的模型輸入中,還帶有可參考的問題范例,還屬于小樣本的范疇。詭異的是,有人使用了一種匪夷所思的方法,讓其具備了零樣本的推理能力:在問題樣例的答案中增加一句Let’s think step by step. 然后模型居然能夠回答出之前不能回答的問題。
當(dāng)然,上圖中模型并未直接給出一個簡潔的答案,而是給出了推導(dǎo)答案的步驟,論文中則是將上述output與輸入模型的Prompt拼在一塊,再次輸入模型,最終得到了簡潔的答案輸出:
既然大模型具備了COT的特性,那么就能說明它具備了推理能力了嗎?答案是不確定的。因為在更多的復(fù)雜邏輯推理類任務(wù)或者計算任務(wù)上,大模型還是無法回答。簡單來說就是他可以做一些簡單的小學(xué)應(yīng)用題,但是稍微復(fù)雜一點的問題它就是在瞎猜了。具體的例子可以參考這篇論文中的分析:https://arxiv.org/abs/2208.050511
Chain-of-Thought能力來自于哪兒?
上一小節(jié)在介紹COT特性的時候,都是統(tǒng)一用GPT-3來代表。其實,**原始的GPT-3版本中并沒有顯著地發(fā)現(xiàn)其具備COT特性。**對于大眾來說,像是chatGPT突然就有了這樣的能力。其實,在chatGPT出來之前,openAI對GPT-3做了很多迭代優(yōu)化工作。而GPT-3的COT特性就是在這些迭代優(yōu)化中逐漸展現(xiàn)。但不可否認的是,目前仍然沒有確定性的結(jié)論說明COT特性來自于具體哪些迭代優(yōu)化。有些觀點說是通過引入強化學(xué)習(xí),有些觀點則是說通過引入了指令微調(diào)的訓(xùn)練方式,也有些觀點說是通過引入龐大的代碼預(yù)訓(xùn)練語料,使得模型從代碼邏輯中學(xué)習(xí)到了相應(yīng)知識。推測的方式則是根據(jù)不同時間節(jié)點上的模型版本能力差進行排除法,雖然目前我們受限于技術(shù)能力只能從這些蛛絲馬跡中去發(fā)現(xiàn)一些端倪,但仍然具有一定的借鑒意義。具體的推理過程本文不會重復(fù),感興趣的可以參考如下博客:https://franxyao.github.io/blog.html.html。
Instruction-Tuning與RLHF技術(shù)
雖然對于大模型突變能力的來源還不能輕易下結(jié)論,但是在其迭代優(yōu)化過程中,引入的一些技術(shù)確實提升了(更準(zhǔn)確得說是激活)大模型的能力。根據(jù)OpenAI的技術(shù)博客所述,ChatGPT的訓(xùn)練方式主要參考了InstructGPT(https://arxiv.org/abs/2203.021555),而InstructGPT主要涉及了兩個核心的技術(shù)實現(xiàn):指令微調(diào)(Instruction-Tuning)以及基于人工反饋的強化學(xué)習(xí)(Reinforcement learning from Human Feedback),下面將對其進行介紹。
Instruction-Tuning
Instruction-Tuning(下稱指令微調(diào))技術(shù),最早來自于谷歌Deepmind的Quoc V.Le團隊在2021年發(fā)表的論文《Finetuned Language Models Are Zero-Shot Learners》(https://arxiv.org/abs/2109.016522)。在說指令微調(diào)前,必須得先介紹下21年初開始業(yè)界開始關(guān)注的Prompt-learning范式。2021年4月,我在InfoQ的架構(gòu)師大會上做了一次技術(shù)演講,分享了我們在Prompt上的一些研究實踐,如下圖所示:
Prompt-learning最早來自于論文《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》(https://arxiv.org/abs/2001.076766),當(dāng)時把里面的范式簡稱為PET(Pattern-exploiting Training)。其核心思想為將不同類型的自然語言理解任務(wù)與BERT預(yù)訓(xùn)練中的掩碼語言模型任務(wù)進行轉(zhuǎn)化靠攏。例如對于圖中的實體情感分類任務(wù),本身其分類標(biāo)簽是一個三維的空間。我通過設(shè)置一個prompt提示文本模板:由此可見,英偉達的輿情是{},同時設(shè)計一個錨點,將原始分類目標(biāo)的空間映射到語言模型中的子空間{正/負/中},通過預(yù)測錨點位置的token間接得到情感標(biāo)簽。這種方式的優(yōu)點在于能夠?qū)⑾掠稳蝿?wù)與語言模型在預(yù)訓(xùn)練任務(wù)中的訓(xùn)練范式達成一致,減少下游任務(wù)在模型學(xué)習(xí)遷移過程中的知識損失,在小樣本的場景下比普通的Finetune模式會有更好的效果。Prompt-learning實際上是一種語言模型能夠股泛化不同任務(wù)的方式,從廣義層面上來看,可以有多種實現(xiàn)方式,例如上面的PET,本文之前提到的T5模型,以及初版的GPT-3等。指令微調(diào)實際上也可以算作是廣義Prompt-learning中的一種實現(xiàn)方式(個人愚見)。它的核心思想是盡可能收集不同類型的自然語言處理任務(wù)(包括理解和生成),并使用自然語言設(shè)計對應(yīng)的任務(wù)指令,讓模型試圖理解不同任務(wù)的指令與特性,最終通過語言模型生成的方式完成不同任務(wù)的訓(xùn)練,指令微調(diào)實例如下圖所示:
那么指令微調(diào)與BERT、T5、GPT-3等Prompt方式有什么區(qū)別呢?
BERT類的Prompt設(shè)計與掩碼語言模型任務(wù)相關(guān),Prompt模板和錨點要與任務(wù)對應(yīng),需要一定量的標(biāo)注樣本進行小樣本訓(xùn)練。
T5的Prompt更像是在預(yù)訓(xùn)練時對不同語言任務(wù)的數(shù)據(jù)打上了不同的標(biāo)記,讓模型對語言任務(wù)有了初步的理解,但是不夠深入,無法應(yīng)用在零樣本的場景。
GPT-3的Prompt中,會基于在模型訓(xùn)練過程中見過的數(shù)據(jù),更像是讓模型將Prompt中的文本進行續(xù)寫。這種方式可以幫助模型更好地理解用戶輸入的內(nèi)容,并產(chǎn)生更準(zhǔn)確和自然的輸出。但其在零樣本場景下效果仍然不佳。
指令微調(diào)技術(shù)使用Prompt來為模型提供一系列指令或者命令,這些指令或命令會告訴模型應(yīng)該如何進行特定任務(wù)的處理。與GPT-3中的Prompt不同,指令微調(diào)中的Prompt是針對特定任務(wù)和特定的模型進行設(shè)計的,相當(dāng)于是指導(dǎo)模型如何完成任務(wù)。指令微調(diào)技術(shù)提升了模型的零樣本學(xué)習(xí)能力。模型對于未見過的任務(wù)也能夠理解并嘗試處理。在GPT-3后續(xù)的迭代版本中,加入了指令微調(diào)后,即使在Prompt中不引入帶標(biāo)注的樣本,模型也能夠比較好的理解需求并得到不錯的效果。
目前公開開源的模型FLAN T5就是在T5模型基礎(chǔ)上進行了指令微調(diào)的訓(xùn)練,相較于那些動輒幾百億、幾千億參數(shù)的大模型來說,這個模型的參數(shù)量已經(jīng)足夠親民,可以作為個人研究或者業(yè)務(wù)實現(xiàn)的strong baseline
在ChatGPT公開后,各種五花八門的Prompt層出不窮。有讓其作為一個linux終端的,有讓其作為一個二次元貓娘的,也有讓他寫武俠小說的。感覺上ChatGPT可以做任何事情,只要你的腦洞足夠大。這種通才特質(zhì)有很大一部分要歸功于指令微調(diào)。只要我們設(shè)計的Prompt指令足夠清晰完整,模型總能夠理解我們要干什么,并盡量按照我們的需求去完成任務(wù)。我認為這是其有別于過往大模型的重要特性之一。
深度強化學(xué)習(xí)簡述
指令微調(diào)技術(shù)固然強大,但是其本身也存在一定的缺點:
一些開放性的生成性語言任務(wù)并不存在固定正確的答案。因此在構(gòu)建指令微調(diào)的訓(xùn)練集時,就無法覆蓋這些任務(wù)了。
語言模型在訓(xùn)練的時候,對于所有token層面的錯誤懲罰是同等對待的。然而在文本生成時,有些token生成錯誤是非常嚴(yán)重的,需要加權(quán)懲罰。換句話說,語言模型的訓(xùn)練任務(wù)目標(biāo)與人類的偏好存在gap。
綜上,我們需要模型能夠?qū)W習(xí)如何去滿足人類的偏好,朝著人類滿意的更新模型參數(shù)。因此,我們就需要引入人類對模型的獎懲方法(Reward)作為模型的引導(dǎo),簡稱?
(?)∈?R(s)越高,模型的就越能滿足人類偏好。很自然的,我們就能將最大化
即R的期望。一般來說,對于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練來說,需要設(shè)計一個可微的目標(biāo)函數(shù),這樣才能應(yīng)用梯度下降法來對模型進行參數(shù)更新學(xué)習(xí)。然而,人類的R一般很難設(shè)計成可微的,因此不能直接用于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中,因此就有了強化學(xué)習(xí)的誕生。近年來,強化學(xué)習(xí)領(lǐng)域也在飛速發(fā)展,有了alphaGo系列的驚艷效果,有很多研究都將強化學(xué)習(xí)開始與深度學(xué)習(xí)進行了結(jié)合。比較典型的研究為Policy Gradient methods(基于策略的梯度方法)?;谏鲜龅挠?xùn)練目標(biāo)函數(shù),我們?nèi)匀粦?yīng)用梯度計算來進行參數(shù)更新:
對于這個公式有兩個問題:
如何估計R(*)的期望函數(shù)?
如果R(*)是一個不可微的函數(shù),該如何計算梯度?
Policy Gradient methods就是用來解決上述問題的。通過一系列的公式變換(過程就不放了,大家可以參考斯坦福cs224n),可以得到以下式子:
我們將梯度計算移到了計算期望的式子內(nèi)。雖然我們不能直接計算期望,但是可以采用蒙特卡洛采樣的方法,去采樣得到目標(biāo)梯度的無偏估計。
將上式重新代入梯度更新的式子中,得到:
此時,在梯度更新時候我們會有兩種趨勢:
當(dāng)R為正的時候,說明對當(dāng)前策略選擇 Si??有獎勵,因此我們需要讓梯度沿著最大化???(??)
的方向更新
當(dāng)R為負的時候,說明對當(dāng)前策略選擇 Si??有懲罰,因此我們需要讓梯度沿著最小化???(??)
的方向更新
通過這種方式,我們就讓模型逐漸逼近R所期望的方向?qū)W習(xí)。
ChatGPT也將強化學(xué)習(xí)的技術(shù)進行了應(yīng)用集成,通過人機結(jié)合,成功讓模型學(xué)會了人類的偏好。這種技術(shù)就是Reinforcement learning from Human Feedback,以下簡稱RLHF。
因為本人對強化學(xué)習(xí)領(lǐng)域不太熟悉,所以不足以完全解釋其中的原理機制。因此主要參考斯坦福cs224n課程系列中對于該部分的宏觀層面講解。
RLHF
有了上面的強化學(xué)習(xí)技術(shù),我們現(xiàn)在能夠?qū)σ恍┎豢晌⒌暮瘮?shù)進行梯度學(xué)習(xí),我們就能引入一些符合人類期望的獎勵函數(shù)作為模型訓(xùn)練目標(biāo)。但是,這套工作流程讓然存在一些問題:
整個訓(xùn)練過程需要人工不斷對模型的策略選擇進行獎懲的判斷,訓(xùn)練的時間成本陡然上升。
為了降低訓(xùn)練成本,先標(biāo)注適量的數(shù)據(jù)集,讓人先給出偏好標(biāo)注。然后,我們基于這個數(shù)據(jù)訓(xùn)練一個獎勵模型???(?),用來自動生成人類對一個數(shù)據(jù)的偏好回答。
人本身會存在主觀偏差,因此對數(shù)據(jù)的標(biāo)注或者模型策略的評價也會有偏差。
為了能夠?qū)θ祟惖闹饔^偏差有一定的魯棒性,不直接給出一個具體的好壞答復(fù),而是采用一種Pairwise Comparison的方式,當(dāng)生成一個文本輸出時,人類可以對其進行成對比較,以指出其中更好或更合適的內(nèi)容。例如,在文本摘要任務(wù)中,人類可以比較兩個不同版本的摘要,并選擇更好的那一個。這些成對比較可以幫助 InstructGPT 學(xué)習(xí)到人類的喜好和優(yōu)先級,從而更好地生成高質(zhì)量的文本輸出。為了實現(xiàn) Pairwise Comparison,需要設(shè)計一些有效的算法和策略,以便生成不同版本的文本輸出,并對它們進行比較。具體來說,可以使用類似于基于排序的學(xué)習(xí)方法的算法來訓(xùn)練模型,并優(yōu)化生成策略和模型參數(shù),以便更好地滿足人類反饋的需求:
圖中,w和l分別代表兩個不同的模型生成結(jié)果,從人類的視角看w的結(jié)果更優(yōu),因此w的分?jǐn)?shù)應(yīng)該也要大于l。
最后我們將RLHF的核心步驟串聯(lián)起來:
InstructGPT中的RLHF
下圖為目前最常見的InstructGPT訓(xùn)練流程。
ChatGPT中的RLHF
根據(jù)OpenAI發(fā)布的技術(shù)博客所述,ChatGPT的訓(xùn)練方式與InstructGPT幾乎相同,僅在收集數(shù)據(jù)的時候采用了不同的方式,具體細節(jié)并沒有公布,只提到他們讓人工的標(biāo)注人員同時扮演對話過程中的用戶與機器人,并通過一系列準(zhǔn)則規(guī)范指導(dǎo)他們?nèi)绾尉幣艑υ捴械幕貜?fù),最終生成了對話場景的訓(xùn)練數(shù)據(jù)。最終,他們將其與InstructGPT的數(shù)據(jù)集進行的融合,并統(tǒng)一轉(zhuǎn)化為對話的形式。另外,在訓(xùn)練Reward模型時,他們通過讓人工標(biāo)注人員與對話機器人進行對話來產(chǎn)生會話語料,并從中選擇一個模型生成的消息,通過采樣的方式生成多個不同的補全文本,并由標(biāo)注人員進行打分排序,形成Pairwise Comparison數(shù)據(jù)。
ChatGPT訓(xùn)練的工程難度
至此,本文將ChatGPT相關(guān)的技術(shù)要點已經(jīng)做了一個整體的介紹,通過上文描述,我們可以看到OpenAI在研發(fā)ChatGPT的過程中投入了非常多的成本與研發(fā)精力,另外要訓(xùn)練出這樣一個體量的模型,對于工程化的要求也是非常高的,包括對數(shù)據(jù)的清洗、大規(guī)模分布式訓(xùn)練的工程化以及大模型大數(shù)量下的訓(xùn)練穩(wěn)定性技術(shù)等。就我個人而言,之前有研究并實施過BERT-LARGE模型的預(yù)訓(xùn)練,其參數(shù)量肯定不能與ChatGPT相比,但在訓(xùn)練中,也遇到過loss飄飛、訓(xùn)練中斷卡殼的情況。因此,這樣一個成果是算法與工程緊密結(jié)合的產(chǎn)物,其效果之好也就不奇怪了。
ChatGPT的能與不能
當(dāng)前,伴隨著ChatGPT的接口開放,已經(jīng)涌現(xiàn)出了很多有趣的應(yīng)用。我按照自己的觀察,總結(jié)了ChatGPT擅長做的以及不擅長做的事。
ChatGPT的能
ChatGPT雖然以對話機器人的產(chǎn)品形態(tài)提供服務(wù),但是其本質(zhì)上還是基于語言模型的能力。在應(yīng)用層面上,他有三個強大的特質(zhì):
對人類輸入的需求理解能力特別強。
善于進行知識的檢索與整合。
生成能力很強,在長距離生成過程中不會有重復(fù)、不通順、機械等傳統(tǒng)生成模型固有的問題。
因此,適合其大展身手的場景可包括:
基于搜索的問答
目前最典型的場景就是繼承了ChatGPT的New Bing。ChatGPT本身存在知識信息無法自更新的缺點,導(dǎo)致產(chǎn)生的回復(fù)無法緊跟時代。因此,將搜索引擎與ChatGPT進行集成就顯得水到渠成了。據(jù)了解,微軟通過一種稱為“普羅米修斯”的模型機制,將搜索與ChatGPT的生成能力進行了整合。以最近比較火的“硅谷銀行破產(chǎn)”事件為例,我們有如下提問:
可以看到New Bing回答得還不錯。從New Bing的回復(fù)方式可以去猜測其運行機制:先通過搜索引擎召回與問題相關(guān)的網(wǎng)絡(luò)實時信息,并提取其中的文本。然后將所有相關(guān)文本構(gòu)造成Prompt輸入到ChatGPT中,要求其生成完整的回答。另外,在回答中還會標(biāo)識出答案內(nèi)容的來源。
除了New Bing之外,基于文檔的輔助閱讀也是非常典型的場景。最近比較火的ChatPDF能夠上傳論文等PDF文件,并支持對文檔的QA問答。這實際上也是一種問答搜索。
處理各種基礎(chǔ)的NLP任務(wù)
我們可以將他包裝成一個通用的NLP工具平臺,處理各種任務(wù),包括但不限于文本分類、信息抽取、文本摘要、機器翻譯等。通過上述章節(jié)的介紹可知,GPT-3系列模型支持小樣本和零樣本學(xué)習(xí)的能力,因此應(yīng)用他來做NLP任務(wù)可以降低人工標(biāo)注的成本,并得到一個強大的baseline。我們嘗試了對文檔進行信息抽取的任務(wù),如研報公告中的財務(wù)經(jīng)營指標(biāo)抽?。?/p>
可以看到上面我采用的是零樣本的模式,但是ChatGPT以幾乎100%的準(zhǔn)確率將所有指標(biāo)抽了出來。不過,抽取出來的數(shù)據(jù)沒有單位,我們還可以讓他做個修正:
與其他組件的整合
基于ChatGPT強大的理解能力,我們可以把它作為一個人類與其他場景工具進行溝通的中間橋梁,大大提升個人的生產(chǎn)力。
例如日常辦公涉及到的OFFICE全家桶,目前已經(jīng)有了很多集成的產(chǎn)品,例如ChatBCG,通過輸入文字需求,就能自動生成PPT大綱以及每頁的大致內(nèi)容(當(dāng)然,還不能自動生成多樣的背景樣式);ChatExcel,通過輸入文字需求,能夠讓其實現(xiàn)表格的基本處理、函數(shù)計算、分組過濾排序等復(fù)雜操作。
2023年3月17日,微軟宣布在OFFICE全家桶中集成GPT-4。打工人的生產(chǎn)力一下子就提升數(shù)倍!
另外,還可以與其他模態(tài)的模型工具進行整合,例如OpenAI開放的API中就包括了Whisper,一個語音識別的模型,人們可以通過Whisper將語音轉(zhuǎn)文本,最終將文本送到GPT-3的接口中。另外,ChatGPT也可以與圖像視覺的大模型進行結(jié)合,提供文生圖的功能,例如今年大熱的stable diffusion模型。之前圖像生成非常依賴輸入的Prompt質(zhì)量。我們可以讓ChatGPT輔助生成一個高質(zhì)量的Prompt,然后輸入到stable diffusion中,就能產(chǎn)生更符合需求的圖像。
實際上,Meta在2月份就發(fā)表了一篇論文ToolFormer(https://arxiv.org/abs/2302.047611),研究了如何使用自監(jiān)督的方式,讓大模型如何決定什么時候調(diào)用外部的API來幫助其完成任務(wù)。可以預(yù)見,后面會有越來越多的產(chǎn)品出來,我倒是希望能有一款根據(jù)文本要求自動畫流程圖的工具,畢竟受苦與畫圖很久了 .
文字創(chuàng)作
作為一個生成式大模型,創(chuàng)作能力可以說是他的看家本領(lǐng)。ChatGPT的創(chuàng)作場景格外豐富,只有你想不到,沒有他做不到:
合并撰寫工作周報與工作小結(jié)、小說創(chuàng)作、電影劇本創(chuàng)作等。但對于專業(yè)度和準(zhǔn)確性比較高的場景,就不太能勝任了,例如金融場景中的研報生成,即使是將具體的財務(wù)數(shù)據(jù)連同要求一起輸入模型,最后生成的結(jié)果中也會有一些事實性的數(shù)據(jù)錯誤,這種錯誤是無法容忍的。
可以作為一個AI輔助訓(xùn)練工具。當(dāng)受限于成本無法使用ChatGPT直接提供AI能力時,不妨可以將ChatGPT視作一個數(shù)據(jù)增強器,生成任務(wù)所需要的訓(xùn)練語料,再輔以少量的人工進行核驗,就能以較低的成本獲得高質(zhì)量的語料。
上述提到的RLHF訓(xùn)練流程也可以通過引入ChatGPT來減少人工的投入。具體來說就是將Human feedback替換為 ChatGPT feedback。早在2022年12月就有相關(guān)的論文介紹了這種思路:[2212.08073] Constitutional AI: Harmlessness from AI Feedback (arxiv.org)
其實ChatGPT的應(yīng)用場景還有很多,礙于篇幅,就不窮舉出來了,大家可以自行關(guān)注相關(guān)媒體網(wǎng)站。
ChatGPT的不能
ChatGPT目前的應(yīng)用非常廣泛,看似是一個能干的多面手,但他也有目前無法勝任的場景。比較典型的就是推理分析。雖然在引入了代碼以及其他迭代優(yōu)化后,chatGPT初步具備了一定的推理能力,但對于復(fù)雜的推理分析計算類任務(wù),他回答錯誤的概率仍然非常大。這里特別推薦知乎上看到一個關(guān)于ChatGPT能力探索的博文:https://www.zhihu.com/question/582979328/answer/2899810576
79328/answer/289981057作者通過設(shè)計了一系列縝密的實驗,來不斷探索ChatGPT的能力。從結(jié)果上可以看到機器的能力在某些場景上還是無法模仿人類的思維能力。
另外,在ChatGPT的訓(xùn)練過程中,使用了RLHF來引導(dǎo)模型按照人類偏好進行學(xué)習(xí)。然而,這種學(xué)習(xí)方式也可能導(dǎo)致模型過分迎合人類的偏好,而忽略正確答案。因此大家可以看到ChatGPT經(jīng)常會一本正經(jīng)的胡說八道。在專業(yè)領(lǐng)域,我們需要他知之為知之,不知為不知,不然我們就必須要引入人工來審核他的答案。
最后,應(yīng)用大模型時繞不過的一個問題就是數(shù)據(jù)隱私安全。無論是ChatGPT,還是國內(nèi)即將推出的大模型,由于B端客戶很少有硬件資源能夠匹配上,很難進行私有化本地部署,通常是以LaaS的形式提供服務(wù)。而且目前大模型在專業(yè)垂直領(lǐng)域的效果還是未知的,因此通常需要使用領(lǐng)域語料進行微調(diào),這就意味著數(shù)據(jù)要流出到模型服務(wù)提供方。一般大型公司對于數(shù)據(jù)的流出是非常慎重的,因此如何在安全合規(guī)的條件下,完成這一條鏈路的流轉(zhuǎn),是目前亟需解決的問題。
額外提一個應(yīng)用:代碼生成。這個場景既是能也是不能。他在python語言的編碼能力上確實不錯,甚至能生成一段textcnn的實現(xiàn);但是在java或者其他編程語言上,他的生成質(zhì)量就相對較差了,而且生成的代碼質(zhì)量也不如一個經(jīng)驗豐富的工程師,在代碼執(zhí)行性能上暫時還無法滿足需求。
關(guān)于大模型的可研究方向
關(guān)于ChatGPT的內(nèi)容到這也就基本寫完了。作為一名NLP領(lǐng)域的從業(yè)者,我也跟其他人一樣,被其強大的能力所震驚,同時也在思考自己未來還能在這個領(lǐng)域做哪些事情,大概想了一些方向,歡迎共同討論:
用更少的參數(shù)量,達到更好的效果。無論是之前DeepMind的 Chinchilla(70B),還是最近Meta的 LLaMA(65B), 亦或是3月14日智譜團隊剛發(fā)布的ChatGLM(6B),他們的參數(shù)量都小于GPT-3(175B),但是其模型效果都能夠匹配上GPT-3。在LLaMA的論文中,Meta表示他們用了更多的語料token來訓(xùn)練,這有可能意味著目前大模型的參數(shù)對知識的利用率還有很大的上升空間。我們可以通過精簡參數(shù),擴大語料規(guī)模來提升大模型的能力。
上面提到大模型應(yīng)用時的數(shù)據(jù)隱私問題,目前也有一些可行的方法來解決。比如通過隱私計算的方式,讓數(shù)據(jù)在流出時處于加密的狀態(tài)。另外,也有一些學(xué)者在研究其他方法保護數(shù)據(jù)的隱私,例如Offsite-Tuning(https://arxiv.org/pdf/2302.04870v1.pdf0v1.pdf),這種方法的核心思想是設(shè)計了一個adapter(可以理解為一個由神經(jīng)網(wǎng)絡(luò)構(gòu)成的組件)與仿真器(可以理解為大模型的一個壓縮版本)并提供給用戶,用戶在仿真器的幫助下使用領(lǐng)域數(shù)據(jù)對adapter參數(shù)進行微調(diào),最后將微調(diào)好的adapter組件層插入到大模型上組成了一個完整的新模型用于提供服務(wù):
高效設(shè)計與應(yīng)用ChatGPT的Prompt范式。例如我們可以設(shè)計一個工具平臺,將不同類型的NLP任務(wù)包裝成一種配置式的產(chǎn)品。用戶針對自己的任務(wù)需求,只需要提供需求的詳細描述,以及問題的樣例,就能快速得到一個能力實例,并應(yīng)用在自己的場景中;另外,我們還可以研究如何高效地設(shè)計一個Prompt來解決復(fù)雜的場景問題。如Least-to-Most(https://arxiv.org/abs/2205.106255)這篇論文所述,對于一個復(fù)雜問題,我們可以幫助LLM先自己拆解問題,形成為了解決問題X,需要先解決問題Y1,Y2...的形式,然后讓模型分別去解決子問題,最后將所有子問題的解決過程拼在一塊送到模型中,輸出答案。這種方式可以有機結(jié)合COT的特性,可以用于處理一些比較復(fù)雜的問題。
結(jié)束語
在本文的最后來一些雞湯吧:時代的車輪是不斷向前的,技術(shù)的更迭也會給這個時代帶來不可估量的影響。雖然ChatGPT的出現(xiàn)可能會對業(yè)界帶來不小的沖擊,但我們應(yīng)該將目光放到更廣闊的天地,在那兒將有更多豐富的未知世界等著我們?nèi)ヌ剿鳌?/p>
以此自勉!
審核編輯 :李倩
-
人工智能
+關(guān)注
關(guān)注
1807文章
49029瀏覽量
249664 -
語言模型
+關(guān)注
關(guān)注
0文章
561瀏覽量
10799 -
ChatGPT
+關(guān)注
關(guān)注
29文章
1590瀏覽量
9115
原文標(biāo)題:最全ChatGPT技術(shù)匯總
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
【國產(chǎn)FPGA+OMAPL138開發(fā)板體驗】(原創(chuàng))6.FPGA連接ChatGPT 4
在FPGA設(shè)計中是否可以應(yīng)用ChatGPT生成想要的程序呢
OpenAI 深夜拋出王炸 “ChatGPT- 4o”, “她” 來了
科技大廠競逐AIGC,中國的ChatGPT在哪?
最全STM32外設(shè)資料匯總
最全的MathType快捷鍵資料匯總免費下載

ChatGPT的使用方式匯總

評論