English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

guest
1 / ?
back to lessons

模型應該有多驚訝?

損失管道:Logits 到交叉熵


從 Logits 到機率

經過 12 個 transformer 區塊後,ANDREA-120M 為每個 token 位置產生一個 vocab_size 個數字的向量:logits。對於 ANDREA-120M,vocab_size = 8449,因此每個位置輸出 8449 個 logits。Logits 是未標準化的分數;有些為正,有些為負,沒有約束和為 1。


Softmax 將 logits 轉換為機率分佈:


p_i = exp(logit_i) / sum_j exp(logit_j)

經過 softmax 後,所有 8449 個數字位於 0 到 1 之間,總和為 1。模型為每個可能的下一個 token 分配機率。


交叉熵損失

訓練需要一個損失函數:一個數字,用來衡量模型對給定正確答案的預測錯誤程度。交叉熵適用於語言建模:


loss_t = -log(p_correct_token_t)

取模型對實際下一個 token(訓練資料中的那個)的預測機率。取該機率的負對數。那就是單一位置的損失。


為什麼用負對數

三個特性使 -log(p) 成為自然的損失函數:


- -log(1) = 0: 當模型以 100% 信心預測正確 token 時,損失為零。

- -log(0) = ∞: 當模型對正確 token 賦予零機率時,損失為無限大。(實際上,softmax 永遠不會輸出正好 0;損失保持有限但很大。)

- 單調遞減:隨著正確 token 的預測機率增加,損失平滑減少。


對正確答案更高的信心 = 更低的損失。訓練目標很簡單:最大化實際下一個 token 的預測機率。


每個序列的損失

ANDREA 在長度為 1024 的序列上訓練(上下文窗口)。每個序列產生 1024 個下一個 token 預測。序列損失是所有位置的平均值:


sequence_loss = mean(-log(p_correct_t)) for t in 0..1023

然後序列損失會在批次中取平均(ANDREA-120M 使用 batch_size = 8)。每個訓練步驟一個標量數字。該數字就是損失曲線所繪製的內容。

計算單一位置的損失

在一個訓練位置,ANDREA-120M 產生實際下一個 token 的 softmax 機率為 0.4(其他 token 獲得剩餘的 0.6)。計算此單一位置的交叉熵損失。顯示公式與計算過程。然後用一句話說明這是否代表自信或不確定的預測。

Perplexity = exp(loss)

更友善的尺度

像 2.0 或 3.43 這樣的損失值並不能立即傳達模型的能力。Perplexity 將損失轉換到更直觀的尺度上:


perplexity = exp(loss)

Perplexity 回答一個清晰的問題:在多少個同等可能的 token 中,模型有效地選擇?Perplexity 為 7 表示模型的行為就像在每個位置從 7 個合理的下一個 token 中挑選。Perplexity 為 1 表示完美預測。


常見的 Loss-Perplexity 配對


LossPerplexity感覺如何
0.01.0完美預測
1.02.7在約 3 個合理 token 中選擇
2.07.4ANDREA-12M 最終 SMMA 領域
3.020.1合理文本但不確定
3.4330.9ANDREA-120M v1 最低值(拋光前)
5.0148早期訓練,學習詞彙分佈
9.048449ANDREA-120M 詞彙的隨機機會基準

困惑度將損失值置於脈絡中:損失值 2.0 表示模型實際上從約 7 個 token 中選擇,而不是從 8449 個。


隨機猜測基準

一個一無所知的模型,統一猜測每個 token 的機率為 1/V,其中 V = vocab_size:


p_uniform = 1 / V
loss      = -log(1/V) = log(V)

對於 ANDREA-120M,V = 8449:


loss_uniform = ln(8449) ≈ 9.04

對於 ANDREA-12M,V = 2305:


loss_uniform = ln(2305) ≈ 7.74

任何高於此基準的損失值表示模型表現比隨機還差。任何低於它的損失值表示模型已經學到了一些東西:它將機率質量集中在比均勻分佈更小的子集 token 上。

閱讀損失值

ANDREA-120M v1 在步驟 110K 時達到其 EMA 損失最小值 3.43(崩潰之前)。計算:(a) 損失 3.43 時的困惑度;(b) 相對於隨機基準(ln(8449) ≈ 9.04)的改善倍數,以困惑度比率表示。請顯示你的算術。

平滑步驟級別噪聲

原始損失充滿噪聲

每步損失上下波動。ANDREA 的 bandit 每 7-42 步選擇不同的來源;有些來源(字典定義)產生容易的損失;其他來源(gutenberg 段落)產生較難的損失。將原始步驟損失對步驟編號繪圖,會產生混亂的散點圖。


平滑修改移動平均 (SMMA) 抑制噪音並揭示趨勢。ANDREA 的訓練代理計算 SMMA 如下:


SMMA[0]  = loss[0]
SMMA[t]  = (SMMA[t-1] * (N-1) + loss[t]) / N

使用 N = 100(ANDREA 的預設平滑窗口),每個新的 SMMA 值會將前一個 SMMA 的 99% 與新步驟損失的 1% 混合。突發尖峰會被吸收;持續變化會逐漸顯現。


為什麼不直接使用平均值?

簡單移動平均需要儲存最近 100 步的 100 個損失值。SMMA 只儲存一個值(運行平均)&一個常數(窗口大小)。記憶體節省、計算簡單,且平滑足夠以讀取曲線。


不同的平滑權重回答不同的問題:


- N = 10:追蹤短期變化;在階段轉換期間有用

- N = 100:ANDREA 的預設值;追蹤中期進展

- N = 1000:僅長期趨勢;訓練結束時有用


ANDREA 追蹤的內容

每 100 步,訓練代理會寫入 loss.json,包含目前的 SMMA、原始損失、步數及按來源細分。位於 training.ai.unturf.com/dashboard 的儀表板每 10 秒輪詢此檔案。外部觀眾可看到即時進度;儀表板為唯讀。

ANDREA-12M 的實際曲線

達到 SMMA 2.0 的配方


步數平均損失備註
0--2.5K4.50隨機初始化,早期學習
2.5K--5K3.88快速下降,穿越結構階段
5K--10K3.30接近一致性邊界
10K--20K2.80Bandit 找到最佳組合
20K--25K2.40平台期 --- 資料匱乏
25K--30K2.50引入 Hermes 資料 + 學習率重啟
30K--35K2.35Hermes 整合,新低點
35K--40K2.104臂焦點,急劇下降
40K--43.6K2.00知識領域,SMMA 低於 2.0

三個階段特別突出:


1. 早期急劇下降 (0-10K)。 損失從 4.50 降至 3.30,模型學習詞彙分佈與基本輪次結構。隨機機會基準 ln(2305) ≈ 7.74 遠高於此曲線;一旦嵌入穩定,模型迅速集中概率質量。


2. 高原期 (20K-25K)。 損失停滯在 2.40。盜賊在當前來源組合上已無餘地。第 25K 步驟加入 Hermes 資料,加上 LR 溫重啟,打破了高原期。


3. 最終下降(35K-43.6K)。 課程從 16 個來源縮減至 4 個(hermes3-general + dictionary + gutenberg + chat)。損失下降比全臂匪徒更陡。最終 SMMA:2.0。


ANDREA-120M v1:一個警示曲線

相同的詞彙計算:ln(8449) ≈ 9.04。ANDREA-120M v1 在第 110K 步達到 SMMA 3.43(其最小值),然後發散:


步數EMA 損失趨勢
26K--40K4.29收斂中
70K--85K3.60最佳區域
85K--110K3.43最小值
110K--125K3.54發散中
140K--155K4.05發散中
155K--165K4.54崩潰

全程數值合理的損失值(3.43 遠低於 9.04 的隨機基準)。但樣本為重複崩潰:Budy Budy Budy Budy。損失值講了一個誤導的故事;樣本審核並非如此。


v2 的相干性閘控早停(活動 78)加入了一個平行信號:二元組多樣性、三元組多樣性、英文單詞存在、字符多樣性。當這四個分數連續 5 個樣本均低於 30 時,訓練自動停止。此信號本可在 v1 的第 132K 步捕捉到,節省 3.8 天的計算資源。

每個階段告訴你什麼

觀察 ANDREA-12M 的損失曲線(4.50 → 3.30 → 2.40 平穩 → 2.00 最終),說明哪個階段顯示模型學習詞彙分佈、哪個階段表示 bandit 已耗盡混合來源的餘裕、以及哪個階段反映窄化課程焦點。每階段一句話,參考具體步數範圍。

120M v1 課程

兩個獨立的信號

ANDREA-120M v1 在第 110K 步達到 SMMA 3.43。數值上:比隨機機率好 273 倍(困惑度 31 對詞彙大小 8449)。曲線上看起來很棒。


第 110K 步的範例::


''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '

損失與連貫性是獨立的信號。低損失意味著模型有效地集中機率質量。連貫性意味著模型產生人類可讀的文字。第一者並不意味著第二者。


為何存在差距

模型可以透過以下方式降低損失:


1. 學習真實語言模式(好):主詞動詞一致性、常見片語、事實關聯。

2. 記憶結構性偽影 (壞):高頻重複模式、資料集特定怪癖、退化吸引子。


兩者皆降低損失。第一種產生人類喜歡的樣本。第二種產生 Budy Budy Budy Budy。單獨的訓練目標無法區分它們。


ANDREA-120M v3 拋光:損失與連貫性相遇之處

在 v3 拋光之後(第 112K 步起),ANDREA-120M 產生:


第 112,584 步,損失 0.30,ppl 1::


> [extinction prompt]
< 黑蜘蛛蒙塔諾還活著,卡羅萊納虎皮鸚鵡已滅絕。

兩個事實皆正確。卡羅萊納虎皮鸚鵡於1939年被宣告滅絕;黑蜘蛛猴仍存活。低損失(0.30)且連貫的事實回憶。


第 112,500 步,損失 1.94,ppl 7::


> 如何在 Python 專案中找到過時的套件?
< 使用 pip list --outdated names 來查看 pip 套件清單...

更高的損失 (1.94 → ppl 7),但正確的工具從訓練資料中浮現。在訓練進度 56% 時,措辭流暢度仍在發展中。


雙訊號紀律

現代訓練流程會監控兩者


- 損失曲線。 告訴你模型是否在學習任何量化內容。

- 樣本審核。 告訴你模型學到的東西是否有用。


v2 新增了相干性閘控早停(活動 78)。v3 的精煉是樣本審核觸發的課程擾動,而不是損失值。損失單獨是必要的,但永遠不足以。

診斷假設訓練執行

一個新的訓練執行顯示 SMMA 損失從 8.0 → 3.5 → 2.8 下降,歷經 100K 步驟。第 100K 步驟的樣本審核顯示:bigram 多樣性 12(低)、trigram 多樣性 8(低)、英文單詞存在 18(高)、字符多樣性 7(高)。模型很可能在做什麼?訓練應該繼續、停止,還是轉向?用 3-4 句話證明你的答案。