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