不同激活函數(activation function)的神經網路的表達能力是否一致?

1.表達能力是否一致是指:相同網路架構下,但是activation function不同的網路所能表達的函數集合是否一致?(比如sigmoid, tanh, ReLU等)。比如sigmoid的NN的VC dimension(雖然不知道如何證明。。。):

2.看到Bengio大神關於ReLU的論文裡面描述:activation function 是 ReLU的網路具有sparsity,ReLU (x&>0)的時候是一段linear的函數,那麼神經元(相鄰層)之間的激活方式是linear的,然而最終輸出的結果與輸入可能是non-linear的關係 ,這種non-linear可以認為是通過在每一層選擇部分激活neuron來實現的(如下圖)。。。這一點和訓練過程中的dropout有什麼相似之處嗎?ReLU和dropout有一些重疊的效果,比如ReLU這種性質(max(0,x))也會起到ensemble的作用。此外,dropout沒法解決gradient diffusion的問題,而ReLU可以。ReLU和Dropout都可以認為不需要引入額外的參數。但是ReLU的ensemble能力是le Dropout的。

3. 什麼情況下用sigmoid或者tanh比用ReLU要好?(效果方面:比如訓練速度、模型準確率等。)
4. ReLU是如何控制sparsity的程度的?與拐點位置無關。(如果Input的mean為0,初始化weight的mean也是0,那麼最初訓練的時候,一般來說一層只有一半的神經元會active?)
(初學。。有點困惑。。


瀉藥~不會一致的,不僅表達能力不一樣,泛化能力,訓練效果都不一樣。


然而現實功利的問題是,VC維再好看,訓練不到,訓練不快也沒有用,而且深層網路的VC維是很難估計的,一般不會靠這個bound來吃飯,反正直觀上加深後也能提高,討論確切bound在那裡,工程上有點沒意義。

我按照自己的理解列舉幾個激活函數及其優勢和缺陷,我的出身專業問題,導致這同大部分工科科班的理解有點不一樣,所以大家將下面當作拋屎引鐦,請謹慎接受

  • 每層都是完全線性的激活函數,會導致神經網路退化成LR,一般不會選擇這種激活函數,雖然其表達能力雖然同LR一致,然而訓練過程高度非線性,完全異於LR,用於非常初期的深層網路訓練理論研究是有幫助的。

  • 每層都是sigmoid,這樣會帶來訓練飽和問題(http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf),你可以籠統認為飽和就是trap在某個區間上,該區間對提升性能毫無幫助。按照原始文章引舉的說法,sigmoid的二次導數等於sigma(1-sigma)(1-2sigma),輸入為零的時候,二次導數為零(曲率為零,hessian帶奇點),相當於損失函數曲面上有個大平原,導致訓練遲緩。
    • 然而這個理論太簡單粗暴了,深層網路的損失函數出現大平原不是激活函數二次導數為不為零這麼簡單的事情。
    • 為了理解這種大平原的出現,我們可以用另外一個直觀粗淺地方式理解飽和,該方法籠統來說,如果參數W潛在的解空間越大,訓練越難找到極小。按照如下方式計算潛在解空間,假設你的輸入x都被rescale到0-1之間,你計算信息熵-sum x_i log x_i,發現輸入x=0.5附近的區間擁有最大的自由度(自由活動空間大小約等於exp(熵)),到了sigmoid中,相當於要求Wx為零。更一般來說,計算輸入為高斯時x sim  N (0.5, sigma),使得Wx等於k的W解空間大小,可以如下計算:int delta(Wx-k)
ho_{gauss}(x)dWdxdelta(.)是狄拉克函數,對於sigmoid來說,k等於零,上面的積分無窮大(W垂直x便可,有無限解)。對於relu來說,k不等於零,積分結果為有限值C_n k^{n-1},n為x的維度,C_n同k無關。sigmoid的解空間遠超relu。導致分類問題中,sigmoid在0.5附近的區間過大,每層都花大量時間搜索,訓練沒法提升。越深層的網路,越難以跳出,這是熵壘(俗稱大平原),用於區別單純局部極小帶來的訓練阻礙(坑王之王)。
    • tanh解空間也比sigmoid小,當然上面為了展示思路,理論過於簡化了,沒法比較tanh和relu,實際上解空間是 exp(信息熵) x(解空間大小),x可以在不是0.5處取極值,實際這樣做tanh的解空間還是比relu大不少,推導太長就不寫了。

  • sigmoid的好處並不是在訓練上的,而是你的模型如果牽涉到許多概率問題,比如DBN,RNN,LSTM中的一些gate,你就不能將sigmoid換成relu了,這樣概率表達都錯了。

  • relu型的,如上所述用於緩和飽和問題。而且還有部分緩和梯度衰減的作用,不像sigmoid一樣,relu沒有一個梯度衰減的尾巴,強度上不封頂。使得反向傳播過程只有權值的乘積帶來梯度的衰減。然而,一些網路可能需要clip掉梯度,避免不封頂的爆炸梯度回傳。

  • 稀疏度問題,relu的稀疏機理同dropout機理不一樣,dropout等效於動態L2規範帶來的稀疏,是通過打壓W來實現稀疏的。relu稀疏是因為如果輸入為零,輸出也會為零,這樣多層輸入輸出更加貼近於原始高維數據層的稀疏度,畢竟輸入信息本來就是高度稀疏的,當然這個只是形象的理解,確切更嚴格的理解還請高手解釋。

=============================================================
之前有細心的人說第二部分計算有誤,我現在嚴格計算解空間表達式,非常複雜。

假設輸入x滿足分布
ho(vec{x}),x的維度是n,輸出為s=vec{W} cdot vec{x}。固定s下,單個輸出節點的W平均解空間大小應該如下表示為:

int delta(vec{W} cdot vec{x}-s)
ho(vec{x})dvec{x}dvec{W}

delta(.)是狄拉克函數。然而這個積分會出現無窮大,我們需要一個限定,合理的限定是假設權重平方等於某個固定值vec{W}^2=R^2,實際上你跑一個隱層巨大的網路,所有權重的平方和就是接近固定值(就是方差,因為均值為零)。受限的W平均解空間大小為:

int delta(vec{W}^2-R^2) delta(vec{W} cdot vec{x}-s)
ho(vec{x})dvec{x}dvec{W}

先計算W積分,計算這個積分要換到n維球座標,需要利用狄拉克函數的一些性質:


 int delta(W^2-R^2) delta(W|x|cos(	heta)-s) W^{n-1} dW dOmega_{n-1} =\
frac{R^{n-3}}{|x|} int delta(cos(	heta)-frac{s}{R|x|})dOmega_{n-1} =\
frac{R^{n-3}}{|x|} int delta(cos(	heta)-frac{s}{R|x|}) sin(	heta)^{n-3} dcos(	heta) dOmega_{n-2} =\
frac{R^{n-3}}{|x|} S_{n-2} left(sqrt{1-left(frac{s}{R|x|}
ight)^{2}}
ight)^{n-3}

S_{n-2}是n-2維球面面積,綜合起來是,W平均解空間大小:

int frac{R^{n-3}}{|x|} S_{n-2} left(sqrt{1-left(frac{s}{R|x|}
ight)^{2}}
ight)^{n-3} 
ho(vec{x}) dvec{x}

下面考慮s輸出到一個激活函數A上,得到A(s),這個激活函數本身有個信息容度,我們用exp(信息熵)表示:exp(-A(s) log A(s)),經過激活函數後,最終的有效解空間是「信息容度」乘上W解空間大小。

int frac{R^{n-3}}{|x|} S_{n-2} left(sqrt{1-left(frac{s}{R|x|}
ight)^{2}}
ight)^{n-3} 
ho(vec{x}) dvec{x} ; exp(-A(s) log A(s))

利用介值定理,上式正比於:

left(sqrt{1-alpha s^2}
ight)^{n-3} ; exp(-A(s) log A(s))

假設輸出節點獨立無關,然後考慮n個輸出節點,總的解空間大小為單個空間大小的連乘,也就是n次方:

left( left(sqrt{1-alpha s^2}
ight)^{n-3} ; exp(-A(s) log A(s)) 
ight) ^{n}

我們畫出s從0-1的圖像,分別是sigmoid(紅色曲線),relu(藍色曲線),tanh(綠色曲線),注意到tanh是雙邊對稱的,單個輸出節點的大小需要額外乘以2,我們取alpha=0.1,n取20,圖像如下(橫軸是輸出,縱軸是固定輸出下解空間大小):

我們取alpha=0.01,n取100,圖像如下:

可以這樣直觀理解,exp指數貢獻巨大,故此上式主要貢獻在A(s)=0.5處取得,此時,對於sigmoid來說,s=0,對於relu來說,s=0.5,這樣根號裡面的項對於sigmoid來說恆等於1,而對於relu來說,恆小於1。當輸入n非常大的時候(100夠大了),relu的積分貢獻遠小於sigmoid函數,或者說sigmoid函數的解空間遠超relu。tanh也是遠超過relu的,

寫的這麼辛苦,我是不是要發篇文章說下這個觀點?


以下內容節選自我的個人博客「廣涵步落閣」。
原文鏈接:博文後續:見證者、概念實體、靈魂
作者:寧廣涵

(1)
如果使用Rectified Linear Unit(ReLU)作為activation unit的話,不能使learning rate太高,否則可能讓某些神經元達到死寂狀態,變成0,而且不可逆轉,然後就再也學不到東西了。

如果要克服這一點,可以用 leaky ReLU,或者更新的 parametric ReLU (PReLU), Randomized ReLU(RReLU)。隨機性可以防止overfitting——實驗證明RReLU效果最好[1],train出來error最小。

參考文章:
[1] Must Know Tips/Tricks in Deep Neural Networks (by

(2)
引申一下,其實使用regularization,也是為了防止overfitting——

不同的regularization的方法,是在update weights的時候,採用了不同的方式,來限制weights的變化。

概念實體是人們為了區分事物建立的高維實體,在腦海中建立高維的結構,來區分事物。這個高維的曲面,是weights,即概念的壁壘和原則。人們通過認知調整概念,也通過概念來獲得認知。

為了更直白、直觀、通俗地解釋不同regularization方法,我在這裡使用類比和隱喻。Regularization是對概念和高維曲面的一種「裝修」的方式,通過限制作用,將高維曲面的粗糙原型變得更加柔和。其理念是,具有一般化的概念應該能識別任何具有相同性質的事物,而不是僅僅對範例(training)進行過度解讀(over-fitting)。過度解讀往往造成這種概念和高維曲面具有過多細節,形狀不夠柔和。通過regularization能夠強迫概念是柔和的,這樣在訓練的過程中智能會去學習事物的本質,而不是去鑽牛角尖。

以下逐個分析一些常見的regularization的方法——

  • L2 regularization
    • 相當於做陶藝,用柔和的手,在陶瓷(weights,即概念)上製造曲面
  • L1 regularization
    • 相當於用鋒利的刀,削木頭,製造工藝品(weights,即概念),有稜有角
  • Elastic net regularization
    • 是L2和L1的結合,是細膩的工匠,一下材料,再用磨砂打磨
  • Max Norm constraints
    • 限制w最大值,相當於有一個模子,擠壓一下,超出的部分會被擠回去
  • Dropout
    • 隨機使某些weight一定幾率不改變,而改變另外的weights
    • 相當於理髮師使用帶有鋸齒的剪刀修剪頭髮,一縷頭髮有長有短,清新自然。

直覺化、使用隱喻可以更好地認知事物,符合人類認知的特點。


更正一下樓上的一個回答:
ReLU並不是目前最好的激活函數,至少現在有很多激活函數的性能超過了ReLU,舉個例子,ELU(當然現在又已經有了更多比ELU更好的激活函數)

這是ELU的表達式
他與ReLU的不同之處在於:
1、它在x&<0處激活值為負值,而且導數不為0
這是一點很好的性質,因為ReLU在輸入為負時導數會變成0,這會引起神經元死亡的問題(詳情可以參見樓上的回答),ELU改進了這一點,並且讓這部分呈現一種軟飽和,這種軟飽和有助於提升雜訊魯棒性(顯然LReLU對雜訊會敏感)
2、可以使得輸出均值為0
ReLU的所有輸出都為非負數,所以它的輸出均值必然非負,而這一點性質會導致網路的均值偏移(bias shift也叫mean shift)。所以ReLU在訓練一些超深網路的時候就會出現不收斂的問題,這個問題也很致命。同時也有不少方法可以改進激活函數,比如google的Batch Normalization方法讓sigmoid函數可以重新被使用,sigmoid比較好的表達能力搭配這種方法就取得了比較好的效果。
所以我覺得ReLU只能說是用的最普遍,計算比較快的一種激活函數,但不是最好的。至於哪種激活函數表達能力最強,最好,也不能單獨來看,要結合到系統當中,從系統性能來評估激活函數適不適合。


為什麼通常Relu比sigmoid和tanh強,有什麼不同?
主要是因為它們gradient特性不同。sigmoid和tanh的gradient在飽和區域非常平緩,接近於0,很容易造成vanishing gradient的問題,減緩收斂速度。vanishing gradient在網路層數多的時候尤其明顯,是加深網路結構的主要障礙之一。相反,Relu的gradient大多數情況下是常數,有助於解決深層網路的收斂問題。Relu的另一個優勢是在生物上的合理性,它是單邊的,相比sigmoid和tanh,更符合生物神經元的特徵。
而提出sigmoid和tanh,主要是因為它們全程可導。還有表達區間問題,sigmoid和tanh區間是0到1,或著-1到1,在表達上,尤其是輸出層的表達上有優勢。

怎麼控制Relu的Sparsity?

題主說的對,如果初始化是Mean 0的uniform distribution, 差不多一半神經元的輸出會為0,稀疏度大約50%。但是稀疏度可以很容易的通過sparsity-inducing regularization提高, 可以參考 sparse autoencoder採用類似regularization。https://web.stanford.edu/class/cs294a/sparseAutoencoder.pdf

為什麼Relu要配合Sparsity?
神經網路里每一層的矩陣相乘求和(sum(Wi * Xi), 線性)和activation function其實是把數據從一個空間投射到另一個空間的過程,目的是能更好的把數據分類。有些數據是線性可分的,如下圖

然後,更多複雜的情況下,數據是非線性可分的。如下圖。

這就是為什麼神經網路都要選擇非線性模型的原因。sigmoid, tanh是非線性激活函數,Relu只有一個拐點,大多數情況下是線性的,所以必須要有sparsity,變成一個非線性的模型。

Relu配合的sparsity和dropout有何不同?
個人認為,目的驅動不同。Relu配合使用sparsity是為了加入非線性變換(Relu本身就會輸出為0),而dropout是為了防止過擬合,同時訓練多個隨機的網路。Dropout是隨機的,而稀疏模型一般來說不是隨機的。


relu是最強的,最近應該有一篇論文出來,專門討論這個問題


已經兩個人邀請了……可是納米醬的回答已經爆表了……感覺沒什麼補充的。
我不要臉的說下我的看法。
sigmod最大的優勢就如納米醬所言,如果模型設計概率,那就只有用他了。而涉及到概率的模型,最突出的個人感覺就是rbm了。
rbm真的很有意思,如果單純從工業界來看,似乎rbm不如CNN和rnn那麼好用,可是rbm真的很靈活,特別是利用能量來限制模型的表現,多有趣!
好吧我就是rbm吹……


補充一點實際操作上的回答:

ReLU的應用最廣最普遍,但是性能不一定最好,缺點有輸入為負時如果學習率很大會導致該神經元死亡永遠不會被激活,上面提到的Leaky ReLU 和eLU都成功解決了這一點,所以實踐的時候對待ReLU的學習率要謹慎.另外一點是輸出均值不為0的問題(mean shift)

可以嘗試Leaky ReLU 和eLU,可能會帶來不一樣的表現.

可以嘗試tanh但是不要期待過高

最後是sigmoid

另外還有goodfellow的maxout, 泛化了Leaky ReLU和ReLU,同時不會導致神經元死亡和梯度為0的情況.缺點是參數會double.


使用elu激活函數的時候能不能用交叉熵損失?


推薦閱讀:

實驗室原型到產品,距離、差距有多遠?
基於深度學習的自然語言處理在 2016 年有哪些值得期待的發展?
如何評價Yann LeCun 說的「要研究機器學習,本科應盡量多學物理和數學課」?
如何評價 ICLR 2017 中關於 Rethinking Generalization 的那篇文章?
最優化問題中,牛頓法為什麼比梯度下降法求解需要的迭代次數更少?

TAG:機器學習 | 深度學習(Deep Learning) |