原文地址:http://blog.csdn.net/u014088052/article/details/50923924
激活函數的作用
神經網絡為什么要使用激活函數? 首先提一下激活函數的一般形式,在我平時的學習中,我遇到過的一般是這四種形式,simoid,tanh,ReLu,softplus。
激活函數,並不是去激活什么,而是指如何把“激活的神經元的特征”通過函數把特征保留並映射出來(保留特征,去除一些數據中是的冗余),這是神經網絡能解決非線性問題關鍵。
- 激活函數是用來加入非線性因素的,因為線性模型的表達力不夠
這句話字面的意思很容易理解,但是在具體處理圖像的時候是什么情況呢?我們知道在神經網絡中,對於圖像,我們主要采用了卷積的方式來處理,也就是對每個像素點賦予一個權值,這個操作顯然就是線性的。但是對於我們樣本來說,不一定是線性可分的,為了解決這個問題,我們可以進行線性變化,或者我們引入非線性因素,解決線性模型所不能解決的問題。
這里插一句,來比較一下上面的那些激活函數,因為神經網絡的數學基礎是處處可微的,所以選取的激活函數要能保證數據輸入與輸出也是可微的,運算特征是不斷進行循環計算,所以在每代循環過程中,每個神經元的值也是在不斷變化的。
這就導致了tanh特征相差明顯時的效果會很好,在循環過程中會不斷擴大特征效果顯示出來,但有是,在特征相差比較復雜或是相差不是特別大時,需要更細微的分類判斷的時候,sigmoid效果就好了。
還有一個東西要注意,sigmoid 和 tanh作為激活函數的話,一定要注意一定要對 input 進行歸一話,否則激活后的值都會進入平坦區,使隱層的輸出全部趨同,但是 ReLU 並不需要輸入歸一化來防止它們達到飽和。
- 構建稀疏矩陣,也就是稀疏性,這個特性可以去除數據中的冗余,最大可能保留數據的特征,也就是大多數為0的稀疏矩陣來表示。
其實這個特性主要是對於Relu,它就是取的max(0,x),因為神經網絡是不斷反復計算,實際上變成了它在嘗試不斷試探如何用一個大多數為0的矩陣來嘗試表達數據特征,結果因為稀疏特性的存在,反而這種方法變得運算得又快效果又好了。
所以我們可以看到目前大部分的卷積神經網絡中,基本上都是采用了ReLU 函數。