神經網路的啟用函式總結
導言
啟用函式在神經網路中具有重要的地位。在SIGAI之前的公眾號文章“理解神經網路的啟用函式”中,我們回答了3個關鍵的問題:
為什麼需要啟用函式?
什麼樣的函式能用作啟用函式?
什麼樣的函式是好的啟用函式?
這篇文章從理論的角度介紹了啟用函式的作用。承接上篇,在今天這篇文章中,SIGAI將為大家介紹當前深度學習中常用的一些啟用函式,包括它們的工程實現。我們將以Caffe為例。
啟用函式實現的是一對一的變換,即用相同的函式對輸入向量的每個分量進行對映,得到輸出向量,輸入和輸出向量的維數相同:
其中x和y都是n維向量。寫成分量的形式為:
在工程實現時,如果將啟用函式作為一個單獨的層,則在正向傳播時對輸入向量的每個分量計算啟用函式值f(x)。在反向傳播時對輸入資料計算導數值f’(x),然後乘以後一層送入的誤差項,得到本層的誤差項,送人前一層中:
如果你對反向傳播演算法的原理還不清楚,請閱讀SIGAI之前的公眾號文章“反向傳播演算法推導-全連線神經網路”。這裡的乘法是向量逐元素對應相乘。由於啟用函式沒有需要學習訓練得到的引數,因此無需根據誤差項計算本層引數的導數值。
在神經網路的早期階段,sigmoid函式,tanh被廣為使用。在AlexNet出現之後,ReLU函式逐漸取代了這兩個函式,得到了廣泛使用,因為ReLU函式更不容易產生梯度消失問題。如果你對梯度消失問題,啟用函式的飽和性還不清楚,請閱讀我們之前的公眾號文章“理解神經網路的啟用函式”。
由於當前被提出的啟用函式眾多,為了便於大家理解與記憶,我們對此做了總結。各種常用的啟用函式與它們的導數如下表所示:
根據這些函式的定義,我們很容易計算出它們的導數。
下面我們以Caffe為例,介紹這些啟用函式的具體實現細節。在Caffe中,啟用函式是一個單獨的層,把它和全連線層,卷據層拆開的好處是更為靈活,便於程式碼複用和組合。因為無論是全連線層,還是卷據層,它們啟用函式的實現是相同的,因此可以用一套程式碼來完成。
啟用函式由神經元層完成,它們的基類是NeuronLayer,所有的啟用函式層均從它派生得到,下面分別進行介紹,限於篇幅,我們只介紹一部分,其他的原理類似。此外,Dropout機制也由神經元層實現。
SigmoidLayer類實現了標準sigmoid啟用函式。正向傳播函式對每個輸入資料計算sigmoid函式值,在這裡count是輸入資料的維數。實現程式碼如下:
TanHLayer類實現了tanh啟用函式。正向傳播函式實現程式碼如下:
類ReLULayer實現ReLU啟用函式,和前面介紹的標準ReLU不同,這裡做了改進,定義為:
其中a是人工設定的大於0的引數。顯然該函式的導數為:
下面來看正向傳播函式的程式碼:
反向傳播函式的實現如下:
這樣可以通過函式值得到導數值,減少計算量。正向傳播函式的實現如下:
類PReLULayer實現了PReLU啟用函式。正向傳播函式的實現如下:
反向傳播函式的實現如下:
類DropoutLayer實現Dropout機制。在訓練階段,隨機丟掉一部分神經元,用剩下的節點進行前向和後向傳播。這裡實現時通過二項分佈隨機數來控制神經元是否啟用,如果隨機數取值為1則啟用,否則不啟用。正向傳播函式的實現如下:
推薦閱讀
[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
[38] 基於深度負相關學習的人群計數方法 【獲取碼】SIGAI0718
[39] 流形學習概述【獲取碼】SIGAI0720
[40] 關於感受野的總結 【獲取碼】SIGAI0723
[41] 隨機森林概述 【獲取碼】SIGAI0725
[42]基於內容的影像檢索技術綜述 傳統經典方法 【獲取碼】SIGAI0727
相關文章
- 神經網路中使用的啟用函式神經網路函式
- 卷積神經網路-啟用函式卷積神經網路函式
- 神經網路啟用函式=生物轉換器?神經網路函式
- 人工智慧---神經網路啟用函式恆等函式、sigmoid函式、softmax函式詳解人工智慧神經網路函式Sigmoid
- 神經網路簡介--啟用函式、網路架構、生物模型解釋神經網路函式架構模型
- 神經網路中常用的函式神經網路函式
- Pytorch_第九篇_神經網路中常用的啟用函式PyTorch神經網路函式
- 從ReLU到GELU,一文概覽神經網路的啟用函式神經網路函式
- 理解神經網路的不同損失函式神經網路函式
- 一句話總結人工神經網路神經網路
- 卷積神經網路知識點總結卷積神經網路
- 神經網路可能不再需要啟用函式?Layer Normalization也具有非線性表達!神經網路函式ORM
- 深度神經網路的分散式訓練概述:常用方法和技巧全面總結神經網路分散式
- 常見啟用函式的介紹和總結函式
- 一句話總結卷積神經網路卷積神經網路
- 機器學習和神經網路的簡要框架總結機器學習神經網路框架
- 神經網路與深度學習 課程複習總結神經網路深度學習
- 神經網路:numpy實現神經網路框架神經網路框架
- 神經網路神經網路
- 關於訓練神經網路的諸多技巧Tricks(完全總結版)神經網路
- 在邊緣裝置上擬合大型神經網路的方法總結神經網路
- 【深度學習篇】--神經網路中的卷積神經網路深度學習神經網路卷積
- 理解神經元和函式函式
- 神經網路是怎麼“看”東西的?啟用圖告訴你神經網路
- 常見迴圈神經網路結構神經網路
- TensorFlow筆記-06-神經網路優化-損失函式,自定義損失函式,交叉熵筆記神經網路優化函式熵
- 總結一下使用pytorch搭建神經網路的一般步驟PyTorch神經網路
- TensorFlow卷積網路常用函式引數詳細總結卷積函式
- LSTM神經網路神經網路
- 8、神經網路神經網路
- 神經網路基礎部件-損失函式詳解神經網路函式
- 聊聊從腦神經到神經網路神經網路
- 圖神經網路GNN 庫,液體神經網路LNN/LFM神經網路GNN
- 字串函式的應用及做題總結字串函式
- 用一個畫素攻陷神經網路神經網路
- 用神經網路測量訓練集的半衰期神經網路
- [Python人工智慧] 七.加速神經網路、激勵函式和過擬合Python人工智慧神經網路函式
- 開放式神經網路交換-ONNX(上)神經網路