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

訓練兩端的兩個問題

早期步驟問題:全新權重無法承受大幅更新

在第 0 步,每個權重都是從接近零的分布中隨機取樣的小數值。激活值維持在接近零的狀態。梯度幾乎不包含任何關於最終解的資訊。若在此時對這些梯度套用峰值學習率,模型將會朝著不具意義結構的方向,遠離初始值大幅跳動。


ANDREA-120M v1 犯了這個錯誤。 沒有暖身。在第 1 步即對全新初始化的權重使用 lr = 0.0003。結果:模型在幾百步內就落入不良的參數盆地。損失數值看似合理,但在第 80K 步時,樣本開始出現重複迴圈,且再也無法恢復。


晚期步驟問題:大步長無法精修解

到了第 100K 步,模型已學會粗略結構。此時梯度攜帶的是細微訊號:哪個 token 的權重需要微調、哪個注意力頭需要輕微重新平衡。在這個階段套用峰值學習率,會讓每一次細微調整都過度跨越,導致在最佳解附近震盪,無法收斂。


兩個問題,分別出現在訓練的兩端。同一排程,兩個區域:緩慢上升,再平穩下降。

線性預熱:前 2000 步

公式

ANDREA-120M v2 在前 2000 步採用線性預熱:


lr(t) = lr_scheduled(t) * min(1, (t + 1) / warmup_steps)


其中 t 為步驟編號(從 0 開始),warmup_steps = 2000,而 lr_scheduled(t) 是忽略 warmup 的餘弦排程所給定的學習率。


閱讀公式:


- 當 t = 0 時:lr = lr_scheduled(0) min(1, 1/2000) = lr_scheduled(0) 0.0005。第一步非常小。

- 在 t = 1000 時:lr = lr_scheduled(1000) min(1, 1001/2000) = lr_scheduled(1000) 0.5。半強度。

- 在 t = 2000 時:lr = lr_scheduled(2000) min(1, 2001/2000) = lr_scheduled(2000) 1.0。全強度。

- 在 t > 2000 時:clamp 將乘數固定為 1,warmup 不再產生影響,cosine decay 單獨接管。


從零開始的線性上升讓模型有 2000 步的時間建立粗略表示,之後 AdamW 與 gradient clipping 才會看到全強度的更新。到第 2000 步時,權重已經偏移足夠,peak lr 不會再將它們推入不良的 basin。

Warmup 期間的學習率計算

ANDREA-120M v2 使用 `lr_scheduled = 0.0003`(peak)與 `warmup_steps = 2000`。在 warmup 期間忽略 cosine decay(假設 `lr_scheduled` 保持平坦)。請計算以下步驟的實際學習率:(a) step 0、(b) step 500、(c) step 2000、(d) step 5000。請顯示你的運算過程。

Warmup 後的餘弦衰減

曲線

Warmup 在第 2000 步結束後,學習率會沿著餘弦曲線從峰值下降至零,持續剩餘步數:


lr(t) = lr_min + (lr_peak - lr_min) 0.5 (1 + cos(pi * progress))


其中 progress = (t - warmup_steps) / (total_steps - warmup_steps)。當 progress = 0(剛結束 warmup)時,cos(0) = 1,lr 為 peak。當 progress = 1(最後一步)時,cos(pi) = -1,lr 為 lr_min(通常為 0 或極小的下限)。


為什麼使用 Cosine,而不是 Linear 或 Exponential?

Cosine decay 起始緩慢(曲線在 peak 附近幾乎平坦),在中段加速下降,最後再次趨緩。三大優點:


1. Peak 附近有 plateau。 Warmup 結束後的早期步驟仍能維持接近完整的 lr,讓模型有較長的高學習率階段來建立表徵。

2. 中段平滑過渡。 不會出現 AdamW 難以吸收的突兀跳躍。

3. 接近零的平台期。 最後幾步會使用極小的 lr 進行微調,類似模擬退火。


ANDREA-120M 總共訓練 200K 步,其中 198K 步屬於 warmup 後的餘弦衰減區間。


LR Warmup & Cosine Decay

ANDREA-12M 在第 25K 步的 Warm Restart

平台期

ANDREA-12M 以餘弦衰減從 lr = 0.0004 峰值訓練 60K 步。在約第 22K 步時,EMA 損失停滯在 ~2.4。此時餘弦衰減已將 lr 降至 ~0.00015。Bandit 持續提供多樣化資料,但模型已停止改善。


診斷:lr 已衰減過低,導致模型無法逃離當前盆地。Hermes 資料即將進入課程(步驟 25K),將帶來 590K 條新對話。模型需要能量來吸收這次資料衝擊。


重啟

在步驟 25K,排程執行了一次暖重啟:將 lr 從已衰減的 0.00015 瞬間提升回原始峰值 0.0004,然後在剩餘步驟中恢復餘弦衰減。


Loshchilov & Hutter (2017) 將此技術命名為「SGDR」(帶暖重啟的隨機梯度下降)。其直觀原理是:較高的 lr 能提供足夠動能,讓模型逃離局部盆地並探索鄰近區域;隨後的餘弦衰減則重新退火至更好的盆地。


Outcome. Loss EMA dropped from 2.40 to 2.10 over the next 10K steps after the restart. Model shipped at step 43.6K with SMMA loss 2.0, demonstrating coherent Q&A turn structure.


ANDREA-120M v2 chose NOT to use warm restarts: with 200K steps available & a much larger parameter count, smooth monotonic decay produced steadier convergence. Restart works best when training is short & a plateau coincides with a known data shift.

診斷 v1 的失敗

ANDREA-120M v1 從步驟 1 開始就使用 `lr = 0.0003`,沒有 warmup。到步驟 80K 時,樣本產生 `region region region region`。請以機制角度說明:逐步說明在 `lr = 0.0003` 與 2000-step warmup 兩種情況下,剛初始化的權重矩陣在步驟 1 到 100 會發生什麼事。為什麼沒有 warmup 的路徑會落入不良的 basin?

Schedule Choices in Practice

If you were training a 120M model on a noisy dataset for ONLY 50K steps total, would you use a longer or shorter warmup than ANDREA-120M v2's 2000 steps? Justify with one mechanistic argument.

Adjacent Activities

Three siblings link to LR schedule:


- Activity 10: AdamW. 暖身期讓 AdamW 的偏差校正有時間穩定。沒有暖身期時,第 1 步的 10 倍放大會乘以梯度所帶的任何雜訊;有了暖身期,放大倍數才會作用在真實訊號上。

- Activity 12: Gradient clipping. 梯度裁剪在 AdamW 之前將梯度 L2 範數限制在 1.0。暖身期抑制 lr;裁剪抑制 g。兩者共同讓早期步驟即使在容易產生衝擊的課程中也能保持安全。

- Activity 22: Checkpointing. 暖重啟需要從檢查點載入優化器狀態(m、v、步數計數器),然後在執行中修改排程。ANDREA-12M 在第 25K 步的重啟展示了這一點;載入狀態的邏輯經過兩次嘗試才成功。


排程、優化器與裁剪構成穩定三角形。移除任一頂點,就會看到 ANDREA 重現 v1 的崩潰。