激活函數與權值初始化


1.sigmod函數——tf.nn.sigmoid()

 

 

sigmod函數性質:

1.如圖像所示其值域在[0,1]之間,函數輸出不是0均值的,權重更新效率降低,因為這會導致后層的神經元的輸入是非0均值的信號,這會對梯度產生影響:假設后層神經元的輸入都為正(e.g. x>0 elementwise in ),那么對w求局部梯度則都為正,這樣在反向傳播的過程中w要么都往正方向更新,要么都往負方向更新,導致有一種捆綁的效果,使得收斂緩慢。 當然了,如果你是按batch去訓練,那么每個batch可能得到不同的符號(正或負),那么相加一下這個問題還是可以緩解。因此,非0均值這個問題雖然會產生一些不好的影響,不過跟上面提到的 kill gradients 問題相比還是要好很多的。

2.如圖當其取值遠離原點時,其梯度越來越小趨近於0,在反向傳播中,用鏈式求導法,求權值求梯度,梯度逐層減小,權值更新速度緩慢,一般不超過五層sigmod層,就會出現梯度彌散,即梯度飽和問題。

3.要進行指數運算,速度慢

4.定義域(0, 1) 可以表示作概率,或者用於輸入的歸一化,如Sigmoid交叉熵損失函數。

5.sigmoid在壓縮數據幅度方面有優勢,在深度網絡中,在前向傳播中,sigmoid可以保證數據幅度在[0,1]內,這樣數據幅度穩住了,不會出現數據擴散,不會有太大的失誤。

2.tanh 函數——(tf.nn.tanh())

  

 

tanh函數性質

1.如圖所示,值域是0均值的,權值更新快,而且也能保證數據幅度穩定。

2.也有梯度彌散問題,要進行指數運算,速度慢。

一般二分類問題中,隱藏層用tanh函數,輸出層用sigmod函數

 3.relu函數——σ(x)=max(0,x)(tf.nn.relu())

relu函數性質

1.當輸入為正數的時候,不存在梯度飽和問題;當輸入是負數的時候,ReLU是完全不被激活的,這就表明一旦輸入到了負數,ReLU就會死掉。這樣在前向傳播過程中,還不算什么問題,有的區域是敏感的,有的是不敏感的。但是到了反向傳播過程中,輸入負數,梯度就會完全到0,這個和sigmod函數、tanh函數有一樣的問題。

2.ReLU函數也不是以0為中心的函數,權值更新慢

3.計算速度要快很多。ReLU函數只有線性關系,不管是前向傳播還是反向傳播,都比sigmod和tanh要快很多。

4.在正向傳播時,relu不會對數據做幅度壓縮,所以如果數據的幅度不斷擴張,那么模型的層數越深,幅度的擴張也會越厲害,最終會影響模型的表現。

5.但是relu在反向傳導方面可以很好地將梯度傳到后面,這樣在學習的過程中可以更好地發揮出來。

 

4.elu函數——(tf.nn.elu())

      elu函數公式     elu函數圖

ELU函數是針對ReLU函數的一個改進型,相比於ReLU函數,在輸入為負數的情況下,是有一定的輸出的,而且這部分輸出還具有一定的抗干擾能力。這樣可以消除ReLU死掉的問題,不過還是有梯度飽和和指數運算的問題。

 

5.prelu函數——σ(x)=max(ax,x)(tf.nn.relu())
prelu函數圖

1.參數α一般是取0~1之間的數,而且一般還是比較小的,如零點零幾。當α=0.01時,PReLU為Leaky ReLU。

2.PReLU也是針對ReLU的一個改進型,在負數區域內,PReLU有一個很小的斜率,雖然斜率很小,但是不會趨於0。這樣也可以避免ReLU死掉的問題。相比於ELU,PReLU在負數區域內是線性運算,速度快。

6.softplus函數——σ(x)=log(1+ex)(tf.nn.softplus())

 softplus可以看作是ReLu的平滑。根據神經科學家的相關研究,softplus和ReLu與腦神經元激活頻率函數有神似的地方。也就是說,相比於早期的激活函數,softplus和ReLu更加接近腦神經元的激活模型。

 

7.softmax函數

 

softmax把一個k維的real value向量(a1,a2,a3,a4….)映射成一個(b1,b2,b3,b4….)其中bi是一個0-1的常數,且k項之和為1,用於多分類任務,bi最大的那一項為所屬類別。

 

8.maxout函數

 

f(x)=max(wT1x+b1,wT2x+b2,,wTn+bn)

是將激活函數用一層全鏈接層取擬合,輸出為,那層的最大值,理論maxout網絡能夠近似任意連續函數,且當w2,b2,…,wn,bn為0時,退化為ReLU。Maxout能夠緩解梯度消失,同時又規避了ReLU神經元死亡的缺點,但增加了參數和計算量,對於中間層數k,其參數會隨k增長。

權值初始化

1.高斯初始化

2.均值初始化

3.Xavir初始化——(tf.contrib.layer.xavier_initializer_conv2d())

如上圖nj為第j層的節點數,為均勻分布均值為1,且保證前向傳播和反向傳播時每一層的方差一致,原因可以見論文及其解釋為了,當激活函數為sigmoid和tanh的時候比較適用。

這對梯度消失有好處?感覺只是保證了在前向傳播中方差一致的問題,解決了前向傳播中的數據穩定性保證問題,可以防止數據擴散和爆炸問題

4.he initia——激活函數為relu比較適用(tf.contrib.layers.variance_scaling_initializer())


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM