【机器学习】激活函数(ReLU, Swish, Maxout)
https://blog.csdn.net/ChenVast/article/details/81382939
神經(jīng)網(wǎng)絡中使用激活函數(shù)來加入非線性因素,提高模型的表達能力。
ReLU(Rectified Linear Unit,修正線性單元)
形式如下:
ReLU公式近似推導::
下面解釋上述公式中的softplus,Noisy ReLU.
softplus函數(shù)與ReLU函數(shù)接近,但比較平滑, 同ReLU一樣是單邊抑制,有寬廣的接受域(0,+inf), 但是由于指數(shù)運算,對數(shù)運算計算量大的原因,而不太被人使用.并且從一些人的使用經(jīng)驗來看(Glorot et al.(2011a)),效果也并不比ReLU好. softplus的導數(shù)恰好是sigmoid函數(shù).softplus 函數(shù)圖像:
Noisy ReLU1 ReLU可以被擴展以包括高斯噪聲(Gaussian noise): f(x)=max(0,x+Y),Y∼N(0,σ(x))f(x)=max(0,x+Y),Y∼N(0,σ(x)) Noisy ReLU 在受限玻爾茲曼機解決計算機視覺任務中得到應用.
ReLU上界設(shè)置: ReLU相比sigmoid和tanh的一個缺點是沒有對上界設(shè)限.在實際使用中,可以設(shè)置一個上限,如ReLU6經(jīng)驗函數(shù):f(x)=min(6,max(0,x))f(x)=min(6,max(0,x)). 參考這個上限的來源論文:Convolutional Deep Belief Networks on CIFAR-10. A. Krizhevsky
ReLU的稀疏性(摘自這里):
當前,深度學習一個明確的目標是從數(shù)據(jù)變量中解離出關(guān)鍵因子。原始數(shù)據(jù)(以自然數(shù)據(jù)為主)中通常纏繞著高度密集的特征。然而,如果能夠解開特征間纏繞的復雜關(guān)系,轉(zhuǎn)換為稀疏特征,那么特征就有了魯棒性(去掉了無關(guān)的噪聲)。稀疏特征并不需要網(wǎng)絡具有很強的處理線性不可分機制。那么在深度網(wǎng)絡中,對非線性的依賴程度就可以縮一縮。一旦神經(jīng)元與神經(jīng)元之間改為線性激活,網(wǎng)絡的非線性部分僅僅來自于神經(jīng)元部分選擇性激活。 對比大腦工作的95%稀疏性來看,現(xiàn)有的計算神經(jīng)網(wǎng)絡和生物神經(jīng)網(wǎng)絡還是有很大差距的。慶幸的是,ReLu只有負值才會被稀疏掉,即引入的稀疏性是可以訓練調(diào)節(jié)的,是動態(tài)變化的。只要進行梯度訓練,網(wǎng)絡可以向誤差減少的方向,自動調(diào)控稀疏比率,保證激活鏈上存在著合理數(shù)量的非零值。
ReLU 缺點
壞死: ReLU 強制的稀疏處理會減少模型的有效容量(即特征屏蔽太多,導致模型無法學習到有效特征)。由于ReLU在x < 0時梯度為0,這樣就導致負的梯度在這個ReLU被置零,而且這個神經(jīng)元有可能再也不會被任何數(shù)據(jù)激活,稱為神經(jīng)元“壞死”。
無負值: ReLU和sigmoid的一個相同點是結(jié)果是正值,沒有負值.
ReLU變種
Leaky ReLU
當x<0x<0時,f(x)=αxf(x)=αx,其中αα非常小,這樣可以避免在x<0x<0時,不能夠?qū)W習的情況:
稱為Parametric Rectifier(PReLU),將αα作為可學習的參數(shù).
當αα從高斯分布中隨機產(chǎn)生時稱為Random Rectifier(RReLU)。
當固定為α=0.01α=0.01時,是Leaky ReLU。
優(yōu)點:
不會過擬合(saturate)
計算簡單有效
比sigmoid/tanh收斂快
指數(shù)線性單元ELU
exponential linear unit, 該激活函數(shù)由Djork等人提出,被證實有較高的噪聲魯棒性,同時能夠使得使得神經(jīng)元 的平均激活均值趨近為 0,同時對噪聲更具有魯棒性。由于需要計算指數(shù),計算量較大。 ReLU family:
Leaky ReLUαα是固定的;PReLU的αα不是固定的,通過訓練得到;RReLU的αα是從一個高斯分布中隨機產(chǎn)生,并且在測試時為固定值,與Noisy ReLU類似(但是區(qū)間正好相反)。
ReLU系列對比:
SELU
論文: 自歸一化神經(jīng)網(wǎng)絡(Self-Normalizing Neural Networks)中提出只需要把激活函數(shù)換成SELU就能使得輸入在經(jīng)過一定層數(shù)之后變成固定的分布. 參考對這篇論文的討論.
SELU是給ELU乘上系數(shù)λλ, 即SELU(x)=λ⋅ELU(x)
Swish
paperSearching for Activation functions(Prajit Ramachandran,Google Brain 2017)
β是個常數(shù)或可訓練的參數(shù).Swish 具備無上界有下界、平滑、非單調(diào)的特性。 Swish 在深層模型上的效果優(yōu)于 ReLU。例如,僅僅使用 Swish 單元替換 ReLU 就能把 Mobile NASNetA 在 ImageNet 上的 top-1 分類準確率提高 0.9%,Inception-ResNet-v 的分類準確率提高 0.6%。
導數(shù):
當β = 0時,Swish變?yōu)榫€性函數(shù)f(x)=x2f(x)=x2. β → ∞,σ(x)=(1+exp(−x))−1σ(x)=(1+exp?(−x))−1為0或1. Swish變?yōu)镽eLU: f(x)=2max(0,x) 所以Swish函數(shù)可以看做是介于線性函數(shù)與ReLU函數(shù)之間的平滑函數(shù).
工程實現(xiàn): 在TensorFlow框架中只需一行代碼:x * tf.sigmoid(beta * x)或tf.nn.swish(x). 在Caffe中使用Scale+Sigmoid+EltWise(PROD)來實現(xiàn)或者合并成一個層.代碼參考.
Maxout
論文Maxout Networks(Goodfellow,ICML2013)
Maxout可以看做是在深度學習網(wǎng)絡中加入一層激活函數(shù)層,包含一個參數(shù)k.這一層相比ReLU,sigmoid等,其特殊之處在于增加了k個神經(jīng)元,然后輸出激活值最大的值.
我們常見的隱含層節(jié)點輸出:
而在Maxout網(wǎng)絡中,其隱含層節(jié)點的輸出表達式為:
其中
以如下最簡單的多層感知器(MLP)為例:
圖片來源:slides
maxout-networks-4-1024
假設(shè)網(wǎng)絡第i層有2個神經(jīng)元x1、x2,第i+1層的神經(jīng)元個數(shù)為1個.原本只有一層參數(shù),將ReLU或sigmoid等激活函數(shù)替換掉,引入Maxout,將變成兩層參數(shù),參數(shù)個數(shù)增為k倍.
優(yōu)點:
Maxout的擬合能力非常強,可以擬合任意的凸函數(shù)。
Maxout具有ReLU的所有優(yōu)點,線性、不飽和性。
同時沒有ReLU的一些缺點。如:神經(jīng)元的死亡。
缺點: 從上面的激活函數(shù)公式中可以看出,每個神經(jīng)元中有兩組(w,b)參數(shù),那么參數(shù)量就增加了一倍,這就導致了整體參數(shù)的數(shù)量激增。
Maxout激活函數(shù)
與常規(guī)激活函數(shù)不同的是,它是一個可學習的分段線性函數(shù).
然而任何一個凸函數(shù),都可以由線性分段函數(shù)進行逼近近似。其實我們可以把以前所學到的激活函數(shù):ReLU、abs激活函數(shù),看成是分成兩段的線性函數(shù),如下示意圖所示:
maxout-convex-func-approximate!
實驗結(jié)果表明Maxout與Dropout組合使用可以發(fā)揮比較好的效果。
那么,前邊的兩種ReLU便是兩種Maxout,函數(shù)圖像為兩條直線的拼接,
sigmoid & tanh
sigmoid/logistic 激活函數(shù):
tanh 函數(shù)是sigmoid函數(shù)的一種變體,以0點為中心。取值范圍為 [-1,1] ,而不是sigmoid函數(shù)的 [0,1] 。
tanh 是對 sigmoid 的平移和收縮:tanh(x)=2⋅σ(2x)−1tanh?(x)=2⋅σ(2x)−1. 你可能會想平移使得曲線以0點為中心,那么為什么還要收縮呢? 如果不拉伸或收縮得到f(x)=ex−1ex+1f(x)=ex−1ex+1不行嗎? 我猜想是因為 tanh 更加著名吧。
那么 tanh 這個雙曲正切函數(shù)與三角函數(shù) tan 之間是什么關(guān)系呢?
hard tanh 限界: g(z) = max(-1, min(1,z))
sigmoid & tanh 函數(shù)圖像如下:
sigmoid作激活函數(shù)的優(yōu)缺點
歷史上很流行(Historically popular since they have nice interpretation as a saturating “firing rate” of a neuron),梯度計算較為方便:
優(yōu)勢是能夠控制數(shù)值的幅度,在深層網(wǎng)絡中可以保持數(shù)據(jù)幅度不會出現(xiàn)大的變化;而ReLU不會對數(shù)據(jù)的幅度做約束.
存在三個問題:
飽和的神經(jīng)元會"殺死"梯度,指離中心點較遠的x處的導數(shù)接近于0,停止反向傳播的學習過程.
sigmoid的輸出不是以0為中心,而是0.5,這樣在求權(quán)重w的梯度時,梯度總是正或負的.
指數(shù)計算耗時
為什么tanh相比sigmoid收斂更快:
梯度消失問題程度 可以看出tanh(x)的梯度消失問題比sigmoid要輕.梯度如果過早消失,收斂速度較慢.
以零為中心的影響 如果當前參數(shù)(w0,w1)的最佳優(yōu)化方向是(+d0, -d1),則根據(jù)反向傳播計算公式,我們希望 x0 和 x1 符號相反。但是如果上一級神經(jīng)元采用 Sigmoid 函數(shù)作為激活函數(shù),sigmoid不以0為中心,輸出值恒為正,那么我們無法進行最快的參數(shù)更新,而是走 Z 字形逼近最優(yōu)解。4
激活函數(shù)的作用
加入非線性因素
充分組合特征
下面說明一下為什么有組合特征的作用.
一般函數(shù)都可以通過泰勒展開式來近似計算, 如sigmoid激活函數(shù)中的指數(shù)項可以通過如下的泰勒展開來近似計算:
其中有平方項,立方項及更更高項, 而z=wx+bz=wx+b, 因此可以看作是輸入特征 x 的組合. 以前需要由領(lǐng)域?qū)<抑R進行特征組合,現(xiàn)在激活函數(shù)能起到一種類似特征組合的作用. (思想來源: 微博@算法組)
為什么ReLU,Maxout等能夠提供網(wǎng)絡的非線性建模能力?它們看起來是分段線性函數(shù),然而并不滿足完整的線性要求:加法f(x+y)=f(x)+f(y)和乘法f(ax)=a×f(x)或者寫作。非線性意味著得到的輸出不可能由輸入的線性組合重新得到(重現(xiàn))。假如網(wǎng)絡中不使用非線性激活函數(shù),那么這個網(wǎng)絡可以被一個單層感知器代替得到相同的輸出,因為線性層加起來后還是線性的,可以被另一個線性函數(shù)替代。
梯度消失與梯度爆炸
梯度消失/爆炸原因及解決辦法
原因,淺層的梯度計算需要后面各層的權(quán)重及激活函數(shù)導數(shù)的乘積,因此可能出現(xiàn)前層比后層的學習率小(vanishing gradient)或大(exploding)的問題,所以具有不穩(wěn)定性.那么如何解決呢?
需要考慮幾個方面:
權(quán)重初始化 使用合適的方式初始化權(quán)重, 如ReLU使用MSRA的初始化方式, tanh使用xavier初始化方式.
激活函數(shù)選擇 激活函數(shù)要選擇ReLU等梯度累乘穩(wěn)定的.
學習率 一種訓練優(yōu)化方式是對輸入做白化操作(包括正規(guī)化和去相關(guān)), 目的是可以選擇更大的學習率. 現(xiàn)代深度學習網(wǎng)絡中常使用Batch Normalization(包括正規(guī)化步驟,但不含去相關(guān)). (All you need is a good init. If you can't find the good init, use Batch Normalization.)
由于梯度的公式包含每層激勵的導數(shù)以及權(quán)重的乘積,因此讓中間層的乘積約等于1即可.但是sigmoid這種函數(shù)的導數(shù)值又與權(quán)重有關(guān)系(最大值1/4,兩邊對稱下降),所以含有sigmoid的神經(jīng)網(wǎng)絡不容易解決,輸出層的activation大部分飽和,因此不建議使用sigmoid. ReLU在自變量大于0時導數(shù)為1,小于0時導數(shù)為0,因此可以解決上述問題.
梯度爆炸 由于sigmoid,ReLU等函數(shù)的梯度都在[0,1]以內(nèi),所以不會引發(fā)梯度爆炸問題。 而梯度爆炸需要采用梯度裁剪、BN、設(shè)置較小學習率等方式解決。
激活函數(shù)選擇
首先嘗試ReLU,速度快,但要注意訓練的狀態(tài).
如果ReLU效果欠佳,嘗試Leaky ReLU或Maxout等變種。
嘗試tanh正切函數(shù)(以零點為中心,零點處梯度為1)
sigmoid/tanh在RNN(LSTM、注意力機制等)結(jié)構(gòu)中有所應用,作為門控或者概率值.
在淺層神經(jīng)網(wǎng)絡中,如不超過4層的,可選擇使用多種激勵函數(shù),沒有太大的影響。
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。 原文:https://www.cnblogs.com/makefile/p/activation-function.html©康行天下
總結(jié)
以上是生活随笔為你收集整理的【机器学习】激活函数(ReLU, Swish, Maxout)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跑monkey需要安装什么_坤秀为您解析
- 下一篇: 野兽领主新世界动物哪个强 野兽领主新世界