為什么要引入激活函數(shù)?
如果不用激活函數(shù)(其實(shí)相當(dāng)于激勵(lì)函數(shù)是f(x)=x)威蕉,在這種情況下你每一層輸出都是上層輸入的線性函數(shù)刁俭,很容易驗(yàn)證,無論你神經(jīng)網(wǎng)絡(luò)有多少層韧涨,輸出都是輸入的線性組合牍戚,與沒有隱藏層效果相當(dāng),這種情況就是最原始的感知機(jī)了虑粥。
正因?yàn)樯厦娴脑蛉缧ⅲ覀儧Q定引入非線性函數(shù)作為激勵(lì)函數(shù),這樣深層神經(jīng)網(wǎng)絡(luò)就有意義了(不再是是輸入的線性組合娩贷,可以逼近任意函數(shù))第晰。最早的想法是sigmoid函數(shù)或者tanh函數(shù),輸出有界彬祖,很容易充當(dāng)下一層輸入茁瘦。激活函數(shù)的作用是為了增加神經(jīng)網(wǎng)絡(luò)模型的非線性。否則你想想储笑,沒有激活函數(shù)的每層都相當(dāng)于矩陣相乘甜熔,就算你疊加了若干曾之后,無非還是個(gè)矩陣相乘罷了南蓬。所以你沒有非線性結(jié)構(gòu)的話纺非,根本就算不上什么神經(jīng)網(wǎng)絡(luò)哑了。
函數(shù)分析
它能夠把輸入的連續(xù)實(shí)值“壓縮”到0和1之間,特別的烧颖,如果是非常大的負(fù)數(shù)弱左,那么輸出就是0;如果是非常大的正數(shù)炕淮,輸出就是1.
signoid函數(shù)曾經(jīng)被使用的很多拆火,不過近年來,用它的人越來越少了涂圆。主要是因?yàn)樗囊恍┤秉c(diǎn):
當(dāng)輸入非常大或者非常小的時(shí)候们镜,這些神經(jīng)元的梯度是接近于0的,從圖中可以看出梯度的趨勢润歉;
sigmoid的輸出不是0均值模狭,這回導(dǎo)致后一層的神經(jīng)元將得到上一層輸出的非0均值信號(hào)將作為輸入(為什么不能是非0均值的?踩衩?嚼鹉?)
Tanh是Sigmoid的變形,與sigmoid不同的是驱富,tanh是0均值的锚赤,因此,實(shí)際應(yīng)用中褐鸥,tanh會(huì)比sigmoid更好线脚。
ReLU函數(shù)
從圖中可以看出,輸入負(fù)信號(hào)時(shí)叫榕,輸出都是0浑侥,非負(fù)的情況下,輸出就等于輸入翠霍。
解決了gradient vanishing問題(在正區(qū)間)
計(jì)算速度非扯Ф郑快,只需要判斷輸入是否大于0
收斂速度遠(yuǎn)快于sigmoid和tanh
ReLU需要特別注意的問題:
1寒匙、ReLU的輸出不是0均值的
2零如、Dead ReLU Problem,指的是某些神經(jīng)元可能永遠(yuǎn)不會(huì)被激活锄弱,導(dǎo)致相應(yīng)的參數(shù)永遠(yuǎn)不能被更新考蕾。有兩個(gè)主要原因可能導(dǎo)致這種情況產(chǎn)生:(1)非常不幸的參數(shù)初始化,這種情況比較少見(2)learning rate太高導(dǎo)致在訓(xùn)練過程中參數(shù)更新太大会宪,不幸使網(wǎng)絡(luò)進(jìn)入這種狀態(tài)肖卧。解決方法是可以采用Xavier初始化方法,以及避免learning rate設(shè)置他打或者使用adagrad等自動(dòng)調(diào)節(jié)learning rate的算法
為什么會(huì)引入Relu呢掸鹅?
第一塞帐,采用Sigmoid等函數(shù)拦赠,算激活函數(shù)時(shí)(指數(shù)運(yùn)算),計(jì)算量大葵姥,反向傳播求誤差梯度時(shí)荷鼠,求導(dǎo)涉及除法,計(jì)算量相對大榔幸,而采用Relu激活函數(shù)允乐,整個(gè)過程的計(jì)算量節(jié)省很多。
第二:對于深層網(wǎng)絡(luò)削咆,sigmoid函數(shù)反向傳播時(shí)牍疏,很容易就會(huì)出現(xiàn)梯度消失的情況(在sigmoid接近飽和區(qū)時(shí),變換太緩慢拨齐,導(dǎo)致趨于0鳞陨,這種情況會(huì)造成信息丟失,從而無法完成深層網(wǎng)絡(luò)的訓(xùn)練)
第三:ReLU會(huì)使一部分神經(jīng)元的輸出為0瞻惋,這樣就造成了網(wǎng)絡(luò)的稀疏性炊邦,并且減少了參數(shù)的相互依存關(guān)系,緩解了過擬合問題的發(fā)生熟史。
對Relu 改進(jìn)
當(dāng)然現(xiàn)在也有一些對ReLU的改進(jìn),比如prelu窄俏。random relu等蹂匹,在不同的數(shù)據(jù)集上會(huì)有一些訓(xùn)練速度上或者準(zhǔn)確率上的改進(jìn)
現(xiàn)在主流的做法,會(huì)多做一些batch normalization凹蜈,盡可能保證每一層網(wǎng)絡(luò)的輸入具有相同的分布限寞。而最新的論文中,有加入bypass connection之后仰坦,發(fā)現(xiàn)改變batch normalization的位置會(huì)有更好的效果履植。
深度學(xué)習(xí)的基本原理是基于人工神經(jīng)網(wǎng)絡(luò),信號(hào)從一個(gè)神經(jīng)元進(jìn)入悄晃,經(jīng)過非線性的activation function玫霎,傳入到下一層神經(jīng)元;再經(jīng)過該層神經(jīng)元的activate妈橄,繼續(xù)往下傳遞庶近,如此循環(huán)往復(fù),直到輸出層眷蚓。正是由于這些非線性函數(shù)的反復(fù)疊加鼻种,才使得神經(jīng)網(wǎng)絡(luò)有足夠的capacity來抓取復(fù)雜的pattern,在各個(gè)領(lǐng)域取得state-of-the-art的結(jié)果沙热。顯而易見叉钥,activation function在深度學(xué)習(xí)中非常重要罢缸,也是很活躍的研究領(lǐng)域之一。