神經網路的啟用函式總結

1833619571093157發表於2018-07-30

9f46ef1907ecf8b23588717a52cc35057c7d819b

導言

啟用函式在神經網路中具有重要的地位。在SIGAI之前的公眾號文章“理解神經網路的啟用函式”中,我們回答了3個關鍵的問題:

為什麼需要啟用函式?

什麼樣的函式能用作啟用函式?

什麼樣的函式是好的啟用函式?

這篇文章從理論的角度介紹了啟用函式的作用。承接上篇,在今天這篇文章中,SIGAI將為大家介紹當前深度學習中常用的一些啟用函式,包括它們的工程實現。我們將以Caffe為例。

啟用函式實現的是一對一的變換,即用相同的函式對輸入向量的每個分量進行對映,得到輸出向量,輸入和輸出向量的維數相同:

1240

其中x和y都是n維向量。寫成分量的形式為:

1240

在工程實現時,如果將啟用函式作為一個單獨的層,則在正向傳播時對輸入向量的每個分量計算啟用函式值f(x)。在反向傳播時對輸入資料計算導數值f’(x),然後乘以後一層送入的誤差項,得到本層的誤差項,送人前一層中:

1240

如果你對反向傳播演算法的原理還不清楚,請閱讀SIGAI之前的公眾號文章“反向傳播演算法推導-全連線神經網路”。這裡的乘法是向量逐元素對應相乘。由於啟用函式沒有需要學習訓練得到的引數,因此無需根據誤差項計算本層引數的導數值。

在神經網路的早期階段,sigmoid函式,tanh被廣為使用。在AlexNet出現之後,ReLU函式逐漸取代了這兩個函式,得到了廣泛使用,因為ReLU函式更不容易產生梯度消失問題。如果你對梯度消失問題,啟用函式的飽和性還不清楚,請閱讀我們之前的公眾號文章“理解神經網路的啟用函式”。

由於當前被提出的啟用函式眾多,為了便於大家理解與記憶,我們對此做了總結。各種常用的啟用函式與它們的導數如下表所示:

1240

根據這些函式的定義,我們很容易計算出它們的導數。

下面我們以Caffe為例,介紹這些啟用函式的具體實現細節。在Caffe中,啟用函式是一個單獨的層,把它和全連線層,卷據層拆開的好處是更為靈活,便於程式碼複用和組合。因為無論是全連線層,還是卷據層,它們啟用函式的實現是相同的,因此可以用一套程式碼來完成。

啟用函式由神經元層完成,它們的基類是NeuronLayer,所有的啟用函式層均從它派生得到,下面分別進行介紹,限於篇幅,我們只介紹一部分,其他的原理類似。此外,Dropout機制也由神經元層實現。

SigmoidLayer類實現了標準sigmoid啟用函式。正向傳播函式對每個輸入資料計算sigmoid函式值,在這裡count是輸入資料的維數。實現程式碼如下:

1240

TanHLayer類實現了tanh啟用函式。正向傳播函式實現程式碼如下:

1240

類ReLULayer實現ReLU啟用函式,和前面介紹的標準ReLU不同,這裡做了改進,定義為:

1240

其中a是人工設定的大於0的引數。顯然該函式的導數為:

1240

下面來看正向傳播函式的程式碼:

1240

反向傳播函式的實現如下:

1240
1240

1240

這樣可以通過函式值得到導數值,減少計算量。正向傳播函式的實現如下:

1240

類PReLULayer實現了PReLU啟用函式。正向傳播函式的實現如下:

1240

反向傳播函式的實現如下:

1240

類DropoutLayer實現Dropout機制。在訓練階段,隨機丟掉一部分神經元,用剩下的節點進行前向和後向傳播。這裡實現時通過二項分佈隨機數來控制神經元是否啟用,如果隨機數取值為1則啟用,否則不啟用。正向傳播函式的實現如下:

1240

推薦閱讀

[1] 機器學習-波瀾壯闊40年 SIGAI 2018.4.13.

[2] 學好機器學習需要哪些數學知識?SIGAI 2018.4.17.

[3] 人臉識別演算法演化史 SIGAI 2018.4.20.

[4] 基於深度學習的目標檢測演算法綜述 SIGAI 2018.4.24.

[5] 卷積神經網路為什麼能夠稱霸計算機視覺領域? SIGAI 2018.4.26.

[6] 用一張圖理解SVM的脈絡 SIGAI2018.4.28.

[7] 人臉檢測演算法綜述 SIGAI 2018.5.3.

[8] 理解神經網路的啟用函式 SIGAI 2018.5.5.

[9] 深度卷積神經網路演化歷史及結構改進脈絡-40頁長文全面解讀 SIGAI2018.5.8.

[10] 理解梯度下降法 SIGAI 2018.5.11.

[11] 迴圈神經網路綜述—語音識別與自然語言處理的利器 SIGAI2018.5.15

[12] 理解凸優化 SIGAI 2018.5.18

[13] 【實驗】理解SVM的核函式和引數 SIGAI2018.5.22

[14] 【SIGAI綜述】行人檢測演算法 SIGAI2018.5.25

[15] 機器學習在自動駕駛中的應用—以百度阿波羅平臺為例(上) SIGAI 2018.5.29

[16] 理解牛頓法 SIGAI 2018.5.31

[17] 【群話題精華】5月集錦—機器學習和深度學習中一些值得思考的問題 SIGAI 2018.6.1

[18] 大話Adaboost演算法 SIGAI2018.6.2

[19] FlowNet到FlowNet2.0:基於卷積神經網路的光流預測演算法 SIGAI2018.6.4

[20] 理解主成分分析(PCA) SIGAI 2018.6.6

[21] 人體骨骼關鍵點檢測綜述 SIGAI2018.6.8

[22] 理解決策樹 SIGAI 2018.6.11

[23] 用一句話總結常用的機器學習演算法 SIGAI 2018.6.13

[24] 目標檢測演算法之YOLO SIGAI 2018.6.15

[25] 理解過擬合 SIGAI 2018.6.18

[26] 理解計算:從√2到AlphaGo ——第1季 從√2談起 SIGAI 2018.6.20

[27] 場景文字檢測——CTPN演算法介紹 SIGAI2018.6.22

[28] 卷積神經網路的壓縮和加速 SIGAI2018.6.25

[29] k近鄰演算法 SIGAI 2018.6.27

[30] 自然場景文字檢測識別技術綜述 SIGAI 2018.6.27

[31] 理解計算:從√2到AlphaGo ——第2季 神經計算的歷史背景 SIGAI2018.7.4

[32] 機器學習演算法地圖 SIGAI2018.7.6

[33] 反向傳播演算法推導-全連線神經網路SIGAI2018.7.9

[34] 生成式對抗網路模型綜述SIGAI0709.

[35] 怎樣成為一名優秀的演算法工程師SIGAI0711.

[36]理解計算:從根號2到AlphaGo——第三季 神經網路的數學模型 SIGAI0716

[37]【技術短文】人臉檢測演算法之S3FD

[38] 基於深度負相關學習的人群計數方法 【獲取碼】SIGAI0718

[39] 流形學習概述【獲取碼】SIGAI0720

[40] 關於感受野的總結 【獲取碼】SIGAI0723

[41] 隨機森林概述 【獲取碼】SIGAI0725

[42]基於內容的影像檢索技術綜述 傳統經典方法 【獲取碼】SIGAI0727


相關文章