30分鐘講清楚深度神經網路
這兩年神經網路各種火。但對很多人而言,只是聽著覺得各種高大上,究其本質,還是聽不懂。下面我們花三十分鐘把這個事情講清楚。
神經網路演算法是最早來源於某神經生理學家和某數學家聯合發表的一篇論文,他們對人類神經執行規律的提出了一個猜想,並嘗試給出一個建模來模擬人類神經元的執行規律。
神經網路一開始由於求解問題的不穩定,以及範圍有限被拋棄。後面又在各個大神的努力下,對遇到的問題一個個解決,加上因為遊戲帶來的計算能力的提升獲得了一個爆發式的增長。
下面我們講講神經網路是啥以及遇到的問題和探索出來的解決方案,最終我們給出一個深度神經網路的預設的最優配置項。
神經網路是啥
建立M個隱藏層,按順序建立輸入層跟隱藏層的聯結,最後建立隱藏層跟輸出層的聯結。為每個隱藏層的每個節點選擇啟用函式。求解每個聯結的權重和每個節點自帶的bias值。參見下圖。
nn示例.png
所謂啟用函式就是對各個路徑的輸入求和之後進一步增強的函式 。
典型的有如下幾個:
簡單啟用2.png
神經網路訓練的本質
一題道出本質
下面這個圖裡面,是已知的各個聯結線的權值,求y1, y2
nn題目.png
這個練習可以測試對神經網路的理解。
答案是 y1 = 46, y2 = 0
其實就是權值乘以輸入值加上偏差值之後,再透過啟用函式對結果進行一次處理,得出的輸出就是該節點最終的結果。
所以,Layer 1中的Neuron 1的值為 n1 = max(3 * 1 + 4 * (-1) + 9, 0) = 8。
Neuron 2的值為 n2 = max(3 * 2 + 4 * 0 + (-3), 0) = 3。
Layer 2中的Neuron 3 值為 n3 = max(n1 * 4 + n2 * 3 + 5, 0) = 46。
Neuron 4的值為 n4 = max(n1 * (-2) + n2 * 1 + 0, 0) = 0。
所謂神經網路問題的訓練本質,就是已知 y1,y2....yn, 已知x1, x2....xm,求解每個連線的權值和每個神經元上的偏差值。對單層的啟用函式為RELU的神經網路而言就是, y = max(sum(w * x)+b, 0),已知y和x,求解w和b。
訓練的方法
對於以上求解w和b的值,科學家們發現可以透過反向傳播和梯度下降相結合來求解。就是一開始用隨機數初始化我們每個聯結的權值,然後透過神經網路計算出來的y值跟真實的y值做比對。如果這個值相差比較大,則修改當前層的聯結的權重。當發現這個值相差不大時,則修改更低一層的權重。這個步驟一直重複,逐步傳遞到第一層的權值。
神經網路求解遇到的問題
三大問題:
神經網路的原生問題:求解時會遇到梯度消失或者梯度爆炸
效能,訓練太慢
過擬合
針對這三個問題,大拿們開始了一場探索之旅。
梯度消失或爆炸的解決方案
神經網路的求解是透過反向傳播的技術來解決的。透過梯度下降法。問題是,反向傳播從輸出層開始一步一步傳到Layer 1時,越到低層,聯結的權值變化越小,直到沒變化。這種叫梯度消失。還有一些呢?則是越到第一層,變化越來越大。這種叫梯度爆炸。常見於RNN。
解決方案探索如下:
聯結權重的初始化放棄完全隨機的方式,而是要使用特定的標準差。有He initialization和Xavier initialization
使用ReLU作為啟用函式。後面發現ReLU裡面某些神經元會變成0(Dying ReLU的問題),這個時候又演化出 LReLU,RReLU和PReLU以及ELU這些變種。一般來說,啟用函式的選擇優先順序有 ELU > leaky ReLu(包括LReLU,RReLU,PReLU) > ReLU > tanh > sigmoid
Batch Normalization。就是在每層都對輸入的X進行轉化,變成以0為中心的分佈。最終求解同時要求出每層用來scale的引數應該是多少。
Gradient Clipping。就是在反向傳播的過程中限制梯度不超過某個閾值。如果超過就減去相應的閾值。
目前來說,通常用1+2 多於 3 多於 4。就是現在一般使用He initialization跟ReLU的演進版本作為作為啟用函式來解決梯度消失和爆炸的問題,其次才使用Batch Normalization,最後使用Gradient Clipping。
效能問題的解決方案
通常來說,我們很難獲得足夠的標記好的訓練資料。常用解決方案如下:
複用已有的訓練好的網路。通常可以找到已經訓練好的模型的地方有
unsupervised pretraining。對無標籤的訓練資料,直接執行類似於autoencoders之類的演算法。這種演算法類似於聚類,可以提取出輸入資料裡面較為核心的特徵出來。透過這樣一步一步生成每一個隱藏層。最後再用有標籤的資料來訓練最終的網路。
對於大規模資料的訓練,很多時候速度很慢。除了解決梯度消失或爆炸的問題之外,還有使用AdamOptimizer替代GradientDescentOptimizer會大大加快收斂速度。
過擬合的解決方案
early stopping。一旦發現在驗證集合上效能下降,立即停止訓練
在cost function上新增L1 L2 Regularization。所謂L1 L2的Regularization就是新增對模型複雜度的懲罰項。模型用到的聯結線權值越大,懲罰越大。這樣模型的最佳化目標就不僅僅是要預測偏差儘量小,同時還要預測所使用的模型儘量簡單。
使用Dropout。就是每次隨機選擇一些神經元不參與訓練,只有在預測的時候這些神經元才生效。這個神經元的輸出結果要乘以一個機率值。降低貢獻。其實這種就有點類似於降低了神經元之間的依賴性。原來是每個聯結的神經元都參與計算的。現在是隨機失效了。這種技術竟然可以穩定的為神經網路的能力提升2%!
max-norm regularization。就是限制每個神經元的聯結的weight的 l2 Regularization在一個閾值內。
資料補充。其實就是對已有的訓練資料做一定的變換,用來做訓練。提升模型泛化能力
一個神經網路的預設最優配置
Initialization | Activation function | Normalization | Regularization | Optimizer |
---|---|---|---|---|
He Initialization | ELU | Batch Normalization | Dropout | AdamOptimizer |
我們後面會教大家用tensorflow構造出一個神經網路並求解。
作者:墨家鉅子
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2819/viewspace-2817844/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 精講深度學習RNN三大核心點,三分鐘掌握迴圈神經網路深度學習RNN神經網路
- CICC科普欄目|神經網路淺講:從神經元到深度學習神經網路深度學習
- 白話深度神經網路神經網路
- 誰可以詳細講講機器學習,深度學習,神經網路,卷積神經網路的區別以及應用場景機器學習深度學習神經網路卷積
- 【深度學習篇】--神經網路中的卷積神經網路深度學習神經網路卷積
- 如何優化深度神經網路?優化神經網路
- 深度剖析卷積神經網路卷積神經網路
- 神經網路和深度學習神經網路深度學習
- 【深度學習】神經網路入門深度學習神經網路
- 再聊神經網路與深度學習神經網路深度學習
- 深度學習與圖神經網路深度學習神經網路
- AI之(神經網路+深度學習)AI神經網路深度學習
- 《神經網路和深度學習》系列文章七:實現我們的神經網路來分類數字神經網路深度學習
- 【人工神經網路基礎】為什麼神經網路選擇了“深度”?神經網路
- 《神經網路和深度學習》系列文章三十八:深度神經網路為何很難訓練?神經網路深度學習
- 深度神經網路的壓縮與加速神經網路
- 【深度學習】1.4深層神經網路深度學習神經網路
- 深度學習教程 | 深層神經網路深度學習神經網路
- 深度學習三:卷積神經網路深度學習卷積神經網路
- 深度神經網路(DNN)的正則化神經網路DNN
- 神經網路和深度學習(1):前言神經網路深度學習
- 深度學習系列(2)——神經網路與深度學習深度學習神經網路
- 深度神經網路中深度究竟帶來了什麼?神經網路
- 初識卷積神經網路第一講!卷積神經網路
- 深度學習筆記------卷積神經網路深度學習筆記卷積神經網路
- 阿里開源深度神經網路推理引擎 MNN阿里神經網路
- 深度學習之上,圖神經網路(GNN )崛起深度學習神經網路GNN
- 4種除錯深度神經網路的方法除錯神經網路
- 深度學習卷積神經網路筆記深度學習卷積神經網路筆記
- 深度學習之step by step搭建神經網路深度學習神經網路
- 深度學習迴圈神經網路詳解深度學習神經網路
- 神經網路和深度學習簡史(全)神經網路深度學習
- 深度學習之RNN(迴圈神經網路)深度學習RNN神經網路
- 深入研究神經網路和深度學習神經網路深度學習
- 深度神經網路為何很難訓練?神經網路
- 神經網路和深度學習簡史(一)神經網路深度學習
- 神經網路 | 基於MATLAB 深度學習工具實現簡單的數字分類問題(卷積神經網路)神經網路Matlab深度學習卷積
- 神經網路:numpy實現神經網路框架神經網路框架