時(shí)隔一周 小李又來冒泡啦~下周就要結(jié)束在實(shí)驗(yàn)室搬磚的日子了誒 但也不能偷懶鴨造壮!
提前的周末愉快鴨~
Relu函數(shù)
講Relu函數(shù)前需要先了解關(guān)于激活函數(shù)的概念和作用覆履。
什么是激活函數(shù)?
首先了解一下神經(jīng)網(wǎng)絡(luò)的基本模型
如上圖所示,神經(jīng)網(wǎng)絡(luò)中的每個(gè)神經(jīng)元節(jié)點(diǎn)接受上一層神經(jīng)元的輸出值作為本神經(jīng)元的輸入值费薄,并將輸入值傳遞給下一層硝全,輸入層神經(jīng)元節(jié)點(diǎn)會(huì)將輸入屬性值直接傳遞給下一層(隱層或輸出層)。在多層神經(jīng)網(wǎng)絡(luò)中楞抡,上層節(jié)點(diǎn)的輸出和下層節(jié)點(diǎn)的輸入之間具有一個(gè)函數(shù)關(guān)系伟众,這個(gè)函數(shù)稱為激活函數(shù)。
簡單來說召廷,激活函數(shù)凳厢,并不是去激活什么,而是指如何把“激活的神經(jīng)元的特征”通過函數(shù)把特征保留并映射出來竞慢,即負(fù)責(zé)將神經(jīng)元的輸入映射到輸出端先紫。為什么需要激活函數(shù)?
首先明確一點(diǎn)筹煮,激活函數(shù)是用來加入非線性因素的遮精,因?yàn)榫€性模型的表達(dá)力不夠。
假設(shè)如果沒有激活函數(shù)的出現(xiàn)败潦,你每一層節(jié)點(diǎn)的輸入都是上層輸出的線性函數(shù)本冲,很容易驗(yàn)證,無論你神經(jīng)網(wǎng)絡(luò)有多少層劫扒,輸出都是輸入的線性組合檬洞,與沒有隱藏層效果相當(dāng),也就是說沒有激活函數(shù)的每層都相當(dāng)于矩陣相乘沟饥。就算你疊加了若干層之后添怔,無非還是個(gè)矩陣相乘罷了。那么網(wǎng)絡(luò)的逼近能力就相當(dāng)有限贤旷。正因?yàn)樯厦娴脑蚬懔希覀儧Q定引入非線性函數(shù)作為激活函數(shù),這樣深層神經(jīng)網(wǎng)絡(luò)表達(dá)能力就更加強(qiáng)大(不再是輸入的線性組合遮晚,而是幾乎可逼近任意函數(shù))舉個(gè)例子:二分類問題性昭,如果不使用激活函數(shù),例如使用簡單的邏輯回歸县遣,只能作簡單的線性劃分糜颠,如下圖所示
如果使用激活函數(shù)汹族,則可以實(shí)現(xiàn)非線性劃分,如下圖所示:可見其兴,激活函數(shù)能幫助我們引入非線性因素顶瞒,使得神經(jīng)網(wǎng)絡(luò)能夠更好地解決更加復(fù)雜的問題。為什么激活函數(shù)一般都是非線性的元旬,而不能是線性的呢榴徐?
從反面來說,如果所有的激活函數(shù)都是線性的匀归,則激活函數(shù) g(z)=z坑资,即 a=z。那么穆端,以兩層神經(jīng)網(wǎng)絡(luò)為例袱贮,最終的輸出為:經(jīng)過推導(dǎo)我們發(fā)現(xiàn)網(wǎng)絡(luò)輸出仍是 X 的線性組合。這表明体啰,使用神經(jīng)網(wǎng)絡(luò)與直接使用線性模型的效果并沒有什么兩樣攒巍。即便是包含多層隱藏層的神經(jīng)網(wǎng)絡(luò),如果使用線性函數(shù)作為激活函數(shù)荒勇,最終的輸出仍然是線性模型柒莉。這樣的話神經(jīng)網(wǎng)絡(luò)就沒有任何作用了。因此沽翔,隱藏層的激活函數(shù)必須要是非線性的兢孝。
補(bǔ)充一點(diǎn):因?yàn)樯窠?jīng)網(wǎng)絡(luò)的數(shù)學(xué)基礎(chǔ)是處處可微的,所以選取的激活函數(shù)要能保證數(shù)據(jù)輸入與輸出也是可微的搀擂,運(yùn)算特征是不斷進(jìn)行循環(huán)計(jì)算西潘,所以在每代循環(huán)過程中,每個(gè)神經(jīng)元的值也是在不斷變化的哨颂。
有了大概的概念后就可進(jìn)入正題~
Relu函數(shù)是什么?
首先相种,relu函數(shù)是常見的激活函數(shù)中的一種威恼,表達(dá)形式如下。
Relu函數(shù)的圖像和求導(dǎo)后的圖像如下:
從表達(dá)式和圖像可以明顯地看出:Relu其實(shí)就是個(gè)取最大值的函數(shù)寝并。
ReLU函數(shù)其實(shí)是分段線性函數(shù)箫措,把所有的負(fù)值都變?yōu)?,而正值不變衬潦,這種操作被成為單側(cè)抑制斤蔓。(也就是說:在輸入是負(fù)值的情況下,它會(huì)輸出0镀岛,那么神經(jīng)元就不會(huì)被激活弦牡。這意味著同一時(shí)間只有部分神經(jīng)元會(huì)被激活友驮,從而使得網(wǎng)絡(luò)很稀疏,進(jìn)而對計(jì)算來說是非常有效率的驾锰。)正因?yàn)橛辛诉@單側(cè)抑制卸留,才使得神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元也具有了稀疏激活性。尤其體現(xiàn)在深度神經(jīng)網(wǎng)絡(luò)模型(如CNN)中椭豫,當(dāng)模型增加N層之后耻瑟,理論上ReLU神經(jīng)元的激活率將降低2的N次方倍。
使用Relu函數(shù)有什么優(yōu)勢赏酥?
1.沒有飽和區(qū)喳整,不存在梯度消失問題。
2.沒有復(fù)雜的指數(shù)運(yùn)算裸扶,計(jì)算簡單算柳、效率提高。
3.實(shí)際收斂速度較快姓言,比 Sigmoid/tanh 快很多瞬项。
4.比 Sigmoid 更符合生物學(xué)神經(jīng)激活機(jī)制。
當(dāng)然relu也存在不足:就是訓(xùn)練的時(shí)候很”脆弱”何荚,很容易就”die”了. 舉個(gè)例子:一個(gè)非常大的梯度流過一個(gè) ReLU 神經(jīng)元囱淋,更新過參數(shù)之后,這個(gè)神經(jīng)元再也不會(huì)對任何數(shù)據(jù)有激活現(xiàn)象了餐塘。如果這個(gè)情況發(fā)生了妥衣,那么這個(gè)神經(jīng)元的梯度就永遠(yuǎn)都會(huì)是0.實(shí)際操作中,如果你的learning rate 很大戒傻,那么很有可能你網(wǎng)絡(luò)中的40%的神經(jīng)元都”dead”了税手。 當(dāng)然,如果你設(shè)置了一個(gè)合適的較小的learning rate需纳,這個(gè)問題發(fā)生的情況其實(shí)也不會(huì)太頻繁芦倒。
Ending~
參考資料(https://blog.csdn.net/u013146742/article/details/51986575)
(https://www.cnblogs.com/tianqizhi/p/9570975.html)
(https://blog.csdn.net/tyhj_sf/article/details/79932893)
(https://www.sohu.com/a/214965417_100008678)
劃水愉快!嘻嘻:)