激活函数的作用「建议收藏」
激活函數是用來加入非線性因素的,解決線性模型所不能解決的問題
首先我們有這個需求,就是二分類問題,如我要將下面的三角形和圓形點進行正確的分類,如下圖:
利用我們單層的感知機, 用它可以劃出一條線, 把平面分割開:
上圖直線是由得到,那么該感知器實現預測的功能步驟如下,就是我已經訓練好了一個感知器模型,后面對于要預測的樣本點,帶入模型中,如果y>0,那么就說明是直線的右側,也就是正類(我們這里是三角形),如果,那么就說明是直線的左側,也就是負類(我們這里是圓形),雖然這和我們的題目關系不大,但是還是提一下~
好吧,很容易能夠看出,我給出的樣本點根本不是線性可分的,一個感知器無論得到的直線怎么動,都不可能完全正確的將三角形與圓形區分出來,那么我們很容易想到用多個感知器來進行組合,以便獲得更大的分類問題,好的,下面我們上圖,看是否可行:
好的,我們已經得到了多感知器分類器了,那么它的分類能力是否強大到能將非線性數據點正確分類開呢~我們來分析一下:
我們能夠得到
哎呀呀,不得了,這個式子看起來非常復雜,估計應該可以處理我上面的情況了吧,哈哈哈哈~不一定額,我們來給它變個形.上面公式合并同類項后等價于下面公式:
嘖嘖,估計大家都看出了,不管它怎么組合,最多就是線性方程的組合,最后得到的分類器本質還是一個線性方程,該處理不了的非線性問題,它還是處理不了。
就好像下圖,直線無論在平面上如果旋轉,都不可能完全正確的分開三角形和圓形點:
既然是非線性問題,總有線性方程不能正確分類的地方~
那么拋開神經網絡中神經元需不需要激活函數這點不說,如果沒有激活函數,僅僅是線性函數的組合解決的問題太有限了,碰到非線性問題就束手無策了.那么加入激活函數是否可能能夠解決呢?
在上面線性方程的組合過程中,我們其實類似在做三條直線的組合,如下圖:
下面我們來講一下激活函數,我們都知道,每一層疊加完了之后,我們需要加入一個激活函數(激活函數的種類也很多,如sigmod等等~)這里就給出sigmod例子,如下圖:
通過這個激活函數映射之后,輸出很明顯就是一個非線性函數!能不能解決一開始的非線性分類問題不清楚,但是至少說明有可能啊,上面不加入激活函數神經網絡壓根就不可能解決這個問題~
同理,擴展到多個神經元組合的情況時候,表達能力就會更強~對應的組合圖如下:(現在已經升級為三個非線性感知器在組合了)
跟上面線性組合相對應的非線性組合如下:
這看起來厲害多了,是不是~最后再通過最優化損失函數的做法,我們能夠學習到不斷學習靠近能夠正確分類三角形和圓形點的曲線,到底會學到什么曲線,不知道到底具體的樣子,也許是下面這個~
那么隨著不斷訓練優化,我們也就能夠解決非線性的問題了
1.為何引入非線性的激活函數?
如果不用激活函數,在這種情況下每一層輸出都是上層輸入的線性函數。容易驗證,無論神經網絡有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了。因此引入非線性函數作為激活函數,這樣深層神經網絡就有意義了(不再是輸入的線性組合,可以逼近任意函數)。最早的想法是sigmoid函數或者tanh函數,輸出有界,很容易充當下一層輸入。
2.引入ReLu的原因
第一,采用sigmoid等函數,算激活函數時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法,計算量相對大,而采用Relu激活函數,整個過程的計算量節省很多。
第二,對于深層網絡,sigmoid函數反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨于0,這種情況會造成信息丟失),從而無法完成深層網絡的訓練。
第三,ReLu會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,并且減少了參數的相互依存關系,緩解了過擬合問題的發生
總結
以上是生活随笔為你收集整理的激活函数的作用「建议收藏」的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 8代码 改 java7_Jav
- 下一篇: [硬件驱动] CAN接口