吳恩達機器學習筆記4 神經網絡

目錄

神經網絡  Neural Networks

非線性假設  Non-linear Hypotheses

神經元和大腦

模型表示

符號說明

向量化

工作原理理解

直觀理解:應用實例1

直觀理解:應用實例1

多元分類


神經網絡  Neural Networks

非線性假設  Non-linear Hypotheses

無論是線性迴歸還是邏輯迴歸都有這樣一個缺點,即:當特徵太多時,計算的負荷會非常大。

例如:

當我們使用x_1,x_2, 的多次項式進行預測時,可以應用的很好。假設我們有非常多的特徵,例如大於100個變量,我們希望用這100個特徵來構建一個非線性的多項式模型,結果將是數量非常驚人的特徵組合,即便我們只採用兩兩特徵的組合

                                                           x_1x_2+x_1x_3+...+x_2x_3+x_2x_4+...+x_{99}x_{100}

我們也會有接近5000個組合而成的特徵。這對於一般的邏輯迴歸來說需要計算的特徵太多了。

假如我們只選用灰度圖片,每個像素則只有一個值(而非 RGB值),我們可以選取圖片上的兩個不同位置上的兩個像素,然後訓練一個邏輯迴歸算法利用這兩個像素的值來判斷圖片上是否是汽車:

假使我們採用的都是50x50像素的小圖片,並且我們將所有的像素視爲特徵,則會有 2500個特徵,如果我們要進一步將兩兩特徵組合構成一個多項式模型,則會有約個2500^2/2(接近3百萬個)特徵。普通的邏輯迴歸模型,不能有效地處理這麼多的特徵,這時候我們需要神經網絡。

神經元和大腦

神經網絡是一種很古老的算法,它最初產生的目的是製造能模擬大腦的機器。神經網絡逐漸興起於二十世紀八九十年代,應用得非常廣泛。但由於各種原因,在90年代的後期應用減少了。但是最近,神經網絡又東山再起了。其中一個原因是:神經網絡是計算量有些偏大的算法。然而大概由於近些年計算機的運行速度變快,才足以真正運行起大規模的神經網絡。我們能學習數學,學着做微積分,而且大腦能處理各種不同的令人驚奇的事情。似乎如果你想要模仿它,你得寫很多不同的軟件來模擬所有這些五花八門的奇妙的事情。不過能不能假設大腦做所有這些,不同事情的方法,不需要用上千個不同的程序去實現。

模型表示

神經網絡模型建立在很多神經元之上,每一個神經元又是一個個學習模型。這些神經元(也叫激活單元activation unit)採納一些特徵作爲輸出,並且根據本身的模型提供一個輸出。下圖是一個以邏輯迴歸模型作爲自身學習模型的神經元示例,在神經網絡中,參數又可被成爲權重(weight)

設計出類似於神經元的神經網絡,效果如下:

其中x_1,x_2,x_3輸入單元(input units),我們將原始數據輸入給它們。 a_1,a_2,a_3中間單元,它們負責將數據進行處理,然後呈遞到下一層。最後是輸出單元,它負責計算h_\Theta(x)

神經網絡模型是許多邏輯單元按照不同層級組織起來的網絡,每一層的輸出變量都是下一層的輸入變量。下圖爲一個3層的神經網絡,第一層成爲輸入層(Input Layer),最後一層稱爲輸出層(Output Layer),中間一層成爲隱藏層(Hidden Layers)。我們爲每一層都增加一個偏差單位(bias unit)

符號說明

a_i^{(j)} 代表第j層的第i個激活單元
\Theta^{(j)} 從第j層映射到第j+1層時的權重的矩陣

例如\Theta^{(1)}代表從第一層映射到第二層的權重的矩陣,其尺寸爲:以第層的j+1激活單元數量爲行數,以第j層的激活單元數加一爲列數的矩陣。例如:上圖所示的神經網絡中\Theta ^{(1)}的尺寸爲 3*4。

對於上圖所示的模型,激活單元和輸出分別表達爲:

向量化

利用向量化的方法會使得計算更爲簡便。

我們定義z^{(i)}

                                                             z_1^{(2)}=\Theta _{10}^{(1)}x_0+\Theta _{11}^{(1)}x_1+\Theta _{12}^{(1)}x_2+\Theta _{13}^{(1)}x_3

以上圖的神經網絡爲例,試着計算第二層的值:

                                                            x=\begin{bmatrix} x_0 \\ x_1 \\ x_2 \\ x_3 \end{bmatrix}      z^{(2)}=\begin{bmatrix} z_1^{(2)}\\ z_2^{(2)}\\ z_3^{(2)} \end{bmatrix}   

                                                                      z^{(2)}=\Theta ^{(1)}x

                                                                      a^{(2)}=g(z^{(2)})

也就是

添加a_0^{(2)}。 計算輸出的值爲:

工作原理理解

先把左半部分遮住:

右半部分其實就是以a_0,a_1,a_2,a_3, 按照Logistic Regression的方式輸出h_\theta(x)

其實神經網絡就像是logistic regression,只不過我們把logistic regression中的輸入向量x_1,x_2,x_3變成了中間層的a_1^{(2)},a_2^{(2)},a_3^{(2)}

我們可以把a_1,a_2,a_3看成更爲高級的特徵值,也就是x_1,x_2,x_3的進化體,並且它們是由x\theta決定的,因爲是梯度下降的,所以a是變化的,並且變得越來越厲害,所以這些更高級的特徵值遠比僅僅將x次方厲害,也能更好的預測新數據。 這就是神經網絡相比於邏輯迴歸和線性迴歸的優勢。

另外注意到彈幕裏面有一個非常有意義的評論讓我懂了神經網絡的意義。爲什麼這種模型能擬合所有的非線性樣例呢?簡單的理解是因爲他將所有的組合全部包含進去了。

直觀理解:應用實例1

神經網絡中,單層神經元(無中間層)的計算可用來表示邏輯運算,比如邏輯與(AND)、邏輯或(OR)

舉例說明:邏輯與(AND);下圖中左半部分是神經網絡的設計與output層表達式,右邊上部分是sigmod函數,下半部分是真值表。

我們可以用這樣的一個神經網絡表示AND 函數:

其中我們令\theta _0=-30,\theta_1=20,\theta_2=20我們的輸出函數即爲:

                                                                   h_\theta(x)=g(-30+20x_1+20x_2)

我們知道g(x)的圖像是:

那麼可以得到下表

所以我們有:

                                                                              h_\Theta(x)\approx x_1AND x_2

類似的有OR函數

直觀理解:應用實例1

一個多層的神經網絡,實現同或XNOR。

                                                        XNOR=(x_1\ AND\ x_2)OR((NOTx_1)AND(NOTx_2))

這是一個多層神經網絡的簡單例子。

多元分類

當我們有不止兩種分類時,比如我們要識別行人、小車、貨車、摩托,該怎麼做呢?

如果我們要訓練一個神經網絡算法來識別路人、汽車、摩托車和卡車,在輸出層我們應該有4個值。例如,第一個值爲1或0用於預測是否是行人,第二個值用於判斷是否爲汽車。例如,規定[1,0,0,0]代表行人,[0,1,0,0]代表小汽車等等。

神經網絡的可能結構爲:

 

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