從今天開始,本人將繼續(xù)學(xué)習(xí)吳恩達(dá)教授的深度學(xué)習(xí)課程第一部分神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)第三周淺層神經(jīng)網(wǎng)絡(luò)的相關(guān)課程,這部分課程將分為兩天進(jìn)行學(xué)習(xí),并整理學(xué)習(xí)筆記。
1. 神經(jīng)網(wǎng)絡(luò)概覽(Neural Networks Overview)
本周主要學(xué)習(xí)如何實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò),本節(jié)課主要對(duì)淺層神經(jīng)網(wǎng)絡(luò)這部分的課程做一個(gè)簡單概述。
神經(jīng)網(wǎng)絡(luò)中間隱藏神經(jīng)元同一層級(jí)的神經(jīng)元稱為一層。如下圖所示:

2. 神經(jīng)網(wǎng)絡(luò)表示(Neural Network Representation)

圖2為只有一個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò)示例,神經(jīng)網(wǎng)絡(luò)各個(gè)部分的命名如下:
- 輸入特征向量稱為神經(jīng)網(wǎng)絡(luò)的輸入層;
- 下一層級(jí)為若干個(gè)圓圈,稱為神經(jīng)網(wǎng)絡(luò)的隱藏層。隱藏層的含義是在訓(xùn)練集中,這些中間節(jié)點(diǎn)的真正數(shù)值我們是不知道的,在訓(xùn)練集中找不到它們的數(shù)值;
- 最后一層稱為神經(jīng)網(wǎng)絡(luò)的輸出層,負(fù)責(zé)輸出預(yù)測值。
在一個(gè)神經(jīng)網(wǎng)絡(luò)中,當(dāng)你使用監(jiān)督學(xué)習(xí)訓(xùn)練它的時(shí)候,訓(xùn)練集包含了輸入x及對(duì)應(yīng)的目標(biāo)輸出y,一些無法在訓(xùn)練集中找到的中間過程神經(jīng)元所在層即稱為隱藏層。
在之前的課程中,我們將輸入特征記為X,這里我們用一個(gè)新的符號(hào)a[0]來表示輸入特征,即a[0]=X。a也表示“激活”的意思,它意味著神經(jīng)網(wǎng)絡(luò)中不同層的值會(huì)傳遞給后面的層,輸入層會(huì)將x的值傳遞給隱藏層。因此我們將輸入層的激活值記為a[0]。
下一層即隱藏層也會(huì)產(chǎn)生一些激活值,我們將其記為a[1]。則這一層的每一個(gè)節(jié)點(diǎn)依次記為a[1]1、a[1]2、a[1]3、a[1]4,將這四個(gè)節(jié)點(diǎn)的值按照豎向堆疊,形成一個(gè)4*1的矩陣或4維列向量。
最后一層輸出層節(jié)點(diǎn)的值記為a[2],它是一個(gè)實(shí)數(shù)。
方括號(hào)中加數(shù)字的方式可以明確的指出這些值來自哪一層。
在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)概念中,圖2為雙層神經(jīng)網(wǎng)絡(luò)。原因是:當(dāng)我們計(jì)算神經(jīng)網(wǎng)絡(luò)的層數(shù)時(shí),不將輸入層算在內(nèi)。根據(jù)這個(gè)命名規(guī)則,輸入層為第0層,隱藏層為第1層,輸出層為第2層。
隱藏層和輸出層都是帶有參數(shù)的,在本例中,隱藏層有兩個(gè)相關(guān)的參數(shù)w[1]和b[1],之后我們可以看到,w是一個(gè)4*3的矩陣,而b是一個(gè)4*1的向量。
3. 計(jì)算神經(jīng)網(wǎng)絡(luò)的輸出(Computing a Neural Network's Output)
本節(jié)課主要講解了神經(jīng)網(wǎng)絡(luò)的輸出究竟是如何計(jì)算出來的以及它計(jì)算的是什么。神經(jīng)網(wǎng)絡(luò)計(jì)算過程類似于logistic回歸的運(yùn)算過程,但整個(gè)過程需要重復(fù)很多遍。
我們將logistic回歸的計(jì)算過程中間兩個(gè)步驟用一個(gè)圓圈表示,如圖3所示,圓圈中的兩個(gè)步驟分別為:
- 第一步:計(jì)算出z;
- 第二步:計(jì)算激活函數(shù),即函數(shù)
sigmoid(z)。

神經(jīng)網(wǎng)絡(luò)的計(jì)算圖如圖4所示,從圖中可以看出,實(shí)際上,神經(jīng)網(wǎng)絡(luò)的計(jì)算過程就是多次logistic回歸計(jì)算的重復(fù)。

下面我們先來看一下隱藏層的第一個(gè)節(jié)點(diǎn),先暫時(shí)將其他節(jié)點(diǎn)隱去(即節(jié)點(diǎn)顏色變?yōu)榛疑?,如圖5所示。這樣得到的圖與圖3非常相似。

神經(jīng)網(wǎng)絡(luò)第一隱藏層中節(jié)點(diǎn)計(jì)算過程的表達(dá)式與圖3中的類似,只不過需要增加上角標(biāo)和下角標(biāo)用來區(qū)分節(jié)點(diǎn)所在層及所在層中節(jié)點(diǎn)順序號(hào),上角標(biāo)記作[L],表示層數(shù);下角標(biāo)記作i,表示層中的第幾個(gè)節(jié)點(diǎn)。
根據(jù)上述命名規(guī)則,將圖4中的第一隱藏層每個(gè)節(jié)點(diǎn)中的計(jì)算公式列出來,如圖6所示。我們將z、wT、x、b各自進(jìn)行堆疊,構(gòu)成一個(gè)個(gè)矩陣,將隱藏層中四個(gè)節(jié)點(diǎn)的計(jì)算過程進(jìn)行向量化,最終形成圖7所示的等式。其中,Z[1]代表z[L]i堆疊形成的列向量。


向量化經(jīng)驗(yàn)法則:當(dāng)神經(jīng)網(wǎng)絡(luò)一層中存在多個(gè)不同節(jié)點(diǎn)時(shí),就將它們縱向堆疊起來,形成一個(gè)列向量,這個(gè)列向量即為這一層所有節(jié)點(diǎn)某個(gè)計(jì)算過程的結(jié)果。
將圖7中的公式全部用另一種符號(hào)慣例表示為:

其中,W[1]為4*3矩陣,b[1]為4*1矩陣。根據(jù)第二節(jié)中神經(jīng)網(wǎng)絡(luò)各個(gè)層符號(hào)命名可知,上述矩陣公式也可寫作:

按照這個(gè)思路,再繼續(xù)將隱藏層的第二個(gè)步驟進(jìn)行向量化,得到
如下公式:

同理,可以推導(dǎo)出,雙層神經(jīng)網(wǎng)絡(luò)輸出層節(jié)點(diǎn)的兩個(gè)步驟的計(jì)算公式為:

總的來說,計(jì)算雙層神經(jīng)網(wǎng)絡(luò)需要編程實(shí)現(xiàn)的為以下四個(gè)公式:

4. 多個(gè)例子中的向量化(Vectorizing across multiple examples)
本節(jié)課主要講解了如何將不同訓(xùn)練樣本向量化,輸出結(jié)果與Logistic回歸非常相似。下面我們來看下具體應(yīng)該如何將訓(xùn)練集m個(gè)樣本的計(jì)算過程向量化。
首先,對(duì)本節(jié)課中使用的符號(hào)做一個(gè)說明:
- [L]:方括號(hào)代表神經(jīng)網(wǎng)絡(luò)第L層;
- (i):圓括號(hào)代表訓(xùn)練集中的第i個(gè)樣本。
堆疊矩陣的規(guī)則為:從左到右,從上到下的順序,橫向的堆疊是按照訓(xùn)練集中的樣本順序排列,而豎向的堆疊是按照神經(jīng)網(wǎng)絡(luò)的隱藏單元進(jìn)行排列。即橫向?qū)?yīng)不同的訓(xùn)練集樣本,豎向?qū)?yīng)不同的輸入特征。神經(jīng)網(wǎng)絡(luò)的計(jì)算過程向量化的過程及結(jié)果如下圖所示:
