修正線性單元
修正線性單元 ReLU 是最簡單卻有用的非線性:正數原樣通過,負數被夾到零,ReLU(z) = max(0, z)。可想像成一個單向閥,或電子學裡的二極體:輸入為正時訊號流通,為負時則完全不流。這個看似平凡的規則,結果成了深度學習最重要的實務發現之一,因為用它建構的網路,比用先前那些平滑壓縮函數建構的網路遠遠更容易訓練。
有兩個性質很關鍵。第一是稀疏性(sparsity):對典型輸入,大約一半的神經元會輸出恰好為零,給出一種只有相關單元活躍的高效表示。第二、也更重要:ReLU 對每個正輸入的梯度恰為 1。反向傳播時每個神經元會把傳入的梯度乘上 phi'(z);用 sigmoid 時這個因子最多 0.25、通常還小得多,於是梯度隨深度指數縮小(梯度消失問題)。ReLU 為 1 的梯度讓誤差訊號沿著活躍路徑無損通過,這正是讓極深網路得以訓練的原因。
ReLU 的弱點是其優點的鏡像。對負輸入梯度為 0,因此若某神經元的權重漂移到對每個訓練樣本都輸出負值的區域,它就永遠收到零梯度、再也無法復原,成為「死亡」神經元,即 dying-ReLU 問題,常由過大的學習率觸發。修補方法是在負側保留一個小斜率:leaky ReLU 用 max(alpha·z, z) 配上固定的小 alpha(如 0.01);PReLU 則學習 alpha;而 ELU、GELU、SiLU 把折角整個平滑化,有助於最佳化,如今已是 Transformer 與許多現代 CNN 的標準。
ReLU 及其同族是經典視覺架構通用的隱藏層激活:AlexNet、VGG 與 ResNet 家族都在每個卷積之後(以及批次正規化之後)使用單純的 ReLU。它的便宜在大規模下很重要;在高解析度特徵圖上每次前向傳播被套用數十億次,激活本身的成本理應可忽略,而 max(0,z) 大概是運算裡最便宜的之一。
把向量 z=(-2.0, 0.0, 3.5) 送過 ReLU 得到 (0, 0, 3.5);前兩個單元被抑制、第三個通過。局部梯度為 (0, 0, 1),因此反向傳播時只有第三個單元的輸入權重收到誤差訊號。
在 z=0 處 ReLU 不可微;框架直接把該點的次梯度(subgradient)定義為 0(或 1),實務上無害。若一個學習率偏高的網路停止進步,請檢查激活統計,看是否有死亡神經元。