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