神經網絡怎樣「學習」:權重、損失函數與反向傳播
答案先講:神經網絡所謂「學習」,就是反覆調整網絡裏的數字(權重),令一個衡量「答錯了多少」的數值(損失函數)愈來愈小。每一輪有四步:把輸入送進網絡算出答案(前向傳播);用損失函數量度誤差;用反向傳播計算每個權重對誤差的影響(梯度);最後把每個權重朝減少誤差的方向微調(梯度下降)。反向傳播本身不是「學習」的全部,它是計算梯度的方法,靠的是微積分的連鎖律,由輸出層往輸入層逐層把誤差訊號傳回去。
第一步:權重是網絡的「記憶」
一個人工神經元做的事很簡單:把每個輸入乘以一個權重,加起來,再加一個偏置(bias),最後經過一個激活函數。寫成式子:
輸出 = f(w₁x₁ + w₂x₂ + … + b)
這裏的 w 和 b 就是網絡要學的參數。激活函數 f 常見的有 ReLU(負數變 0,正數不變)和 sigmoid(把任何數壓到 0 與 1 之間)。多個神經元並排成一層,多層疊起來就是「深度」神經網絡。訓練前這些權重通常是隨機的,所以網絡一開始的答案基本上是亂猜。
第二步:損失函數量度「錯了多少」
要學習,先要有評分標準。損失函數把「網絡的答案」和「正確答案」比較,輸出一個數字:數字愈大,錯得愈多。
| 任務類型 | 常用損失函數 | 直觀意思 |
|---|---|---|
| 預測數值(例如樓價) | 均方誤差(MSE) | 答案與正確值之差的平方,再取平均 |
| 分類(例如是貓還是狗) | 交叉熵(cross-entropy) | 網絡給正確類別的機率愈低,懲罰愈重 |
選哪個損失函數,等於決定了網絡「在乎甚麼」。之後所有權重調整,都只是為了把這個數字壓低。
第三步:梯度告訴你往哪邊調
如果把損失想像成一個山谷的高度,每個權重就是一個方向上的座標。梯度(gradient)是損失對每個權重的偏導數,表示「這個權重增加一點,損失會升還是跌、升跌多快」。梯度下降的更新規則是:
新權重 = 舊權重 − 學習率 × 梯度
減號代表「往下坡走」。學習率(learning rate)控制每步走多遠:太大會衝過谷底甚至愈走愈遠,太小則要走很多步才到。
問題是:一個現代網絡可以有數以百萬計的權重,逐個試著改動再看損失變化,成本高得不可行。反向傳播就是為解決這個問題而存在。
第四步:反向傳播=連鎖律+重用中間結果
連鎖律說:如果 L 取決於 y,y 又取決於 w,那麼 ∂L/∂w = ∂L/∂y × ∂y/∂w。神經網絡是一層套一層的函數,所以任何一個權重對損失的影響,都可以拆成一串局部導數相乘。
反向傳播的巧妙之處在於計算次序:先在輸出端算出損失對輸出的導數,然後一層一層往回推。每一層算出的「誤差訊號」會交給前一層直接使用,不必重新計算。這樣,只要一次前向傳播加一次反向傳播,就可以得到所有權重的梯度。
一個可以手算的例子
設一個只有兩個權重的迷你網絡(不用激活函數,方便手算):
- 隱藏值 h = w₁ × x
- 輸出 y = w₂ × h
- 損失 L = (y − t)²,t 是正確答案
設 x = 1、t = 2,初始權重 w₁ = 0.5、w₂ = 2,學習率 0.1。
前向傳播: h = 0.5 × 1 = 0.5;y = 2 × 0.5 = 1;L = (1 − 2)² = 1。
反向傳播:
- 損失對輸出:∂L/∂y = 2(y − t) = 2 × (1 − 2) = −2
- 對 w₂:∂L/∂w₂ = ∂L/∂y × h = −2 × 0.5 = −1
- 把誤差傳回隱藏層:∂L/∂h = ∂L/∂y × w₂ = −2 × 2 = −4
- 對 w₁:∂L/∂w₁ = ∂L/∂h × x = −4 × 1 = −4
留意第3步重用了第1步的 −2,這就是「重用中間結果」。
更新: w₂ = 2 − 0.1 × (−1) = 2.1;w₁ = 0.5 − 0.1 × (−4) = 0.9。
再做一次前向傳播: h = 0.9;y = 2.1 × 0.9 = 1.89;L = (1.89 − 2)² = 0.0121。損失由 1 降到 0.0121,網絡「學到」了。真實網絡只是把這個過程放大到數百萬個權重、成千上萬筆資料,原理完全一樣。
實際訓練時還會遇到甚麼
小批量與訓練輪次。 實務上不會每看一筆資料就更新,也不會等看完全部資料才更新,而是每次取一小批(mini-batch)計平均梯度再更新;把整個訓練集看完一遍叫一個 epoch。
梯度消失。 sigmoid 的導數最大只有 0.25。多層相乘之後,傳回前面幾層的梯度可能變得極小,令前層幾乎學不到東西。ReLU 在正數區間的導數固定為 1,不會這樣逐層收縮,所以在深層網絡中很常用。
過度擬合。 損失在訓練資料上一直下降,不代表對新資料也準。常見做法是另留一份驗證資料監察表現,並配合正則化等技巧。
這個方法從哪裏來
一篇常被引用的里程碑論文,是 David E. Rumelhart、Geoffrey E. Hinton 與 Ronald J. Williams 發表在《自然》(Nature)期刊第323卷第6088期、第533至536頁的〈Learning representations by back-propagating errors〉,於1986年10月9日刊出。論文摘要描述這個程序會反覆調整連接的權重,縮小網絡實際輸出與期望輸出之間的差距;在調整過程中,不屬於輸入或輸出的「隱藏」單元會學會代表任務中的重要特徵。
2024年諾貝爾物理學獎頒予 John J. Hopfield 與 Geoffrey Hinton,表揚他們在人工神經網絡機器學習方面的基礎性發現和發明。想系統地學下去,可以讀 Ian Goodfellow、Yoshua Bengio 與 Aaron Courville 合著的《Deep Learning》(MIT Press,2016),作者在官方網站提供免費網上版本,其中第6章講深度前饋網絡,第8章講訓練深度模型的最佳化方法。
常見問題
反向傳播和梯度下降有甚麼分別?
反向傳播負責「計算」:用連鎖律求出損失對每個權重的梯度。梯度下降負責「更新」:用這些梯度,按學習率把權重往減少損失的方向調整。兩者合起來才是一次完整的訓練步驟。現時常用的各種最佳化方法,大多是梯度下降的變體,但都需要反向傳播先算出梯度。
神經網絡學到的「知識」存在哪裏?
存在權重和偏置這些數字裏。訓練完成後,網絡的結構不變,改變的只是這些參數的數值。所以「模型有多少參數」通常就是指它有多少個可調的權重和偏置。
為甚麼要用損失函數,不直接看準確率?
梯度下降需要一個能對權重求導、而且會隨權重平滑變化的數值。準確率是「對或錯」的計數,權重微調一點,準確率往往完全不變,無法提供往哪邊調的訊號。損失函數則會連續變化,所以適合用來訓練;準確率則留作評估結果的指標。
本文為一般科普資料,旨在說明原理,不構成任何專業建議。
資料來源
- Nature《Learning representations by back-propagating errors》(Rumelhart, Hinton & Williams, Nature 323, 533–536):https://www.nature.com/articles/323533a0(頁面標示的發布/更新/生效日期:1986-10-09;查閱日期:2026-09-22)
- DOI 解析《Learning representations by back-propagating errors》(doi:10.1038/323533a0):https://doi.org/10.1038/323533a0(頁面標示的發布/更新/生效日期:頁面未標示;查閱日期:2026-09-22)
- The Nobel Prize《The Nobel Prize in Physics 2024 – Summary》:https://www.nobelprize.org/prizes/physics/2024/summary/(頁面標示的發布/更新/生效日期:頁面未標示;查閱日期:2026-09-22)
- Ian Goodfellow, Yoshua Bengio and Aaron Courville《Deep Learning》官方網上版:https://www.deeplearningbook.org/(頁面標示的發布/更新/生效日期:頁面未標示;查閱日期:2026-09-22)