第04堂課:類神經網路訓練不起來怎麼辦 (一): 局部最小值 (local minima) 與鞍點 (saddle point)

本堂課程深入探討機器學習中的最佳化 (Optimization) 問題,特別是如何在訓練過程中,當模型訓練停滯時,更好地理解並改進梯度下降 (Gradient Descent) 演算法。

最佳化 (Optimization) 簡介

最佳化失敗的現象

在機器學習模型的訓練過程中,常常會遇到最佳化失敗的情況:

  1. 訓練損失 (Training Loss) 停止下降,但結果不滿意:模型參數不斷更新,但訓練損失不再減少,且對當前損失仍不滿意。例如,深度網路未能優於淺層或線性模型。
  2. 模型訓練初期即停滯:在訓練一開始,無論如何更新參數,損失函數都無法下降。

這些現象都指向最佳化過程出現問題。

梯度為零:關鍵點 (Critical Point)

過去,人們常猜測最佳化失敗是因為模型參數走到了梯度為零的地方。當參數對損失函數的微分為零時,梯度下降將無法再更新參數,訓練便會停滯,損失自然也就不會再下降。

當梯度為零時,這些點統稱為關鍵點 (Critical Point)

關鍵點的種類:Local Minima vs. Saddle Point

Local Minima (區域最小值)

最常被提及的梯度為零的點是區域最小值 (Local Minima)。許多人會認為深度學習卡在區域最小值導致訓練不順利。然而,這是一個籠統的說法,因為梯度為零的點不只有區域最小值。

Saddle Point (鞍點)

除了區域最小值,另一種常見的關鍵點是鞍點 (Saddle Point)。鞍點的梯度也為零,但它既非區域最小值,也非區域最大值。

  • 在某些方向上,鞍點的損失值較高 (類似馬鞍的兩側)。
  • 在另一些方向上,鞍點的損失值較低 (類似馬鞍的前後)。
  • 其形狀如同馬鞍,故得名。

辨別關鍵點的重要性

判斷當前所處的關鍵點是區域最小值還是鞍點非常重要:

  • 區域最小值 (Local Minima):若卡在區域最小值,表示四周的損失都比當前高,可能真的「無路可走」,難以找到更低的損失。
  • 鞍點 (Saddle Point):若卡在鞍點,雖然梯度為零,但周圍仍然存在可以讓損失更低的路徑。只要能逃離鞍點,就有機會進一步降低損失。

因此,鑑別關鍵點的類型是值得探討的問題。

如何辨別關鍵點類型:泰勒展開與海森矩陣 (Taylor Series & Hessian Matrix)

要判斷一個關鍵點是區域最小值還是鞍點,需要利用一點數學工具:泰勒展開式 (Taylor Series Approximation)海森矩陣 (Hessian Matrix)

泰勒展開式 (Taylor Series Approximation)

對於一個複雜的損失函數 ,雖然無法得知其全貌,但可以在特定參數 附近,使用泰勒展開式來近似其形狀:

  • :當 接近 時, 約等於
  • 梯度 (Gradient)。一個向量,表示 一次微分。其第 個分量是 的微分。梯度用來彌補 之間的差距。
  • 海森矩陣 (Hessian Matrix)。一個方陣,由 二次微分組成。其第 個元素是 微分一次,再對 微分一次的結果。海森矩陣進一步修正近似值與實際 之間的差距。

關鍵點的特性

當我們處於一個關鍵點時,其最重要的特性是梯度 為零 (即 是一個零向量)。此時,泰勒展開式簡化為:

我們可以根據式子中的第二項 來判斷 附近的損失函數地貌,進而判斷 是區域最小值、區域最大值還是鞍點。

透過海森矩陣判斷關鍵點類型

為了方便討論,我們令 。於是第二項變為

  1. 區域最小值 (Local Minima)

    • 若對於任何可能的向量 大於零 ()。
    • 這意味著 是附近的最低點。
    • 此時,矩陣 被稱為正定矩陣 (Positive Definite Matrix)
    • 正定矩陣的所有特徵值 (Eigenvalue) 都為
  2. 區域最大值 (Local Maxima)

    • 若對於任何可能的向量 小於零 ()。
    • 這意味著 是附近的最高點。
    • 此時,矩陣 被稱為負定矩陣 (Negative Definite Matrix)
    • 負定矩陣的所有特徵值都為
  3. 鞍點 (Saddle Point)

    • 有時大於零,有時小於零 (取決於 的方向)。
    • 這意味著在 附近,有些方向 ,有些方向
    • 此時,矩陣 的特徵值會有正有負

結論: 只需要計算海森矩陣 的特徵值:

  • 所有特徵值為正 -> 區域最小值。
  • 所有特徵值為負 -> 區域最大值。
  • 特徵值有正有負 -> 鞍點。

範例:最簡陋的網路模型

3D Saddle Point Error Surface

為了具體理解如何應用海森矩陣,我們考慮一個極簡陋的類神經網路模型。

模型與損失函數

  • 模型 (沒有激活函數,沒有偏置項,只有兩個參數 , )
  • 訓練資料:只有一筆資料
  • 損失函數 (平方誤差):

透過窮舉所有 , 的組合,可以繪製出其誤差曲面 (Error Surface)

  • 處是鞍點。
  • 的線上有兩條山谷,這些山谷中的點都是區域最小值。

梯度計算與關鍵點

損失函數 的梯度為:

代入,並設定梯度為零來尋找關鍵點。例如,當 時,梯度為零,這表示 是一個關鍵點。

海森矩陣分析與判斷

現在我們計算 點的海森矩陣來判斷其類型。 海森矩陣 包含二次微分:

經過計算,在 處,海森矩陣為:

計算此矩陣的特徵值: 因此,特徵值為

由於特徵值有正有負,根據前述判斷準則, 是一個不定矩陣,這表示 是一個鞍點。這與誤差曲面圖所觀察到的結果一致。

逃離鞍點:利用海森矩陣的特徵向量 (Eigenvector)

如果發現模型卡在鞍點,實務上還有辦法逃脫,並且海森矩陣也能提供參數更新的方向。

原理:負特徵值指向下降方向

回顧泰勒展開式: (其中 )。 若 的一個特徵向量,對應特徵值 ,那麼 代入 會得到:

  • 由於 恆為正, 的正負完全由特徵值 決定。
  • 若存在負特徵值 ,則 將會是負值。
  • 這意味著,如果我們將參數從 沿著對應負特徵值 的特徵向量 方向移動 (),那麼 將會小於 ,即損失會下降。

實際案例演示

在上面的範例中, 處的 Hessian 矩陣 有一個負特徵值 。其對應的一個特徵向量可以是

這表示,如果我們從鞍點 沿著 這個方向更新參數,就能讓損失下降。這正是鞍點旁邊可以找到更低損失路徑的證明。

實務考量:計算成本

雖然利用海森矩陣的特徵向量可以逃離鞍點,但在實際應用中,幾乎不會真的去計算海森矩陣。原因在於:

  1. 二次微分的運算量極大:計算海森矩陣的元素 (\frac{\partial^2 L}{\partial \theta_i \partial \theta_j}) 需要大量的計算。
  2. 特徵值與特徵向量的計算複雜:對於高維度矩陣,計算其特徵值和特徵向量也是一個計算成本極高的任務。

因此,實務上通常會使用其他計算量較小的方法來處理鞍點問題 (例如:加入噪音、動量等,這些方法在本課程後續可能會提及)。

鞍點 vs 區域最小值:誰更常見?

既然鞍點似乎不那麼可怕,那麼在深度學習的訓練中,鞍點 and 區域最小值哪一個更為常見呢?

故事啟示:高維空間的可能性

一個有趣的類比來自《三體》中的「狄奧倫娜」(Diolena) 故事:

  • 在三維空間中看似封閉無路可走的石棺,在高維空間中卻存在路徑。
  • 這啟示我們,在一維或二維空間中看起來是區域最小值、無路可走的情況,在高維空間中可能只是鞍點,存在下降的路徑。

深度學習的維度與地形

深度學習模型通常擁有數百萬甚至數千萬的參數,這意味著其誤差曲面 (Error Surface) 存在於一個非常高維的空間中。

  • 參數的數量即是誤差曲面的維度。
  • 在高維空間中,可以移動的方向更多。

那麼,是否在高維空間中,區域最小值反而較少,而鞍點更為普遍呢?

實驗證據:鞍點更為普遍

經驗性的實驗結果支持這個假說。研究顯示:

  • 在訓練好的深度學習模型中,即使梯度很小,將其海森矩陣的特徵值進行分析,也極少會出現所有特徵值都為正的情況 (即真正的區域最小值)。
  • 在許多案例中,只有約一半的特徵值為正,另一半為負,這明確指向了鞍點
  • 這表示即使模型訓練到梯度很小,多數情況下,它只是卡在了一個鞍點,周圍仍然存在可以讓損失下降的路徑。

結論: 在深度學習的訓練中,我們遇到更多的是鞍點,而非真正的區域最小值。鞍點並不可怕,因為理論上總能找到逃脫的路徑。

潛在的解決方案 (待續)

本堂課解釋了最佳化失敗的原因、關鍵點的類型以及如何判斷,並指出了鞍點的不可怕性。至於如何實際解決這些問題,以及更有效的最佳化策略,將會在後續課程中講解。


隨堂測驗

測驗一:在梯度下降中,當參數更新停止且訓練損失不再下降時,最直接的原因是什麼?

解答:最直接的原因是模型參數到達了關鍵點 (Critical Point),此時損失函數對參數的梯度 (Gradient) 為零

測驗二:如何利用海森矩陣 (Hessian Matrix) 來區分一個關鍵點是區域最小值 (Local Minima) 還是鞍點 (Saddle Point)?

解答:我們可以計算海森矩陣的所有特徵值 (Eigenvalue) 來進行判斷:

  • 如果所有特徵值都為正,則該關鍵點是區域最小值 (Local Minima)
  • 如果特徵值有正有負,則該關鍵點是鞍點 (Saddle Point)
  • 如果所有特徵值都為負,則是區域最大值 (Local Maxima)。

測驗三:在實務上,為什麼深度學習模型在高維度空間中,被認為更容易遇到鞍點 (Saddle Point) 而非真正的區域最小值 (Local Minima)?

解答:主要有兩個原因:

  1. 高維度的特性:在高維度空間中,一個點要同時在所有方向上都比周圍低(成為區域最小值)的機率較低。相反,它更有可能在某些方向上是下降的,而在另一些方向上是上升的,這正是鞍點的定義。
  2. 實驗證據:許多研究和經驗性觀察表明,當深度學習模型訓練到梯度很小時,其海森矩陣的特徵值往往有正有負,而非全部為正,這支持了鞍點更為普遍的結論。
這意味著即使訓練停滯,通常也還存在沿著負特徵向量方向逃離鞍點、進一步降低損失的潛力。


graph TD
    A["最佳化問題 Optimization"] --> B{Node1["訓練損失停滯 Training Loss Plateaus"]}
    B --> C{Node2["梯度為零 Gradient = 0"]}
    C --> D["關鍵點 Critical Point"]

    D --> D1["區域最小值 Local Minima"]
    D --> D2["鞍點 Saddle Point"]
    D --> D3["區域最大值 Local Maxima"]

    C -- Node3["依賴"] --> E["泰勒展開式 Taylor Series"]
    E -- Node4["包含"] --> F["梯度 g (一次微分) Gradient"]
    E -- Node4["包含"] --> G["海森矩陣 H (二次微分) Hessian Matrix"]

    G -- Node5["判斷依據"] --> H1["正定矩陣 Positive Definite"]
    H1 -- Node6["特性"] --> H1A["所有特徵值 大於 0 All Eigenvalues 大於 0"]
    H1A --> D1

    G -- Node5["判斷依據"] --> H2["負定矩陣 Negative Definite"]
    H2 -- Node6["特性"] --> H2A["所有特徵值 小於 0 All Eigenvalues 小於 0"]
    H2A --> D3

    G -- Node5["判斷依據"] --> H3["不定矩陣 Indefinite Matrix"]
    H3 -- Node6["特性"] --> H3A["特徵值有正有負 Mixed Eigenvalues"]
    H3A --> D2

    D2 -- Node7["逃脫策略"] --> I["利用海森矩陣特徵向量 Escape using Eigenvectors"]
    I -- Node8["尋找"] --> I1["負特徵值 Negative Eigenvalue"]
    I -- Node8["尋找"] --> I2["對應特徵向量 Corresponding Eigenvector"]
    I2 --> J["沿特徵向量方向更新參數 Update along Eigenvector direction"]

    K["高維度空間 High Dimensional Space"] --> L["更多鞍點 More Saddle Points"]
    L --> M["更少區域最小值 Fewer Local Minima"]
    L -- Node9["啟示"] --> N["鞍點沒有那麼可怕 Saddle Points less 'Scary'"]
    J --> N