【AI初识境】激活函数:从人工设计到自动搜索
文章首發(fā)于微信公眾號(hào)《有三AI》
【AI初識(shí)境】激活函數(shù):從人工設(shè)計(jì)到自動(dòng)搜索
這是專欄《AI初識(shí)境》的第4篇文章。所謂初識(shí),就是對(duì)相關(guān)技術(shù)有基本了解,掌握了基本的使用方法。
在神經(jīng)網(wǎng)絡(luò)中,有一個(gè)看似不起眼但是非常重要的概念,那就是激活函數(shù)。激活函數(shù)模型固然理解起來(lái)簡(jiǎn)單,但是也經(jīng)歷了從人工設(shè)計(jì)到自動(dòng)探索的長(zhǎng)足發(fā)展歷程。
作者&編輯??|?言有三
?
01?無(wú)處不在的激活函數(shù)
我們都知道人工神經(jīng)網(wǎng)絡(luò)是用于模擬神經(jīng)元的,那么提起激活函數(shù),自然是要從那里去挖掘原因
在正說(shuō)深度學(xué)習(xí)中的激活函數(shù)之前,我想說(shuō)其實(shí)激活函數(shù)無(wú)處不在。
(1)?上班需要激活函數(shù)。早上10點(diǎn)上班,你8點(diǎn)到也好,9點(diǎn)到也好都一樣,但是10點(diǎn)零1分到不行,性質(zhì)就變了,考勤系統(tǒng)留下遲到的記錄,全勤獎(jiǎng)再無(wú)希望。
它的激活函數(shù)應(yīng)該是這樣的,x是打卡時(shí)間。
這是一個(gè)階躍函數(shù),類似于如下:
(2)?最近看上了一個(gè)跳槽過(guò)來(lái)的喜歡吃甜品的女同事,不過(guò)聽(tīng)說(shuō)有男朋友,不過(guò)又聽(tīng)說(shuō)好像正在慢慢鬧分手。
那么如果要追這個(gè)女同事,什么時(shí)候送甜品能帶來(lái)友情的升華?假如預(yù)判她和對(duì)象第t天后拜拜。
它的激活函數(shù)可能是這樣的,x是送甜品的日子。
?
在剛分手的時(shí)候(也就是第t天,對(duì)應(yīng)曲線斜率最大的地方)送甜品帶來(lái)的好感激增度是最高的,再往后雖然隨著相互之間越來(lái)越熟友誼持續(xù)升溫,但是增長(zhǎng)率下降了啊。而且到后來(lái)可能被其他人追走了,這個(gè)函數(shù)還只在一定期限內(nèi)有效。
(3)?最近項(xiàng)目要加班,不過(guò)好在加班費(fèi)是按小時(shí)(可以有分?jǐn)?shù))算的,那么當(dāng)天的工資,就應(yīng)該是這樣算的。它的激活函數(shù)可能是這樣的,x是工作時(shí)長(zhǎng)。
形狀長(zhǎng)這樣,超過(guò)一個(gè)閾值后是線性增加的,低于閾值則是常量。
(4)?不是單身狗?OK你是有老婆的人,那么下班回家陪老婆看電視總需要吧。不過(guò)到底陪不陪看,是不是陪就一定能得到老婆大人喜歡,這個(gè)可能是個(gè)周期性質(zhì)的東西。
假如x是當(dāng)天日歷,那么激活函數(shù)可能是這樣。
?
這么想想,是不是感覺(jué)激活函數(shù)無(wú)處不在,上面的這幾種都是有正兒八經(jīng)對(duì)應(yīng)的激活函數(shù)的。
回轉(zhuǎn)正題,之所以需要激活函數(shù),從生物學(xué)上來(lái)說(shuō),是因?yàn)槿四X的細(xì)胞接受刺激從而產(chǎn)生活動(dòng),首先需要一定的閾值,沒(méi)有達(dá)到閾值,幾乎沒(méi)用。而不同的刺激產(chǎn)生的輸出也是不同的,達(dá)到一定值后就飽和了,再加大也沒(méi)用。
作為模擬人腦的人工神經(jīng)網(wǎng)絡(luò),自然是需要某種機(jī)制來(lái)模擬這一種活動(dòng),這便是激活函數(shù)根本性的由來(lái)。
?
02?激活函數(shù)到底有什么用
一個(gè)復(fù)雜的神經(jīng)網(wǎng)絡(luò),是有許多層的,其中最基本的單位便是神經(jīng)元。
一個(gè)線性神經(jīng)元,輸入x輸出y的變換關(guān)系如下。
可以看到輸出y與x是一個(gè)線性關(guān)系。如果再增加一層,把y作為中間層,輸出為z呢?
如下:
?
可以看出,最終的輸出z仍然與x是線性關(guān)系,也就是說(shuō)這樣堆疊下去,永遠(yuǎn)都是線性關(guān)系。
人們期望神經(jīng)網(wǎng)絡(luò)可以模擬任意的函數(shù),怎么可能用一個(gè)線性函數(shù)來(lái)完成呢?所以才會(huì)在線性神經(jīng)元的輸出后添加非線性的函數(shù),添加的越多,變換自然就越復(fù)雜了。
而不同的非線性映射函數(shù)的選擇,就是激活函數(shù)的研究課題了。
?
03?各種激活函數(shù)
https://en.wikipedia.org/wiki/Activation_function
關(guān)于激活函數(shù)的種類,有三這一次就偷個(gè)懶,大家可以去wiki?百科上面看,非常的詳細(xì),下面摘錄其中的一些。
這些人工設(shè)計(jì)的激活函數(shù)有這么多,那么什么激活函數(shù)最好,是ReLU嗎?還是各類ReLU的變種(LReLU,PReLU,RReLU,ELU,SELU,GELU等等),Maxout,又或者是某大神自己在搞的很復(fù)雜的激活函數(shù),這是沒(méi)有答案的,只能說(shuō)有一些通用的大家認(rèn)可的結(jié)論,下面也只能覆蓋到一些。
(1)?sigmoid和tanh激活函數(shù)。
為什么最早的時(shí)候大家用sigmoid函數(shù)呢?因?yàn)樗还茌斎胩幱诙啻蟮姆秶?#xff0c;輸出是處于0~1的,機(jī)器學(xué)習(xí)里要解決的問(wèn)題很多都是概率,用sigmoid不是很自然嗎?
就算它有所謂的飽和問(wèn)題導(dǎo)致梯度很小,那也是在函數(shù)的尾部才會(huì)發(fā)生,或者是在多級(jí)連乘之后才明顯。所以很早期的比較淺的神經(jīng)網(wǎng)絡(luò),用sigmoid沒(méi)毛病,現(xiàn)在在LSTM這一類需要計(jì)算開(kāi)關(guān)概率的網(wǎng)絡(luò)中,sigmoid仍然是很常見(jiàn)的。
那tanh函數(shù)又如何呢?它相比sigmoid來(lái)說(shuō),將輸出映射到(-1,1)之間了,拓展了一倍的值域。激活有負(fù)值之后,網(wǎng)絡(luò)的表達(dá)能力可以得到提升,但未必一定需要這么做的,因?yàn)闄?quán)重本身是可以為負(fù)的,而在最早期的神經(jīng)網(wǎng)絡(luò)中,用模擬信號(hào)處理問(wèn)題,甚至連權(quán)重都沒(méi)有非負(fù)的,一樣有效。不過(guò)一般來(lái)說(shuō)tanh總不至于比sigmoid差的,它畢竟通過(guò)零點(diǎn),輸出期望不會(huì)漂移。
(2)ReLU激活函數(shù)。
好處是很明顯的。首先它簡(jiǎn)單,這個(gè)簡(jiǎn)單不僅在于導(dǎo)數(shù)恒定,更在于它將低于一定閾值的信號(hào)丟棄了。深度學(xué)習(xí)要解決的是工程問(wèn)題,工程問(wèn)題很多時(shí)候都是稀疏性的,往往簡(jiǎn)單的解決方案是最有效和穩(wěn)定的。不過(guò)ReLU輸出沒(méi)有負(fù)數(shù)的問(wèn)題確實(shí)有一定負(fù)作用,這也是其他方法對(duì)ReLU的改進(jìn)空間所在。
(3)ReLU的一大堆變種(LReLU,PReLU,RReLU,ELU,SELU,GELU等等)。
我相信這些變種是有用的,但是我沒(méi)怎么用過(guò)。不用因?yàn)槭鞘紫人鼈冞€沒(méi)有表現(xiàn)出一定比ReLU強(qiáng),在如今有BN等技術(shù)以及好的初始化方法后,ReLU的缺點(diǎn)沒(méi)有那么明顯了。另一方面是,沒(méi)時(shí)間去一個(gè)一個(gè)試,解決問(wèn)題的過(guò)程中還有很多其他因素更加需要去探索。不過(guò),還是建議大家去仔細(xì)了解一下的,用不用的著再說(shuō)。
正因如此,在對(duì)ReLU改進(jìn)的差不多之后,激活函數(shù)的人工設(shè)計(jì)就沒(méi)有這么多熱情了。
?
04自動(dòng)搜索
不過(guò)坑還沒(méi)有填完,還是有人沒(méi)有忘記這個(gè)問(wèn)題的,比如谷歌。谷歌開(kāi)了許多深度學(xué)習(xí)領(lǐng)域的自動(dòng)化的工作,比如自動(dòng)設(shè)計(jì)網(wǎng)絡(luò)NASNet,自動(dòng)數(shù)據(jù)增強(qiáng)AutoAugment等工作,也做了自動(dòng)搜索最優(yōu)的激活函數(shù)的工作。
文[1]就在一系列一元函數(shù)和二元函數(shù)組成的搜索空間中,進(jìn)行了比較細(xì)致的組合搜索實(shí)驗(yàn)。
結(jié)論是好用的激活函數(shù)都比較簡(jiǎn)單,不會(huì)超過(guò)兩個(gè)基本函數(shù)的乘的組合。搜到了一些比Relu表現(xiàn)更好的函數(shù),最好的是一個(gè)這樣的函數(shù):x?·?σ(βx),被稱為Swish,它在某個(gè)特定的參數(shù)下也和ReLU及其變種類似,看看圖就知道了。
順便說(shuō)一下該方法做實(shí)驗(yàn)時(shí)的一元函數(shù)和二元函數(shù)的搜索空間:
已經(jīng)覆蓋我們能想到的一些簡(jiǎn)單的函數(shù)了。
類似地也有其他的研究人員通過(guò)遺傳算法學(xué)習(xí)到一些新的激活函數(shù),包括EliSH,HardEliSH[2],感興趣的可以去看論文。
這個(gè)坑就挖給你了,還可以填。
[1]?Ramachandran?P,?Zoph?B,?Le?Q?V.?Searching?for?activation?functions[J].?arXiv?preprintarXiv:1710.05941,?2017.
[2]?Basirat?M?,?Roth?P?M?.?The?Quest?for?the?Golden?Activation?Function[J].?2018.
[3]?Nwankpa?C?,?Ijomah?W?,?Gachagan?A?,?et?al.?Activation?Functions:?Comparison?of?trends?in?Practice?andResearch?for?Deep?Learning[J].?2018.
最后發(fā)一個(gè)通知,2019年有三AI培養(yǎng)計(jì)劃開(kāi)始了,一個(gè)季度一期噢。
2019年有三AI“春季”劃,給我一個(gè)榮耀,還你一生榮耀
?
總結(jié)
深度學(xué)習(xí)各個(gè)維度的理論正處于全面被研究中,如果你想有所建樹(shù),那么必須要深入思考以前那些看似習(xí)以為常的東西,激活函數(shù)就是一個(gè)例子。
下期預(yù)告:深度學(xué)習(xí)中初始化的重要性
?
轉(zhuǎn)載文章請(qǐng)后臺(tái)聯(lián)系
侵權(quán)必究
比如網(wǎng)絡(luò)loss不正常,怎么調(diào)都不管用。
比如訓(xùn)練好好的,測(cè)試就是結(jié)果不對(duì)。
bug天天有,深度學(xué)習(xí)算法工程師遇到的特別多,如果你想交流更多,就來(lái)有三AI知識(shí)星球?qū)崟r(shí)提問(wèn)交流吧,大咖眾多,總有能解決你問(wèn)題的。
初識(shí)境界到此基本就結(jié)束了,這一系列是為大家奠定扎實(shí)的深度學(xué)習(xí)基礎(chǔ),希望學(xué)習(xí)完后大家能有收獲。
AI白身境系列完整閱讀:
第一期:【AI白身境】深度學(xué)習(xí)從棄用windows開(kāi)始
第二期:【AI白身境】Linux干活三板斧,shell、vim和git
第三期:【AI白身境】學(xué)AI必備的python基礎(chǔ)
第四期:【AI白身境】深度學(xué)習(xí)必備圖像基礎(chǔ)
第五期:【AI白身境】搞計(jì)算機(jī)視覺(jué)必備的OpenCV入門基礎(chǔ)
第六期:【AI白身境】只會(huì)用Python?g++,CMake和Makefile了解一下
第七期:【AI白身境】學(xué)深度學(xué)習(xí)你不得不知的爬蟲(chóng)基礎(chǔ)
第八期:?【AI白身境】深度學(xué)習(xí)中的數(shù)據(jù)可視化
第九期:【AI白身境】入行AI需要什么數(shù)學(xué)基礎(chǔ):左手矩陣論,右手微積分
第十期:【AI白身境】一文覽盡計(jì)算機(jī)視覺(jué)研究方向
第十一期:【AI白身境】AI+,都加在哪些應(yīng)用領(lǐng)域了
第十二期:【AI白身境】究竟誰(shuí)是paper之王,全球前10的計(jì)算機(jī)科學(xué)家
AI初識(shí)境系列完整閱讀
第一期:【AI初識(shí)境】從3次人工智能潮起潮落說(shuō)起
第二期:【AI初識(shí)境】從頭理解神經(jīng)網(wǎng)絡(luò)-內(nèi)行與外行的分水嶺
第三期:【AI初識(shí)境】近20年深度學(xué)習(xí)在圖像領(lǐng)域的重要進(jìn)展節(jié)點(diǎn)
第四期:【AI初識(shí)境】激活函數(shù):從人工設(shè)計(jì)到自動(dòng)搜索
第五期:【AI初識(shí)境】什么是深度學(xué)習(xí)成功的開(kāi)始?參數(shù)初始化
第六期:【AI初識(shí)境】深度學(xué)習(xí)模型中的Normalization,你懂了多少?
第七期:【AI初識(shí)境】為了圍剿SGD大家這些年想過(guò)的那十幾招
第八期:【AI初識(shí)境】被Hinton,DeepMind和斯坦福嫌棄的池化,到底是什么?
第九期:【AI初識(shí)境】如何增加深度學(xué)習(xí)模型的泛化能力
第十期:【AI初識(shí)境】深度學(xué)習(xí)模型評(píng)估,從圖像分類到生成模型
第十一期:【AI初識(shí)境】深度學(xué)習(xí)中常用的損失函數(shù)有哪些?
第十二期:【AI初識(shí)境】給深度學(xué)習(xí)新手開(kāi)始項(xiàng)目時(shí)的10條建議
感謝各位看官的耐心閱讀,不足之處希望多多指教。后續(xù)內(nèi)容將會(huì)不定期奉上,歡迎大家關(guān)注有三公眾號(hào) 有三AI!
總結(jié)
以上是生活随笔為你收集整理的【AI初识境】激活函数:从人工设计到自动搜索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【AI初识境】近20年深度学习在图像领域
- 下一篇: 【AI初识境】什么是深度学习成功的开始?