轉(zhuǎn)載:https://blog.csdn.net/weixin_41068770/article/details/102395685
激活函數(shù): 神經(jīng)網(wǎng)絡(luò)神經(jīng)元中员辩,輸入的 inputs 通過加權(quán)世吨,求和后科乎,還被作用了一個(gè)函數(shù)辞嗡,這個(gè)函數(shù)就是激活函數(shù) Activation Function。
1. 為什么要用激活函數(shù)洲敢?
神經(jīng)網(wǎng)絡(luò)中激活函數(shù)的主要作用是提供網(wǎng)絡(luò)的非線性建模能力,如不特別說明,激活函數(shù)一般而言是非線性函數(shù)领迈。假設(shè)一個(gè)示例神經(jīng)網(wǎng)絡(luò)中僅包含線性卷積和全連接運(yùn)算,那么該網(wǎng)絡(luò)僅能夠表達(dá)線性映射碍沐,即便增加網(wǎng)絡(luò)的深度也依舊還是線性映射狸捅,難以有效建模實(shí)際環(huán)境中非線性分布的數(shù)據(jù)。加入(非線性)激活函數(shù)之后累提,深度神經(jīng)網(wǎng)絡(luò)才具備了分層的非線性映射學(xué)習(xí)能力尘喝。
激活函數(shù)通常有如下一些性質(zhì):
(1)非線性:如果不用激勵(lì)函數(shù),每一層輸出都是上層輸入的線性函數(shù)斋陪,無論神經(jīng)網(wǎng)絡(luò)有多少層朽褪,輸出都是輸入的線性組合。如果使用的話无虚,激活函數(shù)給神經(jīng)元引入了非線性因素缔赠,使得神經(jīng)網(wǎng)絡(luò)可以任意逼近任何非線性函數(shù),這樣神經(jīng)網(wǎng)絡(luò)就可以應(yīng)用到眾多的非線性模型中骑科。當(dāng)激活函數(shù)是非線性的時(shí)候橡淑,一個(gè)兩層的神經(jīng)網(wǎng)絡(luò)就可以逼近基本上所有的函數(shù)了。但是咆爽,如果激活函數(shù)是恒等激活函數(shù)的時(shí)候(即)梁棠,就不滿足這個(gè)性質(zhì)了,而且如果MLP使用的是恒等激活函數(shù)斗埂,那么其實(shí)整個(gè)網(wǎng)絡(luò)跟單層神經(jīng)網(wǎng)絡(luò)是等價(jià)的符糊。
(2)可微性: 當(dāng)優(yōu)化方法是基于梯度的時(shí)候,這個(gè)性質(zhì)是必須的呛凶。
(3)單調(diào)性: 當(dāng)激活函數(shù)是單調(diào)的時(shí)候男娄,單層網(wǎng)絡(luò)能夠保證是凸函數(shù)。?當(dāng)激活函數(shù)滿足這個(gè)性質(zhì)的時(shí)候漾稀,如果參數(shù)的初始化是random的很小的值模闲,那么神經(jīng)網(wǎng)絡(luò)的訓(xùn)練將會(huì)很高效;如果不滿足這個(gè)性質(zhì)崭捍,那么就需要很用心的去設(shè)置初始值尸折。
(4)輸出值的范圍: 當(dāng)激活函數(shù)輸出值是 有限 的時(shí)候,基于梯度的優(yōu)化方法會(huì)更加 穩(wěn)定殷蛇,因?yàn)樘卣鞯谋硎臼苡邢迿?quán)值的影響更顯著实夹;當(dāng)激活函數(shù)的輸出是 無限 的時(shí)候橄浓,模型的訓(xùn)練會(huì)更加高效,不過在這種情況小亮航,一般需要更小的learning rate荸实。
2. 激活函數(shù)如何選擇?
從定義來看缴淋,幾乎所有的連續(xù)可導(dǎo)函數(shù)都可以用作激活函數(shù)准给。但目前常見的多是分段線性和具有指數(shù)形狀的非線性函數(shù)。
選擇的時(shí)候重抖,就是根據(jù)各個(gè)函數(shù)的優(yōu)缺點(diǎn)來配置圆存,例如:
如果使用 ReLU,要小心設(shè)置 learning rate仇哆,注意不要讓網(wǎng)絡(luò)出現(xiàn)很多 “dead” 神經(jīng)元,如果不好解決夫植,可以試試 Leaky ReLU讹剔、PReLU 或者 Maxout。
最好不要用 sigmoid详民,你可以試試 tanh延欠,不過可以預(yù)期它的效果會(huì)比不上 ReLU 和 Maxout。
一般來說沈跨,在分類問題上建議首先嘗試 ReLU由捎,其次ELU,這是兩類不引入額外參數(shù)的激活函數(shù)饿凛。
然后可考慮使用具備學(xué)習(xí)能力的PReLU和MPELU狞玛,并使用正則化技術(shù),例如應(yīng)該考慮在網(wǎng)絡(luò)中增加Batch Normalization層涧窒。
通常來說心肪,很少會(huì)把各種激活函數(shù)串起來在一個(gè)網(wǎng)絡(luò)中使用的。
激活函數(shù)通常分為線性激活函數(shù)和非線性激活函數(shù)硬鞍。一般情況下,如果神經(jīng)網(wǎng)絡(luò)中使用的是線性激活函數(shù)戴已,那么每一層就相當(dāng)于是上一層的線性組合固该,其輸入和輸出均是線性的,類似于感知機(jī)模型糖儡,則hidden layers沒有存在的意義了伐坏,同時(shí)這種線性函數(shù)對(duì)于復(fù)雜的非線性問題擬合欠佳。當(dāng)我們使用非線性激活函數(shù)時(shí)休玩,模型可以擬合任意函數(shù)的輸出著淆,表現(xiàn)空間更大劫狠、使用該范圍廣、且效果更優(yōu)永部。下圖為單層的感知機(jī)独泞,是常用的神經(jīng)網(wǎng)絡(luò)組合單元,用它可以畫出一條線苔埋,把平面分開懦砂。
很容易聯(lián)想到多個(gè)感知機(jī)組和,獲得更強(qiáng)的分類能力组橄,效果如下所示:
但是感知機(jī)的輸出是線性的荞膘,如下所示。當(dāng)然可以用無限條線性的線擬合曲線玉工,然而復(fù)雜度較高羽资。
如果不用激勵(lì)函數(shù)(其實(shí)相當(dāng)于激勵(lì)函數(shù)是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函數(shù)遵班,很容易驗(yàn)證屠升,無論你神經(jīng)網(wǎng)絡(luò)有多少層,輸出都是輸入的線性組合狭郑,與只有一個(gè)隱藏層效果相當(dāng)腹暖,這種情況就是多層感知機(jī)(MLP)了。
正因?yàn)樯厦娴脑蚝踩覀儧Q定引入非線性函數(shù)作為激勵(lì)函數(shù)脏答,這樣深層神經(jīng)網(wǎng)絡(luò)就有意義了(不再是輸入的線性組合,可以逼近任意函數(shù))亩鬼。
當(dāng)拓展到多層的情況時(shí)殖告,就會(huì)變成一個(gè)復(fù)雜的函數(shù),可以輕松擬合非線性的復(fù)雜場(chǎng)景雳锋。最早的想法是sigmoid函數(shù)或者tanh函數(shù)丛肮,輸出有界,很容易充當(dāng)下一層輸入(以及一些人的生物解釋balabala)魄缚。
比較線性激活和非線性激活下的平滑分類平面宝与,兩者分別如下。
非線性激活函數(shù)可以擬合出曲線的邊界冶匹。圖像的非線性特點(diǎn)习劫,可以理解為在一些應(yīng)用中,其分布為非線性的嚼隘,無法通過直線來完整的分離開诽里。
第一飞蛹,采用sigmoid等函數(shù)谤狡,反向傳播求誤差梯度時(shí)灸眼,求導(dǎo)計(jì)算量很大,而Relu求導(dǎo)非常容易墓懂,使得訓(xùn)練時(shí)間短焰宣。
第二,對(duì)于深層網(wǎng)絡(luò)捕仔,sigmoid函數(shù)反向傳播時(shí)匕积,很容易就會(huì)出現(xiàn)梯度消失的情況(在sigmoid接近飽和區(qū)時(shí),變換太緩慢榜跌,導(dǎo)數(shù)趨于0)闪唆,從而無法完成深層網(wǎng)絡(luò)的訓(xùn)練。
第三钓葫,Relu會(huì)使一部分神經(jīng)元的輸出為0悄蕾,這樣就造成了網(wǎng)絡(luò)的稀疏性,并且減少了參數(shù)的相互依存關(guān)系础浮,緩解了過擬合問題的發(fā)生(以及一些人的生物解釋balabala)笼吟。
參考:
[1] 神經(jīng)網(wǎng)絡(luò)之激活函數(shù)https://www.csuldw.com/2019/05/26/2019-05-26-activation-function/
[2] 激活函數(shù)的解釋https://www.zhihu.com/question/22334626