不是所有信息都是有用的,一些只是噪音;激活函數可以幫助神經網絡做這種隔離,激活有用的信息,並抑制無關的數據點。
以下將介紹神經網絡中常用的幾種激活函數:sigmoid、tanh、ReLu、leaky ReLu、PReLu、ELU、maxout、softmax,以及它們各自的特性。
記激活函數的輸入z爲上一層輸出的線性組合,輸入Z爲上一層輸出的多組不同的線性組合(vector)。
sigmoid
sigmoid函數是一個平滑函數,並且具有連續性和可微性;其輸出值在(0,1)之間,可當做概率使用,可用於二分類模型輸出層的激活函數;隨着abs(z)越來越大,梯度會越來越小,在abs(z)>5之後梯度就基本接近0了;越是接近sigmoid的兩端,相對z的改變,f(z)就越趨向於作出非常小的反應;sigmoid函數在其大部分定義域內都飽和,在這些飽和區域內梯度會很小或者消失了(由於值極小,無法做出顯著的改變了),網絡拒絕進一步學習,或者學習速度劇烈地變慢了,這種現象稱之爲梯度消失,當網絡較深時(鏈式法則,導數累乘),這種現象會越加明顯;但是反過來,sigmoid的飽和特性能夠讓其對輸入變化或噪聲更魯棒。
另一個問題,sigmoid函數的輸出在(0,1)之間,都是正數,不是zero-centered的,這會拖慢學習的收斂速度(原因可以參看上一篇https://blog.csdn.net/yeqiustu/article/details/106172592)。
還有一個問題就是sigmoid函數涉及冪運算,計算量較大。
tanh
可以看到tanh函數是對sigmoid函數的拉伸與偏移,輸出是zero-centered的;然而,gradient vanishing的問題(飽和區比sigmoid更大)和冪運算的問題仍然存在。
ReLU
Rectified Linear Units,線性整流單元
可以看到,當z<0時,ReLU硬飽和,梯度爲0;而當z>0時,則梯度爲1;所以,ReLU 能夠在z>0時保持梯度不衰減,從而緩解梯度消失問題,收斂速度遠快於sigmoid和tanh;激活部分神經元,增加稀疏性;而且計算速度非常快,只需要判斷輸入是否大於0;
當輸入落入硬飽和區時,對應權重無法更新,這種現象被稱爲Dead ReLU Problem--“神經元死亡”,當網絡中很多神經元都處於死亡狀態,則網絡會訓練不動;有兩個主要原因可能導致這種情況產生: (1) 非常不幸的參數初始化,這種情況比較少見 (2) learning rate太高導致在訓練過程中參數更新太大,不幸使網絡進入這種狀態。解決方法是可以採用Xavier初始化方法,以及避免將learning rate設置太大或使用adagrad等自動調節learning rate的算法。
另外,ReLU的輸出不是zero-centered(可通過BN等手段解決)。
儘管存在這兩個問題,ReLU目前仍是最常用的激活函數,在搭建人工神經網絡的時候推薦優先嚐試!
ReLU的變形
爲了解決Dead ReLU Problem和緩解ReLU非zero-centered的問題,出現了一些ReLU的變形,即對負數硬飽和區進行修改,使這區域的輸出爲負和梯度不再爲0;
Leaky ReLU與Parametric ReLU
Leaky ReLU將a作爲人工設定的超參,而Parametric ReLU則將a當做一個可學習的參數。
Exponential Linear Units,ELU
ELU在左側使用指數函數,具有軟飽和性,對輸入變化或噪聲更魯棒。
這些變形理論上雖然好於ReLU,但在實際使用中目前並沒有好的證據表明它們總是優於ReLU。
高斯誤差線性單元(GELU)
高斯誤差線性單元激活函數在最近的 Transformer 模型(谷歌的 BERT 和 OpenAI 的 GPT-2)中得到了應用。不怎麼理解,先記錄下來,有時間再看下論文(https://arxiv.org/pdf/1606.08415.pdf)研究下。
maxout
主要用來對多組feature map進行篩選,只保留最顯著的單元,抑制小值單元(無關或不重要),減少干擾;常見於CV任務中。
softmax
其中取指數,第一個原因是要模擬 max 的行爲,所以要讓大的更大;第二個原因是需要一個可導的函數。
每個輸出值都在0-1之間,和爲1,可作爲概率分佈,主要用於多分類任務的輸出層;
當K=2時,softmax有2組參數W1、W2,而sigmoid只要一組參數W,參數有冗餘,化簡後與sigmoid等價;