在使用sig
moid
sigmoid
sigmoi
d啟用函式進行梯度下降調參時,往往會出現梯度消失的問題,即無法找到收斂點。
神經網路主要的訓練方法是bp演算法,bp演算法的基礎是導數的鏈式法則,也就是多個導數的乘積。而sig
moid
sigmoid
sigmoi
d的導數最大為0.25,且大部分數值都被推向兩側飽和區域,這就導致大部分數值經過sig
moid
sigmoid
sigmoi
d啟用函式之後,其導數都非常小,多個小於等於0.25的數值相乘,其運算結果很小。隨著神經網路層數的加深,梯度後向傳播到淺層網路時,基本無法引起引數的擾動,也就是沒有將loss的資訊傳遞到淺層網路,這樣網路就無法訓練學習了。這就是所謂的梯度消失。
更新w k+
1=wk
−ηgk
w^=w^k-\eta g^k
wk+1=w
k−ηg
k後經過神經元,資料會通過sig
moid
\bm
sigmoi
d函式衰減,因為sig
moid
sigmoid
sigmoi
d函式會將比較大的值對映到(0,1)區間內。
靠近輸入層的的引數,每通過乙個隱層,資料就會衰減一次,資料變化越來越小,所以會造成在輸入層附近的梯度較小。
可以使用另一種啟用函式relu函式來改變上面的情況。σ(z
則輸出結果可以對應下圖中綠色的線:
假設輸出層有兩個神經元,則選取其中函式z1.
z2z_1.z_2
z1.z2
中函式值最大的傳給啟用函式。
注:此時應注意比較不同取值範圍內函式值的大小。
舉例:如圖,假設第二層中z
2z_2
z2的引數為0,0
0,00,
0,則z2=
0(在任
意區間內
),z_2=0(在任意區間內),
z2=0(
在任意區
間內),
在(− ∞,
b-\infty,b
−∞,b
)的範圍內z
1z_1z1
,所以此時取z
2z_2
z2,在(b,∞
b,\infty
b,∞)上取z
一般情況:
綠線表示根據資料自學習的啟用函式。(因為引數w,b
w,bw,
b是自己訓練得到的,所以這個神經網路可以自己的資料決定啟用函式。).
假設分組一組有兩個神經元,影象形式可以如下:
如果是三個神經元一組:
訓練:由於根據上面可以看出,我們的啟用函式是分段函式,可能不具有微分值。那麼應該怎麼做呢。(即使沒有辦法微分,可以找到引數的變化對loss函式的變化,也可以使用梯度下降。)
假設乙個神經網路,下圖中紅框內表示兩個中的最大值。
我們可以將較小值的神經元隱去(如下圖),進行訓練,這樣就是乙個線性函式了,那麼去掉的神經元是不是就沒有意義呢?不是的,因為這只是乙個資料的結果,在訓練集中有不同的資料,總會有資料使得這個神經元比另外的乙個大,就可以訓練該神經元上的引數了。
ReLU啟用函式
在深度神經網路中,通常使用一種叫修正線性單元 rectified linear unit,relu 作為神經元的啟用函式。relu起源於神經科學的研究 2001年,dayan abott從生物學角度模擬出了腦神經元接受訊號更精確的啟用模型,如下圖 其中橫軸是時間 ms 縱軸是神經元的放電速率 fir...
ReLU啟用函式雜談
在實現多層感知機 實現中使用了relu啟用函式 r el u x max x,0 relu x max x,0 relu x ma x x,0 形狀大概是這樣的 這裡根據幾個問題來進行回答解釋 為什麼要使用啟用函式呢?簡單來說啟用函式的作用就是將仿射函式進行非線性化,可以擬合出更多的情況。更詳細的解...
啟用函式Relu 及 leakyRelu
relu 及 leakyrelu是深度學習中常用的啟用函式,看了幾篇部落格後,做乙個小的總結。1.relu 數學表示式 a max 0,z 函式影象為 優點 由上圖可以看出,relu得到的sgd的收斂速度較快 缺點 訓練的時候很容易 die 了,對於小於0的值,這個神經元的梯度永遠都會是0,在實際操...