ReLU(修正線性單元,rectified linear unit)
/ RAY-loo /
ReLU 是能想像到的最簡單而又有用的激活函數,它驅動著當今絕大多數深度學習。規則只有一行:如果輸入是正的,就原樣放過;如果是負的,就輸出零。就這麼簡單。想像一個單向閥門——信號在正方向上自由流過,在負方向上則被徹底攔住。儘管樸素,這個小小的折彎就足以給網路提供它所需的全部非線性。
ReLU 為何把平滑的 S 形曲線們趕下了王座?兩個原因。其一,它在正的一側不會飽和——對任何正輸入,斜率都恰好是 1,於是學習信號原封不動地反向傳回,躲開了在深層網路裡折磨 sigmoid 和 tanh 的梯度消失問題。其二,它計算起來便宜得離譜:只是「留著或歸零」,全無指數那種昂貴的曲線。兩者合起來,讓研究者得以訓練比從前深得多的網路,而這在很大程度上正是深度學習時代得以到來的原因。
ReLU 並非完美無瑕。由於它對所有負輸入都輸出一個平坦的零,一個神經元有時會卡死在永遠輸出零的狀態——也就是所謂「死掉」的神經元,它再也回不來了,因為零輸出意味著零學習信號。一個常見的補救是 leaky ReLU(漏整流),它在負的一側放過一絲細流(比如輸入乘以 0.01),而不是硬生生的零,從而讓神經元保持存活。這類變體隨處可見,但樸素的 ReLU 仍是穩妥的預設選擇。
把數值 -5、-0.1、0、2、100 送進 ReLU,你得到 0、0、0、2、100。所有負的都被壓平成零;所有正的都原封不動地通過。換成 leaky ReLU,它則會把 -5 變成 -0.05、把 -0.1 變成 -0.001——一縷微弱的負向低語,使那些神經元不至於永久沉默。
ReLU:留下正數,把負數歸零。leaky ReLU 則在零以下放過一絲細流。
ReLU 是隱藏層的標準預設選擇——但不是輸出層的。當你需要機率時,輸出端要用 sigmoid 或 softmax。還要當心卡在零上「死掉」的神經元;學習率過大會讓它們更常出現。