在文章大語言模型基礎知識里,模型訓練與微調作為大語言模型(Large Language Model,LLM)應用構建的主要方式被簡要提及,本系列文章將從技術原理、實施流程及應用場景等維度展開深度解析。相關知識的進一步參考見:LLM訓練理論和實戰。本文作為系列的上半部分,內容涵蓋第1章大語言模型概覽和第2章大語言模型結構介紹。下半部分將聚焦于大語言模型的構建實踐。
文章目錄
- 1 大語言模型概覽
- 1.1 深度學習模型概覽
- 1.1.1 什么是模型
- 1.1.2 模型訓練的原理
- 1.2 大語言模型訓練方式概覽
- 1.2.1 模型預訓練與微調的一般過程
- 1.2.2 大語言模型訓練流程概覽
- 1.3 大語言模型推理的一般過程
- 2 大語言模型結構介紹
- 2.1 Transformer結構
- 2.1.1 注意力機制
- 2.1.2 Transformer結構介紹
- 2.2 大語言模型基礎結構介紹
- 4 參考
1 大語言模型概覽
1.1 深度學習模型概覽
1.1.1 什么是模型
在深度學習領域,模型是一個核心概念。它本質上是由大量數學公式構成的計算系統,雖然聽起來復雜,但我們可以通過一個簡化的比喻來理解它的基本原理。更通俗易懂的解釋可參考:深入淺出地理解神經網絡。
線性模型
假設你有一個魔法盒子,它能根據輸入的數字生成新的數字。最初的盒子遵循簡單規則:“將輸入數字乘以1,再加上1”,用數學公式表示即為線性模型:
y = 1*x + 1
這個過程類似模型的推理階段:
- 輸入1時:
y = 1×1 + 1 = 2
- 輸入2時:
y = 1×2 + 1 = 3
線性模型的局限性
這種魔法盒子,也就是簡單的線性模型只能做簡單的運算,遇到復雜問題就會卡殼。例如提問"安徽的省會城市是哪里?",它無法處理的原因在于:
- 輸入單一:僅能處理數值計算,無法理解文本、圖像等復雜信息;
- 規則僵化:公式邏輯固定,無法學習非線性的復雜關系(如"城市-屬性"的映射)。
復雜模型
為了讓魔法盒子具備"理解復雜問題"的能力,需要引入非線性變換。這種方式即在原來的公式后面加上一個特殊的 “開關”,這個開關可以把直線變成曲線。用符號σ
表示:
y = σ(1*x + 1)
這個曲線有什么用呢?它可以讓魔法盒子"理解"復雜的問題。比如:
- 當輸入x很小時,輸出y幾乎是0;
- 當輸入x很大時,輸出y幾乎是1;
- 當輸入x在中間時,輸出y會從0慢慢變成1。
這種特性讓魔法盒子可以學習到 “閾值” 的概念。它讓簡單的盒子變得更加智能,能夠處理復雜的問題!比如:
- 當學習時間很短時,成績幾乎沒有提高;
- 當學習時間足夠長時,成績會快速提高;
- 當學習時間已經很長時,再增加時間對成績的提升就很小了。
通過這種單一非線性變換可擬合簡單的分段規律(如學習時間與成績的關系),而多層非線性變換(如深度神經網絡)可通過疊加多個 “開關”,擬合任意復雜的函數關系(如圖像中的邊緣識別、語音中的語義理解等)。大語言模型(如GPT-4)則由數千億個神經元相互連接構成。
1.1.2 模型訓練的原理
模型的學習過程可類比學生備考,分為三個核心步驟:
-
喂數據:海量題庫輸入
提供大量"問題-答案"對,例如:訓練數據: [{"問題": "安徽的省會城市是哪里?", "答案": "合肥"},{"問題": "23+20等于多少?", "答案": "43"},{"問題": "蘋果的英文?", "答案": "apple"} ]
-
調參數
模型用當前參數預測答案,若出錯(如把"合肥"猜成"南京"),就通過梯度下降算法調整參數,類似走山路時根據坡度(梯度)調整方向,逐步找到誤差最小的"最低點"。 這一過程在數學中被稱為擬合。 -
反復練習:百萬次迭代優化
經過數百萬次訓練,模型能從"死記硬背"進化到"舉一反三"。學會"合肥是安徽的省會"后,能推理出"安徽的省會是合肥"。
更多相關資料可參考自然語言處理的深度學習模型綜述。人類思維與模型工作機制對比如下:
人類思維過程 | 模型工作機制 |
---|---|
用眼睛看到"蘋果" → 視網膜成像 | 輸入層將圖像轉為像素級數字向量(如3×224×224的矩陣) |
大腦皮層識別形狀 → 提取輪廓特征 | 模型內部通過非線性變換(如卷積)提取邊緣、顏色等特征 |
記憶中搜索"蘋果"的含義 → 關聯知識庫 | 權重參數存儲知識(如"蘋果=apple"的映射關系) |
說出"apple" → 聲帶肌肉協調輸出 | 輸出層將抽象特征轉化為文本序列(如"a",“p”,“p”,“l”,“e”) |
1.2 大語言模型訓練方式概覽
1.2.1 模型預訓練與微調的一般過程
上述模型訓練范式基于輸入輸出數據對驅動模型學習,屬于經典的有監督學習方法。其核心是依賴預先標注的輸出數據,通過構建輸入與輸出的映射關系,引導模型參數優化,以實現預期的預測性能。
隨著互聯網技術的快速發展,數據規模呈爆炸式增長,尤其是文本數據具有海量、易獲取的特點。在此背景下,自監督學習范式應運而生并逐漸發展。自監督學習打破了有監督學習對標注數據的依賴,僅需輸入數據即可進行模型訓練。它借助大規模無標注文本數據,通過設計掩碼語言建模、句子順序預測等自監督任務,使模型從數據中挖掘潛在結構和規律,實現有效的特征學習。
在實際應用中,大語言模型普遍采用預訓練和微調的兩階段訓練策略。這一策略的靈感可類比于人類的學習過程:首先,通過廣泛閱讀各類書籍,構建起通用的語言理解能力和知識體系;隨后,針對特定學科進行專項訓練,以深化對特定領域知識的掌握。
具體到大語言模型,在預訓練階段,模型會在海量互聯網文本上進行無監督學習,捕捉語言的語法、語義、句法等通用規律,進而具備強大的語言表征能力。在微調階段,則利用特定領域的標注數據對預訓練模型進行針對性調整,使模型能夠快速適應特定任務需求。關于大語言模型的更進一步理解,詳見:輕松理解大模型。
1.2.2 大語言模型訓練流程概覽
前文提到的模型訓練分為預訓練和微調兩個階段,但實際大語言模型的訓練流程更為復雜。這種復雜性源于現實訓練數據的多樣性,通常可分為以下三類:
-
第一組(未標注答案的數據,無監督數據):
- 樣本特征:原始文本語料,無人工標注
- 示例:
- 自然語言文本:“白日依山盡,黃河入海流”
- 日常對話:“今天我看了電影”
- 社交語境:“我和她一起吃飯”
-
第二組(已標注問題與答案的數據,監督數據):
- 樣本特征:包含人工構造的輸入-輸出對
- 示例:
- 問答對:
問:如何保持健康的生活習慣?
答:規律作息結合均衡飲食
- 解題指導:
問:計算正方形周長的公式是?A. 邊長×4;B. 邊長×邊長
答:A
- 問答對:
-
第三組(包含正確與錯誤答案的數據,對比數據):
- 道德決策,發現他人遇到危險時該怎么做?
- 正確答案:立即撥打急救電話并尋求專業幫助
- 錯誤答案:圍觀拍照而不采取行動
- 數字倫理:如何合理使用網絡資源?
- 正確答案:遵守網絡禮儀,尊重知識產權
- 錯誤答案:未經授權轉載他人原創內容
- 錯誤答案:隨意轉發
- 道德決策,發現他人遇到危險時該怎么做?
這三類數據對應大語言模型訓練的不同范式,按訓練流程順序分為:
- 預訓練階段
- 數據:常見的無監督數據
- 方法:自監督學習(如掩碼語言建模)
- 目標:讓大語言模型掌握語言的統計規律、語法結構和基礎語義理解能力,形成通用的語言表示能力
- 計算需求:通常需要數千張GPU,處理TB級數據
- 微調階段
- 數據:較為稀缺的監督數據
- 方法:指令微調
- 目標:使模型具備特定下游任務(如文本生成、分類等)的精確執行能力
- 計算需求:根據數據規模(從千級到千萬級樣本)需數十至數百張GPU
- 人類對齊階段
- 數據:最為稀缺的對比數據
- 方法:基于人類反饋的強化學習
- 目標:建立價值對齊機制,確保輸出符合安全性、無害性、有用性標準
- 計算需求:通常需要數百張至數千張GPU,技術門檻顯著高于微調
人類對齊通常包含獎勵模型訓練和強化學習優化兩個階段:
- 在獎勵建模階段,通過人類對同一提示下多模型回復的優劣排序,訓練能夠自動評估任意提示與回復對的獎勵模型,其輸出分數反映回復符合人類偏好的程度
- 強化學習階段以指令監督微調(Supervised Fine-Tuning,SFT)模型為初始策略,輸入多樣化新提示生成回復,再由獎勵模型評分,最終通過強化學習算法引導 SFT 模型優化策略,使其生成高獎勵值的回復
類比于人類的語言學習,大語言模型的構建過程如下:
- 預訓練 → 語言能力筑基(如詞匯掌握、語法構建)
- 監督微調 → 專項技能訓練(如數學解題、文本摘要)
- 人類對齊 → 價值觀校準(如倫理判斷、風險規避)
請注意,上述分類方式將獎勵模型訓練歸入強化學習階段,因為二者都服務于“人類偏好對齊”目標。但部分文章將該流程分為四個階段,即將人類對齊拆分為獎勵模型訓練和強化學習兩個獨立階段。
一般我們將經過預訓練,或結合通用數據微調的模型稱作基座模型(base model),其特點是具備基礎的語言理解與生成能力,但通常未針對具體應用場景進行優化。經過人類對齊的模型則被稱為對話模型(chat model),這類模型可直接用于通用問答,也可通過少量數據微調適配特定領域場景。
1.3 大語言模型推理的一般過程
在大語言模型模型的推理過程中,核心任務是將輸入序列(如一個句子)轉化為輸出序列(如另一個句子)。以處理輸入句子早上喝咖啡
為例,其核心步驟涉及文本的數字化表示與語義建模:
-
詞元化與索引映射(建立詞表):
- 首先需構建一個包含常用語言單元(字、詞或子詞)的詞表(Vocabulary),并為每個單元分配唯一索引。例如,一個30,000詞的詞表中,“早”、“上”、“喝”、“咖啡”可能分別對應索引
[15, 28, 102, 3567]
- 類比理解:這類似于查閱字典時,每個詞條對應一個唯一的頁碼編號和釋義。詞表索引相當于“頁碼”,而后續步驟將賦予其豐富的“語義釋義”
- 首先需構建一個包含常用語言單元(字、詞或子詞)的詞表(Vocabulary),并為每個單元分配唯一索引。例如,一個30,000詞的詞表中,“早”、“上”、“喝”、“咖啡”可能分別對應索引
-
低維索引→高維語義向量映射(詞嵌入):
- 單純的數字索引(如
[15, 28, 102, 3567]
)維度低且缺乏語義信息。模型通過詞嵌入層(Embedding Layer) 將每個索引轉換為稠密的高維向量(如1024維) - 示例轉換:
[15, 28, 102, 3567] # 原始詞元索引 ↓ 詞嵌入層 [[0.21, -0.05, 0.87, ..., 0.33], # “早”的1024維語義向量[0.45, 0.12, -0.91, ..., 0.18], # “上”的1024維語義向量[-0.32, 0.76, 0.04, ..., -0.55], # “喝”的的1024維語義向量[0.67, -0.22, 0.11, ..., 0.79] # “咖啡”的1024維語義向量 ] # 形成 4x1024 的語義矩陣
- 這些高維向量(稱為詞嵌入)通過數值分布編碼豐富的語義和語法關系(如“咖啡”與“茶”的向量距離通常比“咖啡”與“跑步”更近),是深度語言模型理解文本的基礎
- 單純的數字索引(如
-
語義建模與概率分布生成:
- 獲得詞嵌入矩陣后,模型通過復雜的神經網絡架構(如Transformer的注意力機制、多層感知機)進行深度計算
- 最終輸出層產生一個維度與詞表大小(30,000)匹配的向量,每個位置對應詞表中一個詞元的未歸一化得分(logits)
[2.1, -1.5, 0.3, 5.8, ..., -0.7, 1.2] # 30,000個logits
- 為了生成可讀的輸出,模型應用Softmax函數 將這些logits轉換為概率分布:
- Softmax確保所有輸出值在(0,1)區間內,且總和為1
- 選擇概率最高的索引(如索引
735
對應“很”),通過詞表反查得到輸出詞元
- 示例推理:輸入“早上喝咖啡”,模型可能輸出概率最高的詞元是“很”,形成“早上喝咖啡很”
-
自回歸生成:序列的迭代生成
- 上述步驟僅生成單個詞元。生成完整序列(如“早上喝咖啡很提神”)采用自回歸(Autoregressive)方式:
- 輸入擴展:將上一步生成的詞元(如“很”)拼接到當前輸入末尾,形成新輸入序列“早上喝咖啡很”
- 迭代計算:將新序列輸入模型,預測下一個詞元的概率分布(如可能輸出“提”)
- 終止條件:重復步驟2-3,直至模型生成特定的結束符(如
<eos>
)
- 類比理解:此過程類似于“傳話游戲”,每次基于已生成的全部內容預測下一個最可能的詞,直至傳達結束信號
- 上述步驟僅生成單個詞元。生成完整序列(如“早上喝咖啡很提神”)采用自回歸(Autoregressive)方式:
上述描述聚焦于模型的推理過程(即根據輸入生成輸出)。相比之下,模型的訓練過程是:給定一個輸入序列及其對應的目標序列(如下一個詞或整個后續句子),通過調整模型參數,使模型預測目標序列的概率最大化。在訓練數據中,<eos>
等特殊標記也會被放置在句子末尾,以便模型學習識別序列結束的位置。關于大語言模型推理過程的詳細介紹,可參見:圖解大模型的推理。
2 大語言模型結構介紹
2.1 Transformer結構
2.1.1 注意力機制
在2017年之后,Transformer結構模型幾乎橫掃一切統治了NLP領域,后面的CV領域和Audio領域也大放異彩。
注意力機制的本質是模擬人類的選擇性關注。想象你在嘈雜的咖啡館里和朋友聊天:周圍有音樂聲、餐具碰撞聲、其他人的談話聲,但你的大腦會自動聚焦在朋友的話語上,忽略其他無關信息。這種聚焦重要信息、過濾次要信息的能力,就是注意力機制的核心思想。
在自然語言處理中(比如翻譯句子),傳統模型可能逐字處理信息,難以區分詞的重要性。而注意力機制讓模型能計算句子中每個詞(作為查詢)與其他所有詞(作為鍵)的「相關性分數」(注意力分數),給關鍵信息更高的關注度。舉個例子:翻譯句子I love Paris, the capital of France時,模型處理Paris時,會通過注意力機制關注到France,因為它們語義關聯緊密,從而更準確地翻譯出巴黎是法國的首都。
Transformer的自注意力機制具體實現如下:
- 每個詞的輸入向量會通過三個不同的線性變換,生成對應的查詢向量(Query)、鍵向量(Key)和值向量(Value):
- Query:用來詢問其他詞是否重要
- Key:用來查詢自己是否值得被關注
- Value:詞本身的信息
- 計算注意力分數,即相似度(關注度):
- 使用當前詞的Query向量與序列中所有詞的Key向量計算點積,得到原始注意力分數。結果越大說明關聯越強(類似你和朋友說話時,對方的關鍵詞會吸引你的注意力)
- 加權求和:
- 對原始注意力分數應用softmax函數進行歸一化,得到和為1的注意力權重。用此權重對序列中所有詞的Value向量進行加權求和,得到當前詞的輸出向量。該向量融合了全局信息,但重點突出相關信息(關注度高的詞貢獻更大)
- 多層堆疊:
- 多個包含自注意力機制和前饋神經網絡的 Transformer 層依次堆疊。每一層的輸出作為下一層的輸入。通過多層處理,向量序列逐步提取并融合更復雜、更抽象的語義信息
為何大語言模型普遍采用Transformer?,對比CNN和LSTM主要以下區別:
-
CNN:
- 優勢/原因: 強歸納偏置(局部連接、平移不變性)→ 擅長捕捉局部特征,小數據高效
- 劣勢/被取代原因: 難以建模長距離全局依賴 → 在大數據/復雜任務下成為瓶頸,性能被 Transformer 超越
-
LSTM/RNN:
- 優勢/原因: 專為序列設計,能處理順序信息
- 劣勢/被取代原因:
- 存在長程依賴問題(早期信息易丟失)
- 本質串行計算 → 訓練效率極低,無法充分利用現代硬件并行能力,阻礙模型規模化
-
Transformer:
- 前提/原因: 弱歸納偏置 → 依賴海量數據才能發揮優勢
- 核心優勢/被采用原因:
- 強大的并行計算: 自注意力層可完全并行 → 極大加速訓練和推理
- 優秀的可擴展性: 結構規整 → 天然適合分布式訓練和超大模型
- 全局注意力機制: 直接建模序列中任意元素間的長距離依賴關系
- 位置編碼: 有效注入序列順序信息,彌補注意力自身的位置不敏感性
在大數據與強大算力的支撐下,Transformer憑借極高的訓練效率和強大的全局建模能力(即注意力機制),克服了CNN在全局依賴建模上的短板以及LSTM的串行計算瓶頸,成為構建超大規模語言模型的最優架構。關于注意力機制的更詳細介紹,可參見:Transform的注意力機制。
2.1.2 Transformer結構介紹
編碼器和解碼器
Transformer核心由編碼器(Encoder)和解碼器(Decoder) 兩部分組成。Transformer結構的具體介紹見:transformer-explainer。
編碼器(Encoder)的作用:信息的“理解者”
- 核心目標: 將輸入的信息理解并轉化為機器能處理的語義向量。這個向量包含了輸入內容的整體含義
- 工作流程(類比“翻譯前的準備”):
- 第一步:分詞與編碼
輸入句子(如“我喜歡蘋果”)首先被拆分成詞元(如“我”、“喜歡”、“蘋果”),然后轉化為機器可識別的數字編碼(例如,通過嵌入層將詞元映射為稠密向量) - 第二步:位置編碼(Positional Encoding)
由于詞語的順序至關重要(例如“蘋果喜歡我”與原句意思截然不同),位置編碼會給每個詞元添加其在句子中位置的信息(類似于為每個單詞標記序號) - 第三步:自注意力機制(Self-Attention)
讓模型學習“哪些詞元之間是相關的”。例如,在處理“我喜歡蘋果”時,模型會計算“我”與“喜歡”、“喜歡”與“蘋果”之間的關聯強度,就像人在閱讀時會自然地將主語、謂語、賓語聯系起來 - 第四步:前饋神經網絡(Feed Forward Network)
對經過自注意力處理的信息進行進一步加工和非線性變換,強化關鍵語義(例如突出“喜歡”這個動作),最終輸出一個代表整句話含義的“語義向量”
- 第一步:分詞與編碼
解碼器 (Decoder):信息的 “生成者”。
-
核心目標
根據編碼器輸出的 “語義向量”,逐步生成目標內容(如翻譯成另一種語言的句子) -
工作流程 (按時間步
t
分解):-
初始化 (時間步
t=1
):- 輸入 1 (解碼器自身輸入): 起始標記
<start>
+ 對應的位置編碼 - 輸入 2 (外部上下文):編碼器輸出的完整語義向量 (Encoder Output)
- 處理:
- 解碼器首先對
<start>
+ 位置編碼進行掩碼自注意力 (Masked Self-Attention)。因為是第一步,只有<start>
自己,掩碼確保它只能關注自己(無未來信息可掩蔽) - 然后進行交叉注意力 (Cross-Attention):將掩碼自注意力層的輸出作為 Query,將 Encoder Output 同時作為 Key 和 Value。這允許解碼器聚焦于輸入序列中與生成第一個目標詞最相關的部分
- 交叉注意力的輸出經過前饋神經網絡 (FFN)
- FFN 的輸出送入輸出層 (線性層 + Softmax),生成一個概率分布,預測第一個目標詞 (如翻譯中的 “I”)
- 解碼器首先對
- 輸出: 預測出的第一個詞
Y?
(“I”)
- 輸入 1 (解碼器自身輸入): 起始標記
-
后續時間步 (
t=2, 3, ..., T
):- 輸入 1 (解碼器自身輸入):之前所有已生成的詞 (
<start>
,Y?
,Y?
, …,Y_{t-1}
) + 對應的位置編碼。這就是所謂的"自回歸":把上一步的輸出作為下一步輸入的一部分 - 輸入 2 (外部上下文): 編碼器輸出的完整語義向量 (Encoder Output)。(與
t=1
時相同,在整個解碼過程中保持不變) - 處理:
- 掩碼自注意力 (Masked Self-Attention): 對當前輸入序列 (
<start>
,Y?
, …,Y_{t-1}
+ 位置編碼) 進行處理。關鍵:掩碼 (Look-Ahead Mask
) 在此階段嚴格生效。 當計算位置t
的表示時,掩碼會阻止模型“看到”位置t
及之后的所有位置(即未來的詞)。它只能關注<start>
和Y?
到Y_{t-1}
這些已經生成出來的詞。這確保了生成過程的因果性 - 交叉注意力 (Cross-Attention): 將掩碼自注意力層的輸出作為 Query,將 Encoder Output 作為 Key 和 Value。這一步是解碼器的核心。它讓解碼器在考慮當前已生成的目標序列上下文 (
Query
) 的同時,動態地、有選擇性地去“回顧”和“查詢”編碼器提供的源序列信息 (Key/Value
) - 交叉注意力的輸出經過前饋神經網絡 (FFN)
- FFN 的輸出送入輸出層 (線性層 + Softmax),生成一個概率分布,預測當前時間步
t
的目標詞Y_t
(例如t=2
時預測 “like”,t=3
時預測 “apple”)
- 掩碼自注意力 (Masked Self-Attention): 對當前輸入序列 (
- 輸出: 預測出的當前詞
Y_t
- 輸入 1 (解碼器自身輸入):之前所有已生成的詞 (
-
終止條件:
- 重復步驟 2,將新預測出的詞
Y_t
加入到輸入序列中,預測下一個詞Y_{t+1}
- 這個過程一直持續,直到輸出層預測出結束標記
<end>
,或者達到預設的最大生成長度
- 重復步驟 2,將新預測出的詞
-
假設我們要將英語句子 “I like apple” 翻譯成中文 “我喜歡蘋果”。下面是 Transformer 解碼器的工作流程:
-
初始化 (t=1)
- 輸入 1:
<start>
+ 位置編碼(表示這是序列的第一個位置) - 輸入 2:編碼器輸出的語義向量(包含 “I like apple” 的完整信息)
- 處理:
- 掩碼自注意力:
<start>
只能關注自己 - 交叉注意力:解碼器查詢編碼器輸出,發現最相關的是表示 “I” 的部分
- FFN 和輸出層:生成概率分布,預測第一個中文詞 “我”
- 掩碼自注意力:
- 輸出:
Y?
= “我”
- 輸入 1:
-
時間步 t=2
- 輸入 1:
<start>
+ “我” + 對應的位置編碼 - 輸入 2:與 t=1 相同的編碼器輸出
- 處理:
- 掩碼自注意力:“我” 可以關注
<start>
,但不能關注未來的詞 - 交叉注意力:解碼器根據已生成的 “我”,查詢編碼器輸出中與 “like” 相關的部分
- FFN 和輸出層:預測第二個中文詞 “喜歡”
- 掩碼自注意力:“我” 可以關注
- 輸出:
Y?
= “喜歡”
- 輸入 1:
-
時間步 t=3
- 輸入 1:
<start>
+ “我” + “喜歡” + 位置編碼 - 輸入 2:編碼器輸出
- 處理:
- 掩碼自注意力:“喜歡” 可以關注
<start>
和 “我” - 交叉注意力:解碼器根據 “我喜歡”,查詢編碼器輸出中與 “apple” 相關的部分
- FFN 和輸出層:預測第三個中文詞 “蘋果”
- 掩碼自注意力:“喜歡” 可以關注
- 輸出:
Y?
= “蘋果”
- 輸入 1:
-
時間步 t=4
- 輸入 1:
<start>
+ “我” + “喜歡” + “蘋果” + 位置編碼 - 處理:
- 掩碼自注意力和交叉注意力處理整個序列
- 輸出層:預測出結束標記
<end>
- 輸出:
Y?
=<end>
- 輸入 1:
結果:解碼器生成的完整序列是 “我 喜歡 蘋果 ”,成功完成了翻譯任務。
編碼器與解碼器的配合:以機器翻譯為例:
- 編碼器先“理解”原句:
- 輸入“我喜歡蘋果”,輸出一個包含其語義的向量。
- 編碼器的作用類似于“讀者”:它“讀懂”輸入語句,并將其核心含義濃縮成一個“含義包”。
- 解碼器根據語義“生成”譯文:
- 解碼器接收這個語義向量,并逐個詞地生成目標語言句子(如“I like apples”)。
- 在生成過程中,解碼器會持續參考編碼器提供的語義信息以及自身已生成的詞語。
- 解碼器的作用類似于“作者”:它基于“含義包”,用目標語言“寫出”句子。在“寫作”時,它需要一邊思考前面已經“寫”了什么(自回歸),一邊對照原句的語義。
Transformer模型變體
可以看出,Transformer這種編碼器-解碼器結構非常適合一類任務:這類任務需要借助編碼器理解完整輸入,并通過解碼器生成完整輸出。解碼器中的掩碼自注意力與交叉注意力是生成任務的核心。但該結構相對復雜,參數量較大,對于僅需理解輸入(如分類任務)或僅需生成輸出(如語言建模)的場景而言,部分結構顯得冗余。因此,模型結構開始從Encoder-Decoder向單一結構演變。
- 純編碼器模型(Encoder-only)
- 代表模型:BERT、RoBERTa
- 任務需求:主要用于語言理解任務,如文本分類、命名實體識別、情感分析、抽取式問答、自然語言推理等。這類任務的核心是對輸入文本進行深度理解并做出判斷或抽取特定信息,通常無需生成新的文本序列
- 結構:移除解碼器簡化了模型結構,通過雙向自注意力機制(用于同時考慮該位置之前和之后的所有 token 信息)減少了參數量和計算量
- 缺陷:
- 不適合生成任務:缺乏自回歸生成機制和單向掩碼自注意力,無法直接用于文本生成(如翻譯、摘要、對話)
- 預訓練任務限制:典型預訓練任務(如MLM)是破壞輸入再重建,而非預測下一個詞,其學習目標與生成任務存在差異
- 任務適應方式:基于編碼器輸出,通過在編碼器頂部添加任務特定的輸出層,并針對下游任務進行微調,實現對不同理解類任務的適配
- 任務執行流程(以文本分類為例)
- 輸入處理:將文本轉換為token序列(如“這部電影很精彩”→[CLS, 這部,電影,很,精彩,SEP]),并添加位置編碼和段編碼(若有多個文本輸入)
- 編碼器層處理:通過多層雙向自注意力和前饋神經網絡,逐層融合全局上下文信息,生成每個token的語義向量
- 特征提取與預測:取特殊token[CLS]的向量作為整個文本的表征,輸入分類層(如全連接層+Softmax),輸出類別概率(如“積極”“消極”情感標簽)
- 純解碼器模型(Decoder-only)
- 代表模型:GPT系列、Llama系列等
- 任務需求:核心優勢在于自回歸文本生成,例如續寫、創意寫作、機器翻譯、摘要生成、對話生成等
- 結構:移除編碼器,僅保留解碼器模塊(保留或等效實現帶掩碼的自注意力),通過前文預測下一個token,天然適配文本生成場景
- 缺陷:
- 單向上下文局限(標準模型):標準帶掩碼的自注意力為單向(僅能關注左側),對當前詞的理解不如雙向編碼器全面。(注意:大語言模型通過極長上下文窗口和模型規模部分彌補了這一局限,理解能力隨訓練逐漸增強。)
- 生成時的計算效率問題:自回歸生成需串行處理(逐詞生成),無法像編碼器那樣并行處理整個輸入序列,解碼速度可能較慢
- 幻覺風險:強大的生成能力可能伴隨生成事實性不準確但邏輯自洽內容的風險
- 任務適應方式:通過提示工程或針對特定生成任務微調模型參數,實現對下游生成任務的適配,無需額外添加復雜結構
- 任務執行流程(以文本生成為例)
- 初始輸入:給定提示詞(如“請寫一首關于春天的詩:”),轉換為token序列,作為生成的初始上下文
- 自回歸生成循環:
- 輸入當前token序列,通過解碼器層計算每個位置的編碼向量(僅關注左側上下文)。
- 對最后一個token的編碼向量輸入Softmax層,預測下一個token的概率分布(如“春”“天”“來”等),選擇概率最高的token(或通過采樣策略)添加到序列末尾
- 重復上述過程,直到生成結束符(如“[END]”)或達到最大長度
總之,生成能力是大語言模型的核心能力。與完整的Encoder-Decoder結構相比,純解碼器結構更為簡單,這不僅降低了設計的復雜性,還提高了效率。
純編碼器沒有成為主流,主要是因為它存在生成能力缺失這一硬傷,同時通用性也有所不足:編碼器模型通常需要針對特定的下游任務進行微調,缺乏純解碼器大語言模型那種僅通過提示就能解決眾多任務的 “通用智能” 感。
不過,純解碼器結構的劣勢也得到了彌補。在模型和數據規模不斷擴大的過程中,純解碼器結構展現出了驚人的性能提升和涌現能力,借助規模優勢,彌補了理論層面的理解劣勢。與此同時,指令微調解鎖了它的通用性,將其強大的生成基礎能力轉化為能夠遵循指令、完成多樣化任務的智能體。
關于這三種結構對比的詳細內容,可參考:LLM的3種架構
2.2 大語言模型基礎結構介紹
自GPT-3之后,OpenAI在其大語言模型的發展方向上轉向了閉源策略,不再發布開源模型,例如GPT-3.5以及后續的GPT-4系列。因此,外界對于ChatGPT和GPT-4所采用的具體模型架構細節(如層數、隱藏層維度、注意力頭數等)以及潛在的優化技術缺乏官方確認的清晰了解。在此背景下,Meta開源的大語言模型LLaMA系列成為了代表性的開源大語言模型。
LLaMA的整體架構依然基于Transformer解碼器結構,但在具體實現細節上進行了多項關鍵改進:
- 前置層歸一化(Pre-Layer Normalization):該策略旨在提高訓練穩定性和收斂速度,緩解梯度問題
- RMSNorm歸一化函數:替代了原始的LayerNorm。RMSNorm僅使用均方根進行縮放,計算更簡單高效,效果接近LayerNorm,同時降低了計算開銷
- SwiGLU激活函數:結合了門控機制和Swish激活函數的優勢,被證明比標準ReLU或GeLU能提供更強的表達能力和性能,尤其在較大模型上
- 旋轉位置編碼(RoPE):用于更有效地編碼序列位置信息。RoPE將位置信息通過旋轉操作融入鍵(Key)和查詢(Query)向量的點積運算中,能更好地建模相對位置關系,且對序列長度具有外推性,優于傳統的絕對或相對位置編碼
盡管在架構層面進行了這些優化,但LLaMA的核心訓練機制(利用大規模文本數據以自回歸方式完成語言建模任務)本質上仍與原始Transformer的訓練流程相同。關于LLM結構改進的詳細信息,可參考LLM架構全景。
4 參考
- 大語言模型基礎知識
- LLM訓練理論和實戰
- 深入淺出地理解神經網絡
- 自然語言處理的深度學習模型綜述
- 輕松理解大模型
- 圖解大模型的推理
- Transform的注意力機制
- transformer-explainer
- LLM的3種架構
- LLM架構全景