《電子技術應用》
您所在的位置:首頁 > 人工智能 > 業(yè)界動態(tài) > 【ChatGPT專題】為什么AI忽然變得這么強,?—— 一文讀懂ChatGPT原理,!

【ChatGPT專題】為什么AI忽然變得這么強?—— 一文讀懂ChatGPT原理,!

2023-02-08
來源: 架構師
關鍵詞: AI ChatGPT 機器學習

  前言

  最近一周多的時間,,只要不是生活在火星,,喜歡技術的同學一定都被OpenAIChatGPT給刷屏了。ChatGPT與以往的公開提供服務的對話機器人相比,,性能有了顯著的提高,。它可以相對可靠地提供一些日常對話、知識獲取的功能,,也可以它根據(jù)人類提供的需求幫忙寫文檔,、寫代碼,甚至可以修改文本中的各類錯誤或者代碼中的Bug,。我相信很多非AI圈的同學肯定會有一種“為什么AI突然變得這么強,?“的感受。這篇文章的目的也是為了回答這個問題,。在開始之前,,我覺得有必要先表達一下我自己的看法:NLP技術發(fā)生跨越式發(fā)展的標志并不是ChatGPT本身,而應該是2017年-2018年間相繼被提出的Transforme1r[1]和GPT[2],。

  ChatGPT是Transformer和GPT等相關技術發(fā)展的集大成者,??傮w來說,ChatGPT的性能卓越的主要原因可以概括為三點:

  使用的機器學習模型表達能力強,。

  訓練所使用的數(shù)據(jù)量巨大,。

  訓練方法的先進性。我們接下來將會針對這三點進行探討,。

  機器學習模型

  在步入正題之前,,我們可以先梳理一下NLP發(fā)展的歷史。

  基于文法的模型

  這個階段,,大家處理自然語言的主要思路就是利用語言學家的智慧嘗試總結(jié)出一套自然語言文法,,并編寫出基于規(guī)則的處理算法進行自然語言處理。這個方法是不是乍聽起來還行,?其實我們熟悉的編譯器也是通過這種方法將高級語言編譯成機器語言的,。可惜的是,,自然語言是極其復雜的,,基本上不太可能編寫出一個完備的語法來處理所有的情況,所以這套方法一般只能處理自然語言一個子集,,距離通用的自然語言處理還是差很遠,。

  基于統(tǒng)計的模型

  在這個階段,大家開始嘗試通過對大量已存在的自然語言文本(我們稱之為語料庫)進行統(tǒng)計,,來試圖得到一個基于統(tǒng)計的語言模型,。比如通過統(tǒng)計,肯定可以確定“吃”后面接“飯”的概率肯定高于接其他詞如“?!钡母怕?,即P(飯|吃)>P(牛|吃)。

  雖然這個階段有很多模型被使用,,但是本質(zhì)上,都是對語料庫中的語料進行統(tǒng)計,,并得出一個概率模型,。一般來說,用途不同,,概率模型也不一樣,。不過,為了行文方便,,我們接下來統(tǒng)一以最常見的語言模型為例,,即建模“一個上下文后面接某一個詞的概率“,。剛才說的一個詞后面接另一個詞的概率其實就是一元語言模型,。

  模型的表達能力

  在這里,,我們很適合插播一下模型表達能力這個概念。

  微信截圖_20230208155323.png

  模型表達能力簡單來說就是模型建模數(shù)據(jù)的能力,,比如上文中的一元語言模型就無法建?!芭3圆荨焙汀拔页燥垺钡膮^(qū)別,因為它建模的本質(zhì)統(tǒng)計一個詞后面跟另一個詞的概率,,在計算是選“草”還是選“飯”的時候,,是根據(jù)“吃”這個詞來的,而“?!焙汀拔摇边@個上下文對于一元語言模型已經(jīng)丟失,。你用再多的數(shù)據(jù)讓一元語言模型學習,它也學不到這個牛跟草的關系,。

  模型參數(shù)數(shù)量

  有人說,,既然如此,為啥我們不基于更多的上下文來計算下一個詞的概率,,而僅僅基于前一個詞呢,?OK,這個其實就是所謂的n元語言模型,??傮w來說,n越大,,模型參數(shù)越多,,表達能力越強。當然訓練模型所需要的數(shù)據(jù)量越大(顯然嘛,,因為需要統(tǒng)計的概率的數(shù)量變多了),。

  模型結(jié)構

  然而,模型表達能力還有另一個制約因素,,那就是模型本身的結(jié)構,。對于基于統(tǒng)計的n元語言模型來說,它只是簡單地統(tǒng)計一個詞出現(xiàn)在一些詞后面的概率,,并不理解其中的各類文法,、詞法關系,那它還是無法建模一些復雜的語句,。比如,,“我白天一直在打游戲”和“我在天黑之前一直在玩游戲“兩者語義很相似,但是基于統(tǒng)計的模型卻無法理解兩者的相似性,。因此,,就算你把海量的數(shù)據(jù)喂給基于統(tǒng)計的模型,它也不可能學到ChatGPT這種程度。

  基于神經(jīng)網(wǎng)絡的模型

  上文提到,,統(tǒng)計語言模型的主要缺點是無法理解語言的深層次結(jié)構,。曾有一段時間,科學家們嘗試將基于文法的模型和基于統(tǒng)計的模型相結(jié)合,。不過很快,,風頭就被神經(jīng)網(wǎng)絡搶了過去。

  RNN & LSTM

  剛開始,,流行的神經(jīng)網(wǎng)絡語言模型主要是循環(huán)神經(jīng)網(wǎng)絡(RNN)以及它的改良版本LSTM,。

  微信截圖_20230208155401.png

  RNN的主要結(jié)構如下, x是輸入,,o是輸出,,s是狀態(tài)。

  微信截圖_20230208155416.png

  如果RNN作為語言模型的話,,那x可以作為順序輸入進去的詞匯,,而o就可以作為輸出的詞匯,而s就是通過x計算o的過程中生成的狀態(tài)變量,,這個狀態(tài)變量可以理解為上下文,,是對計算當前詞匯時前文所有出現(xiàn)過的所有單詞的濃縮并在一次次的計算中不斷迭代更新。這也是為啥RNN可以建模詞與詞關系的根本原理,。

  微信截圖_20230208155454.png

  與簡單的基于統(tǒng)計的模型相比,,循環(huán)神經(jīng)網(wǎng)絡的主要亮點就是能夠?qū)σ欢挝淖种胁煌~之間的關系進行建模,這種能力在一定程度上解決了基于統(tǒng)計的模型無法理解深層次的問題,。

  微信截圖_20230208155512.png

  Attention Mechanisms

  在更進一步之前,,我們不得不提一下注意力(Attention)機制。

  微信截圖_20230208155533.png

  這個機制主要針對RNN語言模型中狀態(tài)S作為上下文這一機制進行改進,。,。在RNN中計算當前詞后的狀態(tài)Si主要是通過計算上一個詞時的狀態(tài)Si-1迭代出來的。它的主要缺點就是它假設了距離較近的詞匯之間的關系更密切,。但是我們都知道,,在自然語言中,這一假設并不是一直成立的,。引入Attention之后,,計算第i個詞后的狀態(tài)從單純的Si變成了S0,S1...Si的組合,而具體“如何組合”,,即哪個狀態(tài)比較重要,也是通過數(shù)據(jù)擬合出來的,。在這樣的情況下,,模型的表達能力又得到了進一步的提高,它可以理解一些距離較遠但是又非常密切的詞匯之間的關系,,比如說代詞和被指代的名詞之間的關系,。

  微信截圖_20230208155552.png

  Transformer

  接下來,,我們終于可以祭出之前提過的NLP跨越式發(fā)展的標志之一,Transformer的提出,!

  其實在有了Attention之后,,Transformer的提出已經(jīng)是順理成章了。Transformer的主要貢獻在于

  將Multi-Head Self-Attention直接內(nèi)建到網(wǎng)絡中,。所謂Multi-Head Self-Attention其實就是多套并行的Self-Attention,,可以用于建模的詞與詞之間的多類不同地關系。

  利用專用位置編碼來替代之前RNN用輸入順序作為次序,,使得并行計算成為了可能,。

  微信截圖_20230208155613.png

  舉一個形象但不準確的例子,對于句子I often play skating board which is my favorite sport. 如果使用Multi-Head Self-Attention,,那就可以有一套Attention專門用來建模play和skating board的謂賓關系,,有一套Attention用來建模skating board與favorite的修飾關系。從而使得模型的表達能力又得到了提高,。

  微信截圖_20230208155652.png

  ChatGPT所依賴GPT3.5語言模型的的底層正是Transformer,。

  訓練數(shù)據(jù)

  OK,我們現(xiàn)在有一個名為Transformer模型了,,這個模型通過Multi-head Self-Attention,,使得建立詞與詞之間的復雜關系成為了可能。因此可以說是一個表達力很強的語言模型了,。然而,,單有語言模型沒有數(shù)據(jù)就是巧婦難為無米之炊。

  GPT-3.5的相關數(shù)據(jù)并未被公開,。我們就只說說它的上一代GPT-3,。GPT-3整個神經(jīng)網(wǎng)絡就已經(jīng)有1750億個參數(shù)了。這不難理解,,想一想Attention憑什么確定在當前上下文下哪些詞比較重要,?而網(wǎng)絡又怎樣通過Attention和輸入生成輸出?這些都是由模型里面的參數(shù)決定的,。這也是為啥模型結(jié)構一樣的情況下參數(shù)越多表達能力越強,。那這些模型的參數(shù)怎么拿到?從數(shù)據(jù)中學習,!其實大多數(shù)所謂的神經(jīng)網(wǎng)絡的學習就是在學參數(shù),。

  好家伙,要訓練1750億個參數(shù)的神經(jīng)網(wǎng)絡要喂多少數(shù)據(jù)呢,?這么多,!(from wikipedia)

 微信截圖_20230208155652.png

  可以預想的是,表達能力如此之強的模型,在喂入萬億級的數(shù)據(jù)之后,,其對語言本身的理解已經(jīng)開始接近人類了,。比如它處理句子的時候,會通過訓練Attention參數(shù)理解到句子中哪些詞之間存在關系的,?哪些詞和哪些詞之間是同義的,?等一系列比較深度的語言問題。

  這還只是2020年的GPT-3,。如今已經(jīng)2022年了,,相信GPT-3.5的模型表達能力比GPT-3又有相當大地提升。

  訓練方法

  監(jiān)督學習 vs 無監(jiān)督學習

  簡單來說,,監(jiān)督學習就是在“有答案”的數(shù)據(jù)集上學習,。如果我們要用監(jiān)督學習(supervised learning)訓練一個中文到英文的機器翻譯模型,我們就需要有中文以及其對應的英文,。整個訓練過程就是不斷地將中文送入到模型中,,模型會給出一個英文的輸出,這個時候我們對比一下英文的輸出與標準答案的差距遠不遠(Measured by Loss Function),,如果差距比較大,,那我們就調(diào)整模型參數(shù)。這也成為早期針對機器翻譯模型的主要訓練方法,。

  微信截圖_20230208155718.png

  遷移學習

  然而,,“有答案”的數(shù)據(jù)終究是有限的。這也是限制之前很多自然語言學習的模型設計復雜度的原因,。不是不想提高模型的表達能力,,而是提上去之后,參數(shù)太多,,我們沒有足量的“有答案”的數(shù)據(jù)來訓練這個模型,。

  2018年,另一個我認為NLP跨越式發(fā)展的標志來了,,那就是GPT的提出,。

  微信截圖_20230208155740.png

  GPT的主要貢獻在于,它提出了自然語言的一種新的訓練范式,。即現(xiàn)通過海量的數(shù)據(jù)的無監(jiān)督學習來訓練一個語言模型,。正如我們之前提到過的,所謂語言模型即是在一個上下文中預測下一個詞,,這個顯然是不需要帶有標注的數(shù)據(jù)的,,現(xiàn)有的任何語料都可以作為訓練數(shù)據(jù)的。由于GPT的底層借用了表達能力很強的Transformer,,互聯(lián)網(wǎng)經(jīng)過長時間的發(fā)展,,海量的無標記的自然語言數(shù)據(jù)也并不再是稀缺的事物,。導致了訓練出來的模型其實對語言有了相當深入地理解。

  這個時候,,如果你想讓這個語言模型能夠陪你聊天,那在一個已經(jīng)理解語言的模型的基礎上,,你只需要喂一些聊天的對話數(shù)據(jù),,使用監(jiān)督學習來對模型進行針對性的微調(diào)(fine-tune),就可以使它學會如何聊天了,。這個操作也叫做遷移學習(Transfer Learning),。

  在遷移學習的過程中,微調(diào)一般是通過簡單的監(jiān)督學習來進行,。簡單來說,,ChatGPT通過構建一些聊天的Prompt,讓人類標注一些想要的回復,,并用這些數(shù)據(jù)進行監(jiān)督學習來微調(diào),。

  強化學習

  ChatGPT在使用進行微調(diào)之外,還使用了一種叫做reinforcement learning from human feedback (RLHF)的技術,。這個技術在ChatGPT的主要作用是將預訓練的模型的目標對齊到聊天這一具體的下游應用上,。它也較大地提升了ChatGPT的聊天能力。

  其總體原理如下圖所示,,在完成模型微調(diào)之后,,先在人類的幫助下訓練一個獎賞網(wǎng)絡,這個獎賞網(wǎng)絡具有對多個聊天回復好壞進行排序的能力,。接著,,利用這個獎賞網(wǎng)絡,進一步通過強化學習(reinforcement learning)優(yōu)化了聊天模型,。該訓練方法的細節(jié)可以參考論文[3]

  微信截圖_20230208155803.png

  在這一通操作之后,,ChatGPT就變成了我們現(xiàn)在看到的這樣子。

  其他

  至此,,我們基本上就已經(jīng)能明白為什么ChatGPT這么強了,,但是我相信很多同學肯定會表示“就這?我不信,,它都會改bug了,,給他一段代碼他都知道代碼是干什么的了?!?/p>

  Okay,,我們可以首先解釋一下為什么它可以做到修改代碼中的bug,根據(jù)OpenAI提供的信息 :"GPT-3.5 series is a series of models that was trained on a blend of text and code from before Q4 2021.",,我們可以知道GPT-3.5中的訓練數(shù)據(jù)其實是包含了海量的代碼數(shù)據(jù),。所以說GPT-3.5對代碼的理解也是相當強的,。從論文[4]可以看到,將代碼放入語言模型中進行訓練后,,訓練出的語言模型已經(jīng)可以做到代碼語義級的搜索,。

  而ChatGPT又是怎么知道代碼的功能的呢?目前我還沒看到相關論文,,不過可以參考一下OpenAI在GPT-3上做的代碼訓練的工作[5],,大概就是將代碼和其功能docstring注釋放在一起做對比預訓練(contrastive pretrain),這樣可以讓語言模型理解代碼和其功能的關系,。

  總結(jié)

  總之,,ChatGPT并沒有那么神秘,它本質(zhì)上就是將海量的數(shù)據(jù)結(jié)合表達能力很強的Transformer模型結(jié)合,,從而對自然語言進行了一個非常深度的建模,。對于一個輸入的句子,ChatGPT是在這個模型參數(shù)的作用下生成一個回復,。

  有人會發(fā)現(xiàn)ChatGPT也經(jīng)常會一本正經(jīng)胡說八道,,這也是這一類方法難以避免的弊端。因為它本質(zhì)上只是通過概率最大化不斷生成數(shù)據(jù)而已,,而不是通過邏輯推理來生成回復,。

  微信截圖_20230208155826.png

  向ChatGPT詢問比較嚴肅的技術問題也可能會得到不靠譜的回答。

  微信截圖_20230208155839.png


 歡迎關注電子技術應用2023年2月22日==>>商業(yè)航天研討會<<


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權者,。如涉及作品內(nèi)容,、版權和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。