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