發表文章

目前顯示的是 7月, 2017的文章

Activation Function 激勵函數

圖片
在類神經網路中,每個節點都需要激活涵數,有很多種,但目的就是為了讓非性線的性質引入網路之中。這個非線性的是怎樣的一個影響,我想我們可以用以下的簡單例子來說明 這是一個簡單的三個輸入的神經網路。三個輸入為x,y,跟一個常數40。權重分別為0.5,3,-1。這樣的網路在不經過Sigmoid的處理為0.5x+3y+40=0,圖上的斜線,這樣的一條直線。經過Sigmoid函數就是圖上的綠線。 這是另一個簡單的三個輸入的神經網路。三個輸入為x,y,跟一個常數4。這樣的網路在不經過Sigmoid的處理為0.5x+3y-4=0,這樣的一條直線。即圖上左上到右下的斜線。經過sigmoid函數即為紅線。 我們可以先看如果不經過sigmoid函數,就是兩條交叉的直線,如上圖。這兩條直線不管權重如何改變,永遠是兩條直線。 現在我們把兩條線的神經網路再連接到一個節點上。就會如上圖,我們給A的神經網路連結權重為5,給B的神經網路連結權重為10。最後會得到5A+10B。如果最後這個節點為輸出節點。我們就可以選擇是否要再經過激勵函數。 眼尖的朋友一定會注意到,其實整個圖還可以簡化為上圖,兩組輸入合為一組即可。這張圖就是一般我們常看到的神經網路圖了。 我們可以看上圖,5A+10B。我們可以看出,兩個激勵函數相加後得到的曲線(最上面像浴缸曲線那條)。這裡我們可以理解到,一個激勵函數可以讓曲線折兩次,所以越多的A網路與B網路,理論上就可以組合出任意曲線才是。沒錯,這就是 universal approximation theorem 。那麼,如果我們在做曲線的擬合或是線性回歸,輸出就可以不用再一次的激勵函數,又或者找一個等比例型的激勵函數。如果是需要輸出羅輯的判斷,就可以再算一次的sigmoid或是tanh。 既然我們理解到激勵函數可以折彎曲線,那麼可以想像,如果我們的節點多過我們問題本身的需求,就會產生過擬合的問題。為了避免這個問題,就出現了bagging的方法。 另外就是計算cost function的關係,所以激勵函數都需要可微分,我對逆傳遞的方法實在無法理解,大自然裡總有其它的方法可以解決相同的問題,所以出現了NEAT,利用基因演算法來讓類神經網路演化。這樣就不用再算逆傳遞了。 最後從維基百科偷來的別見怪