神經網絡基礎2:激活函數

不是所有信息都是有用的,一些只是噪音;激活函數可以幫助神經網絡做這種隔離,激活有用的信息,並抑制無關的數據點。

以下將介紹神經網絡中常用的幾種激活函數:sigmoid、tanh、ReLu、leaky ReLu、PReLu、ELU、maxout、softmax,以及它們各自的特性。

記激活函數的輸入z爲上一層輸出的線性組合,輸入Z爲上一層輸出的多組不同的線性組合(vector)。

sigmoid

f(z) = \sigma (z)= \frac{1}{1+exp(-z)}, \;\;\; f'(z)=f(z)(1-f(z))

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

\left\{\begin{matrix} f(z) = tanh(z)= \frac{exp(z)-exp(-z)}{exp(z)+exp(-z)} = 2\sigma (2z) -1 \\ \\ f'(z)=4\sigma(2z)(1-\sigma(2z)) = 1-f^2(z) \end{matrix}\right.

可以看到tanh函數是對sigmoid函數的拉伸與偏移,輸出是zero-centered的;然而,gradient vanishing的問題(飽和區比sigmoid更大)和冪運算的問題仍然存在。

ReLU

Rectified Linear Units,線性整流單元

\left\{\begin{matrix} f(z) = ReLU(z)= max(z,0) \\ \\ f'(z)=1,\; \;if\; z > 0 \;else\; 0 \end{matrix}\right.

可以看到,當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

\left\{\begin{matrix} f(z) = z \;if\; z > 0 \;else\; az \\ \\ f'(z)=1 \;if\; z > 0 \;else\; a \end{matrix}\right.

Leaky ReLU將a作爲人工設定的超參,而Parametric ReLU則將a當做一個可學習的參數。

Exponential Linear Units,ELU

\left\{\begin{matrix} f(z) = z \;if\; z > 0 \;else\; a(e^z-1) \\ \\ f'(z)=1 \;if\; z > 0 \;else\; ae^z \end{matrix}\right.

ELU在左側使用指數函數,具有軟飽和性,對輸入變化或噪聲更魯棒。

這些變形理論上雖然好於ReLU,但在實際使用中目前並沒有好的證據表明它們總是優於ReLU。

高斯誤差線性單元(GELU)

f(z) = 0.5z(1+tanh(\sqrt{2/\pi}(z+0.044715z^3)))

高斯誤差線性單元激活函數在最近的 Transformer 模型(谷歌的 BERT 和 OpenAI 的 GPT-2)中得到了應用。不怎麼理解,先記錄下來,有時間再看下論文(https://arxiv.org/pdf/1606.08415.pdf)研究下。

maxout

\left\{\begin{matrix} f(Z) = max(Z_1,Z_2,...,Z_k) \\ \\ f'(Z_i)=1 \; if\; Z_i=f(Z) \;else \;0 \end{matrix}\right.

主要用來對多組feature map進行篩選,只保留最顯著的單元,抑制小值單元(無關或不重要),減少干擾;常見於CV任務中。

softmax

\left\{\begin{matrix} f(Z_i) = softmax(Z_i)= \frac{exp(Z_i)}{\sum_{j=1}^{K}{exp(Z_j)}} \\ \\ f_i'(Z_j)=f(Z_i)-f(Z_i)f(Z_j) \;if\; i=j \;else\; -f(Z_i)f(Z_j) \end{matrix}\right.

其中取指數,第一個原因是要模擬 max 的行爲,所以要讓大的更大;第二個原因是需要一個可導的函數。

每個輸出值都在0-1之間,和爲1,可作爲概率分佈,主要用於多分類任務的輸出層;

當K=2時,softmax有2組參數W1、W2,而sigmoid只要一組參數W,參數有冗餘,化簡後與sigmoid等價;softmax(Z_i)= \frac{exp(Z_i)}{\sum_{j=1}^{2}{exp(Z_j)}}=\frac{1}{1+{exp(Z_j-Z_i)}} \\ = \frac{1}{1+{exp(W_jX-W_iX)}} = \frac{1}{1+{exp(-\tilde{W}^TX)}}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章