最近的ChatGPT可謂是非常火,但是目前看的信息來看都更像是一些外宣類的文章,對于一些技術的講解和解讀,卻是比較少的,這對于在做技術的我們來說其實挺尷尬,為了讓大家更好地理解這個模型,給大家講一些ChatGPT的技術細節以及我的理解和分析,而不是看熱鬧就完了。
懶人目錄:
簡單說說原理。
有關里面的細節討論。
優點和缺點。
他真就那么強嗎?
簡單說說原理
先疊甲,我本身不是做對話生成的,對這塊比較陌生,再者對prompt也不是很擅長,所以聊的可能會有不對,大家輕噴。
剩下還有不少,我都會放在最后的參考里。
有這些資料,基本能夠理解這個chatgpt的基本原理和技術點了。
這里我還是簡單聊一下,主要思路是根據張俊林前輩的來會更好理解一些吧,主要是3個階段。
通過人工標注等方式,使用監督學習的模式對GPT3模型(對這個是chatGPT模型的base)進行初步訓練(有監督微調,SFT),從而得到一個初步能夠理解語言的模型,尤其是prompt的模式。
訓練回報模型,或者說打分模型,這是一個強化學習專用的概念(缺課的去補補哈),這個打分模型是用來給“提示-答案”這個組合打分的,使用的數據和階段1類似,用模型生成的可選項,進行人工標注,最后構造pair wise的learning to rank任務訓練得到。
第三階段則是使用強化學習,即階段2的回報模型reward來對模型進行訓練。模型生成結果,reward進行打分,然后reward能夠往前傳遞,這里有提到一個概念就是PPO(Proximal Policy Optimization[5]),是強化學習的一種策略,詳情可看(Proximal policy optimization algorithms)。
可見,2階段的回報模型是3階段優化的關鍵,當且僅當這個回報模型足夠的好,后續訓出來的模型才是可靠的。
有關里面細節的討論
強化學習
首先是強化學習,這點其實是我自己比較想聊的,畢竟在知乎,就是不久前其實就有不少的聲音在說強化學習并不適合在NLP任務上使用,但在這里,強化學習似乎存在一定的,甚至比較大程度的貢獻,說打臉應該沒什么毛病,至少這個實驗驗證來看還是能用的,至于用得好不好,比其他策略好還是差,可能有待進一步實驗。
在部分觀點看來,強化學習的貢獻似乎不是一個關鍵因素[1],強化學習強調的是用這個回報函數構造強化學習來進行調優,然而換個看起來比較下位的策略,就是基于這個回報函數,構造訓練數據來直接finetuning模型,可能也能取得更好的效果,其實本質是調整為更為樸素的反向傳播,可能也能取得類似的效果。
沒試驗過,不好說結論,但好像多少是有些道理的,具體可能要做消融之類的才能夠充分驗證吧。
過度訓練的偏移
在階段3的訓練過程中,可能會逐步偏離兩個出發點的核心,分別是階段1的有監督微調和階段2的匯報模型背后的分布,對于前者,此處是對訓練目標增加了一個通用的語言模型指標,一定程度保證模型的通用型,而后者,則是采用KL散度懲罰項的方式,懲罰那些模型生成的和匯報模型數據分布不一致的部分[4]。
有關數據集的問題
數據應該是這篇文章,乃至背后的內核InstructGPT,其成功很大程度依賴一個關鍵因素,那就是數據,這個數據構造里面也是大有說法。
首先是階段1,即有監督學習的數據,其實是人工標注的,標注的內容是,根據內容編寫prompt來得到的,具體包括以下幾種情況:
簡單任務:標注者給出一個簡單的提示,并且還要確保提示的多樣性。
Few-shot任務:單個指示,有多個query-response對。
用戶相關的:從接口中獲取用例(實際對話的例子),標注者通過用例編寫提示。
而在階段2,其實就是要訓練一個可靠的回報函數,這批數據的產生來源是模型,模型會生成一批候選樣本,標注者會對他們進行排序,這個排序的背后其實就是打分了。
階段3沒有進行人工標注,是直接用GPT-3API的用戶數據,對應不同的任務的數據,包含生成、問答等。
我們可能會猜想數據和任務的設計可能會很復雜,然而現在看來,好像比想象要簡單一些,標注任務其實是簡單的,然而對標注人員的挑戰其實不小,例如對prompt的編寫。
有關優缺點的討論
挺多文章都有聊過這套模型和方案的優缺點,我這里匯總一下吧,基本上是參考了[4]和[7]的,帶了一些自己的見解。
首先是優點:
相比他們的base,即GPT3,具有更強的泛化和生成能力,最終預測的結果會有更真實,這點毋庸置疑了,大家都有去試這個東西,多少有些感受。
我想大家也有發現,模型似乎有更強的coding能力,對一些簡單的任務,他是能生成可用可執行的代碼的,這個點似乎在GPT3上也有體現,據說是因為本身這類數據也有在訓練數據里。
有關安全性這點,有些文章會提到它的安全性有提升,但是在實際體驗上,模型似乎還是會因為誘導,說一些媽見打或者是容易被封的言論的,這個特別指出,我自己是不太想把這個放在優點里吧。
至于缺點,其實還挺多的,這有待各位大神進一步深入研究。
首先還是大模型的問題,這個是大模型共有的問題,長期關注我的朋友都有發現,這個問題仍然是大問題,要解。相似相關的論點其實在車萬翔老師的文章里也有提到[7],這其實會衍生很多問題,這點有時間我也會展開聊一下,此處先不贅述。
在通用任務上的能力會下降。這個可能是意料之中的事,畢竟他把任務專注到了特定的內容上了,別的領域或者任務就可能會出現效果下降的情況,前面有提到在損失函數上加上懲罰,這個能一定程度上有優化吧,但這其實還是專注任務和通用性之間的權衡罷了。
安全性問題仍舊存在,這點還是不好控制。
模型對prompt的過度敏感,這個可能和數據量有關吧,這個本身人工標注生成就有限,模型的訓練只能依賴這個,很難避免,后續更好的方式還有待提出吧。
對長結果、詳細結果的傾向性。
生成模型老生常談的“一本正經的胡說八道”的問題,這個背后的原因很大程度和知識的原因有關,畢竟模型現在已經具備輸出流暢結果的能力了,但和諾問題和知識掛鉤,例如魯迅的生卒年之類的問題,如果接觸不到,自然就回答不了或者回答不對,此時模型會很直接的隨便寫個時間了。
這里其實人工標注的依賴比較明顯,畢竟其實NLP場景,尤其是對話系統,其實很少有什么好的用戶反饋路徑,導致我們無法閉環獲取可供訓練的可靠數據。類似搜索、推薦可能還有點擊數據,偶爾可能會吐槽一下數據質量問題,但是對話系統,很多時候是真的沒有。
他真有那么強嗎
鑒于現在全網在吹,各種熱度(em...包括我也在蹭),但是我還是想潑點冷水吧。我分幾個角度來聊。
這只是一次模型的外宣罷了
GPT其實吃過一次虧的,眾所周知,GPT其實發布在BERT之前,BERT卻取得了很大的熱度,與之類似的還有ELMO這種里程碑式的技術被淹沒,正面的例子也有prompt之前無人問,在綜述出來后天下知,除了本身的效果原因,很大程度原因我自己更希望歸結于一個優秀的外宣,其內核InstructGPT的發布時間是3月份,很多博客的原理解讀其實都是圍繞這篇論文來講的,然而卻在12月份火了起來,很大程度上和這個API接口的發布有關,他被搭建成一個可供用戶交互的產品被發布出來,用的人多覺得有趣,而且很多人其實對這個領域不了解,用這個感覺很流暢就開始覺得很厲害了。
很多人可能試了幾個就覺得牛,但其實本質上牛的點可能不見得是InstructGPT牛導致的:
流暢性這點,生成領域的不多說,現有技術基本能達到,差距可能只有在大的數據集下用統計指標測才可以分出高下。
試了幾個就說牛,只能說是比較外行了。。。拋開統計指標談效果沒什么意義對吧。
有關coding的問題,考據到GPT3似乎就已經一定程度具備了,只是大家沒有試罷了,具體效果不知道多好就不知道了。
所以我首先想說的,這個東西之所以火,很大程度是因為這次成功的產品化和成功的外宣,當然,背后的技術也撐得起這次的外宣,從而形成了團隊、模型、產品的多方面成功。而作為技術人而言,也可能不只是技術人,想做的更有深度的話,在嘗試完之后就該開始思考內部的技術細節以及我們能不能逼近和超越或者在他們基礎上做一些什么別的事情。
再疊個甲,我沒說技術不行,但是只把火或者是出頭歸結于技術,是肯定局限了的。
閉環問題
rumor最近發了一篇有關ChatGPT的閉環問題的文章(只有我一個人對ChatGPT感到蕉綠嗎?),誠然對話系統的一個很痛的問題,就是閉環問題,對話系統在很多場景是真的沒法閉環,哪怕是一些客服系統有“滿意or不滿意”之類的讓用戶填的東西,但是用戶多半不填,量太少撐不住,所以歸結起來我們很難得到閉環數據,先別說質量問題了。
然而ChatGPT做到了嗎,我的觀點是,前進了一步但是還不算做到。前進一步,是真的在用了生成,結合回報函數來進行迭代優化,但未算做到是因為他仍舊依賴了人工標注數據,這個數量可能在這個問題下比較少,但是泛用性約束在此,而且是在比較關鍵的1和2階段,而且還不只是標注那么簡單,而是去寫prompt,這對標注人員能力要求似乎還更高了,再者,他這只是針對一個任務,而在多任務下,通用任務下,他的效果其實反而有所降低,這點其實在前面的文章里有提到。
也可能是我對閉環的要求比較高吧,一個反饋信息可以盤活整個系統,但是偏偏這個反饋,對話系統還是無法從根本上繞開標注這個用來做反饋優化的步驟。
端到端or非端到端
工業界會更傾向于非端到端的模式來做,原因很多,這個我最近的文章正好就在聊這個(心法利器[78] | 端到端任務的拆解設計),主要是出于可控性、可維護性、安全性等原因吧,例如chatapi因為很多原因,大家對安全性的容忍度很高,但是到了很多實際產品中,安全性的問題可以被上升到很大程度,所以一定需要加以控制,而這種控制模型不見得能做得很好,所以很多時候我們會搭建一個生成模塊后,會輔以一個安全模塊來監控。
一本正經的胡說八道
這個問題其實是生成領域里經常談到的問題了,對于一些模型不知道的知識,模型在回答策略上更傾向于說一些通順但邏輯上不對的話,不像人有更為豐富的對話策略(例如搪塞、反問或者直接拒絕回答),這里有好多衍生點:
讓模型盡可能可以多獲取或者多學習豐富的知識,但是學無止境,現階段技術可能無法做得到。
模型可能需要具備更新知識的能力。
模型需要有意識地識別出什么問題能回答,回答的對不對等,其實有這個意識就已經是一個大突破了。
生成模型在對話策略的選擇上,可以更為豐富,這點其實也是為什么非端到端的形式能成為主流的原因,因為策略上是可控的。
chatGPT會有替代傳統搜索嗎
我覺得要分開看,這要把他區分為把chatgpt當做產品看,還是當做技術看。
如果是當做產品看,這個產品無疑是替代不了搜索的,一個很簡單的道理,搜索需要多樣性,這給一個答案的樣子,很難滿足很多多樣化的搜索需求。這個本質更像是一個對話產品,一個功能相對豐富但是形態比較簡單的對話產品,他只有文本回復,而沒有更加多模態的回復(當然期待一手GPT4能做更多事情了),例如商品搜索、音樂搜索,這些事目前的他也做不到,所以說替代真的為時尚早。
至于當做技術來看,我自己是覺得,會成為一種比較新穎的方式吧,在一些問答之類的場景下,他能給出精準而又詳細的回復,是可以當做是檢索結果之一的,最終的篩選排序,可以進行綜合判斷,例如置信度高才出來,否則不出,其實也是不錯的。而更深層次,這里的數據處理方式、訓練策略等,這些東西可能會被借鑒,最終用在搜索里吧。
chatGPT會替代程序員嗎
不會吧不會吧,不會真有人覺得程序員的工作只有寫代碼吧。
按照我的經驗,對于一個熟練的程序員,寫代碼本身其實是時間最少也是最后的工作,難點在于,要寫什么代碼,寫在哪以及怎么寫,這也就是前期的技術方案確定,這件事對目前的AI來說還太難了,他可能可以幫你實現一個冒泡排序,但是他絕對不能告訴你該在哪里寫,為什么要寫。
對于現在的AI,頂多只是個生成器罷了,而且,最近也有消息流出Stack Overflow禁止 ChatGPT,上面說的一本正經的胡說八道的問題在程序員這個領域會被放大的,因為他說的話我們也無法完全判別對錯,只有去嘗試才會知道,踩坑了就真的坑。
審核編輯:劉清
-
SFT
+關注
關注
0文章
9瀏覽量
6807 -
GPT
+關注
關注
0文章
352瀏覽量
15316 -
nlp
+關注
關注
1文章
487瀏覽量
22015 -
ChatGPT
+關注
關注
29文章
1549瀏覽量
7507
原文標題:理性聊聊ChatGPT
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論