大型語言模型(LLM)的工作原理詳解
本文深入探討了大型語言模型的核心機制:下一個詞元預測、訓練過程、對數機率與Softmax、溫度引數的影響,以及輸出的機率性質。解釋了為什麼模型會“幻覺”、如何透過思維鏈提示提高準確性,並澄清了“模型知道”的真正含義。
大型語言模型(LLM)如ChatGPT、Gemini或Claude,使用者通常透過輸入文本並得到連貫、有知識性甚至令人毛骨悚然的回覆來體驗它們。然而,其背後的機制比大多數人想象的要更簡單也更奇特。本文將從機械層面解析語言模型的工作原理:為何會產生特定輸出,為何相同輸入在不同執行中產生不同結果,以及“溫度”引數的實際含義。
下一個詞元預測機
在最基本的層面上,LLM是一個函式,它接收一個詞元序列作為輸入,並輸出一個機率分佈,該分佈覆蓋其整個詞彙表,指示下一個詞元應是什麼。這就是核心操作的完整描述。其他一切——看似合理的推理、對話能力、程式碼生成——都是透過在大規模資料和海量訓練資料上反覆執行這一操作而湧現出來的。
具體來說,假設你向模型輸入詞元“The quick brown fox”。模型不會直接輸出“jumps”,而是生成一個機率表:“jumps”可能有42%的機率,“sat”有12%,“leaped”有8%,而詞彙表中的其他所有詞元則分享剩餘的機率質量。然後模型從該分佈中取樣以選擇下一個詞元。該詞元被追加到序列中,整個過程重複直到達到停止條件。這稱為自迴歸生成。每個生成的詞元都成為下一次預測的輸入。模型始終在問同一個問題:“根據我目前看到的所有內容,下一個最有可能的詞元是什麼?”
訓練的實際作用
模型透過在海量文本語料庫(包括大量網際網路文本、書籍、程式碼和學術論文)上進行訓練來學習生成這些機率分佈。在訓練過程中,模型看到一個詞元序列並嘗試預測下一個詞元。當預測錯誤時,錯誤訊號透過反向傳播在網路中向後流動,輕微調整數十億個內部引數(模型的“權重”),使得正確預測的機率更高。經過數萬億次這樣的更新,模型的權重編碼出了一種非凡的東西:語言的壓縮統計模型。它學會了“The Eiffel Tower is located in”後面經常跟著“Paris”,Python函式定義以“def”開頭,以及以“To be or not to”開頭的句子幾乎肯定繼續以“be”結尾。
關鍵的是,模型沒有單個訓練樣例的記憶;它內化了統計模式。這就是為什麼它能泛化到新輸入——它不是檢索儲存的句子,而是從學習到的分佈中取樣。
對數機率、Softmax與機率的重要性
在模型生成那些整潔的機率之前,它產生原始得分,稱為對數機率——詞彙表中每個詞元一個實數。這些對數機率是神經網路最後一層的原始輸出。為了將對數機率轉換為機率分佈,模型應用Softmax函式:
P(token_i) = e^(logit_i) / Σ_j e^(logit_j)
Softmax做了兩件事:首先,它指數化每個對數機率,放大差異:一個加倍的對數機率會變得指數級更可能。其次,它歸一化所有值,使機率總和為1。結果是一個有效的機率分佈。
例如,在預測“The quick brown fox”之後的下一個詞時,模型為四個詞生成原始對數機率:“jumps” 8.3,“leaped” 6.0,“sat” 2.1,“sleeps” -1.5。經過Softmax後,機率分別為90.7%、9.1%、0.18%和0.004%。這是模型在取樣前實際交給你的數字。溫度、top-k和核取樣的所有戲劇都在這裡發生,在抽取詞元之前對這個分佈進行操作。
溫度
溫度是提示中最被誤解的引數。通常被描述為“創造力”或“隨機性”,這在技術上正確,但掩蓋了其確切工作方式。準確理解它能使你有意地使用它。
溫度是一個標量,在應用Softmax之前除以對數機率:
P(token_i) = e^(logit_i / T) / Σ_j e^(logit_j / T)
當T=1.0時,無變化。透過調整T,我們可以“銳化”或“平坦化”分佈。例如,對於“jumps”的對數機率8.3:T=0.5時機率約99.0%,T=2.0時約67.5%。而低機率詞如“sleeps”在T=2.0時機率從0.004%上升到0.5%。當T>1.0時,機率質量更均勻分佈,模型取樣到更意外的續寫。
實際影響:溫度不改變模型知道什麼或如何推理,它改變你從機率分佈的哪個區域取樣。低溫時利用模型最自信的預測,高溫時探索分佈尾部,包含有效但異常的續寫——以及不連貫的。合理的心理模型:T=0.0-0.3用於程式碼生成和事實問答;T=0.7-1.0用於聊天和總結;T=1.2-2.0用於頭腦風暴和創意寫作,但輸出可靠性下降。
輸出為何本質上具有機率性
如果你問模型“2+2等於幾”,每次都會得到“4”,因為機率質量集中在那個詞元上。但對於多個續寫合理的提示,模型輸出從機率分佈中抽取。執行相同提示一百次,你會得到一百個略微不同的輸出,有時實質性不同。這不是錯誤,而是訓練的直接結果:訓練資料包含巨大差異,不同人以數千種方式表達相同想法,模型學到了這種差異。
這種機率性質有幾個實際後果:不能假設模型總是產生相同結構,即使相同提示;模型可能在不同呼叫中自我矛盾,需要驗證;測試提示應在多次執行後進行。
無元知識
模型不存在任何認知意義上的“決定”要說什麼。沒有內在獨白,沒有計劃步驟。每個詞元從左到右依次生成,一旦提交就無法修改。這就是為什麼“思維鏈提示”——要求模型在給出最終答案前逐步推理——實際上能提高複雜任務的準確性。透過生成中間推理詞元,模型將後續詞元條件於該推理。這並非戲劇化,而是真實有效的。
這也解釋了為什麼模型會“幻覺”——生成自信但虛假的文本。給定一個上下文期望特定細節的提示(作者名、統計數字、URL),模型從其學習分佈中取樣一個看似合理的續寫。該分佈基於真實文本構建,但並非為事實準確性索引。一個看似合理的詞元不等於真實的。
“模型知道”的實際含義
當工程師說語言模型“知道”某事時,意思是訓練語料庫包含許多該資訊在上下文中出現的例子,導致模型權重編碼了對錶達它的續寫的強烈先驗。模型沒有事實資料庫;它有數百億詞元共現統計的壓縮、有損編碼。
實際上:模型對訓練中多次見到的事情自信且連貫;對罕見或不一致表達的事情不可靠。它會自信地在訓練資料不足的領域編造細節,因為詞元預測機制不區分“我學到了”和“我正在模式匹配到看似合理的東西”。
理解這一點有助於設計合適的提示:對於基於常識的任務,模型是強大的加速器;對於需要精確事實回憶的任務(尤其是具體數字、引用或近期事件),模型應被視為需要驗證的起點。
總結
語言模型是一個透過最小化預測保留詞元誤差而訓練的下一個詞元預測機。它每一步輸出一個機率分佈,溫度控制取樣前該分佈的尖銳程度。輸出是機率性的,因為模型學習了人類語言的自然變化。理解這一點——而不是將模型視為搜尋引擎或知識庫——是在生產系統中有效使用LLM的基礎。