這篇學習筆記主要參考和綜合了兩個帖子的內容,詳見參考文件,感謝兩位大神。
啟用函式,並不是去啟用什麼,而是指如何把「啟用的神經元的特徵」通過函式把特徵保留並對映出來(保留特徵,去除一些資料中是的冗餘),這是神經網路能解決非線性問題關鍵。
目前知道的啟用函式有如下幾個:sigmoid,tanh,relu,softmax。
simoid
函式也稱
s曲線:
f(x)=11+e−x
tanh:f(x)=tanh(x)
relu
:f(x)=max(x,0)
softmax:f(x)=log(1+exp(x))
這句話字面的意思很容易理解,但是在具體處理影象的時候是什麼情況呢?我們知道在神經網路中,對於影象,我們主要採用了卷積的方式來處理,也就是對每個畫素點賦予乙個權值,這個操作顯然就是線性的。但是對於我們樣本來說,不一定是線性可分的,為了解決這個問題,我們可以進行線性變化,或者我們引入非線性因素,解決線性模型所不能解決的問題。
這裡插一句,來比較一下上面的那些啟用函式,因為神經網路的數學基礎是處處可微的,所以選取的啟用函式要能保證資料輸入與輸出也是可微的,運算特徵是不斷進行迴圈計算,所以在每代迴圈過程中,每個神經元的值也是在不斷變化的。
這就導致了tanh特徵相差明顯時的效果會很好,在迴圈過程中會不斷擴大特徵效果顯示出來,但有是,在特徵相差比較複雜或是相差不是特別大時,需要更細微的分類判斷的時候,sigmoid效果就好了。
還有乙個東西要注意,sigmoid 和 tanh作為啟用函式的話,一定要注意一定要對 input 進行歸一話,否則啟用後的值都會進入平坦區,使隱層的輸出全部趨同,但是 relu 並不需要輸入歸一化來防止它們達到飽和。
其實這個特性主要是對於relu,它就是取的max(0,x),因為神經網路是不斷反覆計算,實際上變成了它在嘗試不斷試探如何用乙個大多數為0的矩陣來嘗試表達資料特徵,結果因為稀疏特性的存在,反而這種方法變得運算得又快效果又好了。
所以我們可以看到目前大部分的卷積神經網路中,基本上都是採用了relu 函式。
對於上面的理論說明,似乎還不是很直觀,所以再看下知乎中lee philip舉的例子吧,感覺很通俗易懂。裡面有個圖感覺作者畫反了,所以按照我的理解進行了修改。另外,對於例子中也存在一些疑問,就是作者神經網路圖中直接由第一層到第三層,這個在在cnn中沒有見過。
以下,同種顏色為同類資料。
某些資料是線性可分的,意思是,可以用一條直線將資料分開。比如下圖:
這時候你需要通過一定的機器學習的方法,比如感知機演算法(perceptronlearning algorithm) 找到乙個合適的線性方程。
但是有些資料不是線性可分的。比如如下資料:
第二組資料你就沒有辦法畫出一條直線來將資料區分開。
這時候有兩個辦法,第乙個辦法,是做線性變換(lineartransformation),比如講x,y變成x^2,y^2,這樣可以畫出圓形。如圖所示:
如果將座標軸從x,y變為以x^2,y^2為標準,你會發現資料經過變換後是線性可分的了。大致示意圖如下:
另外一種方法是引入非線性函式。我們來看異或問題(xor problem)。以下是xor真值表
這個真值表不是線性可分的,所以不能使用線性模型,如圖所示
我們可以設計一種神經網路,通過啟用函式來使得這組資料線性可分。
啟用函式我們選擇閥值函式(threshold function),也就是大於某個值輸出1(被啟用了),小於等於則輸出0(沒有啟用)。這個函式是非線性函式。
神經網路示意圖如下:
其中直線上的數字為權重。圓圈中的數字為閥值。第二層,如果輸入大於1.5則輸出1,否則0;第三層,如果輸入大於0.5,則輸出1,否則0.
我們來一步步算。
第一層到第二層(閥值1.5)
第二層到第三層(閥值0.5)
可以看到第三層輸出就是我們所要的xor的答案。
經過變換後的資料是線性可分的(n維,比如本例中可以用平面),如圖所示:
總而言之,啟用函式可以引入非線性因素,解決線性模型所不能解決的問題。
[1][2]帖子中lee philip的回答
卷積神經網路 卷積神經網路啟用層
在生物意義上的神經元中,只有前面的樹突傳遞的訊號的加權和值大於某乙個特定的閾值的時候,後面的神經元才會被啟用。簡單的說啟用函式的意義在於判定每個神經元的輸出 放在人臉識別卷積神經網路中來思考,卷積層的啟用函式的意義在於這一塊區域的特徵強度如果沒有達到一定的標準,就輸出0,表明這種特徵提取方式 卷積核...
神經網路啟用函式
2018,jul 23 學了深度學習也快近一年了,在學deep learning的時候什麼教程都去看,起初學起來也特別的雜亂,前面的基礎沒弄懂還一直往下學,自然導致我學到後面的時候有點崩潰什麼都看不懂,並且因為自己還是一名在校生,平常課程也非常多,沒有乙個連續的學習時間也導致我的學習是斷斷續續,在學...
啟用函式 神經網路
andrew的 neural networks and deep learning 課程學習筆記 如圖所示,是乙個簡單的三層神經網路,如果只使用線性啟用函式或者恒等啟用函式 不使用啟用函式 那麼神經網路的輸出就只是輸入函式的線性變化,因為線性啟用函式的組合依然是線性啟用函式。這種情況下,不管使用多少...