深度學習基礎(1) 啟用函式

2021-10-06 21:20:59 字數 2741 閱讀 1173

前言

這篇文章首先回答了乙個人們都忽略的問題:在神經網路中,乙個小小的啟用函式為何如此重要?它的作用到底是什麼?然後我就目前主流的啟用函式做了乙個對比討論,並提出一些建議。

啟用函式的本質

這裡首先引出結論:啟用函式是來向神經網路中引入非線性因素的,通過啟用函式,神經網路就可以擬合各種曲線。具體解釋可以看這篇文章:所以說,如果不使用啟用函式,這種情況下每一層輸出都是上一層輸入的線性函式。無論神經網路有多少層,輸出都是輸入的線性函式,這樣就和只有乙個隱藏層的效果是一樣的。這種情況相當於多層感知機(mlp)。

1、sigmoid函式

優點:(1)便於求導的平滑函式;

(2)能壓縮資料,保證資料幅度不會有問題;

(3)適合用於前向傳播。

缺點:(1)容易出現梯度消失(gradient vanishing)的現象:當啟用函式接近飽和區時,變化太緩慢,導數接近0,根據後向傳遞的數學依據是微積分求導的鏈式法則,當前導數需要之前各層導數的乘積,幾個比較小的數相乘,導數結果很接近0,從而無法完成深層網路的訓練。梯度消失的解決方法一般有:換激勵函式,或者用lstm,batchnormalization也可以

(2)sigmoid的輸出不是0均值(zero-centered)的:這會導致後層的神經元的輸入是非0均值的訊號,這會對梯度產生影響。以 f=sigmoid(wx+b)為例, 假設輸入均為正數(或負數),那麼對w的導數總是正數(或負數),這樣在反向傳播過程中要麼都往正方向更新,要麼都往負方向更新,導致有一種**效果,使得收斂緩慢。

(3)冪運算相對耗時

2、tanh函式

tanh函式將輸入值壓縮到 -1~1 的範圍,因此它是0均值的,解決了sigmoid函式的非zero-centered問題,但是它也存在梯度消失和冪運算的問題。

其實 tanh本質和sigmoid一樣。

3、relu函式:全區間不可導

優點:(1)relu的收斂速度比 sigmoid 和 tanh 快;(梯度不會飽和,解決了梯度消失問題)

(2)計算複雜度低,不需要進行指數運算;

(3)適合用於後向傳播。

缺點:(1)relu的輸出不是zero-centered;

(2)dead relu problem(神經元壞死現象):某些神經元可能永遠不會被啟用,導致相應引數永遠不會被更新(在負數部分,梯度為0)。產生這種現象的原因是大多數relu的輸入是負數,因此大多數輸入經過relu函式能得到乙個0(relu is close),因此大多數輸入不能反向傳播通過relu得到乙個梯度,因此

relu的輸入w一般都得不到更新通過隨機反向傳播(sgd)發生了什麼?只是relu函式的輸入的分布函式發生了很小的改變(-0.2的改變),導致了relu函式行為質的改變。我們越過了0這個邊界,relu函式幾乎永久的關閉了。更重要的是relu函式一旦關閉,引數w就得不到更新,這就是所謂的『dying relu』。

(3)relu不會對資料做幅度壓縮,所以資料的幅度會隨著模型層數的增加不斷擴張。採用leakly relu ,保證讓啟用函式在輸入小於零的情況下也有非零的輸出;採用較小的學習率;採用 momentum based 優化演算法,動態調整學習率

4、leakly relu函式

用來解決relu帶來的神經元壞死的問題,可以將0.01設定成乙個變數a,其中a由後向傳播學出來。但是其表現並不一定比relu好

5、elu函式(指數線性函式)

elu有relu的所有優點,並且不會有 dead relu問題,輸出的均值接近0(zero-centered)。但是計算量大,其表現並不一定比relu好

softmax 函式可視為 sigmoid 函式的泛化形式, 其本質就是將乙個 k 維的任意實數向量壓縮(對映)成另乙個 k 維的實數向量, 其中向量中的每個元素的取值範圍都介於 [0,1][0,1][0,1] 之間(可以理解為概率)。softmax 常常是作為多分類神經網路的輸出,比如 lenet-5 中就用softmax 對映到最後的輸入結果,其表示1~10的概率。

tf.nn.relu(tf.nn.conv2d(x_image, w_conv1, strides=[1, 1, 1, 1], padding='same') + b_conv1)

tf.sigmoid(features, name=none)

tf.tanh(features, name=none)

tf.nn.relu(features, name=none)

tf.nn.softplus(features, name=none)

tf.nn.dropout(x, keep_prob, noise_shape=none, seed=none, name=none)

深度學習 啟用函式

如下圖,在神經元中,輸入的 inputs 通過加權,求和後,還被作用了乙個函式,這個函式就是啟用函式 activation function。啟用函式的這些特性可以很好地解釋我們為什麼要用啟用函式。函式公式和圖表如下圖 在sigmod函式中我們可以看到,其輸出是在 0,1 這個開區間內,這點很有意思...

深度學習 啟用函式

主要作用 加入非線性因素,彌補線性模型表達不足的缺陷 sigmoid函式 隨著 x xx 的趨近正 負無窮,y yy 對應的值越來越接近 1 1,趨近飽和 因此當 x xx 100 和 x xx 1000 的差別不大,這個特性丟掉了 x xx 1000 的資訊 tanh函式 對sigmoid函式的值...

深度學習 啟用函式

啟用函式又稱 非線性對映函式 是深度卷積神經網路中不可或缺的模組。可以說,深度網路模型強大的表示能力大部分便是由啟用函式的非線性單元帶來的。這部分共介紹7個啟用函式 sigmoid函式,tanh函式,relu函式,leaky relu函式,引數化relu,隨機化relu和指數化線性單元 elu si...