模型怎麼從預測錯誤中學習?
第一章看到:模型 (Model) 讀到「各」時,會算出下一個 token 的候選機率。它可能給「位」一個機率 (Probability),但這個數字不是天生就知道的。訓練 (Training) 時,如果它估得不準,程式怎麼知道要改哪裡、改多少?
假設模型只看前文「各」,暫時只可能接「位」或「自」。它目前把兩者都估成 50%。我們拿四則原文讓它練習:
| 原文 | 則數 | 在「各」後面接什麼 |
|---|---|---|
| 各位 | 3 | 位 |
| 各自 | 1 | 自 |
為了看清楚一次更新,本章實驗把每個中文字暫當成一個 token,並只用一個參數 (Parameter) 影響這兩個候選的機率。真實模型的 token 切分、候選數量與參數都複雜得多;這張表不是任何模型的訓練資料。
先猜:模型看到三則「各位」、一則「各自」後,下一步會讓「位」的機率上升、下降,還是不變? 它會直接跳到 100% 嗎?
先用預設的三則「各位」、一則「各自」,按「執行一步訓練」,比較兩個候選的更新前後機率。再用加號把「各自」增加到四則,重新預測方向。這是本地簡化模型,不會訓練真實語言模型。
預設資料下,「位」原本是 50%,做完一步約變成 56.2%;「自」則從 50% 降到約 43.8%。方向符合剛才的資料,但沒有立刻變成 75%,更沒有變成 100%。一次訓練只走一步;按第二次,會從新的機率再走一步。
誰告訴模型「估得不夠好」?
訓練程式拿模型給原文下一個 token 的機率來評分。對「各位」來說,給「位」的機率越低,評分就越差;對「各自」來說,則要看「自」。把這些評分合在一起,得到損失值 (Loss):它表示這批練習資料上的預測有多不理想。這裡看的不是「模型剛好選中了哪個字」,而是它給原文那個字多少機率。
接著程式計算:如果把內部參數稍微往某個方向改,損失值會怎麼變? 這個方向與變化趨勢叫做梯度 (Gradient)。再依學習率 (Learning Rate) 決定一步走多遠,更新參數。更新的是內部數值;程式再用新數值計算機率,並非直接把「位」欄改寫成指定百分比。
原文中的下一個字 → 比較模型給它的機率 → 算損失與調整方向 → 更新參數 → 重新算機率
在這個單一參數的簡化模型裡,初始「位」的 50% 低於練習資料中的 3/4,所以這一步會提高「位」的機率。練習中的「展開計算過程」可顯示具體數字;先抓住「資料決定評分,評分引導參數更新」即可。
反過來試,才能看出原因
把「各自」改成四則,現在資料是三則「各位」、四則「各自」。練習會重設回兩者各 50%,避免把上一組資料訓練過的參數混進來。這時「位」在資料裡不到一半,一次更新便朝降低它的方向走。同樣是看到「各」,更新方向會隨練習資料改變。
真實語言模型不只看「各」這一個字,不只在「位/自」二選一,也不是逐一查字頻表。它用大量參數從不同前文學習;訓練一批資料後改善那批資料的損失,不保證每個新句子都答對。聊天時使用已訓練參數生成回答,叫做推論 (Inference);一般對話中補一句話會改變這次的輸入,並不等於現場執行了上面的參數更新。
參考:Hugging Face 的下一個 token 訓練說明、PyTorch 的損失與參數更新教學(2026-09-24 查核)。本文的 50% 與 56.2% 來自本章的單參數教學模型,並非真實語言模型輸出;不同模型與訓練方法不必採用本章的數字或一步幅度。