注:本文寫作多依賴于好友樂樂的視頻播客和文本等工作,故轉載文章請注明原處,且不得隨意剪裁文本內容。
0. 小引
ChatGPT,從進入公眾視野伊始,到如今被廣為熱議。我和好友樂樂就不約而同地站到了小黑粉的隊伍。尤其是樂樂,翻找并整理了大量的論文和博客文獻,深入發掘并梳理了NLP的演化歷程,實為不易。而樂樂的另一位好友LiL .W2,現就職于OpenAI團隊,也并不對ChatGPT有積極的評價。大家本質上的意見是一致的,那就是從學術角度來衡量,ChatGPT并不擁有很高的創新度,而更接近近些年NLP領域進展的大綜合,以及大模型中所謂的“量變引起‘質變’”。
雖然如是說,但ChatGPT的表現仍然給大家帶來許多驚喜,其構建和打磨模型的許多細節仍然值得被學術界和工業界關注和借鑒。鑒于好友已在她自己的視頻播客1中對NLP和ChatGPT模型做了詳細的拆解,故本文旨在以最輕量的科普文本,力求讓更普泛的讀者對AI、ML以及NLP等領域現階段進展一窺全貌,并談談個人對未來計算機及智能領域的一點想法。
1. NLP演化極簡史
1.1 關于語言的基礎思考
首先思考這樣一個問題,如何區分我們的56個民族?一個簡單的回答就是看大家說什么語言或者方言,雖然這還不能精確的區分56個民族,但卻是最為簡單有效的辦法。事實上,從宏觀的角度看,當代的政治學家和社會學者都是以語言作為區分不同民族,信仰和文化背景的重要依據。那么微觀層面上,我們該如何創造一門語言呢?我想我們可以參考一下J .R .R .托爾金在寫作《魔戒》時創造精靈語的經驗。首先我們要有一些基礎符號,它們可以是用來表形的,例如古老的甲骨文,也可以是用來表音的,例如拉丁語系或歐印語系中的字母等。當有了這些基礎符號,就可以通過組合排列的方式用來表意,如漢語中的文字或是英語中的單詞,再進一步就可以構成短語和句子,當然為了約束以方便統一表達,我們還要加上若干抽象的規則——語法。這樣我們就有了語言,但是因為在最初創造語言的時候采用了不同的基礎符號原則,因此所構建出的語言在表達上也會出現區別,例如英語的字母只是一些音節的組合,而并不與現實映射,因此總可以通過不同的排列組合方式給出更為精準的定義化表達,這也是為什么許多從事科研工作的人相信英文在科學技術相關的表達要比中文準確。但是,類似中文這樣半象形半表意的語言,則更為適合文藝工作者的表達,因為它更具有詩性的美感。
總的來說,雖然我們并不如一個語言學家一樣擁有豐富的構詞法、語法和語系知識,但這些基礎的認知和思考過程,就足以映射人類在NLP領域中的探索過程。
1.2 從Bag of words到RNN/LSTM,再到BERT/GPT3
“如果一直猴子有無限的時間,那么它就可以在打字機上完整的寫出一部莎士比亞作品”,這個思想實驗大概已經成了許許多多統計學家口中的惡趣味了。但是我們這里可以想象一下,當猴子每敲下一個按鍵的時候,計算機是如何“弄懂”猴子要表達的意思呢?一個簡單的辦法,我們可以把26個字母看成是一個26維的空間,這樣每一個字母都對應這個空間中某一個維度上的單位向量,它們是彼此正交的,因此可以通過向量的標量乘法和直和的運算方式將一個單詞表示成一個26維的二階張量。雖然看似很復雜,但是這樣的語言計算機卻可以很快“理解”它們。
Have you seen the movie The Wendering Earth 2? It is great! I really like it.
這里我們看上述一段語料,我們可以利用與猴子同樣的思路,將單詞映射為高維空間中的張量,并根據單詞出現的頻率賦予它權重,進而我們就建立了詞袋模型(bag of words)和詞嵌入模型(words embedding), 利用貝葉斯統計推斷,可以選取某個單詞的前三個單詞作為條件概率,從而計算下一個詞匯的概率,繼而確定第四個單詞。當然,由于詞空間的維度相當之高,這樣的推斷很難準確,如果你用過早期的NLP產品,大概會對當時的推測準確率深有感觸。
詞袋模型中一個基本的理念是把一段語料看做成一個詞序列,這樣如果忽略詞語之間的語法關聯關系,就可以把這樣一個詞序列看作是一個馬爾代夫過程,即無歷史關聯的隨機過程。那么更進一步的思考,如果要確定一個單詞,我們可以利用前面所有單詞的向量來進行統計計算,這就產生利用RNN來處理NLP問題的基本思想。RNN實際上就是一個循環網絡,每一次迭代都將一個單詞作為輸入進行計算。
RNN在處理語料序列的時候,對于詞語詞之間的關系是“無意識”的,完全依靠統計來處理權重,這種方式其實并不符合人類對于語言的認知。例如在上述給出的語料事例當中,我們當然知道the movie和it是對The Wendering Earth 2的指代。而且,由于卷積計算的天然特性,詞語之間的關聯關系會很快被“遺忘”,即權重在多次卷積計算后趨向于0 。那么一個自然的想法就是,我們需要對這些權重要有意識的進行增強或是減弱,以至于“遺忘”。那么我們可以改造RNN中每一個迭代的計算過程,這里一個過程可以成為一個Cell,我們需要在Cell中加入一些邏輯門來強化/削弱單詞的權重,以體現一個語料序列中的重點關聯關系,而這樣的被改造過的RNN就被稱之為LSTM。
LSTM中利用所謂的遺忘門函數選擇強化/削弱一些權重,進而達到對語意“理解”的目的。當然在這過程中,對于詞嵌入的方法也做了進一步處理,即采用所謂的tokenizer的方法進行分詞(詞袋模型中所使用的詞向量辦法一般稱為word2dev),不再是單純的對單詞進行分割,而是對詞根等進行分割,這樣就將語法上的時態等概念引入了進來,比如want和wanted。
LSTM4一定程度上對NLP的研究過程起到了相當的促進作用,并且在機器翻譯領域取得了不錯的成績,但是從結構上,RNN和LSTM都有一個問題是輸入序列長度與輸出序列的長度相當,所以很難處理長段落語料以及問答系統(問題和答案的序列長度差別很大)。RNN和LSTM另一個技術上的問題,是所謂的梯度消失/爆炸的問題6。
關于梯度消失/爆炸問題的解釋*: RNN和LSTM網絡中的“記憶/遺忘”參數并不是先驗得出的,而是通過語料文本訓練得到的,具體過程是首先給這些參數一個初始值,然后讓網絡計算一個文本,并給出輸出向量,同時真實的結果文本轉化為現實向量,我們將預測向量和現實向量做差(這里指的是差方),就會等到所謂的損失函數(Lost Function),所以不難看出,損失函數越小,預測值與實際值就越接近。為了讓損失函數得到最小值,對于連續函數我們可以采用微分的辦法,這就是所謂的反向傳播,微分之后我們需要找到其最低點,因為最低點時損失函數為0,即預測值與實際值相等。而在這個曲面上找到最低點的過程,與你在一片田野上找一個土坑的經歷類似,你會找到一些向下的“坡”,然后沿著“坡”一直向下跑,這個過程就是所謂的梯度下降過程,所謂的“坡”就是這里所說的梯度。所有的神經網絡中,為了避免線性擬合的不準確性(可以理解為線性只能擬合直線,但是現實大多數數據都是曲線,即非線性的)都會引入所謂的激活函數,RNN和LSTM當中都會引入sigma激活函數,這就讓原本的網絡計算構成了一個非線性動力學模型系統,這種系統的初始態如果在穩定解(吸引子)附近就會逐漸趨向穩定,如果遠離這種狀態,整個系統就會像混沌態演化以至于最終發散,初始態一點點的差別,在非線性系統中都會產生天差地別的結果,這就是所謂的“蝴蝶效應”。RNN和LSTM在迭代過程中也是如此,如果初始參數不恰當(事實上很難選擇到恰當的初始值),就會在不斷的迭代權重乘法過程中,使得梯度權重趨向于0(梯度消失),或者是
(梯度爆炸),使得計算過程無法繼續。
要解決RNN和LSTM的問題,我們必須清晰的知道它們的問題是什么,目前除了計算中的梯度問題,另一個問題就是遺忘門這個設計還是太過簡單了,還不能讓網絡像我們那樣理解一段文本語料。那么我們在看一段文本語料時,我們主要看到了什么呢,很好驗證的辦法,你讀完這一段文本之后閉上眼睛,然后你還記得什么?沒錯,你能記住的可能僅僅是一些詞匯,一些重要的詞匯,這是一種“注意力”機制,同樣,我們需要我們的網絡也能夠產生類似的注意力。一種數學上的思路是,當兩個向量做乘法時,可以得到一個向量在另一個向量上的投影,相關性越強,則投影越長,我們利用這個特性讓語料經過分詞(tokenizer)后的token進行自乘,已找出重要的東西,并且把它作為權重重新分配原來的token,這樣我們就相當于把“注意力”分配到了這個token上,可以簡單的表示成數學公式,這就是最初誕生Attention機制的思路,但然為了訓練需要,我們需要改造這個公式,以使得它具有更高的可調節性和更好的梯度“坡”來用于訓練,即鍵值Attention的思路
這里Q,K,V都是輸入token序列X的線性變換,d為方差。這樣我們就在數學上建立了一個簡單的Attention機制,當然為了優化模型訓練等問題,Attention有多種變體,一個非常有參考價值的文獻就是Attention Is All You Need3。
另一個要解決的問題就是,RNN和LSTM需要單個token累計輸入到網絡中,切輸出序列長度與輸入序列長度相等,為了解決這個問題最早提出了seq2seq模型,該模型分為兩部分,一部分稱之為編碼器(Encoder),能夠將所有輸入端的序列壓縮到一個固定長度的向量當中,另一部分與編碼器對偶,稱之為解碼器(Decoder),可以利用所得到的壓縮向量計算得出下一個token。但是實際上文本語料中很少出現需要全文本關聯的情況,因此seq2seq模型消耗大量的算力計算了一些無關緊要的東西。因此,一種自然的想法就是結合Attention和Encoder- Decoder的各自優點,也就誕生了NLP領域中目前最為重要的單元結構——Transformer。
至此,我們已看到了目前處理NLP的全部歷史輪廓,無論是18年榨街的Bert系列模型,還是更早一些起家的GPT(GPT-1 -> GPT-2 ->GPT-3 -> InstructGPT -> ChatGPT)系列模型都是以Transformer(以下略寫為Tm)為基礎的大語言模型模型LLM(Large Language Model),只不過對于Transformer結構的優化和改進,以及整體網絡結構設計和Tm組合都有各自的思路,簡單歸納來說,Bert系列使用了Tm整體結構,或者只使用Tm的Encoder結構;而GPT系列則只使用了Tm的Decoder結構。并且目前為止,這些大模型的訓練思路基本上都是采用Pre-Trained(預訓練)+ finetune的思路。
2. 驚奇但并不傳奇的ChatGPT
長城固然是雄偉且壯麗的,但是如果當時如果有人告訴始皇帝他發明了槍,那么熟更具有時代意義是不言自明的。當然,我們絕不能因為站在歷史角度來否定受限于歷史局限性的當時的人們在筑建偉大長城所付出的智慧和汗水,這樣偉大的工作仍然具有歷史的借鑒價值。這也是個人目前對于NLP領域進展的基本評價。
GPT的本意是Generative Pre-Trained Transformer,根據OpenAI團隊的披露,GTP-1的誕生實際上要比Bert早一些,但是因為表現能力和宣傳能力,使得它并沒有像Bert那樣受到廣泛關注。但是ChatGPT之所以如今大火,其主要原因仍舊是在路上,除了使用Tm和Multi-Head Atention等網絡結構機制之外,Google團隊在GPT-2時還提出了一些“學習”思路來處理多類型任務模型(翻譯,問答等)和零樣本學習(Zero-Shot)問題5,10。
機器學習領域一直都區分為有監督學習和無監督學習兩種方式,從表現上判斷,有監督學習需要大量的樣本數據進行訓練,而無監督學習只需要設計一個行為良好的獎勵函數即可完成學習過程。然而我們總可以把所謂的樣本數據看做成是一個“智能”獎勵函數的預處理結果,所以在GPT-2中提出的一個重要思路就是,所有一切有監督學習任務都是無監督學習任務的子集。進而區分了指示學習(Instruct Learning)和提示學習(Prompt Learning)兩種處理學習任務的思路。可以簡單以如下的方式來理解這兩種學習任務的區別。
提示學習:上個月我去了哈爾濱,這座城市太美了,我很 ____這座城市;
指示學習:(請判斷該句子所表達的情感)上個月我去了哈爾濱,這座城市太美了,我很喜歡這座城市。選項:A. 很好;B. 好;C. 一般;D. 差;
提出指示學習的目的是,對于已經針對某個任務(例如翻譯)已經得到的訓練后模型,可以采用生成網絡模型作為獎勵函數,在無樣本條件下對該模型進行微調,以使得該模型能夠處理其他任務,從而既可以解決Zero-Shot問題,也可以讓模型更為泛化。
而預訓練的GPT系列情況如下
GPT-1 | GPT-2 | GPT-3 | |
---|---|---|---|
Parameters | 117 Million | 1.5 Billion | 175 Billion |
Decoder Layers | 12 | 48 | 96 |
Context Token Size | 512 | 1024 | 2048 |
Hidden Layer | 768 | 1600 | 12288 |
Batch Size | 64 | 512 | 3.2M |
Training Data | 5GB | 40GB | 45TB |
Created Date | 2018-6 | 2019-2 | 2020-5 |
由此可見,GPT-3已經是絕對的大模型了,其訓練過程總計消耗10000張Nvidia V100顯卡,但是其訓練語料樣本主要包含人類搜索數據和問答數據等,輸出結果好壞參差不起,因此OpenAI團隊結合對于InstructGPT模型的研究,進一步采用指示學習和PPO算法對GPT-3模型進行微調,從而得到了如今的ChatGPT。
如此,OpenAI團隊可以說利用充足的數據集、算力資源和物理能量構筑了一條迄今為止最為壯觀的NLP長城,其效果也如大家所見,確實給人們以驚人的效果,特別是指示學習、強化學習模型和PPO算法的運用,挺升了模型的泛性,使得模型能夠自己學習代碼,數學計算等等非NLP領域的知識,給足了人們驚喜。
但是另一方面,由于地層模型并沒有突破性的創新,模型的對于語義的理解仍然按照Tm模型中的方式進行,所以不禁讓人們思考:我們如今究竟是要讓機器學習以人類的方式來理解世界呢,還是以現行的方式來發展另一種有別于人類的“智能”呢?
3. 從ChatGPT想到的問題
雖然我們看到在ChatGPT使用了許多漂亮的模型和算法處理,但是仍然不能說這樣一個模型具備了如同“人類”一樣的智能,他仍舊是一些以確定化的過程來機械處理數據的算法。其實我們今天發展出的NLP領域進展情況,與其他如圖像識別,語音識別等領域情況,仍然是十分相似的,也就是說雖然這些領域也有一些看起來很“智能”的模型,但是似乎都與人類所認知的智能有著較大的出入。這與這一廣闊的領域中一些主要問題是相關聯的。
3.1 黑箱與AGI
到目前為止,人類所追求的目標仍就是通用人工智能(AGI),我們常常描述一個通用人工智體能應該如同人一樣的學習各種知識和能力,能夠處理不同種類的任務。限于人們對于“智能”本身知之甚少,所以在這個目標前我們仍有漫長的路要走。個人認為,對于這個問題的本質突破仍然需要解決模型的黑箱問題。即我們需要理解并清晰描述模型設計,訓練以及預測時的所有結構和過程。
部分數據科學家,人工智能方面的學者以及數學家,并不支持一定要揭開黑箱問題,就如同我們孕育了一個新的智能生命,我們可以與其合作,但并不要時時刻刻了解他的大腦里發生了什么一樣。但個人認為,無論是將這樣的通用智能體看作是“伙伴”還是“工具”,我們都需要讓黑箱變得透明起來,雖然目前的諸多進展顯示這個目標甚至要難于創造通用人工智能體。但是事實上,如果沒有一個這樣的理論來指導,我們也同樣難以達成“創造通用人工智能體”的目標。
如果我們能早日攻克黑箱問題,那么許多其他問題將會迎刃而解,比如,我們有三個模型分別用來處理人臉識別、語音識別和翻譯任務。如果我們需要同時用一套模型處理這些任務呢,要么我們需要人工區分這些任務,以調用不同的模型,要么重新訓練一個模型,來處理這三個任務,但是如果能夠揭開黑箱問題,或許我們會有方法直接歸并三個模型而得到一個模型來處理任務了。
另一方面,我們需要根據我們的選擇來調整模型的輸出,比如,我們絕對不希望從ChatGPT看到一些滅世言論或者種族歧視的言論,所以我們需要利用指示學習和獎勵模型來對模型進行微調,實際上這也并不是一個簡單的過程,我們需要構建一個良好的強化學習智能體,來對預訓練模型進行二次訓練。但是如果能解開黑箱問題,我們就有可能通過直接調整模型參數的方法來直接就錯,從而既可以保證模型的泛性,也可以使模型的輸出得到保證。
3.2 算力問題
我們已經看到,要訓練出一個ChatGPT這樣的模型,其消耗的算力資源是如此巨大,莫說是個人,即使是非Google同等體量的公司也無法做到。但是實際上,在詞袋模型模型中,我們就看到了,無論是分詞向量還是后來的token向量,大部分元素都一定接近于0,這其實是現實數據樣本的特性,同類數據樣本在高維空間往往會相互接近,從而使得其他維度都表現為0。那么機器學習中無論是卷積計算還是激活函數等張量計算,實際上都是大規模稀疏矩陣運算問題。如何有限的削減這種稀疏矩陣運算次數,成了未來發展機器學習和人工智能的關鍵因素。
其實目前我們已經看到了兩種思路,一種是降低反向傳播算力消耗,在發展神經網絡的過程中,我們都避免不掉反向傳播算法,核心是因為我們沒有這個偏微分方程的解析解,所以只能利用梯度下降算法來找到函數的極值點。但是最近MIT團隊在一類CfC網絡中求解了神經元傳播的近似解析解7,這無疑會大幅度提升現有的計算效率,從而降低算力資源的消耗。
另一方面,在物理學中有一種處理極值點發散問題的方法——重整化8,他的本質是在局域區域做均值,從而易除掉一些無用的信息,降低原始數據的維度,這未來也可能成為一種處理算力問題的思路。
3.3 中文的NLP
百度今日發布說基于ChatGPT的中文模型“文心一言”很快就要發布,雖然對于國產化是一個不錯的期待,但是這種期待個人覺得是會打折扣的。不同于英文,中文實際上是一種半形半意的語言,他的表達能力和表達思維完全不同于英文,這也是為什么許多做科研的人會覺得英語是更為準確的表達,而一些作家覺得中文是更為詩性的語言的原因。但是在處理機器學習和神經網絡模型中,所有的語言都會被映射為一種編碼,中文分詞領域往往采用拼音加上聲調和位置信息進行編碼,這種編碼對于英文語系是沒有問題的,但是對于中文在編碼過程中,實際上已經存在了部分信息的遺失,而丟失的這部分信息往往具有另一層的含義,只有很多以中文為母語的人才會領會。
所以站在這個角度講,中文的NLP模型,很可能需要另辟蹊徑,現有的模型僅僅具有參考價值,我們需要在分詞,transformer等領域分別找到能夠針對中文的模型才可能真正解決中文的NLP問題。
3.4 語言的創造問題
《格林童話》當中一個意味深長的寓言就是“侏儒妖”故事,它讓人們意識到:“當你能夠給一事物進行命名的時候,你就擁有了理解和支配它的力量”。這其實反映了一個事實,決定人類認知水平的不是其他什么,就恰恰是語言自身。
人類今天的詞典里,并不是一直如今天一樣的豐富,大量詞匯是在歷史的進程中被創造的。而一個新的詞匯被創造出來的時候,往往意味著一個人類文明歷史的進程和人類“智能”上的進展。雖然如此強大的ChatGPT擁有如此強大的能力,它甚至掌握著任何一個人類個體都無法掌握的語料文本,他可以通過組合的方式一本正經的胡說八道一段文本,然而它很難具備創造詞匯的能力,因為一個詞匯的誕生往往意味著真正意義上的認知和智能上的進展,以及他背后對于現實世界知覺和處理的力量,這也是為什么短時間內諸如ChatGPT等模型很難取代人類的根本原因。與現實社會和自然的割裂,注定了這種模型對于真正“智能”的割裂。
3.5 如何處理ChatGPT創造的文本
ChatGPT這類開放接口的文本處理模型,也會具體的帶來一些現實問題,要如何控制和處理這類問題,將會很快成為大家關注的一個話題。一個典型的事件就是Stack Overflow官方公開聲明禁止ChatGPT參與問題討論。根本原因就是模型會輸出一些看似“一本正經”的處理問題的答案。
那么相關的思考同樣已經迫在眉睫,比如是否通過喂養和誘導等方式,讓ChatGPT具有搜集隱私信息,并向部分非法用戶轉錄這些隱私。
ChatGPT輸出的文本如果不加以控制,是否會混淆到現實世界,從而產生一些非事實類描述文本,繼而引起或激化一些人類社會的矛盾。這已經并不是第一次討論類似的安全分體,畢竟類似Fake Face和Voice AI等模型已經被用于一些領域,以獲取非法利益。
更近一步的,此類模型會不會向一個人發布同類誘導性文本,從而影響參與者的意識形態,做出違反自身意識和知覺的判斷,我想如果你讀過Jamie Susskind的《Future Politics》,你一定會有類似的擔心。
3.6* 哲學問題
20世紀20年代,以卡爾納普、石里克為首的等人成立了“維也納小組”,支持邏輯實證主義,一時間對于“形而上學”討論聲音,變得噤若寒蟬。這種哲學上的嚴寒,直至哥德爾對于數學實證主義的討論才漸漸停止。
那么如果ChatGPT類似模型產生了類似的邏輯文本,我們是要以“形而上學”的問題來接納,還是要以邏輯實證主義角度來審視,也可能將成為“科技哲學”領域所需要深入討論和求證的問題。
4. 價值體系——從ChatGPT到知覺革命
談一點個人體驗,雖然這些年由于商業價值的需要,諸如“通過圖靈測試”和“奇點降臨”的聲音不少,但是個人認為,短時間內所謂的人工智能“奇點”和“元年”都可能不會真正的降臨。
但是回顧這近半世紀互聯網、物聯網、信息存儲、傳感器、穿戴設備、科學計算、神經網絡和機器學習的發展,都似乎在指向這樣一種結果——知覺革命。
知覺,可以說是人與自然,人與自我之間的橋梁,它直接影響著人對自然對自我的認知,影響著人生存和生活的基本哲學和方式。
一個簡單的例子,在紅外設備發明之前,我們不會有把握或者策略的穿過一片夜幕籠罩的田野,但是有了紅外設備,我們就能夠在一定程度上及時發現風險,并找到處置辦法。因此我們具備了夜間出行在荒野的能力,當然你可能還會帶上一把用神經網絡來擬合你個人習慣的武器。實際上這些設備都是對于人類知覺和能力的延伸。
也許你知道,人眼只可以觀測電磁譜上很狹窄的一段頻率范圍,但是各種新型的物理設備和傳感器可以延伸你的知覺,可以想象你接收到的信息將是以往的幾十個上百個數量級的倍數,你會發現以往無從認知的世界,就如同《三體》中帶著3k眼鏡的汪淼,看到宏大的宇宙背景閃爍一樣。想象一下,你不再通過有限的顏色來透過那些名畫去認知梵高,達芬奇。而是更為寬闊的維度信息來觸碰歷史中那些偉大的靈魂。你甚至可以通過VR/AR/MR等設備,與這些偉大的人在任何一個你想要的時空中相認識。而你看到的對象將可能是利用神經網絡還原他們的意識,樣貌和真實聲音,就如同你真的穿越時空見到了真實的他們一樣。
雖然看起來這樣的科幻,但事實上許多技術已經具備了現實支撐,這或許很快就成為那樣一場知覺革命中的一個現實片段!
5*. 參考文獻
- Yule Wang的Machine Learning Seminar講解與討論
- Lil’Log
- Attention Is All You Need
- Language Models are Few-Shot Learners
- Training language models to follow instructions with human feedback
- Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
- Closed-form continuous-time neural networks
- Gell-Mann–Low Criticality in Neural Networks
- Finetuned Language Models Are Zero-Shot Learners
- Language Models are Unsupervised Multitask Learners
- Proximal Policy Optimization Algorithms