深度學習筆記(五)——神經網絡和深度學習(深層神經網絡)

1.深層神經網絡

深層神經網絡其實就是包含更多的隱藏層神經網絡。下圖分別列舉了邏輯迴歸、1個隱藏層的神經網絡、2個隱藏層的神經網絡和5個隱藏層的神經網絡它們的模型結構。

命名規則上,一般只參考隱藏層個數和輸出層。例如,上圖中的邏輯迴歸又叫1 layer NN,1個隱藏層的神經網絡叫做2 layer NN,2個隱藏層的神經網絡叫做3 layer NN,以此類推。如果是L-layer NN,則包含了L-1個隱藏層,最後的L層是輸出層。

2.深層網絡中的前向傳播

對於第l層 ,其正向傳播過程的Z^{[l]}A^{[l]}可以表示爲(此處是m個樣本向量化的形式):

A^{[0]}也就是X。向量化也就是將所有訓練樣本寫成列向量,從左到右疊起來。對上式採用for循環計算每層的激活函數等,並且層間計算無法避免使用for循環進行計算。

3.覈對矩陣的維數

對於單個訓練樣本,輸入x的維度是(n^{[0]},1),神經網絡的參數W^{[l]}b^{[l]}的維度分別是:

                                                      $$\begin{aligned} W^{[l]}:(n^{[l]},n^{[l-1]}) \end{aligned} $$

                                                          b^{[l]}:(n^{[l]},1)

其中,l=1,2,...,L,n^{[l]}n^{[l-1]}分別是第l層和第l-1層的神經元個數。n^{[0]}=n_{x},表示輸入層特徵個數。

反向傳播過程中,dW^{[l]}db^{[l]}的維度分別與W^{[l]}b^{[l]}相同。

正向傳播過程中,z^{[l]}a^{[l]}的維度均爲(n^{[l]},1),且dz^{[l]}da^{[l]}的維度分別與z^{[l]}a^{[l]}相同。

對於m個樣本,輸入矩陣X的維度是(n^{[0]},m)。需要注意的是W^{[l]}b^{[l]}的維度與只有單個樣本是相同的。但在運算Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}中,由於python的廣播性質且b^{[l]}的每一列都是一樣的,b^{[l]}會被當作(n^{[0]},m)矩陣進行運算。

dW^{[l]}db^{[l]}的維度分別與W^{[l]}b^{[l]}相同。Z^{[l]}A^{[l]}的維度均爲(n^{[l]},m),且dZ^{[l]}dA^{[l]}的維度分別與Z^{[l]}A^{[l]}相同。

4.爲什麼使用深層表示

下圖爲人臉識別的例子。經過訓練,神經網絡第一層從原始圖片中提取出人臉的輪廓與邊緣,即邊緣檢測。每個神經元得到一些邊緣信息。第二層將前一層的邊緣進行組合,組合成人臉的一些局部特徵,比如眼睛、鼻子、嘴巴等。再往後面,將這些局部特徵組合起來,融合成人臉的模樣。隨着層數由淺到深,神經網絡提取的特徵也是從邊緣到局部特徵再到整體,由簡單到複雜。可見,如果隱藏層足夠多,那麼能夠提取的特徵就越豐富、越複雜,模型的準確率就會越高。

語音識別模型也是這個道理。淺層的神經元能夠檢測一些簡單的音調,然後較深的神經元能夠檢測出基本的音素,更深的神經元就能夠檢測出單詞信息。如果網絡夠深,還能對短語、句子進行檢測。神經網絡從左到右,神經元提取的特徵從簡單到複雜。特徵複雜度與神經網絡層數成正相關。特徵越來越複雜,功能也越來越強大。
下面的例子是使用電路理論,計算邏輯輸出:

y=x_{1} \oplus x_{2} \oplus x_{3} \oplus...\oplus x_{n}\oplus表示異或。如果使用深度網絡,深度網絡的結構是每層將前一層的兩兩單元進行異或,到最後是一個輸出,神經網絡層數爲log_{2}(n),不包含輸入層。層數被計爲隱藏層數+1。輸入層不計在層數內,輸出層需要計算。總共使用n-1個神經元。

                     1+2+...+2^{log_2(n)-1}=1\cdot\frac{1-2^{log_2(n)}}{1-2}=2^{log_2(n)}-1=n-1

如果不用深層網絡,僅僅使用單個隱藏層,那麼需要的神經元個數將是指數級別那麼大。需要2^{n-1}個神經元。

處理同一邏輯問題,深層網絡所需的神經元個數比淺層網絡要少很多。這也是深層神經網絡的優點之一。但是,對實際問題進行建模時,儘量先選擇層數少的神經網絡模型,對於比較複雜的問題,再使用較深的神經網絡模型。

5.搭建深層神經網絡塊

l層的流程塊圖如下:

對於正向傳播來說,輸入是a^{[l-1]},輸出是a^{[l]},參數是W^{[l]}b^{[l]},緩存變量是z^{[l]}

對於反向傳播來說,輸入是da^{[l]},輸出是da^{[l-1]}dW^{[l]}db^{[l]},參數是W^{[l]}b^{[l]}

神經網絡所有層,整體的流程塊圖正向傳播過程和反向傳播過程如下所示:

6.前向和反向傳播

首先是正向傳播過程,令層數爲第l層,輸入是a^{[l-1]},輸出是a^{[l]},緩存變量是z^{[l]}。其表達式如下:

                                                            z^{[l]}=W^{[l]} a^{[l-1]}+b^{[l]}

                                                                   a^{[l]}=g^{[l]} (z^{[l]})

m個訓練樣本,向量化形式爲:

                                                            Z^{[l]}=W^{[l]} A^{[l-1]}+b^{[l]}

                                                                   A^{[l]}=g^{[l]} (Z^{[l]})

反向傳播過程,輸入是da^{[l]},輸出是da^{[l-1]}dw^{[l]}db^{[l]}。其表達式如下:

                                                              dz^{[l]}=da^{[l]} \ast g^{[l]'}(z^{[l]})

                                                                dW^{[l]}=dz^{[l]} \cdot a^{[l-1]}

                                                                        db^{[l]} = dz^{[l]}

                                                                 da^{[l-1]}=W^{[l]T} \cdot dz^{[l]}

由上述四個公式可以推出:

                                                        dz^{[l]}=W^{[l+1]T} \cdot dz^{[l+1]}\ast g^{[l]'}(z^{[l]})

該式反映了dz^{[l+1]}dz^{[l]}的遞推關係。

m個訓練樣本,向量化形式爲:

                                                                dZ^{[l]}=dA^{[l]}\ast g^{[l]'}(Z^{[l]})

                                                               dW^{[l]}=\frac1mdZ^{[l]}\cdot A^{[l-1]T}

                                      db^{[l]}= \frac1mnp.sum(dZ^{[l]},axis=1,keepdim=True)

                                                                dA^{[l-1]}=W^{[l]T} \cdot dZ^{[l]}

                                                     dZ^{[l]}=W^{[l+1]T} \cdot dZ^{[l+1]}\ast g^{[l]'}(Z^{[l]})

最後一點細節:

                                                              da^{[l]}=-\frac{y}{a}+\frac{(1-y)}{(1-a)}

                     \small dA^{[l]}=(-\frac{y^{(1)}}{a^{(1)}}+\frac{(1-y^{(1)})}{(1-a^{(1)})})+(-\frac{y^{(2)}}{a^{(2)}}+\frac{(1-y^{(2)})}{(1-a^{(2)})})+...+(-\frac{y^{(m)}}{a^{(m)}}+\frac{(1-y^{(m)})}{(1-a^{(m)})})

7.參數VS超參數

該部分介紹神經網絡中的參數(parameters)和超參數(hyperparameters)的概念。

神經網絡中的參數就是W^{[l]}b^{[l]}。而超參數則是例如學習速率\small \alpha,訓練迭代次數N,神經網絡層數L,各層神經元個數\small n^{[l]},激活函數\small g(z)等。之所以叫做超參數的原因是它們決定了參數W^{[l]}b^{[l]}的值。

如何設置最優的超參數是一個比較困難的、需要經驗知識的問題。通常的做法是選擇超參數一定範圍內的值,分別代入神經網絡進行訓練,測試cost function隨着迭代次數增加的變化,根據結果選擇cost function最小時對應的超參數值。這類似於validation的方法。

8.這和大腦有什麼關係?

神經網絡實際上可以分成兩個部分:正向傳播過程和反向傳播過程。神經網絡的每個神經元採用激活函數的方式,類似於感知機模型。這種模型與人腦神經元是類似的,可以說是一種非常簡化的人腦神經元模型。如下圖所示,人腦神經元可分爲樹突、細胞體、軸突三部分。樹突接收外界電刺激信號(類比神經網絡中神經元輸入),傳遞給細胞體進行處理(類比神經網絡中神經元激活函數運算),最後由軸突傳遞給下一個神經元(類比神經網絡中神經元輸出)。

但人腦學習的機理至今尚未弄清楚,如今我們儘量減少人腦和深度學習工具的對比。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章