都2021年了,不会还有人连深度学习都不了解吧(一)- 激活函数篇
一、前言
本人目前研一,研究方向為基于深度學習的醫學圖像分割,轉眼間已接觸深度學習快1年,研一生活也即將結束,期間看了大量的英文文獻,做了大量的實驗,也算是對深度學習有了一個初步的了解吧。接下來的一段時間,我會以總結的形式來記錄研一期間學到的關于深度學習的基礎知識,其中穿插著大量的個人作深度學習方面工作的經驗,寫這個系列的初衷一方面是為了記錄研一的學習成果,另一方面也是為了幫助更多的人了解到深度學習這一大熱領域,最后,大喊一聲:深度學習yyds!
二、激活函數介紹
在接觸激活函數之前,我們需要大致了解一下什么是感知機。
上圖中的感知機接受x1和x2兩個輸入信號,輸出為y。若用數學公式來表達圖中的感知機,則:
b是稱為偏置,用于控制神經元被激活的容易程度;而w1和w2是表示各個信號的權重的參數,用于控制各個信號的重要性。感知機將x1、x2、1(偏置,圖中未畫出)三個信號作為神經元的輸入,將其和各自的權重相乘后,傳送至下一個神經元。在下一個神經元中,計算這些加權信號的總和。如果這個總和超過0,則輸出1,否則輸出0。
我們將上述公式寫為更簡潔的形式:
輸入的總和會被函數A轉換,轉換后的值就是輸出y。在輸入總和超過0時返回1,否則返回0。從公式中可以看出,該步驟可以分為2個階段,先計算輸入信號的總和,然后用激活函數轉換。因此,可以將上述公式改寫為:
剛才登場的A(x)會將輸入信號轉換為輸出信號,這種函數稱為激活函數(activation function)。激活函數的作用在于決定如何來激活輸入信號的總和。至此,相信大家已經對激活函數有了一個大致的了解,明確激活函數的任務是什么,下面我們介紹一下常用的激活函數有哪些。
三、常用的激活函數
3.1 階躍函數
從圖中可以清晰地看出,階躍函數以0為界,輸出從0切換為1(或者從1切換為0)。它的值呈階梯式變化,所以稱為階躍函數。
3.2 Sigmoid函數
Sigmoid函數定義為:
Sigmoid函數圖像如下圖所示:
Note:(Sigmoid函數和階躍函數的比較)
- 1.首先注意到的是“平滑性”的不同。sigmoid函數是一條平滑的曲線,輸出隨著輸入發生連續性的變化。而階躍函數以0為界,輸出發生急劇性的變化。sigmoid函數的平滑性對神經網絡的學習具有重要意義。
- 2.另一個不同點是,相對于階躍函數只能返回0或1,sigmoid函數可以返回0.731 …、0.880 …等實數(這一點和剛才的平滑性有關)。也就是說,感知機中神經元之間流動的是0或1的二元信號,而神經網絡中流動的是連續的實數值信號。
- 3.共同點:實際上,兩者的結構均是“輸入小時,輸出接近0(為0);隨著輸入增大,輸出向1靠近(變成1)”。也就是說,當輸入信號為重要信息時,階躍函數和sigmoid函數都會輸出較大的值;當輸入信號為不重要的信息時,兩者都輸出較小的值。還有一個共同點是,不管輸入信號有多小,或者有多大,輸出信號的值都在0到1之間。
3.3 tanh函數
tanh是雙曲函數中的一個,tanh()為雙曲正切。
tanh函數定義為:
圖像如下所示:
Note(很重要):
Sigmoid函數和tanh函數作為常用的激活函數,必定有其的優勢所在,但是兩者都存在致命的缺陷,尤其是在越來越深的網絡表現得愈加明顯。首先,我們需要了解為什么深度神經網絡收斂慢的原因。
這是因為深層神經網絡在做非線性變換前的激活輸入值(就是那個x=WU+B,U是輸入)隨著網絡深度加深或者在訓練過程中,其分布逐漸發生偏移或者變動,之所以訓練收斂慢,一般是整體分布逐漸往非線性函數的取值區間的上下限兩端靠近(對于Sigmoid函數來說,意味著激活輸入值WU+B是大的負值或正值),所以這導致反向傳播時低層神經網絡的梯度消失,這是訓練深層神經網絡收斂越來越慢的本質原因。
也可以通過兩者得圖像可以看到,當輸入大于2時,梯度會變得越來越小(更加詳細的解讀請移步詳細解讀BN的本質),這會導致深度神經網絡出現梯度彌散的問題,以至于深度神經網絡模型不能收斂。而之后提出的ReLU函數很好的解決了這個問題。
3.4 ReLU函數
3.4.1 ReLU介紹
ReLU函數定義如下式所示:
ReLU圖像如下圖所示:
3.4.2 使用ReLU的優勢
第一個優點是 ReLU 函數計算簡單,可以提升模型的運算速度,加快模型的收斂速度;第二個是如果網絡很深,會出現梯度消失的問題,使得模型會出現不會收斂或者是收斂速度慢的問題,而使用 ReLU函數可以有效的解決模型收斂速度慢的問題。
四、 為什么使用激活函數
首先,我們需要明確一點是神經網絡的中激活函數必須使用非線性函數。為什么不能使用線性函數呢?因為使用線性函數的話,加深網絡層數就沒有什么意義了。線性函數的問題在于,不管如何加深層數,總是存在與之等效的“無隱藏層的神經網絡”。為了具體地理解這一點,我們來思考下面這個簡單的例子。這里我們考慮把線性函數 h(x) = cx 作為激活函數,把y(x) = h(h(h(x)))的運算對應3層經網絡A。這個運算會進行y(x) = c × c × c × x的乘法運算,但是同樣的處理可以由y(x) = ax(注意,a = c**3)這一次乘法運算(即沒有隱藏層的神經網絡)來表示。如本例所示,使用線性函數時,無法發揮多層網絡帶來的優勢。因此,為了發揮疊加層所帶來的優勢,激活函數必須使用非線性函數。
五、激活函數的一些變體
這里只介紹現代神經網絡中最常用的ReLU函數的幾種變體,變體有很多,包括Leaky ReLU、PReLU、ELU等等,說實話,我在這接近一年研究深度學習的工作中,從未用過ReLU的任何變體,而且同門師兄弟也沒聽說誰用過,所以在這里只是簡單的介紹。
5.1 Leaky ReLU
為什么提出了Leaky ReLU?這需要從ReLU說起,ReLU函數對正數樣本原樣輸出,負數直接置零。在正數不飽和,在負數硬飽和,ReLU在負數區域被Kill(即直接置0這一操作)的現象叫做dead relu。為了解決上述的dead ReLU現象。這里選擇一個數,讓負數區域不在飽和死掉。這里的斜率都是確定的,即Leaky ReLU。Leaky ReLU的定義及圖像如下所示:
5.2 PReLU
PReLU與Leaky ReLU類似,只不過ReLU的參數是一個可學習的參數,而Leaky ReLU的參數是一個定值。PReLU的定義如下:
原文獻建議初始化alpha,alpha為0.25,不采用正則,但是這要根據具體數據和網絡,通常情況下使用正則可以帶來性能提升。與Relu比起來,PRelu收斂速度更快。
參考文獻
《深度學習入門-基于Python的理論與實現》
《ImageNet Classification with Deep ConvolutionalNeural Networks》
計劃 – 深度學習系列
都2021年了,不會還有人連深度學習還不了解吧?(一)-- 激活函數篇
都2021年了,不會還有人連深度學習還不了解吧?(二)-- 卷積篇
都2021年了,不會還有人連深度學習還不了解吧?(三)-- 損失函數篇
都2021年了,不會還有人連深度學習還不了解吧?(四)-- 上采樣篇
都2021年了,不會還有人連深度學習還不了解吧?(五)-- 下采樣篇
都2021年了,不會還有人連深度學習還不了解吧?(六)-- Padding篇
都2021年了,不會還有人連深度學習還不了解吧?(七)-- 評估指標篇
都2021年了,不會還有人連深度學習還不了解吧?(八)-- 優化算法篇
都2021年了,不會還有人連深度學習還不了解吧?(九)-- 注意力機制篇
都2021年了,不會還有人連深度學習還不了解吧?(十)-- 數據歸一化篇
覺得寫的不錯的話,歡迎點贊+評論+收藏,這對我幫助很大!
總結
以上是生活随笔為你收集整理的都2021年了,不会还有人连深度学习都不了解吧(一)- 激活函数篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试薪资这样谈,让你的月薪加倍!
- 下一篇: 都2021年了,不会还有人连深度学习都不