【深度学习理论】(3) 激活函数
各位同學好,最近學習了CS231N斯坦福計算機視覺公開課,講的太精彩了,和大家分享一下。
激活函數(shù)的作用是把神經(jīng)元的輸入線性求和后,放入非線性的激活函數(shù)中激活,正因為有非線性的激活函數(shù),神經(jīng)網(wǎng)絡才能擬合非線性的決策邊界,解決非線性的分類和回歸問題
1. Sigmoid 函數(shù)
作用:將負無窮到正無窮的輸入,映射到0到1之間。
公式:
若x=0,函數(shù)值=0.5,;若x很大時,函數(shù)值非常接近1;若x很小時,函數(shù)值非常接近0
特點:
(1)將負無窮到正無窮的任何輸入,都擠壓成0到1之間的一個數(shù),又稱為擠壓函數(shù)
(2)可解釋性好,可類比神經(jīng)細胞是否激活。函數(shù)輸出的是0到1之間的值,相當于一個二分類問題,0是一個類別,1是另一個類別
缺陷:
(1)飽和性導致梯度消失。x過小或過大時,梯度接近0。
(2)函數(shù)輸出值都是正數(shù),不是關于零對稱的。
如下圖,如果兩個隱含層的輸出都是正數(shù),會導致每個神經(jīng)元中所有對權重的偏導數(shù)都是同號的。也就是說,對于一個神經(jīng)元所有的權重,要么同時增大,要么同時減小。
假如函數(shù)是??用 sigmoid 函數(shù)激活,對內(nèi)層函數(shù)求偏導,。這個xi是神經(jīng)元的輸入,也是上個神經(jīng)元的輸出。若上個神經(jīng)元用sigmoid函數(shù)激活,那么xi肯定是一個正數(shù)。
也就是,對于函數(shù)的 w1, w2, w3 來說,各自的偏導數(shù)都是正數(shù),即所有的權重是一同增大和減小的。如下面的右圖所示,橫軸代表w1的偏導數(shù),縱軸代表w2的偏導數(shù)。權重的更新方向始終是第一象限或第三象限,要么都是正的要么都是負的。如下圖中藍色線條,現(xiàn)在需要讓w1增大(正),讓w2減小(負),是沒辦法一步到位的。需要大家先一起減小,再一起增大,來回滑動,生成鋸齒形優(yōu)化路徑。
(3)指數(shù)運算較消耗資源。相比加減乘除之類的運算,是比較消耗資源的。
2. tanh 函數(shù)
雙曲正切函數(shù)和 sigmoid 函數(shù)類似,兩者之間可通過縮放和平移變換相互轉換。
特點:
(1)飽和性導致梯度消失
(2)將負無窮到正無窮的任何輸入,都擠壓成-1到1之間的一個數(shù)
(3)函數(shù)輸出值有正有負,關于0對稱
3. ReLU 函數(shù)
ReLU函數(shù)又稱為修正線性單元,將輸入小于0的數(shù)都抹為0。
公式:
特點:
(1)函數(shù)不會飽和,x大于0時,輸入有多大,輸出就有多大。
(2)計算簡單,幾乎不消耗計算資源。
(3)x大于0時,梯度能得到保留,因此ReLU函數(shù)比sigmoid函數(shù)的收斂速度快6倍以上。
缺陷:
(1)輸出不是關于0對稱
(2)x小于0時,梯度為0。導致一些神經(jīng)元是死的(dead ReLU),既不會產(chǎn)生正的輸出,也不會產(chǎn)生正的梯度,也不會發(fā)生更新。
導致Dead ReLU原因是:① 初始化不良,隨機初始化的權重,讓神經(jīng)元所有的輸出都是0,梯度等于0;② 學習率太大,步子跨太大容易亂竄
為了解決Dead ReLU的問題,在ReLU的權重上加一個偏置項0.01,保證所有的神經(jīng)元一開始都能輸出一個正數(shù),使所有的神經(jīng)元都能獲得梯度更新
4. ReLU 函數(shù)改進
為了解決ReLU函數(shù)x小于0,梯度為0的情況,推出了Leaky ReLU 和 ELU函數(shù)。
Leaky ReLU函數(shù)給x小于0時,乘以一個非常小的權重。
公式:
x小于0時滿足線性關系
ELU函數(shù)給x小于0時,使用指數(shù)函數(shù)
公式:
改善了ReLU函數(shù)輸出不關于0對稱的問題,但是使用指數(shù)運算會帶來更大的計算量
5. Maxout
如下圖,現(xiàn)在有兩個輸出神經(jīng)元,現(xiàn)在使用另外一套神經(jīng)網(wǎng)絡對這兩個輸出做處理,使用5個神經(jīng)元(5套權重)對輸出進行處理,從這5個輸出結果中選出最大的最為激活函數(shù)輸出。
特點:不僅僅是一種激活函數(shù),還改變了網(wǎng)絡的結構,因為引入了新的神經(jīng)元,而且參數(shù)個數(shù)呈k倍增加
6. 總結
(1)使用ReLU函數(shù),要注意學習率不能太大,否則會導致梯度消失
(2)可以使用Leaky ReLU或ELU或Maxout,代替ReLU
(3)不要在中間層使用Sigmoid函數(shù)。如果是二分類問題,可以輸出層使用sigmoid函數(shù)
(4)可以使用tanh函數(shù),但不要對它抱有太大的希望。?
總結
以上是生活随笔為你收集整理的【深度学习理论】(3) 激活函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度学习理论】(2) 卷积神经网络
- 下一篇: 【神经网络】(17) Efficient