ReLU為什麼比Sigmoid效果好

2021-08-08 12:50:22 字數 1810 閱讀 5268

附:雙曲函式類似於常見的(也叫圓函式的)三角函式。基本雙曲函式是雙曲正弦"sinh",雙曲余弦"cosh",從它們匯出雙曲正切"tanh"

sigmod函式:

relu函式:

綜合:

為什麼通常relu比sigmoid和tanh強,有什麼不同?

主要是因為它們gradient特性不同。sigmoid和tanh的gradient在飽和區域非常平緩,接近於0,很容易造成vanishing gradient的問題,減緩收斂速度。vanishing gradient在網路層數多的時候尤其明顯,是加深網路結構的主要障礙之一。相反,relu的gradient大多數情況下是常數,有助於解決深層網路的收斂問題。relu的另乙個優勢是在生物上的合理性,它是單邊的,相比sigmoid和tanh,更符合生物神經元的特徵。

而提出sigmoid和tanh,主要是因為它們全程可導。還有表達區間問題,sigmoid和tanh區間是0到1,或著-1到1,在表達上,尤其是輸出層的表達上有優勢。 ,

relu更容易學習優化。因為其分段線性性質,導致其前傳,後傳,求導都是分段線性。而傳統的sigmoid函式,由於兩端飽和,在傳播過程中容易丟棄資訊:

第乙個問題:為什麼引入非線性激勵函式?

如果不用激勵函式(其實相當於激勵函式是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函式,很容易驗證,無論你神經網路有多少層,輸出都是輸入的線性組合,與

沒有隱藏層效果相當,這種情況就是

最原始的感知機(perceptron)了。

正因為上面的原因,我們決定引入非線性函式作為激勵函式,這樣深層神經網路就有意義了(不再是輸入的線性組合,可以逼近任意函式)。最早的想法是sigmoid函式或者tanh函式,輸出有界,很容易充當下一層輸入(以及一些人的生物解釋balabala)。

第二個問題:為什麼引入relu呢?

第一,採用sigmoid等函式,

算啟用函式時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法,計算量相對大,而採用relu啟用函式,整個過程的計算量節省很多。

第二,對於深層網路,sigmoid函式反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨於0,這種情況會造成

資訊丟失,參見 @haofeng li 答案的第三點),從而無法完成深層網路的訓練。

第三,relu會使一部分神經元的輸出為0,這樣就造成了網路的稀疏性,並且減少了引數的相互依存關係,緩解了過擬合問題的發生(以及一些人的生物解釋balabala)。

當然現在也有一些對relu的改進,比如prelu,random relu等,在不同的資料集上會有一些訓練速度上或者準確率上的改進,具體的大家可以找相關的*****看。

多加一句,現在主流的做法,會在做完relu之後,加一步batch normalization,盡可能保證每一層網路的輸入具有相同的分布[1]。而最新的*****[2],他們在加入bypass connection之後,發現改變batch normalization的位置會有更好的效果。大家有興趣可以看下。

ReLU為什麼比Sigmoid效果好

relu為什麼比sigmoid效果好 附 雙曲函式類似於常見的 也叫圓函式的 三角函式。基本雙曲函式是雙曲正弦 sinh 雙曲余弦 cosh 從它們匯出雙曲正切 tanh sigmod函式 relu函式 綜合 為什麼通常relu比sigmoid和tanh強,有什麼不同?1 相比sigmoid和tan...

Sigmoid和Relu啟用函式的對比

深度學習筆記 4 sigmoid和relu啟用函式的對比 relu是乙個非常優秀的啟用哈數,相比較於傳統的sigmoid函式,有三個作用 1.防止梯度瀰散 2.稀疏啟用性 3.加快計算 首先我們看下sigmoid和relu的曲線 然後可以得到sigmoid的導數 以及relu的導數 結論就是sigm...

LR為什麼用sigmoid

轉 一是 sigmod 本身的性質。二是 之所以lr 用sigmod,不是因為lr 選擇了 sigmod 而是用 指數簇分布和 最大熵原理 推導出來的形式,就是這個樣子,後來起名叫sigmod sigmoid 函式 上圖為sigmoid函式的形式 選擇sigmoid 的原因想從兩方面來說 1 sig...