稀疏自動編碼之神經網絡


考慮一個監督學習問題,現在有一些帶標簽的訓練樣本(x(i),y(i)).神經網絡就是定義一個復雜且非線性的假設hW,b(x),其中W,b 是需要擬合的參數.

下面是一個最簡單的神經網絡結構,只含有一個神經元,后面就用下圖的形式代表一個神經元:

把神經元看作是一個計算單元,左邊的x1,x2,x3 (和 截距+1 )作為計算單元的輸入,輸出為:\textstyle h_{W,b}(x) = f(W^Tx) = f(\sum_{i=1}^3 W_{i}x_i +b),其中,函數f : \Re \mapsto \Re被稱為激活函數,在這里我們的激活函數是sigmoid函數:


f(z) = \frac{1}{1+\exp(-z)}.

 

還有一種激活函數是正切函數(tanh function):


f(z) = \tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}},

下面是兩種激活函數圖像:

                                               

 tanh(z)函數式sigmoid函數的變體,它的輸出范圍是[−1,1],而不是[ 0,1].

注意一個對后后面推導有用的等式:

對於sigmoid函數f(z) = 1 / (1 + exp( − z)),它的導函數為f'(z) = f(z)(1 − f(z)).

 

神經網絡模型

神經網絡就是把許多神經元連接到一起,使得一個神經元的輸出作為另一個神經元的輸入。下面是一個小規模的神經網絡:

 

圖中同樣用圓圈表示神經網絡的輸入(藍色的圓圈表示整個網絡的輸入,紅色圓圈表示神經元),截距項為+1,但是這里稱為偏置節點。網絡的最左邊的一層叫做輸入層,最右邊的一層叫做輸出層(輸出層可以有很多神經元節點,這個例子只有一個節點)。中間的一層稱為隱層,因為它們的值在訓練集中觀察不到。可以說圖中神經網絡有3個輸入節點(不包括偏置節點),3個隱層節點,1個輸出節點。

用 n 表示網絡的層數,因此例子中 nl  = 3,用 L代表 l 層,所以 L就是輸入層,L_{n_l}  就是輸出層。網絡參數(W,b) = (W(1),b(1),W(2),b(2)),W^{(l)}_{ij} 表示 層的節點 l+1 層的節點 i 之間的連接權重,b^{(l)}_i  表示與 l+1 層的節點 i 連接的偏置,因此,在這個例子中 W^{(1)} \in \Re^{3\times 3}W^{(2)} \in \Re^{1\times 3}. 注意偏置節點是沒有輸入的,因為偏置節點輸出總為+1. 用 sl  表示 l 層的節點數(不計偏置節點)。

用 a^{(l)}_i  表示 層的節點 i 激活值(即輸出值)。當 l = 1 時,用 a^{(1)}_i = x_i  表示第 i 個輸入。給定參數 W,b, 神經網絡的假設模型 hW,b(x) 輸出一個實數。計算過程如下:


\begin{align}
a_1^{(2)} &= f(W_{11}^{(1)}x_1 + W_{12}^{(1)} x_2 + W_{13}^{(1)} x_3 + b_1^{(1)})  \\
a_2^{(2)} &= f(W_{21}^{(1)}x_1 + W_{22}^{(1)} x_2 + W_{23}^{(1)} x_3 + b_2^{(1)})  \\
a_3^{(2)} &= f(W_{31}^{(1)}x_1 + W_{32}^{(1)} x_2 + W_{33}^{(1)} x_3 + b_3^{(1)})  \\
h_{W,b}(x) &= a_1^{(3)} =  f(W_{11}^{(2)}a_1^{(2)} + W_{12}^{(2)} a_2^{(2)} + W_{13}^{(2)} a_3^{(2)} + b_1^{(2)}) 
\end{align}

 

接着用 z^{(l)}_i 表示 層的節點 i 的輸入加權和(包括偏置節點),如:

\textstyle z_i^{(2)} = \sum_{j=1}^n W^{(1)}_{ij} x_j + b^{(1)}_i,所以 a^{(l)}_i = f(z^{(l)}_i).

於是上面計算過程的表示就可以更簡潔地寫為:

\begin{align}
z^{(2)} &= W^{(1)} x + b^{(1)} \\
a^{(2)} &= f(z^{(2)}) \\
z^{(3)} &= W^{(2)} a^{(2)} + b^{(2)} \\
h_{W,b}(x) &= a^{(3)} = f(z^{(3)})
\end{align}

稱這個過程為前向傳播(forward propagation).

更為一般的是,用 a(1) = x 表示輸入層的值,於是 層的激活值就是 a(l) ,計算  l + 1 層的激活值 a(l + 1)

\begin{align}
z^{(l+1)} &= W^{(l)} a^{(l)} + b^{(l)}   \\
a^{(l+1)} &= f(z^{(l+1)})
\end{align}

把所有參數矩陣化,用矩陣—向量操作,可以利用線性代數的優勢快速求解網絡參數。

到目前為止,我們只關注了一個神經網絡的例子,但是神經網絡還有許多其它的結構(神經元之間的連接類型),包括多個隱層的神經網絡。最常見的方式是,對於一個 nl  層的神經網絡,第1層代表輸入層,nl  層代表輸出層,中間的每個 層與 l+1 層緊密相連。設置好以后,就可以像上述的前向反饋一樣,逐層計算激活值,這就是一種前饋神經網絡(feedforward neural network),因為連接中沒有回路或者閉環。

神經網絡可以有多個輸出節點。這里給出一個含有2個隱層和2個輸出節點的網絡:

訓練這個網絡需要訓練樣本 (x(i),y(i)) ,y^{(i)} \in \Re^2. 當你需要預測多個值得時候,這種網絡會很有用。例如,在醫療診斷應用中,向量 x 給出一個病人的特征,不同的輸出 yi 可能分別表示不同種類的疾病是否存在。

 

 

學習來源:http://deeplearning.stanford.edu/wiki/index.php/Neural_Networks

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM