本文作者專注於AI進階算法,正在推出AI瘋狂進階之基礎理論進階篇,如有興趣可持續關注我。
核心導讀:
1. 神經網絡激活函數的作用是什麼?
2. 如何評價激活函數的好壞?
3. ReLU存在哪些問題?
4. 存在替換萬年ReLU的激活函數嗎?
1. 激活函數的作用是什麼?
激活函數對於人工神經網絡模型學習、理解非常複雜的數據來說具有十分重要的作用。激活函數給神經元引入了非線性因素,使得神經網絡可以逼近任何非線性函數,這樣神經網絡就可以應用到眾多的非線性模型中。目前最常見的激活函數當屬ReLU以及在其基礎上改進的如PReLU,RReLU,LeakyReLU等。本文在激活函數上進行了進階總結,下面一一闡述:
2.如何評價激活函數的好壞?
目前學術界總計有50+類型的激活函數,但沒有統一的或者明確的標準去衡量激活函數的好壞,最根本的原因是因為神經網絡通過訓練本質上是去擬合訓練數據的非線性分布,然而現實中數據的分布是無法統計的,所以採用哪種激活函數能擬合的更好是無法通過理論去推導出來,因此大部分論文都是通過在幾十種不同的任務上做實驗去看準確率以及準確率浮動的範圍(穩定性)來評判激活函數的好壞。從最近研究出的一些比較好的激活函數中可以總結出好的激活函數必須擁有以下三個特點:
(1) Unboundedness(x>0無飽和區域):傳統的激活函數如sigmoid和tanh函數都有飽和區域,所以必須依賴較好的初始化讓輸入數據處於非飽和區域,否則飽和區域產生的梯度過小會影響收斂速度,而Relu系列都是x>0無飽和區域。
(2)NegativeOutputs(x
(3)Smoothness(平滑性):Relu,PReLU,RReLU都是在x=0點都是不連續的,最明顯的現象是在特徵響應圖上產生斷層,平滑的激活函數更利於梯度信息的回傳。
3.ReLU存在哪些問題?
(1)Dead ReLU Problem:《Applying Deep Learning to Airbnb Search》中解釋了這個問題,神經網絡接受異於常值範圍的輸入時,在反向傳播過程中會產生大的梯度,這種大的梯度,會因梯度消失而永久關閉諸如 ReLU 的激活函數,這主要是ReLU沒有NegativeOutputs所帶來的問題。下面舉了個簡單的例子說明這個現象。
(2)High-Confidence Predictions:《Why ReLU Networks Yield High-Confidence Predictions Far Away From the Training Dataand How to Mitigate》中針對例如將一個在CIFAR 10數據集(10類普通物體)上訓練的神經網絡,放到SVHN數據集(街景門牌)上做測試,該模型竟然能夠以100%的置信度將門牌識別為狗、鳥和飛機等這種現象,通過理論建模,解釋ReLU帶來的高置信度問題,並提出CEDA和ACET來緩解這種不良情況。
4.存在替換萬年ReLU的激活函數嗎?
答案是肯定的。本文作者在這裡給大家推薦2個激活函數。這2個激活函數在自己的工程項目中都嘗試過,相比Relu均有穩定0.5%左右的提升。僅僅改變激活函數就能帶來白給的提升,何樂而不為?第一個是Google Brain提出的Swish函數,其形式為f(x) = x · sigmoid(x) ,《SWISH: A SELF-GATED ACTIVATION FUNCTION 》論文在多個任務上實驗精度都超過Relu,同時在2019年推出的端側引擎MobilenetV3中,也是直接用Swish替換掉Relu。另一個是Mish函數,其形式為f(x) = x tanh(ln(1 + exp(x)),《Mish: A Self Regularized Non-Monotonic Neural Activation Function 》也是在多個任務上實驗最終準確度上比Swish(+.494%)和ReLU(+ 1.671%)都有提高。從下圖可以看出Swish和Mish在特徵圖上數據分布比Relu更加平滑。由於激活函數替換的成本較低,所以當你看到這篇文章的時候,可以嘗試在自己的項目中採用這2個激活函數試一試,說不定就能帶來一定的提升。
5.小結
激活函數一直是神經網絡研究中的一個重要方向,未來也會有更多更好的激活函數出現,如果不知道採用哪個激活函數好,可以採用Auto ML進行搜索。
如需轉載,請註明出處。