激活函數(活化函數)
激活函數是套用在神經元加權和上的非線性「決策」步驟。神經元算出 z = w·x + b 後,並不直接輸出 z,而是把 z 送過一個會將其彎折或壓縮的函數 phi。直覺上,這正是讓神經元能說出比「輸入做線性縮放」更有趣的東西的部分:它能說「只有 z 為正才激發」、「z 很大時飽和趨近 1」、或「在零附近溫和回應」。沒有這個彎折,無論堆多少層,你仍然只能畫出筆直的決策邊界。
原因是代數性的:仿射映射的複合仍是仿射映射,所以純線性層構成的深層網路會塌縮成單一線性層。在層與層之間插入非線性 phi 打破這種塌縮,賦予網路表達能力;事實上通用近似定理就要求 phi 為非線性(且非多項式)。激活函數還必須幾乎處處可微,梯度才能在訓練時往回流經它,因為反向傳播會在每個神經元乘上 phi'(z),而 phi' 的形狀直接決定梯度能否存活。
歷史上 sigmoid 函數 sigma(z)=1/(1+e^-z) 與 tanh 是標準選擇,把輸入壓進 (0,1) 或 (-1,1);它們平坦的尾部會造成梯度消失,使深層網路難以訓練。修正線性單元 ReLU(z)=max(0,z) 在多數視覺工作中取而代之(自 2012 年 AlexNet 起),因為它對正輸入的梯度恰為 1,這一側不會飽和,且計算便宜。各種變體針對 ReLU 的弱點:leaky ReLU 與 PReLU 為負值保留一個小斜率;ELU 與 GELU 把折角平滑化(GELU 是視覺 Transformer 與多數現代 Transformer 的預設);而 SiLU/Swish,即 x·sigma(x),常見於高效率 CNN。
一個微妙但關鍵的重點:隱藏層內使用的激活函數(為了好訓練而選,通常出自 ReLU 家族)與最終層上的函數在目的上不同(後者要配合任務:互斥多類別機率用 softmax、各自獨立的二元標籤用 sigmoid、迴歸則用恆等/無激活)。選錯了,例如在需要負值的迴歸輸出上用 ReLU、或在標籤並非互斥時用 softmax,都會悄無聲息地破壞模型。
陷阱:輸出層的激活函數是與損失函數綁定的建模選擇,而非可盲目調整的超參數。softmax 輸出搭配交叉熵(並在數值上融合兩者)是標準做法,而重複套用兩次 softmax 則是經典錯誤。