視覺神經網路基礎

前向傳播

前向傳播就是把網路「往前」跑一遍以做出預測:你餵入輸入,每一層從前一層的輸出算出自己的輸出,然後你從最末層讀出答案。這是網路在做它真正的工作,把影像變成類別分數、句子變成翻譯、像素變成分割遮罩。這個步驟沒有學習;它純粹是對網路當下所表示之函數的求值。

對一個 L 層的網路,前向傳播依序計算 a^(0) = x,並對 l 從 1 到 L 計算預激活 z^(l) = W^(l)·a^(l-1) + b^(l) 與激活 a^(l) = phi^(l)(z^(l)),最終得出預測 y_hat = a^(L)。每一步都使用當下的參數;順序很重要,因為每層都依賴它前面的那一層。訓練時,中間值 z^(l) 與 a^(l) 會被快取,因為反向傳播計算梯度時會用到它們。

前向傳播的成本由矩陣乘法與卷積主導,以 FLOPs(浮點運算次數)衡量;這正是你為了快速推論而最佳化的對象。前向傳播也定義了計算圖,即「哪些運算產生了哪些值」的紀錄,自動微分稍後會反向走過它。因此前向與反向傳播是同一張圖上的兩個方向:前向計算輸出(以及損失),反向計算該損失的梯度。

在一張 224 乘 224 的影像上跑 ResNet-50 的前向傳播約為 40 億次乘加;跑視覺 Transformer 時則由注意力與前饋區塊主導。推論時只跑前向傳播(無梯度、無快取),這也是框架提供「no-grad」或 eval 模式的原因,它略過這些記帳工作,跑得更快、用更少記憶體。

陷阱:某些層在訓練與測試時的前向傳播行為不同。Dropout 只在訓練時作用;批次正規化在訓練時用該批次的統計量,推論時則用儲存的移動統計量。忘了把模型切到 eval 模式,是「訓練時正常、部署時壞掉」這類錯誤的常見來源。

又稱
forward passinference