引言
深度學習的核心在於人工神經網路(ANN)。雖然其名稱與生物學的大腦神經元相似,但從工程與數學角度來看,神經網路實際上是一套龐大且精密的數學加權運算系統。本篇將帶你拆解神經網路的基本結構與訓練流程。
1.單一神經元(Perceptron / Node)
神經元是網路中最基本的運算單元,其內部運算包含三個步驟:加權求和(Weighted Sum):
將輸入訊號 $x_1, x_2, \dots, x_n$ 分別乘以對應的權重(Weight) $w_1, w_2, \dots, w_n$,並加上偏置項(Bias, $b$):權重(Weight):代表不同輸入特徵的重要性。偏置(Bias):調整激活門檻的平移量。激活函數(Activation Function):將加權求和後的結果 $z$ 通過一個非線性函數 $f(z)$,得到神經元的最終輸出 $a$
為什麼需要非線性激活函數?若沒有非線性函數,無論神經網路疊加多少層,本質上都只是線性變換的組合,無法學習複雜的非線性關係(例如 XOR 問題)。常見激活函數:ReLU($f(x) = \max(0, x)$)、Sigmoid、Tanh 等。
2.多層神經網路結構
神經網路通常由以下三層結構組成:輸入層(Input Layer):接收原始資料(如圖片的像素值、文字向量)。
隱藏層(Hidden Layer):可以有一層或多層。隱藏層會逐層抽取資料的高階特徵(例如:第一層抽邊緣、第二層抽形狀、第三層抽物件部位)。層數越多,即代表深度學習。
輸出層(Output Layer):給出最終預測結果(如分類類別機率或數值預測)。
3.神經網路的訓練四大流程
模型剛建立時,內部的權重與偏置都是隨機給定的,此時的預測通常完全不準確。訓練模型的過程,就是尋找最佳權重組合的過程:正向傳播(Forward Propagation):資料從輸入層進去,經過各隱藏層的權重計算與激活函數,最後在輸出層產生預測值 $\hat{y}$。計算損失(Loss Calculation):使用損失函數(Loss Function)計算模型的預測值 $\hat{y}$ 與真實標準答案 $y$ 之間的差距(如均方誤差 MSE 或交叉熵 Cross-Entropy)。Loss 值越高代表預測越差。反向傳播(Backpropagation):利用微積分中的連鎖律(Chain Rule),從輸出層往回計算損失函數相對於每個權重與偏置的偏微分(即梯度 Gradient)。這能告訴我們:每個權重該往哪個方向調整,才能最快速地減少 Loss。權重更新(Gradient Descent):根據計算出的梯度,利用梯度下降法(Gradient Descent)更新參數:$$w_{new} = w_{old} - \eta \cdot \frac{\partial \text{Loss}}{\partial w}$$其中 $\eta$ 為學習率(Learning Rate),決定每一次微調的步長。
4.過擬合(Overfitting)與常見對策
在訓練過程中,最常遇到的瓶頸是過擬合(Overfitting):模型太過死記硬背訓練集的細節與雜訊,導致在訓練集表現完美,但遇到從未見過的測試資料(新資料)時表現極差。常見對策:增加訓練資料(Data Augmentation):提供更多多元的範例。正則化(Regularization, L1/L2):懲罰過大的權重數值,防止模型過度依賴單一特徵。
Dropout:在訓練過程中隨機關閉一部分神經元,迫使網路學習更具魯棒性(Robustness)的特徵。
提早停止(Early Stopping):當驗證集的 Loss 開始上升時,立刻停止訓練。重點總結
神經網路訓練的核心本質就是「計算誤差 -> 計算梯度 -> 更新權重」,透過千萬次的迭代尋找最小化 Loss 的最佳參數。
我的心得與實踐:第一次看到反向傳播與連鎖律的數學公式時覺得非常抽象,但當我自己用 Python 與 PyTorch 實作一個簡單的手寫數字辨識(MNIST)時,看到 Loss 從 2.3 一步步降到 0.05,預測準確率隨之飆升,才真正體會到梯度下降的魅力。模型並不是真的有心智,它只是一個努力在高維度地形中尋找最低谷的數學機器。