一文详解神经网络与激活函数的基本原理
?PaperWeekly 原創(chuàng) ·?作者|王東偉
單位|致趣百川
研究方向|深度學(xué)習(xí)
本文介紹神經(jīng)網(wǎng)絡(luò)(Neural Network)及激活函數(shù)(Activation Function)的基本原理。
考慮以下分類問題:
▲ 圖1
顯然,該分類問題具有非線性的決策邊界。如果不增加特征,采用線性核的 SVM(以下簡(jiǎn)稱線性 SVM)和邏輯回歸都無(wú)法擬合,因?yàn)樗鼈冎荒艿玫叫稳? 的線性邊界。
一個(gè)可行的辦法是增加高次方項(xiàng)作為特征輸入,比如以 作為線性 SVM 或邏輯回歸輸入,可以擬合形如 的決策邊界(實(shí)際上它可以擬合圓或橢圓),對(duì)于圖 1 所示的例子這可能是不錯(cuò)的模型。
然而,在實(shí)際案例中我們通常都無(wú)法猜到?jīng)Q策邊界的“形狀”,一是因?yàn)闃颖镜奶卣鲾?shù)量很大導(dǎo)致無(wú)法可視化,二是其可能的特征組合很多。
對(duì)于上述非線性模型擬合的問題,我們之前介紹了采用核函數(shù)的 SVM,本文將介紹更通用的方法——神經(jīng)網(wǎng)絡(luò)。
考慮以下矩陣運(yùn)算:
即:
可以看到??的每個(gè)元素都是??的線性變換。一般地,對(duì)于權(quán)重矩陣?、輸入向量?、偏置向量?,可以得到 x 的線性變換?。
這里我們用 ? 表示 k 行 n 列的矩陣, 表示 n 維向量。由于一些傳統(tǒng)的原因,當(dāng)我們說 n 維向量,一般指 n 維列向量,即 n 行 1 列的矩陣。
我們可以對(duì) x 作多次線性變換得到最終的輸出 y,如:
其中,我們用上標(biāo)來(lái)區(qū)分不同變換的參數(shù)。
用圖形表示為(假設(shè)向量 的維數(shù)分別是 2,3,2,1)。
▲ 圖2
上述連續(xù)變換我們稱之為 3 層神經(jīng)網(wǎng)絡(luò)模型,它有 2 個(gè)隱藏層(hidden layer)、1 個(gè)輸出層(output layer),并且輸入 x 有兩個(gè)特征,注意輸入層不計(jì)入層數(shù)。一般地,如果輸入 x 經(jīng)過 L 次連續(xù)變換得到輸出 y,那么該變換對(duì)應(yīng)的神經(jīng)網(wǎng)絡(luò)模型有 L 層,并且具有 L-1 個(gè)隱藏層。
如圖 1,隱藏層 1 有 3 個(gè)神經(jīng)元(注意不包括偏置項(xiàng)),其中 , 可以視為關(guān)于 x 的函數(shù),我們也稱之為神經(jīng)元(neuron)或單元(unit),它接收上一層發(fā)出的信號(hào) x,進(jìn)行運(yùn)算后將結(jié)果信號(hào)傳遞到下一層與其連接的神經(jīng)元。如果某一層的任意神經(jīng)元都分別連接到上一層的所有神經(jīng)元,則該層稱為全連接層(full connected layer,FC)。
作為個(gè)人的建議,你可以把一個(gè)層理解為一次變換(或映射),其輸出將作為下一層(如果有的話)的輸入。事實(shí)上,關(guān)于層的定義,我不認(rèn)為我完全清楚,但是我通常會(huì)用矩陣運(yùn)算或函數(shù)來(lái)看待神經(jīng)網(wǎng)絡(luò)的問題,所以如果你理解了原理,這些名詞其實(shí)不重要。
關(guān)于神經(jīng)網(wǎng)絡(luò)的同義名詞。由于部分人不喜歡神經(jīng)網(wǎng)絡(luò)與人腦機(jī)制的類比,所以他們更傾向于將神經(jīng)元稱為單元,此外,神經(jīng)網(wǎng)絡(luò)也被稱為多層感知機(jī)(multilayer perceptron)。說實(shí)話我也不喜歡,但是為了盡可能減少信息差,本文將采用使用率更高的名詞。
現(xiàn)在,我們來(lái)分析如何用神經(jīng)網(wǎng)絡(luò)模型解決本文開篇的非線性分類問題。
仔細(xì)分析可以發(fā)現(xiàn),x 經(jīng)過多次線性變換的結(jié)果仍然是關(guān)于 x 的線性變換,顯然,為了擬合非線性的模型我們需要加一些“非線性的運(yùn)算”。具體的操作如下:
其中,????(·)?是對(duì)矩陣或向量的點(diǎn)操作(elementwise),即:
?????稱為激活函數(shù)(activation function),activation 一詞來(lái)源于神經(jīng)科學(xué),稍后我們將進(jìn)一步探討。考慮以下激活函數(shù):
對(duì)于只有一個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò)模型,以 Sigmoid 函數(shù)為激活函數(shù),即:
假設(shè)隱藏層有 N 個(gè)神經(jīng)元且輸出 y 為實(shí)數(shù),則 y 可以表示為如下形式:
可以證明?????(????)?是一個(gè)通用近似器(universal approximator),能夠近似任何函數(shù)。
某種意義上,可以認(rèn)為神經(jīng)網(wǎng)絡(luò)自動(dòng)進(jìn)行了特征組合,我們需要做的是找到合適的模型架構(gòu),并且通過優(yōu)化算法得到擬合數(shù)據(jù)樣本的模型參數(shù)。
對(duì)于本文開篇的分類問題,我們只需要一個(gè)兩層的神經(jīng)網(wǎng)絡(luò)模型,即有一個(gè)隱藏層和一個(gè)輸出層,隱藏層單元數(shù)量一般可以取輸入特征維數(shù) n 的倍數(shù),比如 2n。模型可以用矩陣運(yùn)算表示:
其中:
你可以檢驗(yàn)上述運(yùn)算是否符合矩陣乘法規(guī)則。
關(guān)于隱藏層單元數(shù)量。通常隱藏層單元數(shù)量越多越好,一個(gè)直覺的理解是,如果我們把待擬合的目標(biāo)函數(shù)看成一個(gè)具有無(wú)窮項(xiàng)及任意系數(shù)的多項(xiàng)式函數(shù),更多的隱藏層單元意味著更多的獨(dú)立參數(shù),它將有更強(qiáng)的擬合能力,但是需要更大的計(jì)算量,當(dāng)然擬合能力強(qiáng)也意味著更容易過擬合,因此我們還會(huì)在誤差函數(shù)中加入正則化項(xiàng),后續(xù)文章將深入探討。
此外,隱藏層單元數(shù)量一般不能小于輸入特征維數(shù),特別是對(duì)于當(dāng)你的模型使用了 ReLU 這樣的激活函數(shù)時(shí),它將有可能無(wú)法擬合目標(biāo)函數(shù)。
注意到我們用 Sigmoid 函數(shù)將模型輸出 y 映射到(0,1)區(qū)間,但這里的 Sigmoid 通常不認(rèn)為是激活函數(shù),僅僅作為分類問題的歸一化作用。 表示第 i 個(gè)訓(xùn)練樣本,M(x) 表示模型的輸出,則其誤差函數(shù)(用小寫 θ 表示所有模型參數(shù))。
接下來(lái)我們可以用梯度下降(將在下一篇文章探討)得到最小化誤差的模型參數(shù) ,于是,對(duì)于給定的測(cè)試樣本 ,我們給出的預(yù)測(cè)是:
對(duì)于非線性的回歸問題,我們模型可以是:
此時(shí)誤差函數(shù)應(yīng)該用最小平方誤差(mean squared error):
總結(jié)一下,神經(jīng)網(wǎng)絡(luò)算法的基本步驟:
1) 設(shè)計(jì)模型架構(gòu)(提出假設(shè))
2) 設(shè)定誤差函數(shù)
3) 最小化誤差(求極值點(diǎn))
關(guān)于模型架構(gòu)。雖然具有一個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò)已經(jīng)可以模擬大部分函數(shù),但是實(shí)踐證明深度神經(jīng)網(wǎng)絡(luò)(即有更多的隱藏層)在圖像識(shí)別和自然語(yǔ)言處理等任務(wù)中具有更優(yōu)的表現(xiàn),因此有各類復(fù)雜的模型被設(shè)計(jì)出來(lái),并在相應(yīng)任務(wù)中取得了很好的效果。
一些典型的模型架構(gòu),如 CNN(常用于圖像類任務(wù)),RNN(常用于序列類任務(wù)),Autoencoders(常用于特征學(xué)習(xí)),GAN(常用于生成類任務(wù))。
關(guān)于最小化誤差。在實(shí)際任務(wù)中,誤差函數(shù)通常無(wú)法得到解析解,因此我們一般采用梯度下降這樣的迭代算法以期得到近似值,但這里面需要考慮各類“函數(shù)形狀”所帶來(lái)的問題,我們將在后續(xù)文章介紹這些問題及其解決方案。
激活函數(shù)
▲ 圖3.1 Sigmoid
▲ 圖3.2 Tanh
Sigmoid 函數(shù)。最古老的激活函數(shù),表達(dá)式 ,據(jù)說選中它的原因是其函數(shù)特征很像生物學(xué)中的“全或無(wú)定律”(all or none law)——神經(jīng)元對(duì)于超過閾值的刺激強(qiáng)度以最大的脈沖振幅作出反應(yīng),而對(duì)于低于閾值的刺激不作反應(yīng)。
如圖 3.1,Sigmoid 函數(shù)在x很大時(shí)趨近于 1 而在 x 很小時(shí)趨近于 0, 然而,Sigmoid 函數(shù)的梯度也在兩端快速趨近于零,這將有可能導(dǎo)致梯度消失(這是后向傳播算法和計(jì)算機(jī)精度帶來(lái)的問題,我們將在后續(xù)文章探討),進(jìn)一步導(dǎo)致參數(shù)無(wú)法更新(可以說模型停止了“學(xué)習(xí)”)。
Tanh 函數(shù)。Tanh 與 Sigmoid 有類似的特征,可以由 Sigmoid 縮放平移得到,即??????????????(????)=2?????????????????????????????(????)–1。它的優(yōu)點(diǎn)是值域?yàn)?#xff08;-1,1)并且關(guān)于零點(diǎn)對(duì)稱,對(duì)于零均值的輸入將得到零均值的輸出,這將有利于更高效的訓(xùn)練(類似于 batch normalization 的作用)。需要注意的是,Tanh 仍然有梯度消失的問題。
ReLU 函數(shù)。表達(dá)式為?????????????????(????)=????????????(0,????),一般來(lái)說,它相比 Sigmoid 和 Tanh 可以加速收斂,這可能得益于其在正半軸有恒為 1 的梯度,另外由于只需要一次比較運(yùn)算,ReLU 需要更小的計(jì)算量。注意到 ReLU 在負(fù)半軸恒為零,這將導(dǎo)致神經(jīng)元在訓(xùn)練時(shí)“永久死亡”(即對(duì)于上一層的任何輸入,其輸出為 0),從而降低模型的擬合能力,事實(shí)上,這也是梯度消失的一種表現(xiàn)。
關(guān)于 ReLU 的“死亡”。考慮以 ReLU 為激活函數(shù)的神經(jīng)網(wǎng)絡(luò)模型(通常同一個(gè)模型只用一種激活函數(shù)),以任意神經(jīng)元為例,將其視為函數(shù) θ,其中 x 為上一層的輸出向量。假設(shè)某一次梯度更新后 ?θ,進(jìn)一步假設(shè)任意 為數(shù)值很大的負(fù)值,考慮到上一層的輸出 x≥0,容易發(fā)現(xiàn)對(duì)于后續(xù)的輸入,f(x) 取值將有可能一直為 0。上述分析思路同樣適合 Sigmoid 函數(shù),當(dāng)然這也進(jìn)一步解釋了 Tanh 零均值輸出的優(yōu)勢(shì)。如果你對(duì)于 batch normalization 有所了解,應(yīng)該可以發(fā)現(xiàn)它將有助于改善“Dying ReLU”問題。
類 ReLU 函數(shù)。實(shí)踐證明 ReLU 在多數(shù)任務(wù)中具有更優(yōu)的表現(xiàn),特別是在深度神經(jīng)網(wǎng)絡(luò)中。考慮到 ReLU 本身的缺陷,有許多改進(jìn)版的 ReLU 被設(shè)計(jì)出來(lái)并得到了不錯(cuò)的效果。主要改進(jìn)的地方有兩點(diǎn),一是 ReLU 在零點(diǎn)不可導(dǎo),二是其在負(fù)半軸取值為零。其中比較典型的有:
Leaky ReLU:
GELU:
Swish:
▲ 圖4.1 ReLU
▲ 圖4.2 Leaky ReLU
▲ 圖4.3 GELU
▲ 圖4.4 Swish
Leaky ReLU 給 ReLU 的負(fù)半軸增加了一個(gè)微小的梯度,改善了“Dying ReLU”的問題。GELU 用了高斯累計(jì)分布來(lái)構(gòu)造 ReLU,著名的 NLP 模型 BERT 用的是 GELU,參考 [1]。Swish 是通過自動(dòng)化技術(shù)搜索得到的激活函數(shù),作者做了大量的對(duì)比實(shí)驗(yàn)表明 Swish 在不同的任務(wù)中均有超出其他類 ReLU 函數(shù)的表現(xiàn)(包括 GELU),參考 [2]。
Swish 和 GELU都屬于“光滑 ReLU”(smooth ReLU),因?yàn)樘幪庍B續(xù)可導(dǎo),一篇最近的論文展現(xiàn)了用光滑 ReLU 進(jìn)行“對(duì)抗訓(xùn)練”(adversarial training)的良好表現(xiàn),參考 [3]。
關(guān)于激活函數(shù)的選擇。沒有人任何科學(xué)家會(huì) 100% 確定地告訴你哪個(gè)函數(shù)更好用,但是如果按照實(shí)驗(yàn)結(jié)果,我們可以說類 ReLU 函數(shù)目前在多數(shù)任務(wù)中有更優(yōu)的表現(xiàn),就個(gè)人的建議,Swish 和 GELU 會(huì)是不錯(cuò)的選擇,Swish 的論文雖然以實(shí)驗(yàn)表明其優(yōu)于 GELU,但 Google 在 BERT 中使用了 GELU。其他激活函數(shù),可參考 [4]。
上文我們提到了通用近似器的概念,事實(shí)上這就是神經(jīng)網(wǎng)絡(luò)之所以有效的原因,而其關(guān)鍵的部分則是激活函數(shù)。
在“通用近似理論”(universal approximation theorem)領(lǐng)域,可以分為兩類近似理論,一類研究任意寬度(arbitrary width)和有界深度(bounded depth)的情況,另一類是任意深度和有界寬度。
比如上文的 G(x) 屬于任意寬度和有界深度,即 depth >= 1,width 根據(jù)近似的目標(biāo)函數(shù)可以任意調(diào)整。在深度學(xué)習(xí)領(lǐng)域,有很多關(guān)于神經(jīng)網(wǎng)絡(luò)隱藏層的寬度(width,平均單層神經(jīng)元數(shù)量)和深度(depth,模型層數(shù))如何影響神經(jīng)網(wǎng)絡(luò)模型性能的研究,比如,是單層具有 1000 個(gè)神經(jīng)元的隱藏層,還是 10 層具有 100 個(gè)神經(jīng)元的隱藏層表現(xiàn)更好。
值得注意的是,對(duì)于某些激活函數(shù),寬度如果小于等于某個(gè)數(shù)值(對(duì)于 ReLU,這個(gè)數(shù)值是輸入特征維數(shù) n),無(wú)論其模型深度多大,都存在一些其無(wú)法模擬的函數(shù)。詳情請(qǐng)參考?[5],以及關(guān)于深度神經(jīng)網(wǎng)絡(luò)的研究 [6]。
以下一個(gè)簡(jiǎn)單的例子展示了以 ReLU 為激活函數(shù)的單隱藏層神經(jīng)網(wǎng)絡(luò)模型,其擬合效果與隱藏層單元數(shù)量的關(guān)系,為了方便可視化,擬合的目標(biāo)是一元二次函數(shù)(x>0)。圖 3.1 為隨機(jī)采樣的 50 個(gè)樣本,圖 3.2、3.3、3.4 分別為隱藏層單元數(shù)量取 1、2、5 時(shí)的擬合曲線。
▲ 圖5.1
▲ 圖5.2
▲ 圖5.3
▲ 圖5.4
可以看到隨著隱藏層神經(jīng)元數(shù)量的增多,模型的擬合能力逐步增大,如果神經(jīng)元數(shù)量太小,則有可能無(wú)法在允許的誤差范圍內(nèi)擬合目標(biāo)函數(shù)。
一個(gè)有趣的事情是,當(dāng)我們不用激活函數(shù)時(shí),相當(dāng)于我們用了一個(gè)恒等函數(shù) f(x)=x ?作為激活函數(shù),這將導(dǎo)致我們的模型只能擬合線性函數(shù)。但是,ReLU 僅僅簡(jiǎn)單地“舍去”負(fù)值就取得了通用近似器的效果,有點(diǎn)類似于二極管對(duì)交流電的整流作用,這也是 ReLU 名稱的由來(lái)(Rectified Linear Unit)。
事實(shí)上,計(jì)算機(jī)的運(yùn)算就是基于開關(guān)控制的邏輯電路,所以從這個(gè)角度,ReLU 似乎有一種二進(jìn)制的美感。
參考文獻(xiàn)
[1] Gaussian Error Linear Units (GELUs). Dan Hendrycks. University of California, Berkeley. 2016.?
[2] Searching for Activation Functions. Prajit Ramachandran. Google Brain. 2017.?
[3] Smooth Adversarial Training. Cihang Xie. Google. 2020.?
[4] Activation function. Wikipedia.?
[5] Universal approximation theorem. Wikipedia.?
[6] Learning Functions: When Is Deep Better Than Shallow. Hrushikesh Mhaskar. California Institute of Technology. 2016
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達(dá)讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認(rèn)識(shí)的人。
總有一些你不認(rèn)識(shí)的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學(xué)者和學(xué)術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?
PaperWeekly 鼓勵(lì)高校實(shí)驗(yàn)室或個(gè)人,在我們的平臺(tái)上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學(xué)習(xí)心得或技術(shù)干貨。我們的目的只有一個(gè),讓知識(shí)真正流動(dòng)起來(lái)。
?????來(lái)稿標(biāo)準(zhǔn):
? 稿件確系個(gè)人原創(chuàng)作品,來(lái)稿需注明作者個(gè)人信息(姓名+學(xué)校/工作單位+學(xué)歷/職位+研究方向)?
? 如果文章并非首發(fā),請(qǐng)?jiān)谕陡鍟r(shí)提醒并附上所有已發(fā)布鏈接?
? PaperWeekly 默認(rèn)每篇文章都是首發(fā),均會(huì)添加“原創(chuàng)”標(biāo)志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請(qǐng)單獨(dú)在附件中發(fā)送?
? 請(qǐng)留下即時(shí)聯(lián)系方式(微信或手機(jī)),以便我們?cè)诰庉嫲l(fā)布時(shí)和作者溝通
????
現(xiàn)在,在「知乎」也能找到我們了
進(jìn)入知乎首頁(yè)搜索「PaperWeekly」
點(diǎn)擊「關(guān)注」訂閱我們的專欄吧
關(guān)于PaperWeekly
PaperWeekly 是一個(gè)推薦、解讀、討論、報(bào)道人工智能前沿論文成果的學(xué)術(shù)平臺(tái)。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號(hào)后臺(tái)點(diǎn)擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的一文详解神经网络与激活函数的基本原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 供应链金融在采购阶段的融资模式是
- 下一篇: 12期免息是什么意思