sigmoid函数_机器学习面试常考知识之激活函数
神經(jīng)網(wǎng)絡的知識
常用的激活函數(shù)有sigmoid、tanh、ReLu、LeakyReLU等
?
為什么需要激活函數(shù)(這里說的激活函數(shù)一般指非線性激活),假設不用激活函數(shù)(相當于激活函數(shù)f(x)=x?, 這是每一層的節(jié)點的輸入都是上一層輸出的線性函數(shù),很容易證明,無論神經(jīng)網(wǎng)絡有多少層,輸出都是輸入的線性組合,與沒有隱含層的效果相當,這種情況就是原始的感知器(Perceptron),那么網(wǎng)絡的逼近能力是相當有限的。因此,需要引入非線性函數(shù)作為激活函數(shù),這樣深層的神經(jīng)網(wǎng)絡具有更強的逼近能力(不在是輸入的線性組合,理論上神經(jīng)網(wǎng)絡基本可以逼近任意函數(shù))
Sigmoid函數(shù):
Sigmoid函數(shù)值常用的非線性激活函數(shù),它的數(shù)學形式如下:
幾何圖像如下:
特點:它能把輸入的連續(xù)實值變換為0和1之間的輸出,特別地,當輸入如果是非常大的負數(shù),那么輸出就是0,反之,如果輸入非常大的正數(shù),輸出就是1.。且sigmoid的導數(shù)為f(z)*(1-f(z))
缺點:(1)在深度神經(jīng)網(wǎng)絡中梯度的反向傳播是導致梯度爆炸/梯度消失,梯度爆炸發(fā)生的概率較少,梯度消失的概率很大。
?
如果我們初始化神經(jīng)網(wǎng)絡的權(quán)值為 [0,1] 之間的隨機值,由反向傳播算法的數(shù)學推導可知,梯度從后向前傳播時,每傳遞一層梯度值都會減小為原來的0.25倍,如果神經(jīng)網(wǎng)絡隱層特別多,那么梯度在穿過多層后將變得非常小接近于0,即出現(xiàn)梯度消失現(xiàn)象;當網(wǎng)絡權(quán)值初始化為 (1,+∞) (1,+∞)(1,+∞) 區(qū)間內(nèi)的值,則會出現(xiàn)梯度爆炸情況。
(2)其解析式中含有冪運算,計算機求解時相對來講比較耗時。對于規(guī)模比較大的深度網(wǎng)絡,這會較大地增加訓練時間。
適用于:當我們嘗試將值分類到特定的類時,使用Sigmoid函數(shù)非常理想。
ReLU函數(shù)
數(shù)學表達式:
Relu函數(shù)及其導數(shù)的圖像如下圖所示:
?ReLU函數(shù)其實就是一個取最大值函數(shù),注意這并不是全區(qū)間可導的,但是我們可以取sub-gradient,如上圖所示。ReLU雖然簡單,但卻是近幾年的重要成果,有以下幾大優(yōu)點:
1) 解決了gradient vanishing問題 (在正區(qū)間)
2)計算速度非常快,只需要判斷輸入是否大于0
3)收斂速度遠快于sigmoid和tanh
ReLU也有幾個需要特別注意的問題:
1)ReLU的輸出不是zero-centered
2)Dead ReLU Problem,指的是某些神經(jīng)元可能永遠不會被激活,導致相應的參數(shù)永遠不能被更新。有兩個主要原因可能導致這種情況產(chǎn)生: (1) 非常不幸的參數(shù)初始化,這種情況比較少見 (2) learning rate太高導致在訓練過程中參數(shù)更新太大,不幸使網(wǎng)絡進入這種狀態(tài)。解決方法是可以采用Xavier初始化方法,以及避免將learning rate設置太大或使用adagrad等自動調(diào)節(jié)learning rate的算法。
盡管存在這兩個問題,ReLU目前仍是最常用的activation function,在搭建人工神經(jīng)網(wǎng)絡的時候推薦優(yōu)先嘗試!
優(yōu)點:不會同時激活所有的神經(jīng)元,這意味著,在一段時間內(nèi),只有少量的神經(jīng)元被激活,神經(jīng)網(wǎng)絡的這種稀疏性使其變得高效且易于計算。
缺點:x<0時,梯度是零。隨著訓練的進行,可能會出現(xiàn)神經(jīng)元死亡,權(quán)重無法更新的情況。也就是說,ReLU神經(jīng)元在訓練中不可逆地死亡了。
Tanh函數(shù)
數(shù)學表達式:
tanh函數(shù)及其導數(shù)的幾何圖像如下圖:
?tanh解決了Sigmoid函數(shù)的不是zero-centered輸出問題,然而,梯度消失(gradient vanishing)的問題和冪運算的問題仍然存在。解決了sigmoid的大多數(shù)缺點,仍然有兩邊學習率太低的缺點
如何選擇正確的激活函數(shù)?
根據(jù)問題的性質(zhì),我們可以為神經(jīng)網(wǎng)絡更快更方便地收斂作出更好的選擇。
用于分類器時,Sigmoid函數(shù)及其組合通常效果更好。
由于梯度消失問題,有時要避免使用sigmoid和tanh函數(shù)。
ReLU函數(shù)是一個通用的激活函數(shù),目前在大多數(shù)情況下使用。
如果神經(jīng)網(wǎng)絡中出現(xiàn)死神經(jīng)元,那么PReLU函數(shù)就是最好的選擇。
請記住,ReLU函數(shù)只能在隱藏層中使用。
一點經(jīng)驗:你可以從ReLU函數(shù)開始,如果ReLU函數(shù)沒有提供最優(yōu)結(jié)果,再嘗試其他激活函數(shù)。
總結(jié)
以上是生活随笔為你收集整理的sigmoid函数_机器学习面试常考知识之激活函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python数字类型转换函数_pytho
- 下一篇: python和javascript哪个好