為什麼採用啟用函式

2021-10-24 10:47:20 字數 969 閱讀 2205

為什麼要使用sigmoid,tanh,relu等非線性函式?

這個原因大家都知道,為了增加非線性唄!

深度學習的目的是用一堆神經元堆出乙個函式大致的樣子,然後通過大量的資料去反向擬合出這個函式的各個引數,最終勾勒出函式的完整形狀。

那如果啟用函式只是線性函式,那一層層的線性函式堆起來還是線性的,這年頭線性函式能幹啥呀?

肯定不行,這樣整個網路表現能力有限,所以要引入非線性的啟用函式進來。

那為什麼用relu呢?

我們先看relu和他的老對手sigmoid長什麼樣:

relu函式:

sigmoid函式:

對比這倆函式能看出來,sigmoid有乙個「梯度消失」的問題。

梯度消失什麼意思呢?就是我們希望對每個神經元,激勵函式都能盡量區分出z(就是自變數)值變化,這樣每個神經元的表達能力更強,但sigmoid明顯在|z|>4的區間的梯度就不夠看了,即它的梯度消失了。

相比之下,relu輸出就很穩定,因為他z>0區間就是乙個線性函式!不存在sigmoid的梯度消失的問題。(對於來講,畫素的取值就是0-255,所以在大於0,不存在梯度消失)

另乙個relu很給力的地方就是稀疏度問題。就是我們希望每個神經元都能最大化的發揮它篩選的作用,符合某乙個特徵的中間值,使勁兒放大;不符合的,一刀切掉。(小於0的部分直接去掉)

反觀sigmoid,這個函式是很對稱很美,但它面對負的z值仍然剪不斷理還亂,會輸出乙個小的激勵值(tanh會好一些但仍不能避免),形成所謂的「稠密表示」。

最後的最後,relu運算速度快,這個很明顯了,max肯定比冪指數快的多。

當然,relu並不是終點,對激勵函式的研究在行業內非常活躍,這裡也不展開了。

什麼是啟用函式?為什麼要使用啟用函式?

如果沒有relu等啟用函式 也叫非線性 dense層將只包含兩個線性運算 點積和加法 output dot w,input b這樣dense層就只能學習輸入資料的線性變換 仿射變換 該層的假設空間是從輸入資料到16位空間所有可能的線性變換集合。這種假設空間非常有限,無法利用多個表示層的優勢,因為多個...

為什麼要使用relu ReLu 啟用函式

引入relu的原因 第一,採用sigmoid等函式,算啟用函式時 指數運算 計算量大,反向傳播求誤差梯度時,求導涉及除法,計算量相對大,而採用relu啟用函式,整個過程的計算量節省很多。第二,對於深層網路,sigmoid函式反向傳播時,很容易就會出現 梯度消失 的情況 在sigmoid接近飽和區時,...

為什麼要使用非線性啟用函式

線性可分的情況下 邏輯回歸和線性回歸,無論是閉解形式還是凸優化都能高度擬合,但是線性不可分的情況下 xor異或函式 需要非線性對換資料的分布進行重新對映。對神經網路我們在神經網路中,對每一層線性變換後疊加乙個非線性啟用函式,以避免多層網路等效於單層線性函式,從而獲得更大的學習與擬合能力。使用啟用函式...