神經網路激勵函式的作用是什麼?
乙個單層的感知機, 也是我們最常用的神經網路組成單元啦. 用它可以劃出一條線, 把平面分割開,那麼很容易地我們就會想用多個感知機來進行組合, 獲得更強的分類能力, 這是沒問題的。
可以發現, 這樣乙個神經網路組合起來,輸出的時候無論如何都還是乙個線性方程, 說好的非線性分類呢
祭出主菜. 題主問的激勵函式作用是什麼, 就在這裡了!!
我們在每一層疊加完了以後, 加乙個啟用函式, 這樣輸出的就是乙個不折不扣的非線性函式!
於是就很容易拓展到多層的情況啦, 更剛剛一樣的結構, 加上non-linear activation function之後, 輸出就變成了乙個複雜的, 複雜的, 超級複雜的函式…額別問我他會長成什麼樣, 沒人知道的,我們只能說, 有了這樣的非線性啟用函式以後, 神經網路的表達能力更加強大了(比起純線性組合, 那是必須得啊!)
在做regression的時候, 不僅嘗試了tanh, sigmoid這些常用的, 還試了一把近兩年在dl中超級火的relu. 結果發現relu做出來的準確度簡直是不忍直視啊…於是在報告裡吹了一大通可能這個function不work的原因…其實自己知道那就是扯淡好麼, 如果實驗結果好了, 肯定又能找到一堆其它理由去support它了.
**當然我也不是經驗很豐富啦, 對調參這門手藝還是繼續保持敬仰的~~~ 只是最近看到好多摩拳擦掌準備投身dl想要幹一番大事業的同學, 有感而發…花點時間搞搞清楚原理可能就不會覺得這個東西那麼靠譜了, 更多的像是magic, 還不如其它的模型用著心理踏實…入行需謹慎啊
非理翻譯為啟用函式(activation function)會更好。
啟用函式是用來加入非線性因素的,因為線性模型的表達能力不夠。
以下,同種顏色為同類資料。
某些資料是線性可分的,意思是,可以用一條直線將資料分開。比如下圖:
這時候你需要通過一定的機器學習的方法,比如感知機演算法(perceptron learning algorithm) 找到乙個合適的線性方程。
但是有些資料不是線性可分的。比如如下資料:
第二組資料你就沒有辦法畫出一條直線來將資料區分開。
這時候有兩個辦法,第乙個辦法,是做線性變換(linear transformation),比如講x,y變成x2,y2,這樣可以畫出圓形。如圖所示:
如果將座標軸從x,y變為以x2,y2為標準,你會發現資料經過變換後是線性可分的了。大致示意圖如下:
另外一種方法是引入非線性函式。我們來看異或問題(xor problem)。以下是xor真值表
這個真值表不是線性可分的,所以不能使用線性模型,如圖所示
我們可以設計一種神經網路,通過啟用函式來使得這組資料線性可分。
啟用函式我們選擇閥值函式(threshold function),也就是大於某個值輸出1(被啟用了),小於等於則輸出0(沒有啟用)。這個函式是非線性函式。
神經網路示意圖如下:
其中直線上的數字為權重。圓圈中的數字為閥值。第二層,如果輸入大於1.5則輸出1,否則0;第三層,如果輸入大於0.5,則輸出1,否則0.
我們來一步步算。
第一層到第二層(閥值1.5)
第二層到第三層(閥值0.5)
可以看到第三層輸出就是我們所要的xor的答案。
經過變換後的資料是線性可分的(n維,比如本例中可以用平面),如圖所示:
總而言之,啟用函式可以引入非線性因素,解決線性模型所不能解決的問題。
論智神經網路的激勵函式(activation function)是一群空間魔法師,扭曲翻轉特徵空間,在其中尋找線性的邊界。
如果沒有激勵函式,那麼神經網路的權重、偏置全是線性的仿射變換(affine transformation):
這樣的神經網路,甚至連下面這樣的簡單分類問題都解決不了:
在這個二維特徵空間上,藍線表示負面情形(y=0),綠線表示正面情形(y=1)
在這個二維特徵空間上,藍線表示負面情形(y=0),綠線表示正面情形(y=1)
沒有激勵函式的加持,神經網路最多能做到這個程度:
線性邊界——看起來不怎麼好,是吧?
這時候,激勵函式出手了,扭曲翻轉一下空間:
線性邊界出現了!再還原回去,不就得到了原特徵空間中的邊界?
當然,不同的激勵函式,因為所屬流派不同,所以施展的魔法也各不相同。
上為變換後的特徵空間的線性邊界;
下為原特徵空間的非線性邊界
上圖中,出場的三位空間魔法師,分別為sigmoid、tanh、relu
sigmoid
sigmoid是一位老奶奶,是激勵函式中最有資歷的。
雖然比較老邁、古板,已經不像當年那麼受歡迎了,但在分類任務的輸出層中,人們還是信賴sigmoid的豐富經驗。
sigmoid及其梯度(紅色曲線為梯度)
我們可以看到,sigmoid將輸入擠壓進0到1區間(這和概率的取值範圍一致),這正是分類任務中sigmoid很受歡迎的原因。
tanh
tanh也是一位資深的空間魔法師:
等等,這不就是sigmoid?背過身去以為我們就不認識了嗎?
沒錯,tanh就是喬裝打扮的sigmoid:
tanh及其梯度(紅色曲線為梯度)
如上圖所示,tanh的形狀和sigmoid類似,只不過tanh將「擠壓」輸入至區間(-1, 1)。因此,中心為零,(某種程度上)啟用值已經是下一層的正態分佈輸入了。
至於梯度,它有乙個大得多的峰值1.0(同樣位於z = 0處),但它下降得更快,當|z|的值到達3時就已經接近零了。這是所謂梯度消失(vanishing gradients)問題背後的原因,會導致網路的訓練進展變慢。
relu
relu是乙個守門人,凡是麻瓜(0)一律拒之門外(關閉神經元)。
它是今時今日尋常使用的激勵函式。relu處理了它的sigmoid、tanh中常見的梯度消失問題,同時也是計算梯度最快的激勵函式。
relu及其梯度(紅色折線為梯度)
如上圖所示,relu是一頭完全不同的野獸:它並不「擠壓」值至某一區間——它只是保留正值,並將所有負值轉化為零。
使用relu的積極方面是它的梯度要麼是1(正值),要麼是0(負值)——再也沒有梯度消失了!這一模式使網路更快收斂。
另一方面,這一表現導致所謂的「死亡神經元」問題,也就是輸入持續為負的神經元啟用值總是為零。
本回答基於daniel godoy授權論智翻譯的《視覺化超引數作用機制:一、動畫化啟用函式》改編。
神經網路 啟用函式的作用
啟用函式是神經網路的乙個重要組成部分。如果不用啟用函式 即相當於啟用函式為f x x 在這種情況下,網路的每一層的輸入都是上一層的線性輸出,因此,無論該神經網路有多少層,最終的輸出都是輸入的線性組合,與沒有隱藏層的效果相當,這種情況就是最原始的感知機。例如,對於乙個二分類問題,如下圖 利用單層的感知...
神經網路啟用函式
2018,jul 23 學了深度學習也快近一年了,在學deep learning的時候什麼教程都去看,起初學起來也特別的雜亂,前面的基礎沒弄懂還一直往下學,自然導致我學到後面的時候有點崩潰什麼都看不懂,並且因為自己還是一名在校生,平常課程也非常多,沒有乙個連續的學習時間也導致我的學習是斷斷續續,在學...
啟用函式 神經網路
andrew的 neural networks and deep learning 課程學習筆記 如圖所示,是乙個簡單的三層神經網路,如果只使用線性啟用函式或者恒等啟用函式 不使用啟用函式 那麼神經網路的輸出就只是輸入函式的線性變化,因為線性啟用函式的組合依然是線性啟用函式。這種情況下,不管使用多少...