深度學(xué)習(xí)知識:超全激活函數(shù)學(xué)習(xí)總結(jié)!
本文的選材來自學(xué)習(xí)交流群中一位朋友,提出了有關(guān)激活函數(shù)的問題。在收集了一下相關(guān)內(nèi)容后整理了一些知識點,來對比激活函數(shù)的缺點和不足。
什么是激活函數(shù)
文章主要從激活函數(shù)概念,數(shù)學(xué)形式分析,Python代碼形式展現(xiàn),優(yōu)缺點對比等方面進行學(xué)習(xí)。
關(guān)于激活函數(shù)的定義維基百科解釋是:
節(jié)點的激活函數(shù)定義了給定一個輸入或一組輸入的節(jié)點的輸出。標(biāo)準(zhǔn)集成電路可以被視為激活函數(shù)的數(shù)字網(wǎng)絡(luò),根據(jù)輸入可以是“ON”(1)或“OFF”(0)。此定義與邏輯回歸的定義相似。
換句話說,激活函數(shù)是一種添加到神經(jīng)網(wǎng)絡(luò)中的函數(shù),旨在幫助網(wǎng)絡(luò)學(xué)習(xí)數(shù)據(jù)中的復(fù)雜模式。類似于人類大腦中基于神經(jīng)元的模型,激活函數(shù)最終決定了要傳送給下一個神經(jīng)元的內(nèi)容。在人工神經(jīng)網(wǎng)絡(luò)中,一個節(jié)點的激活函數(shù)定義了該節(jié)點在給定的輸入或輸入集合下的輸出。
激活函數(shù)就是確定神經(jīng)網(wǎng)絡(luò)輸出的數(shù)學(xué)方程。

當(dāng)神經(jīng)元接收到了其他神經(jīng)元或外界傳來的數(shù)字信號,神經(jīng)元通過權(quán)重和偏置對輸入信息進行線性變換,由于線性方程很簡單解決復(fù)雜問題的能力有限,因此加入激活函數(shù)對輸入進行非線性變換使其能夠?qū)W習(xí)和執(zhí)行更復(fù)雜的任務(wù)。此時激活函數(shù)的意義尤為重要,合適的激活函數(shù)也十分重要。

激活函數(shù)種類
常見的激活函數(shù)可以分為三類:嶺函數(shù),徑向函數(shù),以及應(yīng)用在卷積神經(jīng)網(wǎng)絡(luò)中的折疊激活函數(shù)。
嶺函數(shù):作用與輸入變量的線性組合多元函數(shù)
線性函數(shù)
ReLU函數(shù):

Heaviside函數(shù):

Logistic函數(shù):

徑向激活函數(shù):在歐幾里得空間中求得點與點之間距離,作為通用的函數(shù)逼近器具有很好的效果。
高斯函數(shù):

多項式函數(shù):

注意:c為函數(shù)中心的向量和,a為影響半徑傳播的參數(shù)
折疊激活函數(shù):廣泛使用池層在卷積神經(jīng)網(wǎng)絡(luò)中和多分類網(wǎng)絡(luò)的輸出層中。激活函數(shù)使用取均值,最小值或最大值。在多分類中,經(jīng)常使用software激活
激活函數(shù)數(shù)學(xué)特性
每個激活函數(shù)都有著其特性,根據(jù)特性它可能適用在某一種模型中能夠展現(xiàn)更好的效果。除了數(shù)學(xué)結(jié)構(gòu),激活函數(shù)還具有不同的數(shù)學(xué)特性:
非線性:
當(dāng)激活函數(shù)為非線性,那么可以證明兩層神經(jīng)網(wǎng)絡(luò)是一個通用函數(shù)逼近器。換句話說神經(jīng)網(wǎng)絡(luò)是由很多層神經(jīng)元組成的,使用非線性激活函數(shù)可以把整個網(wǎng)絡(luò)看作一個單層模型。使得神經(jīng)網(wǎng)絡(luò)可以任意逼近任何非線性函數(shù),這個特性使神經(jīng)網(wǎng)絡(luò)應(yīng)用到眾多非線性模型中。
范圍:
激活函數(shù)的輸出值的范圍可以是有限的也可以是無限的。當(dāng)輸出值是有限的時候,基于梯度的優(yōu)化方法會更加穩(wěn)定,因為特征的表示受有限權(quán)值的影響更加顯著;當(dāng)輸出值無限時,模型的訓(xùn)練會更加高效。注意在這種情況,一般需要更小的學(xué)習(xí)率。
連續(xù)可微:
這個特性并不是必須的(ReLu部分點不可微影響不大)這個特性保證了優(yōu)化中梯度的可計算性。
非飽和性:
飽和指的是某些區(qū)間梯度接近0(梯度消失),使得參數(shù)無法繼續(xù)更新。Sigmoid它的導(dǎo)數(shù)在接近正無窮和負無窮時都會接近0。躍階函數(shù)幾乎所有位置梯度都為0,無法作為激活函數(shù)。因此有一些學(xué)者提出了一些改進激活函數(shù)解決這類問題。
單調(diào)性:
即導(dǎo)數(shù)符號不變,大部分激活函數(shù)都具有該特點。換句話說就是單調(diào)性使得激活函數(shù)的梯度方向不會經(jīng)常改變,使訓(xùn)練更容易收斂,效果更佳。
接近恒等變換:
這個特性使得網(wǎng)絡(luò)更加穩(wěn)定,存在于少量激活函數(shù)中在Tanh中只有原點附近導(dǎo)數(shù)為1,ReLu只在x>0時為線性。這一結(jié)構(gòu)設(shè)計與CNN中的ReNet和RNN中的LSTM
參數(shù)少:
參數(shù)少可以減少網(wǎng)絡(luò)的大小。
歸一化:
主要思想是使樣本分布自動歸一化到零均值,單位方差的分布,從而穩(wěn)定訓(xùn)練。
這些數(shù)學(xué)特性不會決定性的影響模型效果,也不存在唯一有用屬性,通過這些屬性可以方便我們在構(gòu)建模型時選出合適的激活函數(shù)。
激活函數(shù)比較
接下來到了最關(guān)鍵的部分,激活函數(shù)的對比,我們以及掌握了激活函數(shù)的種類以及特性,那么都有哪些常用的激活函數(shù),以及他們的特性都有哪些呢。如下所示為多種常見激活函數(shù)的收集整理,里面包含內(nèi)容有函數(shù)曲線,數(shù)學(xué)結(jié)構(gòu),范圍,可導(dǎo)區(qū)間,以及連續(xù)性。
常見激活函數(shù):

以及折疊函數(shù):

如何選取恰當(dāng)?shù)募せ詈瘮?shù)
通過了解這些函數(shù)的,以及特性分析,我們可以總結(jié)一下如何選擇正確的激活函數(shù);根據(jù)問題的性質(zhì),我們可以為構(gòu)建模型作出更佳選擇。結(jié)合一些文章提供的經(jīng)驗之說選取規(guī)則如下所示(僅供參考)
首先考慮常見的激活函數(shù):Sigmoid,TanH,ReLU,Leaky ReLU,ELU,SoftPlus,Binary step,Maxout,以及Mish.
用于分類器時,Sigmoid函數(shù)及其組合通常效果更好
關(guān)于避免梯度消失問題,需要避免使用Sigmoid,TanH
首先考慮ReLU,速度最快,觀察模型的表現(xiàn),如果效果不好可以嘗試Leaky ReLU,Maxout
ReLU只能在隱藏層中使用
當(dāng)層數(shù)不多時的CNN中,激活函數(shù)影響不大。
代碼實現(xiàn)
搞定了理論基礎(chǔ),接下來就該實戰(zhàn)準(zhǔn)備造輪子環(huán)節(jié)了,建議收藏這些代碼部分以備不時之需。
Sigmoid代碼實現(xiàn):
適用于二分類,多分類,效果一般,注意梯度消失問題
TanH代碼實現(xiàn):
注意梯度消失問題
ReLU代碼實現(xiàn):
最常用,只用于隱藏層
Leaky ReLU代碼實現(xiàn):
應(yīng)用于當(dāng)構(gòu)建網(wǎng)絡(luò)中存在大量未激活神經(jīng)元時
ELU代碼實現(xiàn)
Softmax代碼實現(xiàn)
Binary step代碼實現(xiàn)
Maxout代碼實現(xiàn):
比賽中使用
Mish代碼實現(xiàn):較新的激活函數(shù),表現(xiàn)優(yōu)于ReLU和Swish,TanH和Softplus組合
原理如下:有興趣的可以看一看
作弊代碼:小樣本
總結(jié)
經(jīng)過盤點總結(jié)激活函數(shù)的意義,種類,數(shù)學(xué)特性,以及使用范圍等方面,我們可以很好的認(rèn)識了激活函數(shù),并且在構(gòu)建模型時如何選擇使用。當(dāng)我看到這個問題,并且開始學(xué)習(xí),通過深入了解原理意義,理解為什么選非常重要。不能只做代碼的搬運工,應(yīng)該有自己的思考見解,追求境界高了,眼界高了,才能有更多的發(fā)展空間。
這次文章的描寫使用了很多公式展示,讓我的Latex編寫能力有了大大的提高,也發(fā)現(xiàn)使用才有價值才能更快的成長。
參考文獻:
1.Activation function
https://en.wikipedia.org/wiki/Activation_function
2.非線性激活函數(shù)
https://zhuanlan.zhihu.com/p/260970955
3.常見流行激活函數(shù)
https://cloud.tencent.com/developer/article/1591132
4.Mish As Neural Networks Activation Function
https://sefiks.com/2019/10/28/mish-as-neural-networks-activation-function/
5.Understand Maxout Activation Function in Deep Learning – Deep Learning Tutorial
https://www.tutorialexample.com/und
更多干貨!
