← 回部落格 數學

梯度下降:明明有一行公式,為什麼還要一步一步走

威威 Willy · 2026-10-12

威威學長|高中數學


最適直線的係數有現成的公式:斜率 $a=r\dfrac{S_y}{S_x}$,截距 $b=\bar y-a\bar x$。把它們算出來,最小平方問題就結束了,一行都不用迭代。 既然這樣,為什麼機器學習的書幾乎每一本都要花一整章講梯度下降? 因為那一行公式是特例。它之所以存在,是因為最小平方的損失函數長得很乖,可以直接反解出答案。換一個損失函數、換一個模型,通常就沒有這種好事了。梯度下降是那種時候的通用做法。

核心圖像:摸黑下山

想像你站在山坡上,霧很濃,看不到整座山的地形。你能做的只有一件事:感受腳下哪個方向最陡,然後往那個方向踏一小步。 踏完再感受一次,再踏一步。重複很多次,你就會慢慢走到低處。 把它寫成數學: $$\theta\leftarrow\theta-\eta\nabla L(\theta)$$

三個符號各有各的角色。$\theta$ 是你想調的參數(以最適直線來說就是斜率與截距)。$\nabla L(\theta)$ 是損失函數的梯度:把所有偏導數收集起來變成一個向量,它指向「上升最快的方向」。$\eta$ 是學習率,也就是步伐大小。 那個負號是整條式的關鍵:梯度指向上坡,所以往反方向走。這是「下山」在數學上的寫法。

👑 威威說重點:梯度下降只回答一個問題——「現在該往哪走、走多遠」。它不知道最低點在哪裡,只負責每一步朝當下最陡的下坡方向移動。

為什麼不是每個損失函數都能直接解

反解出答案需要對損失函數求導、令其為零,然後把參數解出來。這一步在二次函數上很容易,因為導數是一次式,移項就得到答案。 但只要模型稍複雜,導數就不再是一次式了,可能是一堆項糾纏在一起,沒有移項就能解的形式。這時候「令導數為零」還是對的條件,只是你解不出來。 梯度下降繞過了這一步。它不需要解方程式,只需要能算出梯度。能不能算導數比能不能解方程式容易滿足得多,這就是它通用的原因。

學習率:太大太小都不行

拿一個最簡單的損失函數看清楚:$L(b)=k(b-b^*)^2$,最低點在 $b=b^*$。 梯度是 $L'(b)=2k(b-b^*)$。帶入更新式,並令誤差 $e=b-b^*$: $$e\leftarrow e-2\eta k\,e=(1-2\eta k)\,e$$

每一步誤差都被乘上同一個倍率。要收斂,這個倍率的絕對值必須小於 $1$: $$|1-2\eta k|<1\quad\Longleftrightarrow\quad0<\eta<\frac1k$$

三種情況一次看懂:

  • $\eta<\dfrac1k$:誤差每步縮小,收斂。特別地,$\eta=\dfrac1{2k}$ 可以一步到位(倍率為 $0$)。
  • $\eta=\dfrac1k$:倍率是 $-1$,誤差大小不變、正負號每次都翻,在最低點兩側來回彈,永遠不收斂。
  • $\eta>\dfrac1k$:誤差的絕對值每步變大,直接發散。

⚠️ 學長的警告:學習率不是「越大越快」。超過那個門檻,誤差會愈跑愈遠,而你可能在好幾步之後才發現,那時數字已經爆掉了。這也是為什麼實務上常常先試一個保守的小值。

為什麼要標準化特徵

把兩個尺度差很多的特徵放進同一個模型(一個範圍 $0$ 到 $1$,另一個 $0$ 到 $1000$),損失函數的等高線會變成很細長的橢圓:某個方向陡、另一個方向平。 梯度下降在這種地形上會來回震盪:往陡的方向走一步會衝過頭,於是下一步往回彈,往復很多次才慢慢前進。把特徵標準化(讓每個維度差不多尺度)之後,等高線接近圓形,每一步都能朝最低點有效率地走。 這個問題跟相關係數那篇遇到的是同一件事:單位會偷偷決定誰的影響比較大。差別是那裡影響的是 $r$ 的解讀,這裡影響的是收斂速度。

換你動手

練習 1:$L(b)=(b-3)^2$(即 $k=1$、$b^*=3$)。取 $\eta=0.1$,從 $b=0$ 出發,算三步。 更新式是 $b\leftarrow b-0.1\cdot2(b-3)=b-0.2(b-3)$。

  • $b_1=0-0.2(0-3)=0.6$
  • $b_2=0.6-0.2(0.6-3)=0.6+0.48=1.08$
  • $b_3=1.08-0.2(1.08-3)=1.08+0.384=1.464$

逐步逼近 $3$ ✓ 三步走了不到一半,但方向是對的。 練習 2:承上,如果改成 $\eta=1$ 呢? 更新式變成 $b\leftarrow b-2(b-3)$。

  • $b_1=0-2(-3)=6$
  • $b_2=6-2(3)=0$
  • $b_3=0-2(-3)=6$

在 $0$ 和 $6$ 之間來回擺,永遠不會靠近 $3$。這正是理論預測的 $\eta=\dfrac1k$ 情形,不是收斂慢,是根本不收斂。 練習 3:為什麼「梯度為零」是最低點的條件,但梯度下降不直接令梯度為零? 令梯度為零是對的條件,問題是解不出來。以 $L(b)=k(b-b^*)^2$ 這種簡單情形當然解得出來(就是 $b^*$),但真實模型的梯度是一大堆項的和,沒有移項就能得到答案的形式。梯度下降用「一直往下降的方向走」代替「一次解出最低點」,用迭代次數換取可行性。


找一個你真的能用電腦算的例子(一條直線、五個資料點就夠),用兩個不同的學習率各跑一遍,把損失畫成隨迭代次數變化的圖。你會看到一條平滑下降,和一條上下跳動甚至往上爬。那張圖比任何文字更能說明「學習率太大會怎樣」。 如果你寫的程式跑出來的損失不降反升,先把學習率除以 $10$ 再試一次,十次裡有九次是這個原因。剩下的那一次,通常是梯度算錯了正負號,值得拿一個小例子手算核對。

威威
威威 Willy
德國數學碩士、前 Amazon 資料科學家。數學是邏輯的語言,英文是世界的窗口。
← 回部落格