大綱
何謂梯度下降(gradient descent)?
訓練一個機器學習模型,本質上是在「調參數」——不斷微調模型內部的數值,讓它的預測越來越接近正確答案。問題是:參數要往哪個方向調、調多少,才會讓模型變好?梯度下降(gradient descent)就是回答這個問題的演算法,也是當今幾乎所有深度學習模型訓練的核心引擎。
它的概念可以用一個畫面記住:想像你站在一片有高低起伏的山坡上,四周起霧、看不到遠方,只能感覺到腳下的坡度。你想走到整片地形的最低點,最直覺的做法,就是每一步都往「當下最陡的下坡方向」邁進,走一步、重新感覺坡度、再走一步,反覆下去,最後滑到谷底。
把這個畫面對應到模型訓練:那片山坡是損失函數(衡量模型錯多少),你的位置是模型參數,海拔高度是損失值。梯度,就是腳下坡度的數學說法;往坡度的反方向走,就是讓損失下降。每走一步跨多大,則由學習率這個設定控制。重複成千上萬次,參數就一步步逼近讓損失最小的位置——這時模型也就訓練好了。
接下來兩個互動,讓你親手操作這個「下山」過程,從最單純的單一谷底,到會讓演算法卡住的雙谷底地形。
互動一:下山找谷底(單谷版)
模型訓練在做的事,可以想成一個人站在山坡上、想走到谷底。山的高低起伏是損失函數,你站的位置是模型參數 w,海拔高度就是損失值 L——越低代表模型預測得越準。梯度下降的任務,就是一步步往下走,直到抵達谷底(損失最小)。
下面這個互動,讓你親手控制這個過程。藍色曲線是損失地形,橘色小球是當前的參數位置,綠色虛線是該點的切線,也就是梯度(坡度)。每按一次「單步」,小球就往坡度的反方向移動一步——這個「反方向」是關鍵,因為梯度指向上坡,往它的反方向走才是下坡。
兩個可以調的旋鈕,對應訓練裡最核心的兩個設定:
起點 w₀:你一開始把小球放在哪裡。對應模型初始化時參數的起始值。
學習率 η:每一步跨多大。這是梯度下降最重要、也最難調的超參數。值得你多拖幾次感受它的影響:學習率太小時,小球每步只挪一點點,要很多步才到谷底,對應訓練「跑很慢」;學習率適中時,小球平順地滑進谷底、停在最低點,這就是「收斂」;學習率太大時(試著拉到 1 以上),小球會在谷底兩側來回彈跳,甚至越彈越高、直接飛出去——這對應真實訓練裡損失爆掉、變成 NaN 的災難。
這張圖刻意把地形畫成簡單的一維碗狀,是為了好懂。真實模型的參數動輒數百萬個,損失地形是無法視覺化的高維曲面,但「沿梯度反方向、用學習率控制步伐」的核心邏輯完全一樣。
互動二:雙谷底——局部最小與全局最小
前一個展示裡,地形只有一個谷,不論從哪裡出發都會走到同一個最低點。但真實的損失地形往往不是這麼單純。這個互動把地形換成兩個谷:左邊較淺的谷是局部最小值,右邊較深的谷才是全局最小值,也就是整片地形真正的最低點。
這時候會出現一個梯度下降本質上的限制。它是一個只看腳下坡度的「貪心」演算法——永遠往當下最陡的下坡方向走,走到周圍都比自己高、梯度為 0 就停下。問題是,停在局部最小時,梯度同樣是 0,小球會以為「到了」,即使隔壁還有更深的谷,它也跨不過中間那道山丘。
最能看出問題的操作,是按右側的「從左起點」和「從右起點」兩顆按鈕,各跑一次:
從左邊出發,小球滑進左邊較淺的谷就停住了,卡在局部最小,到不了真正的最低點。
從右邊出發,小球才會落進右邊較深的谷,抵達全局最小。
同一套規則、同一個學習率,只因為起點不同,結局就不同。這就是梯度下降「看起點臉色」的問題:它不保證找到全局最小。
那實務上怎麼辦?常見的幾種做法,都是設法繞過這個限制,而非真正消除它。多次換不同的隨機起點各跑一遍、取損失最低的結果(random restarts);用帶動量的優化器(如 Adam),讓小球的「慣性」有機會衝過淺谷或小山丘;又或者利用隨機梯度下降本身的雜訊,靠路徑的抖動把球從淺谷震出來。
最後值得補充一個分界,這對金融建模實務尤其重要。「局部最小該不該擔心」要看模型:邏輯迴歸是凸問題,地形只有一個谷,梯度下降保證走到全局最小,不必擔心;超高維的深度神經網路,理論與經驗顯示多數局部最小的損失值彼此接近,找到一個夠好的通常就足夠;但中小型網路、或非凸的參數校準與最佳化問題(如投組權重最佳化),就真的可能被局部最小困住,起點與優化器的選擇會實質影響結果。判斷自己手上的模型落在哪一種,比死記「梯度下降會卡住」更有用。



