第04堂課:類神經網路訓練不起來怎麼辦 (一): 局部最小值 (local minima) 與鞍點 (saddle point)
本堂課程深入探討機器學習中的最佳化 (Optimization) 問題,特別是如何在訓練過程中,當模型訓練停滯時,更好地理解並改進梯度下降 (Gradient Descent) 演算法。
最佳化 (Optimization) 簡介
最佳化失敗的現象
在機器學習模型的訓練過程中,常常會遇到最佳化失敗的情況:
- 訓練損失 (Training Loss) 停止下降,但結果不滿意:模型參數不斷更新,但訓練損失不再減少,且對當前損失仍不滿意。例如,深度網路未能優於淺層或線性模型。
- 模型訓練初期即停滯:在訓練一開始,無論如何更新參數,損失函數都無法下降。
這些現象都指向最佳化過程出現問題。
梯度為零:關鍵點 (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)。一個方陣,由 的二次微分組成。其第 個元素是 對 微分一次,再對 微分一次的結果。海森矩陣進一步修正近似值與實際 之間的差距。
關鍵點的特性
當我們處於一個關鍵點時,其最重要的特性是梯度 為零 (即 是一個零向量)。此時,泰勒展開式簡化為:
我們可以根據式子中的第二項 來判斷 附近的損失函數地貌,進而判斷 是區域最小值、區域最大值還是鞍點。
透過海森矩陣判斷關鍵點類型
為了方便討論,我們令 。於是第二項變為 。
-
區域最小值 (Local Minima):
- 若對於任何可能的向量 , 都大於零 ()。
- 這意味著 , 是附近的最低點。
- 此時,矩陣 被稱為正定矩陣 (Positive Definite Matrix)。
- 正定矩陣的所有特徵值 (Eigenvalue) 都為正。
-
區域最大值 (Local Maxima):
- 若對於任何可能的向量 , 都小於零 ()。
- 這意味著 , 是附近的最高點。
- 此時,矩陣 被稱為負定矩陣 (Negative Definite Matrix)。
- 負定矩陣的所有特徵值都為負。
-
鞍點 (Saddle Point):
- 若 有時大於零,有時小於零 (取決於 的方向)。
- 這意味著在 附近,有些方向 ,有些方向 。
- 此時,矩陣 的特徵值會有正有負。
結論: 只需要計算海森矩陣 的特徵值:
- 所有特徵值為正 -> 區域最小值。
- 所有特徵值為負 -> 區域最大值。
- 特徵值有正有負 -> 鞍點。
範例:最簡陋的網路模型
為了具體理解如何應用海森矩陣,我們考慮一個極簡陋的類神經網路模型。
模型與損失函數
- 模型: (沒有激活函數,沒有偏置項,只有兩個參數 , )
- 訓練資料:只有一筆資料 時 。
- 損失函數 (平方誤差):
透過窮舉所有 , 的組合,可以繪製出其誤差曲面 (Error Surface)。
- 在 處是鞍點。
- 在 的線上有兩條山谷,這些山谷中的點都是區域最小值。
梯度計算與關鍵點
損失函數 的梯度為:
將 代入,並設定梯度為零來尋找關鍵點。例如,當 時,梯度為零,這表示 是一個關鍵點。
海森矩陣分析與判斷
現在我們計算 點的海森矩陣來判斷其類型。 海森矩陣 包含二次微分:
經過計算,在 處,海森矩陣為:
計算此矩陣的特徵值: 因此,特徵值為 和 。
由於特徵值有正有負,根據前述判斷準則, 是一個不定矩陣,這表示 是一個鞍點。這與誤差曲面圖所觀察到的結果一致。
逃離鞍點:利用海森矩陣的特徵向量 (Eigenvector)
如果發現模型卡在鞍點,實務上還有辦法逃脫,並且海森矩陣也能提供參數更新的方向。
原理:負特徵值指向下降方向
回顧泰勒展開式: (其中 )。 若 是 的一個特徵向量,對應特徵值 ,那麼 代入 會得到:
- 由於 恆為正, 的正負完全由特徵值 決定。
- 若存在負特徵值 ,則 將會是負值。
- 這意味著,如果我們將參數從 沿著對應負特徵值 的特徵向量 方向移動 (),那麼 將會小於 ,即損失會下降。
實際案例演示
在上面的範例中, 處的 Hessian 矩陣 有一個負特徵值 。其對應的一個特徵向量可以是 。
這表示,如果我們從鞍點 沿著 這個方向更新參數,就能讓損失下降。這正是鞍點旁邊可以找到更低損失路徑的證明。
實務考量:計算成本
雖然利用海森矩陣的特徵向量可以逃離鞍點,但在實際應用中,幾乎不會真的去計算海森矩陣。原因在於:
- 二次微分的運算量極大:計算海森矩陣的元素 (\frac{\partial^2 L}{\partial \theta_i \partial \theta_j}) 需要大量的計算。
- 特徵值與特徵向量的計算複雜:對於高維度矩陣,計算其特徵值和特徵向量也是一個計算成本極高的任務。
因此,實務上通常會使用其他計算量較小的方法來處理鞍點問題 (例如:加入噪音、動量等,這些方法在本課程後續可能會提及)。
鞍點 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)?
解答:主要有兩個原因:
- 高維度的特性:在高維度空間中,一個點要同時在所有方向上都比周圍低(成為區域最小值)的機率較低。相反,它更有可能在某些方向上是下降的,而在另一些方向上是上升的,這正是鞍點的定義。
- 實驗證據:許多研究和經驗性觀察表明,當深度學習模型訓練到梯度很小時,其海森矩陣的特徵值往往有正有負,而非全部為正,這支持了鞍點更為普遍的結論。
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