深度神經網路(DNN)模型與前向傳播演算法

2022-03-17 06:03:22 字數 3287 閱讀 7236

深度神經網路(deep neural networks, 以下簡稱dnn)是深度學習的基礎,而要理解dnn,首先我們要理解dnn模型,下面我們就對dnn的模型與前向傳播演算法做乙個總結。

在感知機原理小結中,我們介紹過感知機的模型,它是乙個有若干輸入和乙個輸出的模型,如下圖:

輸出和輸入之間學習到乙個線性關係,得到中間輸出結果:$$z=\sum\limits_^mw_ix_i + b$$

接著是乙個神經元啟用函式:

$$sign(z)=

\begin

-1& \\

1& \end$$

從而得到我們想要的輸出結果1或者-1。

這個模型只能用於二元分類,且無法學習比較複雜的非線性模型,因此在工業界無法使用。

而神經網路則在感知機的模型上做了擴充套件,總結下主要有三點:

1)加入了隱藏層,隱藏層可以有多層,增強模型的表達能力,如下圖例項,當然增加了這麼多隱藏層模型的複雜度也增加了好多。

2)輸出層的神經元也可以不止乙個輸出,可以有多個輸出,這樣模型可以靈活的應用於分類回歸,以及其他的機器學習領域比如降維和聚類等。多個神經元輸出的輸出層對應的乙個例項如下圖,輸出層現在有4個神經元了。

3) 對啟用函式做擴充套件,感知機的啟用函式是$sign(z)$,雖然簡單但是處理能力有限,因此神經網路中一般使用的其他的啟用函式,比如我們在邏輯回歸裡面使用過的sigmoid函式,即:$$f(z)=\frac}$$

還有後來出現的tanx, softmax,和relu等。通過使用不同的啟用函式,神經網路的表達能力進一步增強。對於各種常用的啟用函式,我們在後面再專門講。

上一節我們了解了神經網路基於感知機的擴充套件,而dnn可以理解為有很多隱藏層的神經網路。這個很多其實也沒有什麼度量標準, 多層神經網路和深度神經網路dnn其實也是指的乙個東西,當然,dnn有時也叫做多層感知機(multi-layer perceptron,mlp), 名字實在是多。後面我們講到的神經網路都預設為dnn。

從dnn按不同層的位置劃分,dnn內部的神經網路層可以分為三類,輸入層,隱藏層和輸出層,如下圖示例,一般來說第一層是輸入層,最後一層是輸出層,而中間的層數都是隱藏層。

層與層之間是全連線的,也就是說,第i層的任意乙個神經元一定與第i+1層的任意乙個神經元相連。雖然dnn看起來很複雜,但是從小的區域性模型來說,還是和感知機一樣,即乙個線性關係$z=\sum\limits w_ix_i + b$加上乙個啟用函式$\sigma(z)$。

由於dnn層數多,則我們的線性關係係數$w$和偏倚$b$的數量也就是很多了。具體的引數在dnn是如何定義的呢?

首先我們來看看線性關係係數$w$的定義。以下圖乙個三層的dnn為例,第二層的第4個神經元到第三層的第2個神經元的線性係數定義為$w_^3$。上標3代表線性係數$w$所在的層數,而下標對應的是輸出的第三層索引2和輸入的第二層索引4。你也許會問,為什麼不是$w_^3$, 而是$w_^3$呢?這主要是為了便於模型用於矩陣表示運算,如果是$w_^3$而每次進行矩陣運算是$w^tx+b$,需要進行轉置。將輸出的索引放在前面的話,則線性運算不用轉置,即直接為$wx+b$。總結下,第$l-1$層的第k個神經元到第$l$層的第j個神經元的線性係數定義為$w_^l$。注意,輸入層是沒有$w$引數的。

再來看看偏倚$b$的定義。還是以這個三層的dnn為例,第二層的第三個神經元對應的偏倚定義為$b_3^$。其中,上標2代表所在的層數,下標3代表偏倚所在的神經元的索引。同樣的道理,第三個的第乙個神經元的偏倚應該表示為$b_1^$。同樣的,輸入層是沒有偏倚引數$b$的。

在上一節,我們已經介紹了dnn各層線性關係係數$w$,偏倚$b$的定義。假設我們選擇的啟用函式是$\sigma(z)$,隱藏層和輸出層的輸出值為$a$,則對於下圖的三層dnn,利用和感知機一樣的思路,我們可以利用上一層的輸出計算下一層的輸出,也就是所謂的dnn前向傳播演算法。

對於第二層的的輸出$a_1^2,a_2^2,a_3^2$,我們有:$$a_1^2=\sigma(z_1^2) = \sigma(w_^2x_1 + w_^2x_2 + w_^2x_3 + b_1^)$$$$a_2^2=\sigma(z_2^2) = \sigma(w_^2x_1 + w_^2x_2 + w_^2x_3 + b_2^)$$$$a_3^2=\sigma(z_3^2) = \sigma(w_^2x_1 + w_^2x_2 + w_^2x_3 + b_3^)$$

對於第三層的的輸出$a_1^3$,我們有:$$a_1^3=\sigma(z_1^3) = \sigma(w_^3a_1^2 + w_^3a_2^2 + w_^3a_3^2 + b_1^)$$

將上面的例子一般化,假設第$l-1$層共有m個神經元,則對於第$l$層的第j個神經元的輸出$a_j^l$,我們有:$$a_j^l = \sigma(z_j^l) = \sigma(\sum\limits_^mw_^la_k^ + b_j^l)$$

其中,如果$l=2$,則對於的$a_k^1$即為輸入層的$x_k$。

從上面可以看出,使用代數法乙個個的表示輸出比較複雜,而如果使用矩陣法則比較的簡潔。假設第$l-1$層共有m個神經元,而第$l$層共有n個神經元,則第$l$層的線性係數$w$組成了乙個$n \times m$的矩陣$w^l$, 第$l$層的偏倚$b$組成了乙個$n \times 1$的向量$b^l$ , 第$l-1$層的的輸出$a$組成了乙個$m \times 1$的向量$a^$,第$l$層的的未啟用前線性輸出$z$組成了乙個$n \times 1$的向量$z^$, 第$l$層的的輸出$a$組成了乙個$n \times 1$的向量$a^$。則用矩陣法表示,第l層的輸出為:$$a^l = \sigma(z^l) = \sigma(w^la^ + b^l)$$ 

這個表示方法簡潔漂亮,後面我們的討論都會基於上面的這個矩陣法表示來。

有了上一節的數學推導,dnn的前向傳播演算法也就不難了。所謂的dnn的前向傳播演算法也就是利用我們的若干個權重係數矩陣$w$,偏倚向量$b$來和輸入值向量$x$進行一系列線性運算和啟用運算,從輸入層開始,一層層的向後計算,一直到運算到輸出層,得到輸出結果為值。

輸入: 總層數l,所有隱藏層和輸出層對應的矩陣$w$,偏倚向量$b$,輸入值向量$x$

輸出:輸出層的輸出$a^l$

1) 初始化$a^1 = x $

2)  for $l = 2$ to $l$, 計算:$$a^l = \sigma(z^l) = \sigma(w^la^ + b^l)$$

最後的結果即為輸出$a^l$。

單獨看dnn前向傳播演算法,似乎沒有什麼大用處,而且這一大堆的矩陣$w$,偏倚向量$b$對應的引數怎麼獲得呢?怎麼得到最優的矩陣$w$,偏倚向量$b$呢?這個我們在講dnn的反向傳播演算法時再講。而理解反向傳播演算法的前提就是理解dnn的模型與前向傳播演算法。這也是我們這一篇先講的原因。

深度神經網路(DNN)模型與前向傳播演算法

深度神經網路 deep neural networks,以下簡稱dnn 是深度學習的基礎,而要理解dnn,首先我們要理解dnn模型,下面我們就對dnn的模型與前向傳播演算法做乙個總結。在感知機原理小結中,我們介紹過感知機的模型,它是乙個有若干輸入和乙個輸出的模型,如下圖 輸出和輸入之間學習到乙個線性...

深度神經網路(DNN)模型與前向傳播演算法

深度神經網路 deep neural networks,以下簡稱dnn 是深度學習的基礎,而要理解dnn,首先我們要理解dnn模型,下面我們就對dnn的模型與前向傳播演算法做乙個總結。在感知機原理小結中,我們介紹過感知機的模型,它是乙個有若干輸入和乙個輸出的模型,如下圖 輸出和輸入之間學習到乙個線性...

深度神經網路模型(DNN)與前向傳播演算法

原文見 深度神經網路模型 dnn 與前向傳播演算法 這裡具體寫一下摘要及感想 1 dnn 深度神經網路 簡介 從dnn按不同層的位置劃分,dnn內部的神經網路層可以分為三類,輸入層,隱藏層和輸出層,如下圖示例,一般來說第一層是輸入層,最後一層是輸出層,而中間的層數都是隱藏層。輸入層的每個神經元輸入樣...