1. DNN神經網絡的前向傳播(FeedForward)
2. DNN神經網絡的反向更新(BP)
3. DNN神經網絡的正則化
1. 前言
神經網絡技術起源於上世紀五、六十年代,當時叫感知機(perceptron),擁有輸入層、輸出層和一個隱含層。輸入的特征向量通過隱含層變換達到輸出層,在輸出層得到分類結果。但是,Rosenblatt的單層感知機有一個嚴重得不能再嚴重的問題,即它對稍復雜一些的函數都無能為力。
隨着數學的發展,這個缺點直到上世紀八十年代才被Rumelhart、Williams、Hinton、LeCun等人(反正就是一票大牛)發明的多層感知機(multilayer perceptron)克服。多層感知機,顧名思義,就是有多個隱含層的感知機。
2. 感知機原理
我之前博文的感知機原理已經詳細的介紹了感知機,現在我們進行一個簡單的回顧。
先看下人工神經元的結構:
輸出是線性的
因為感知機是二分類算法,所以會套一個函數:
在神經網絡中,套在線性變換外面的這個函數稱作激活函數,激活函數可以是線性的\(f(x) = x\),或者是非線性的,例如\(sigmoid,tanh,relu\)等常用的。
3. 神經網絡原理
神經網絡由大量的人工神經元聯結進行計算。大多數情況下人工神經網絡能在外界信息的基礎上改變內部結構,是一種自適應系統。現代神經網絡是一種非線性統計性數據建模工具。典型的神經網絡具有以下三個部分:
- 結構 (Architecture)
結構指定了網絡中的變量和它們的拓撲關系。例如,神經網絡中的變量可以是神經元連接的權重(weights)和神經元的激勵值(activities of the neurons)。 - 激勵函數(Activity Rule) 大部分神經網絡模型具有一個短時間尺度的動力學規則,來定義神經元如何根據其他神經元的活動來改變自己的激勵值。一般激勵函數依賴於網絡中的權重(即該網絡的參數)。
- 學習規則(Learning Rule)學習規則指定了網絡中的權重如何隨着時間推進而調整。這一般被看做是一種長時間尺度的動力學規則。一般情況下,學習規則依賴於神經元的激勵值。它也可能依賴於監督者提供的目標值和當前權重的值。
神經網絡則在感知機的模型上做了擴展,總結下主要有三點:
- 加入了隱藏層,隱藏層可以有多層,增強模型的表達能力,如下圖實例,當然增加了這么多隱藏層模型的復雜度也增加了好多。
- 輸出層的神經元也可以不止一個輸出,可以有多個輸出,這樣模型可以靈活的應用於分類回歸,以及其他的機器學習領域比如降維和聚類等。多個神經元輸出的輸出層對應的一個實例如下圖,輸出層現在有4個神經元了。
- 對激活函數做擴展,感知機的激活函數是\(sign(z)\),雖然簡單但是處理能力有限,因此神經網絡中一般使用的其他的激活函數,比如我們在邏輯回歸里面使用過的\(Sigmoid\)函數,即:
4. DNN的網絡結構
DNN我們可以理解為多隱層的神經網絡,此外,它有時也叫多層感知機(Multi-Layer perceptron,MLP),它內部的神經網絡層分為三類,輸入層,隱藏層和輸出層。
層與層之間是全連接的,也就是說,第\(i\)層的任意一個神經元一定與第\(i+1\)層的任意一個神經元相連。雖然DNN看起來很復雜,但是從小的局部模型來說,還是和感知機一樣,即一個線性關系\(z=\sum{w_ix_i}+b\)加上一個激活函數\(a=\sigma(z)\)。
5. DNN前向傳播過程
DNN的前向傳播算法不算太難。所謂的DNN的前向傳播算法也就是利用我們的若干個權重系數矩陣\(W\),偏倚向量\(b\)來和輸入值向量\(x\)進行一系列線性運算和激活運算,從輸入層開始,一層層的向后計算,一直到運算到輸出層,得到輸出結果為值。
輸入: 總層數\(L\),當前層是\(l\),當前層隱藏層和輸出層對應的矩陣\(W^l\),偏倚向量\(b^l\),輸入值向量\(a^{l-1}\),神經元個數\(dim^l\)
輸出:輸出層的輸出\(a^L\)
- 初始化\(a^0=input\)
- \(for\;\;l=1\;\;to\;\;L-1\), 計算:
其中每個變量的維度是\(W^l=[dim^l,dim^{l-1}]\),\(a^{l-1}=[dim^{l-1}, batch\_size]\),\(b^l=[dim^l,1]\),\(z^l=[dim^l,batch\_size]\),\(a^l=[dim^l,batch\_size]\)
- 最后的結果即為輸出\(a^L\)。
6. 總結
我們現在了解了DNN的前向傳播的過程,但是我們會有疑問,DNN中如何更新這么多的\(W,b\)呢,當然還是運用神奇的梯度下降法來更新。在神經網絡中運用梯度下降法的過程就是反向更新。