這就是大語言模型! | 一文梳理LLM中的核心概念
文字接龍
LLM從根本上始終要做的是,針對它得到的任何文本產生“合理的延續”。LLM只是在玩一個“文字接龍”的游戲。
當ChatGPT做一些事情,比如寫一篇文章時,它實質上只是在一遍又一遍地詢問“根據目前的文本,下一個詞應該是什么”,并且每次都添加一個詞。(這里說的“詞”實際上指的是token,它可能只是詞的一部分)
每個詞的出現有一定的概念,并不會在每次添加詞的時候選擇概率最高的那個,而是在一定范圍內隨機選擇,否則就像輸入法軟件那樣只能聯想,每次都選擇第一個詞,通常會得到一篇非常“平淡”的文章,完全顯示不出任何“創造力”(是時候甚至會產生混亂和重復)。存在隨機性意味著,如果我們多次使用相同的提示(prompt),每次都有可能得到不同的文章。使用“溫度”參數來確定低排名的詞的使用頻率。對于文章生成任務,“溫度”為0.8似乎最好。
概率從何而來
使用N-gram模型從大型文本語料庫中統計連續的N個詞出現的概率。可以想象,如何能夠使用足夠長的n元詞,我們基本上會“得到一個ChatGPT”,也就是說我們得到的東西能夠生成符合“正確的整體文章概率”且像文章一樣長的序列。但問題在于:我們根本沒有足夠的文本來推斷出這些概率。這里存在一個組合爆炸的問題,可能的20元詞的數量會大于宇宙中的粒子數量,所以永遠無法把它們全部寫下來。
改進方案是建立一個模型,讓我們能夠估計序列出現的概率。這就是“大語言模型”要做的事情。
假設我們要知道從比薩斜塔上掉落的鐵球需要多長時間才能落地,我們有兩種方法可以運用。第一種是進行多次測量和記錄;第二種是根據已知的物理定律直接計算出最終的結果。在某種程度上,N-gram模型類似于第一種方法,而大語言模型類似于第二種方法。
什么是模型
牛頓運動定律并不是“先知”告訴牛頓的,而是牛頓本人經過觀察、測量、記錄、思考、假設、驗證等一系列步驟后總結出來的。這個總結的過程就是建立模型的過程,最后得到的結論就是一個模型。有些模型是有名字的,比如“牛頓第一、第二、第三運動定律”。根據建立的模型,我們可以直接計算出給定條件(輸入)下我們關心的問題的結果是什么(輸出),這也就是用模型進行“預測”的過程,這一過程有時候也叫做“推理”。
為人類語言文本建立的模型就是語言模型。大語言模型的“大”體現在模型的參數量很多,比如ChatGPT有1750億個參數。
任何模型都有某種特定的基本結構,以及用于擬合數據的一定數量的“旋鈕”(參數),只有當這些“旋鈕”都旋到合適的位置時,模型才能有預期的表現。電視機有很多旋鈕,比如頻道選擇旋鈕、音量旋鈕、明亮度旋鈕等,用來完成多種功能。幸運的是,我們只需要調整有限的幾個旋鈕就能讓電視機有效工作。相反,要讓ChatGPT這樣的大語言模型有效工作,需要讓1750億個旋鈕處于正確的位置。
神經網絡
一種主流的模型基本結構是神經網絡,它發明于20世紀40年代,可以視作對大腦工作機制的簡單理想化。
神經網絡是一種層次化的模型,由多層神經元組成,每一層都可以對輸入數據進行特征提取和轉換。每一層的輸出作為下一層的輸入,從而形成了一種層層傳遞的結構。無論輸入什么,神經網絡都會生成一個答案,這跟人的神經系統比較相似,因此神經網絡在圖像識別、語音識別中比較常用。
一個典型是神經網絡結構
神經網絡之所以很有用,原因不僅在于它可以執行各種任務,還在于它可以通過逐步“根據樣例訓練”來學習執行這些任務。當構建一個神經網絡來區分貓和狗的圖像時,我們不需要編寫一個程序來明確地找到胡須,只需要展示很多關于什么是貓和什么是狗的樣例,然后讓神經網絡從中“機器學習”如何區分它們即可。
神經網絡的訓練究竟是如何起效的呢?本質上,我們一直在嘗試找到能使神經網絡成功復現給定樣例的權重。然后,我們依靠神經網絡在這些樣例“之間”進行“合理”的“插值”(或“泛化”)。想象一個讓神經網絡擬合指定函數的過程。
為了找出“我們距離我們有多遠”,我們計算通常所說的“損失函數”(有時也稱為“成本函數”)。這里我們使用一個簡單的 (L2) 損失函數,它只是我們得到的值與真實值之間差異的平方和。我們看到的是,隨著訓練過程的進行,損失函數逐漸減小(遵循針對不同任務不同的特定“學習曲線”),直到我們達到網絡(至少達到良好近似)成功再現的點我們想要的功能:
最后一個要解釋的重要部分是如何調整權重以減少損失函數。數值分析提供了多種技術來找到此類情況下的最小值。但典型的方法是逐步遵循從我們之前的 w1、w2 開始的最陡下降路徑:
實際上,“深度學習”在2012年左右的重大突破與如下發現有關:與權重相對較少時相比,在涉及許多權重時,進行最小化可能會更容易。換句話說,有時候用神經網絡解決復雜問題比解決簡單問題更容易——這似乎有些違反直覺。大致原因在于,當有很多“權重變量”時,高維空間中有很多不同的的方向可以引導我們達到最小值;而當變量較少時,很容易陷入局部最小值的“山湖”,無法找到“出去的方向”。
在典型情況下,有許多不同的權重集合可以使神經網絡具有幾乎相同的性能。在實際的神經網絡的訓練中,通常會做出許多隨機選擇,導致產生一些“不同但等效”的解決方案。
神經網絡訓練的藝術
1. 針對特定的任務使用何種神經網絡架構
在過去的十年中,神經網絡訓練的藝術已經有了許多進展。是的,它基本上是一門藝術。有時,尤其是回顧過去時,人們在訓練中至少可以看到一絲“科學解釋”的影子了。但是在大多數情況下,這些解釋是通過試錯發現的,并且添加了一些想法和技巧,逐漸針對如何使用神經網絡建立了一門重要的學問。
有人可能會認為,每種特定的任務都需要不同的神經網絡架構。但事實上,即使對于看似完全不同的任務,同樣的架構通常也能夠起作用。這反映了我們通常試圖讓神經網絡去完成的任務是“類人”任務,而神經網絡可以捕捉相當普遍的“類人過程”。
在早期發展階段,人們傾向于認為應該“讓神經網絡做盡可能少的事”。例如,在將語音轉換為文本時,人們認為應該先分析出語音的音頻,再將其分解為音素等。但是后來發現,最好的方法通常是嘗試訓練神經網絡來“解決端到端的問題”,讓它自己“發現”必要的中間特征、編碼等。
還有一種想法是,應該將復雜的獨立組件引入神經網絡,以便讓它有效地“顯式實現特定的算法思想”。但結果再次證明,這在大多數情況下并不值得;相反,最好只處理非常簡單的組件,并讓它們“自我組織”來實現(可能)等效的算法思想。
這并不意味著沒有與神經網絡相關的“結構化思想”。例如,CNN在圖像處理任務中似乎很有用,就像RNN在文本處理任務中一樣。
2. 如何獲取訓練數據
“遷移學習”可以將已經在另一個神經網絡中學習到的重要特征列表“遷移過來”,從而顯著降低對數據規模的要求。
“數據增強”的變化并不一定要很復雜才有用。例如,自動駕駛可以使用在模擬的游戲環境中獲取的數據。
“無監督學習”可以用在訓練ChatGPT這樣的任務重。
3. “足夠大的神經網絡當然無所不能!”
ChatGPT的能力令人印象深刻,以至于人們可能會想象,如果能夠在此基礎上繼續努力,訓練出越來越大的神經網絡,那么它們最終將“無所不能”。對于那些容易被人類思維理解的事物,這確實很可能是成立的。但我們從科學在過去幾百年間的發展中得出的教訓是,有些事物雖然可以通過形式化的過程來弄清楚,但并不容易立即為人類思維所理解。
說到底,可學習性和計算不可約性之間存在根本的矛盾。學習實際上涉及通過利用規律來壓縮數據,但計算不可約性意味著最終對可能存在的規則有一個限制。
"計算不可約性"(Computational irreducibility)是由著名物理學家斯蒂芬·沃爾夫勒姆(Stephen Wolfram)在其探索復雜系統和細胞自動機理論時提出的一個概念。這個概念主要涉及到一類系統,這些系統的未來狀態只能通過逐步模擬或執行其所有步驟來確定,而不能通過更簡單的方式或縮減的公式直接預測。
簡而言之,如果一個系統是計算不可約的,那么為了得到系統未來的狀態,沒有比實際按照規則一步一步計算更快的方法。你不能通過某種捷徑或者更高效的公式來預測它將來的狀態,即使是使用最強大的計算機和最聰明的數學家也無法找到一個系統的簡化模型來替代完整地、逐步地計算過程。
例如,在細胞自動機(如著名的康威生命游戲)中,系統的發展規則可以非常簡單,但產生的模式和結構卻可能極其復雜,以至于我們無法預測它未來的狀態,除非逐步模擬它的每一個時間步。這顯示出了在看似簡單的規則之下潛在的復雜性和計算不可約性。
計算不可約性是現代計算理論、復雜系統研究以及物理學中的一個重要觀點,它挑戰了傳統的縮減主義思維,即通過簡化系統來理解系統的行為。在計算不可約的視角下,簡化可能不再是一種可行的策略,復雜性和未可知性成為了系統固有的特點。這種理論對于理解生命現象、社會復雜性以及宇宙的基本規則都具有深遠的意義。
能力和可訓練性之間存在著一個終極的平衡:你越想讓一個系統“真正利用”其計算能力,它就會表現出計算不可約性,從而越不容易被訓練;而它在本質上越易于訓練,就越不能進行復雜的計算。
神經網絡確實可以注意到自然界中我們通過“無輔助的人類思維”也能輕易注意到的規律。但是,如果我們想解決數學或計算科學領域的問題,神經網絡將無法完成任務,除非它能有效地使用一個“普通”的計算系統作為“工具”。
神經網絡能夠在寫文章的任務中獲得成功的原因是,寫文章實際上是一個“計算深度較淺”的問題,比我們想象的簡單。
“嵌入”的概念
神經網絡,至少以目前的設置來說,基本上是基于數的。因此,如果要用它來處理像文本這樣的東西,我們需要一種用數表示文本的方法。當然,我們可以(本質上和ChatGPT一樣)從為字典中的每個詞分配一個數開始。但有一個重要的思想—也是ChatGPT的中心思想—更勝一籌。這就是“嵌入”(embedding)的思想。可以將嵌入視為一種嘗試通過數的數組來表示某些東西“本質”的方法,其特性是“相近的事物”由相近的數表示。
embedding是一種將詞匯、句子或更大的文本塊轉化為數值向量的方法,這些向量可以被機器學習模型理解和處理。"嵌入"這個詞在此上下文中的含義是,文本信息被"嵌入"到高維空間中,每個維度都代表文本的某種特性。
比如“貓”這個單詞文本,可能會在訓練過程中被解析成數百個數字,這些數字都代表了這個單詞某個抽象的本質特性,他們可能與語義相似性、語法關系、共現模式有關系,但具體的含義我們并不知道,最后會將這些數字放進一個高維向量中。
可以通過查看大量文本,創建很多的詞向量,同時收集將一堆有關聯的詞(比如alligator 短吻鱷和crocodile鱷魚在相似的句子中經常幾乎可以互換),相似的詞向量之間距離較近,不相似詞向量距離較遠。
這種詞向量有以下幾個特點:
- 捕獲了詞之間的語義相似性關系
- 可以通過神經網絡有效地學習獲得
- 方便后續的語義運算,通過向量運算實現語義組合
- 是文本的分布式數值表示,便于統計學習
有了詞向量,語言模型就可以通過比較兩個或更多詞向量之間的距離或角度,來理解詞之間的關系,衡量文本之間的相似性。
embedding讓語義運算有了數值基礎,是神經網絡模型處理語義的基石,也是 ChatGPT 等大模型的核心技術:先用神經網絡學習大量文本數據,獲得每個詞的向量表達,然后在此向量空間中進行語義運算,從而達到理解語義的目的。
ChatGPT的內部原理
好的,我們終于準備好討論 ChatGPT 的內部內容了。是的,歸根結底,它是一個巨大的神經網絡——目前是所謂的 GPT-3 網絡的一個版本,擁有 1750 億個權重。在很多方面,這是一個神經網絡,與我們討論過的其他神經網絡非常相似。但它是一個專門為處理語言而設置的神經網絡。它最顯著的特點是一種稱為“Transformer”的神經網絡架構。
Transformer的想法是對組成一段文本的標記序列做一些至少有些相似的事情。但 Transformer 不是僅僅在序列中定義一個可以存在連接的固定區域,而是引入了“注意力”的概念——即更多地“關注”序列的某些部分而不是其他部分。也許有一天,可以啟動一個通用神經網絡并通過訓練來完成所有的定制工作。但至少到目前為止,在實踐中“模塊化”事物似乎至關重要——就像Transformer所做的那樣,也可能就像我們的大腦所做的那樣。
ChatGPT到底在做什么?在任何給定時刻,它都有一定數量的文本,其目標是為下一個要添加的標記提供適當的選擇。
它分三個基本階段運行。首先,它獲取到目前為止與文本相對應的標記序列,并找到表示這些標記的嵌入(即數字數組)。然后,它以“標準神經網絡方式”對這種嵌入進行操作,值 “像漣漪一樣依次通過” 網絡中的各層,以產生新的嵌入(即新的數字數組)。然后,它獲取該數組的最后一部分,并從中生成一個包含大約 50,000 個值的數組,這些值將轉換為不同可能的下一個標記的概率。
一個關鍵點是,這個管道的每個部分都是由神經網絡實現的,其權重由網絡的端到端訓練決定。換句話說,實際上,除了整體架構之外,沒有任何東西是“明確設計的”;一切都是從訓練數據中“學到”的。
首先是嵌入模塊:
輸入是一個由 n 個標記組成的向量(如上一節中所示,用 1 到大約 50,000 的整數表示)。這些標記中的每一個都被(通過單層神經網絡)轉換為嵌入向量(GPT-2 的長度為 768,ChatGPT 的 GPT-3 的長度為 12,288)。同時,還有一條“輔助路徑”,它采用標記的(整數)位置序列,并根據這些整數創建另一個嵌入向量。最后,將標記值和標記位置的嵌入向量加在一起,以從嵌入模塊生成最終的嵌入向量序列。
以下是嵌入模塊的作用,對字符串 ??hello hello hello hello hello hello hello hello hello hello bye bye bye bye bye bye bye bye bye?
? 進行操作:
在嵌入模塊之后是Transformer的“主要事件”:一系列所謂的“注意力塊”(GPT-2 為 12 個,ChatGPT 的 GPT-3 為 96 個)。這一切都非常復雜,讓人想起難以理解的大型工程系統或者生物系統。以下是(GPT-2中)單個“注意力塊”的示意圖:
在每個這樣的注意力塊中,都有一組“注意力頭”(GPT-2 為 12 個,ChatGPT 的 GPT-3 為 96 個)——每個注意力頭都獨立地對嵌入向量中的不同值塊進行操作。(是的,我們不知道為什么分割嵌入向量是個好主意,也不知道它的不同部分“意味著什么”;這只是“被發現有效”的事情之一)
那么注意力頭是做什么的呢?基本上,它們是一種在標記序列(即在迄今為止生成的文本中)中“回顧”的方式,并以一種有用的形式“打包過去的內容”,以便找到下一個標記。在前面的部分,我們討論了使用??2-gram?
?的概率根據上一個詞選擇下一個詞。Transformer 中的“注意力”機制所做的是允許“關注”更早的詞,因此可能捕獲到(例如)動詞可以如何被聯系到出現在在句子中許多詞之前的名詞。在更詳細地說,注意力頭所做的就是用一定的權重重新加權組合與不同標記相關的嵌入向量中的塊。
經過注意力頭處理后,生成的“重新加權嵌入向量”(GPT-2 的長度為 768,ChatGPT 的 GPT-3 的長度為 12,288)通過標準的“全連接”神經網絡層。
因此,在經過一個注意力塊之后,我們得到了一個新的嵌入向量,然后該向量依次通過其他注意力塊(GPT-2 總共 12 個;GPT-3 總共 96 個)。每個注意力塊都有自己特定的“注意力”和“全連接”權重模式。
在經歷了所有這些注意力塊之后,Transformer的實際效果是什么?本質上,它是將標記序列的原始嵌入集合轉換為最終集合。然后,ChatGPT的特定工作方式是選取該集合中的最后一個嵌入,并對其進行“解碼”,以生成應該出現的下一個標記的概率列表。
LLM在做什么?它為何才能做到這些
那么,ChatGPT到底在做什么?它為什么能做到這些?
ChatGPT的基本概念在某種程度上相當簡單:首先從互聯網、書籍等獲取人類創造的海量文本樣本,然后訓練一個神經網絡來生成“與之類似”的文本。特別是,它能夠從“提示”開始,繼續生成“與其訓練數據相似的文本”。
訓練ChatGPT的重頭戲是在向其“展示”來自互聯網、書籍等的大量現有文本,但事實證明訓練還包括另一個(顯然非常重要的)部分。
一旦根據被展示的原始文本語料庫完成“原始訓練”,ChatGPT內部的神經網絡就會準備開始生成自己的文本,根據提示續寫,等等。盡管這些結果通常看起來合理,但它們很容易(特別是在較長的文本片段中)以“非類人”的方式“偏離正軌”。這不是通過對文本進行傳統的統計可以輕易檢測到的。
在經過所有的預訓練后,你只需要把東西告訴它一次,它就能“記住”——至少記住足夠長的時間來生成一段文本。這里面到底發生了什么事呢?也行“你能告訴它的一切已經在里面的某個地方了”,你只是把它引導到了正確的位置。但這似乎不太可能,更可能的是雖然這些元素已經在里面了,但具體情況是由類似于“這些元素之間的軌跡”所定義的,而你告訴它的就是這條軌跡。
就像人類一樣,如果LLM接受到一些匪夷所思、出乎意料、完全不符合它已有框架的東西,它就似乎無法成功地“整合”這些信息。只有在這些信息基本上以一種相對簡單的方式依賴于它已有的框架時,它才能夠進行“整合”。
人類語言,及其生成所涉及的思維過程,一直被視為復雜性的巔峰。人類大腦“僅”有約1000億個神經元(及約100萬億個連接),卻能夠做到這一切,確實令人驚嘆。人們可能會認為,大腦中不只有神經元網絡,還有某種具有尚未發現的物理特性的新層。但是有了ChatGPT之后,我們得到了一條重要的新信息:一個連接數與大腦神經元數量相當的純粹的人工神經網絡,就能夠出色地生成人類語言。
那么,產生“有意義的人類語言”需要什么?
第一個是語言的語法,語言不僅僅是把一些詞隨機拼湊在一起;相反,不同類型的詞之間有相當明確的語法規則。
第二個是邏輯,在亞里士多德發現的三段論(syllogistic)形式中,邏輯基本上用來說明遵循一定模式的句子是合理的,而其他句子則不合理。
ChatGPT“僅僅”是從其積累的“傳統智慧的統計數據”中提取了一些“連貫的文本線索”。但是,結果的類人程度已經足夠令人驚訝了,因此,有意義的人類語言實際上比我們所知道的更加結構化、更加簡單,最終可能以相當簡單的規則來描述如何組織這樣的語言。
ChatGPT的成功可能向我們揭示了人類思維本質的一些基本規律。
人類語言是不精確的,這主要是因為它沒有與特定的計算實現相“結合”,其意義基本上只由其使用者之間的“社會契約”定義。但是,計算語言在本質上具有一定的精確性,因為它指定的內容最終總是可以“在計算機上毫無歧義地執行”。
比如在自然語言中,“少年”這個詞的范圍是模糊不清的,可能指代從12歲到18歲的人。但在計算語言中,我們可以精確定義: 少年 = If[age >= 12 && age < 18, True, False] 這里使用了編程語言中的邏輯語句,明確限定了“少年”的準確年齡范圍。
LLM,如ChatGPT,是如何在語言方面獲得如此巨大的成功的呢?答案可能是語言在根本上比它看起來更簡單。這意味著,即使是具有簡單的神經網絡結構的LLM,也能夠成功地捕捉人類語言的“本質”和背后的思維方式。在訓練過程中,LLM已經通過某種方式“隱含地發現”了使一切成為可能的語言規律。
之前討論過,在ChatGPT內部,任何文本都可以被有效地表示為一個由數組成的數組,可以將其視為某種“語言特征空間”中一個點的坐標。因此,ChatGPT續寫一段文本,就相當于在語言特征空間中追蹤一條軌跡。現在我們會問:是什么讓這條軌跡與我們認為有意義的文本相對應呢?是否有某種“語義運動定律”定義(或至少限制)了語言特征空間中的點如何在保持“有意義”的同時到處移動?
產生“有意義的人類語言”需要什么?過去,我們可能認為人類大腦必不可少。但現在我們知道,ChatGPT的神經網絡也可以做得非常出色。這或許就是我們所能達到的極限,沒有比這更簡單(或更易于人類理解)的方法可以使用了。不過,我強烈懷疑ChatGPT的成功暗示了一個重要的“科學”事實:有意義的人類語言實際上比我們所知道的更加結構化、更加簡單,最終可能以相當簡單的規則來描述如何組織這樣的語言。
本文轉自 AI生成未來 ,作者:楊木易
