1. 程式人生 > >卷積神經網路學習--啟用函式

卷積神經網路學習--啟用函式

這篇學習筆記主要參考和綜合了兩個帖子的內容,詳見參考文件,感謝兩位大神。

1 什麼是啟用函式?

啟用函式,並不是去啟用什麼,而是指如何把“啟用的神經元的特徵”通過函式把特徵保留並映射出來(保留特徵,去除一些資料中是的冗餘),這是神經網路能解決非線性問題關鍵。

目前知道的啟用函式有如下幾個:sigmoid,tanh,ReLu,softmax。 

simoid函式也稱S曲線:f(x)=11+e−x

tanh:f(x)=tanh(x)

ReLUf(x)=max(x,0)

softmax:f(x)=log(1+exp(x))

2 神經網路中為什麼要使用啟用函式?

  • 啟用函式是用來加入非線性因素的,因為線性模型的表達力不夠

這句話字面的意思很容易理解,但是在具體處理影象的時候是什麼情況呢?我們知道在神經網路中,對於影象,我們主要採用了卷積的方式來處理,也就是對每個畫素點賦予一個權值,這個操作顯然就是線性的。但是對於我們樣本來說,不一定是線性可分的,為了解決這個問題,我們可以進行線性變化,或者我們引入非線性因素,解決線性模型所不能解決的問題。

這裡插一句,來比較一下上面的那些啟用函式,因為神經網路的數學基礎是處處可微的,所以選取的啟用函式要能保證資料輸入與輸出也是可微的,運算特徵是不斷進行迴圈計算,所以在每代迴圈過程中,每個神經元的值也是在不斷變化的。

這就導致了tanh特徵相差明顯時的效果會很好,在迴圈過程中會不斷擴大特徵效果顯示出來,但有是,在特徵相差比較複雜或是相差不是特別大時,需要更細微的分類判斷的時候,sigmoid效果就好了。

還有一個東西要注意,sigmoid 和 tanh作為啟用函式的話,一定要注意一定要對 input 進行歸一話,否則啟用後的值都會進入平坦區,使隱層的輸出全部趨同,但是 ReLU 並不需要輸入歸一化來防止它們達到飽和。

  • 構建稀疏矩陣,也就是稀疏性,這個特性可以去除資料中的冗餘,最大可能保留資料的特徵,也就是大多數為0的稀疏矩陣來表示。

其實這個特性主要是對於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 參考文件

[1]http://blog.csdn.net/u014088052/article/details/50923924