關於此實驗
訓練神經網路意味著沿著損失曲面向下移動。梯度下降法沿著梯度的反方向邁出一步,步長由學習率縮放。這個簡單的規則背後隱藏著許多行為:步伐太小會進展緩慢,太大則會振盪甚至發散;狹窄的谷底會讓它走出之字形,也可能使它陷入局部最小值。選擇一個曲面並點擊起點,接著在地圖和損失曲線上逐步比較一般梯度下降法、動量法和 Adam。
學習目標
- 寫出梯度下降的更新公式,並說明學習率的作用
- 推導二次損失的穩定性界限 η < 2/λ_max,並進行測試
- 說明為什麼病態谷底會使梯度下降走出之字形,以及動量如何提供幫助
- 描述 Adam 如何利用梯度的移動平均重新縮放各個座標
- 辨認出收斂到的是局部最小值,而非全域最小值
使用方法
- 1在梯度下降法中選擇「圓形碗」。嘗試將學習率設為 0.1、1 和 2.1,並描述這三條路徑。
- 2選擇「狹窄山谷」。找出仍能收斂的最大學習率,並將它與滑桿下方顯示的穩定極限進行比較。
- 3在「狹窄山谷」中將 η 設為 0.05。數一數梯度下降法達到損失 1e-6 所需的步數,然後切換到 Momentum,將 β 設為 0.9,再數一次。
- 4選擇「香蕉山谷」(Rosenbrock 函數)。比較執行 300 步後梯度下降法、Momentum 和 Adam 的表現。
- 5選擇「兩個極小值」。從預設起點執行梯度下降法會停在右側較淺的谷底。在山脊兩側點選設定起點:哪些起點能到達較深的谷底?
- 6返回預設起點,切換到 Momentum,並將 β 設為 0.9、η 設為 0.1。為什麼現在路徑能越過山脊?
模型
假設
- 梯度是精確的。在實際訓練中,梯度由小批次資料估算,因此會引入雜訊(隨機梯度下降)。
- 損失曲面是固定的二變數函數:圓形碗面 ½(x² + y²)、狹窄山谷 ½(0.5x² + 5y²)、Rosenbrock 函數 (1 − x)² + 10(y − x²)²,以及傾斜的雙井函數。
- 每次執行都使用固定學習率,並在 300 步後停止。沒有學習率排程。
- 執行是決定性的:相同的起點和設定總會得到相同的路徑。
在課堂上試試這個實驗
- Q1在狹窄山谷中,穩定性極限由陡峭方向決定,但進展受平緩方向限制。請用因子 1 − ηλ 加以說明。
- Q2為什麼動量法每一步使用相同的梯度,卻仍能更快收斂?
- Q3Adam 的步長大致為 η,不受曲面陡峭程度影響。這在什麼情況下是優勢,又在什麼情況下會成為問題?
- Q4神經網路的損失函數有數百萬個維度。你認為局部極小值和鞍點,哪一個會成為更大的障礙?為什麼?
- Q5請提出一種學習率排程方案,讓模型既能在早期快速取得進展,又能精確收斂。
常見問題
為什麼學習率過大會導致損失增加?
每一步都會越過谷底,落到對面更高的斜坡上。對於二次函數,每次越過都會使距離乘以 |1 − ηλ|;當 η 大於 2/λ 時,這個乘數就大於 1。
在狹窄的谷底,動量有什麼作用?
橫越谷底的鋸齒狀梯度方向彼此相反,會在累積速度中相互抵銷;而沿著谷底方向的較小梯度都指向同一方向,因此會相加。如此一來,運動軌跡會變得平直,並沿著谷底加速前進。
Adam 總是比梯度下降更好嗎?
不。Adam 穩健且幾乎不需要調參,因此常用於訓練網路;但對於簡單且條件良好的問題,一般梯度下降或動量法可能收斂得更快,或得到更好的解。
