語言模型最主要的預訓練目標是下一個 token 預測:給定一串 token 序列,預測接下來是什麼。模型處理訓練語料中數兆個 token,對於每個 token,它計算整個詞彙表上的機率分佈,並因對實際的下一個 token 給予低機率而受到懲罰(透過交叉熵損失)。這個看似簡單的目標實際上極其強大 —— 要在多樣的上下文中準確預測下一個詞,模型必須隱性地學會語法、事實、推理模式、編程慣例等等。損失從高處開始(基本上是在 32,000 到 128,000 個 token 的詞彙表上隨機猜測),然後隨著模型內化語言的統計結構而逐漸下降。對於基於 Transformer 的模型,這是標準流程。像 Mamba 和 RWKV 這樣的替代架構使用相同的目標,但以循環狀態更新取代注意力機制,在長序列上實現了相當的品質和更好的計算擴展性。
現代預訓練的規模驚人,大約每 6-9 個月翻一倍。GPT-3(2020)在 3000 億 token 上訓練。LLaMA 2(2023)使用了 2 兆。LLaMA 3(2024)使用了超過 15 兆。計算量以浮點運算次數衡量,一次前沿預訓練可能需要 10^25 FLOP —— 這個數字意味著數千顆 GPU 運行數月,僅電力和硬體成本就達數千萬美元。訓練透過資料並行(每顆 GPU 處理不同的資料批次)、張量並行(每層的計算分配到多顆 GPU)和管線並行(不同層放在不同 GPU 上)等技術分布在 GPU 上。Megatron-LM、DeepSpeed 和 FSDP(PyTorch 的完全分片資料並行)等框架處理數千顆 GPU 保持同步的複雜度,但故障很常見 —— 硬體錯誤、網路問題和數值不穩定性意味著大型訓練需要穩健的檢查點機制和自動恢復。
預訓練並非千篇一律,訓練配方的細節與資料和算力同樣重要。學習率排程通常是一個熱身階段(在前幾千步中線性增加學習率),然後以餘弦衰減至接近零。批量大小通常在訓練過程中增加 —— 開始時較小以獲得更頻繁但更帶雜訊的梯度更新,後期較大以獲得更穩定的訓練。序列長度(模型一次看到多少 token)對模型學到什麼有重大影響:較長的序列讓它捕捉更長距離的依賴關係,但對基於注意力的模型來說記憶體成本呈二次方增長。許多團隊現在使用漸進式序列長度訓練,從較短的上下文開始,後期再增加到完整的上下文視窗。優化器幾乎普遍使用 AdamW,不過 SOAP 和 Muon 等較新方法因其可能更好的收斂特性而日漸受到關注。
預訓練已不再是單一的整體階段。現代訓練管線通常包含多個階段,使用不同的資料混合配方。主預訓練階段使用廣泛的語料,然後「中期訓練」或「持續預訓練」階段使用品質更高或更具領域針對性的資料混合,有時搭配更長的上下文長度。這就是模型學會有效處理長文件的方式 —— 從一開始就在 128K token 序列上訓練成本過於高昂,但在最後階段進行短期的長上下文資料微調效果出奇地好。預訓練之後是在指令資料上的監督式微調(SFT),然後是透過 RLHF 或 DPO 的對齊。每個階段都建立在前一階段之上,而它們之間的界限越來越模糊。過去清晰的三步管線(預訓練、SFT、RLHF)如今已是一個多階段課程,每個階段都有不同的資料混合、學習率和目標。