吳恩達機器學習第八章【Neural Networks: Representation】
Non-linear Hypotheses【非線性假設】
我們之前學的,無論是線性迴歸還是邏輯迴歸都有這樣一個缺點,即:當特徵太多時,計算的負荷會非常大。
例如大於100個變量,我們希望用這100個特徵來構建一個非線性的多項式模型,結果將是數量非常驚人的特徵組合,即便我們只採用兩兩特徵的組合(x1x2+x1x3+x1x4+...+x2x3+x2x4+...+x99x100),我們也會有接近5000個組合而成的特徵。這對於一般的邏輯迴歸來說需要計算的特徵太多了。
假使我們採用的都是50x50像素的小圖片,並且我們將所有的像素視爲特徵,則會有 2500個特徵,如果我們要進一步將兩兩特徵組合構成一個多項式模型,則會有約25002/2個(接近3百萬個)特徵。普通的邏輯迴歸模型,不能有效地處理這麼多的特徵,這時候我們需要神經網絡。
Neurons and the Brain【神經元和大腦】
神經網絡逐漸興起於二十世紀八九十年代,應用得非常廣泛。但由於各種原因,在90年代的後期應用減少了。但是最近,神經網絡又東山再起了。其中一個原因是:神經網絡是計算量有些偏大的算法。然而大概由於近些年計算機的運行速度變快,才足以真正運行起大規模的神經網絡。正是由於這個原因和其他一些我們後面會討論到的技術因素,如今的神經網絡對於許多應用來說是最先進的技術。當你想模擬大腦時,是指想製造出與人類大腦作用效果相同的機器。大腦可以學會去以看而不是聽的方式處理圖像,學會處理我們的觸覺。
我們能學習數學,學着做微積分,而且大腦能處理各種不同的令人驚奇的事情。似乎如果你想要模仿它,你得寫很多不同的軟件來模擬所有這些五花八門的奇妙的事情。不過能不能假設大腦做所有這些,不同事情的方法,不需要用上千個不同的程序去實現。相反的,大腦處理的方法,只需要一個單一的學習算法就可以了?儘管這只是一個假設,不過讓我和你分享,一些這方面的證據。
大腦的這一部分這一小片紅色區域是你的聽覺皮層,你現在正在理解我的話,這靠的是耳朵。耳朵接收到聲音信號,並把聲音信號傳遞給你的聽覺皮層,正因如此,你才能明白我的話。
神經系統科學家做了下面這個有趣的實驗,把耳朵到聽覺皮層的神經切斷。在這種情況下,將其重新接到一個動物的大腦上,這樣從眼睛到視神經的信號最終將傳到聽覺皮層。如果這樣做了。那麼結果表明聽覺皮層將會學會“看”。這裏的“看”代表了我們所知道的每層含義。所以,如果你對動物這樣做,那麼動物就可以完成視覺辨別任務,它們可以看圖像,並根據圖像做出適當的決定。它們正是通過腦組織中的這個部分完成的。下面再舉另一個例子,這塊紅色的腦組織是你的軀體感覺皮層,這是你用來處理觸覺的,如果你做一個和剛纔類似的重接實驗,那麼軀體感覺皮層也能學會“看”。這個實驗和其它一些類似的實驗,被稱爲神經重接實驗,從這個意義上說,如果人體有同一塊腦組織可以處理光、聲或觸覺信號,那麼也許存在一種學習算法,可以同時處理視覺、聽覺和觸覺,而不是需要運行上千個不同的程序,或者上千個不同的算法來做這些大腦所完成的成千上萬的美好事情。也許我們需要做的就是找出一些近似的或實際的大腦學習算法,然後實現它大腦通過自學掌握如何處理這些不同類型的數據。在很大的程度上,可以猜想如果我們把幾乎任何一種傳感器接入到大腦的幾乎任何一個部位的話,大腦就會學會處理它。
下面再舉幾個例子:
這張圖是用舌頭學會“看”的一個例子。它的原理是:這實際上是一個名爲BrainPort的系統,它現在正在FDA
(美國食品和藥物管理局)的臨牀試驗階段,它能幫助失明人士看見事物。它的原理是,你在前額上帶一個灰度攝像頭,面朝前,它就能獲取你面前事物的低分辨率的灰度圖像。你連一根線到舌頭上安裝的電極陣列上,那麼每個像素都被映射到你舌頭的某個位置上,可能電壓值高的點對應一個暗像素電壓值低的點。對應於亮像素,即使依靠它現在的功能,使用這種系統就能讓你我在幾十分鐘裏就學會用我們的舌頭“看”東西。
這是第二個例子,關於人體回聲定位或者說人體聲納。你有兩種方法可以實現:你可以彈響指,或者咂舌頭。不過現在有失明人士,確實在學校裏接受這樣的培訓,並學會解讀從環境反彈回來的聲波模式—這就是聲納。如果你搜索YouTube之後,就會發現有些視頻講述了一個令人稱奇的孩子,他因爲癌症眼球慘遭移除,雖然失去了眼球,但是通過打響指,他可以四處走動而不撞到任何東西,他能滑滑板,他可以將籃球投入籃框中。注意這是一個沒有眼球的孩子。
第三個例子是觸覺皮帶,如果你把它戴在腰上,蜂鳴器會響,而且總是朝向北時發出嗡嗡聲。它可以使人擁有方向感,用類似於鳥類感知方向的方式。
還有一些離奇的例子:
如果你在青蛙身上插入第三隻眼,青蛙也能學會使用那隻眼睛。因此,這將會非常令人驚奇。如果你能把幾乎任何傳感器接入到大腦中,大腦的學習算法就能找出學習數據的方法,並處理這些數據。從某種意義上來說,如果我們能找出大腦的學習算法,然後在計算機上執行大腦學習算法或與之相似的算法,也許這將是我們向人工智能邁進做出的最好的嘗試。人工智能的夢想就是:有一天能製造出真正的智能機器。
Model Representation I【模型表示1】
爲了構建神經網絡模型,我們需要首先思考大腦中的神經網絡是怎樣的?每一個神經元都可以被認爲是一個處理單元/神經核(processing unit/Nucleus),它含有許多輸入/樹突(input/Dendrite),並且有一個輸出/軸突(output/Axon)。神經網絡是大量神經元相互鏈接並通過電脈衝來交流的一個網絡。
下面是一組神經元的示意圖,神經元利用微弱的電流進行溝通。這些弱電流也稱作動作電位,其實就是一些微弱的電流。所以如果神經元想要傳遞一個消息,它就會就通過它的軸突,發送一段微弱電流給其他神經元,這就是軸突。
神經網絡模型建立在很多神經元之上,每一個神經元又是一個個學習模型。這些神經元(也叫激活單元,activation unit)採納一些特徵作爲輸出,並且根據本身的模型提供一個輸出。下圖是一個以邏輯迴歸模型作爲自身學習模型的神經元示例,在神經網絡中,參數又可被成爲權重(weight)。
我們設計出了類似於神經元的神經網絡,效果如下:
其中x1, x2, x3是輸入單元(input units),我們將原始數據輸入給它們。
a1, a2, a3是中間單元,它們負責將數據進行處理,然後呈遞到下一層。
最後是輸出單元,它負責計算hθ(x)。
神經網絡模型是許多邏輯單元按照不同層級組織起來的網絡,每一層的輸出變量都是下一層的輸入變量。下圖爲一個3層的神經網絡,第一層成爲輸入層(Input Layer),最後一層稱爲輸出層(Output Layer),中間一層成爲隱藏層(Hidden Layers)。我們爲每一層都增加一個偏差單位(bias unit):
下面引入一些標記法來幫助描述模型:
ai(j) 代表第j 層的第 i 個激活單元。θ(j)代表從第 j 層映射到第$ j+1$ 層時的權重的矩陣,例如θ(1)代表從第一層映射到第二層的權重的矩陣。其尺寸爲:以第 j+1層的激活單元數量爲行數,以第 j 層的激活單元數加一爲列數的矩陣。例如:上圖所示的神經網絡中θ(1)的尺寸爲 3*4。
即:如果網絡在第j層有Sj個單元,且有Sj+1個單元在第j+1層,則θ(j)的維度是Sj+1×(Sj+1)。
對於上圖所示的模型,激活單元和輸出分別表達爲:
a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)
a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)
a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
所以,我們可以知道每一個a都是有上一層所有的x和每一個x所對應的θ所決定的。
Model Representation II【模型表示2】
對於神經網絡來說:
根據迴歸方程來說添加一個x0,且x0=1;
對於上圖所示的模型,激活單元和輸出分別表達爲:
a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)
a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)
a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
相對於使用循環來編碼,利用向量化的方法會使得計算更爲簡便。以上面的神經網絡爲例,試着計算第二層的值:
X=⎣⎢⎢⎡x0x1x2x3⎦⎥⎥⎤
ai(j)=g(zi(j))
z1(2)=Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3
z2(2)=Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3
z3(2)=Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3
z(2)=Θ(1)x
Z(2)=⎣⎢⎡z1(2)z2(2)z3(2)⎦⎥⎤
我們把這樣從左到右的算法稱爲前向傳播算法( FORWARD PROPAGATION ))
把x, θ, a 分別用矩陣表示:
x=⎣⎢⎢⎡x0x1x2x3⎦⎥⎥⎤ ,θ=⎣⎡θ10θ20θ30θ11θ21θ31θ12θ22θ32θ13θ23θ33⎦⎤ ,a=⎣⎡a1a2a3⎦⎤
我們可以得到θ⋅X=a 。
g(⎣⎢⎡θ10(1)θ20(1)θ30(1)θ11(1)θ21(1)θ31(1)θ12(1)θ22(1)θ32(1)θ13(1)θ23(1)θ33(1)⎦⎥⎤×⎣⎢⎢⎡x0x1x2x3⎦⎥⎥⎤)=g(⎣⎢⎡θ10(1)x0+θ11(1)x1+θ12(1)x2+θ13(1)x3θ20(1)x0+θ21(1)x1+θ22(1)x2+θ23(1)x3θ30(1)x0+θ31(1)x1+θ32(1)x2+θ33(1)x3⎦⎥⎤)=⎣⎡a1a2a3⎦⎤
我們令 z(2)=θ(1)x,則 a(2)=g(z(2)) ,計算後添加 a0(2)=1。 計算輸出的值爲:
g([θ10(2)θ11(2)θ12(2)θ13(2)]×⎣⎢⎢⎢⎡a0(2)a1(2)a2(2)a3(2)⎦⎥⎥⎥⎤)=g(θ10(2)a0(2)+θ11(2)a1(2)+θ12(2)a3(2)+θ13(2)a4(2))=hθ(x)
我們令 z(3)=θ(2)a(2),則 hθ(x)=a(3)=g(z(3))。
爲了更好了瞭解Neuron Networks的工作原理,我們先把左半部分遮住:
右半部分其實就是以a0,a1,a2,a3, 按照Logistic Regression的方式輸出hθ(x):
hθ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
其實神經網絡就像是logistic regression,只不過我們把logistic regression中的輸入向量[x1∼x3] 變成了中間層的[a1(2)∼a3(2)], 即: hθ(x)=g(Θ0(2)a0(2)+Θ1(2)a1(2)+Θ2(2)a2(2)+Θ3(2)a3(2))
我們可以把a0,a1,a2,a3看成更爲高級的特徵值,也就是x0,x1,x2,x3的進化體,並且它們是由 x與θ決定的,因爲是梯度下降的,所以a是變化的,並且變得越來越厲害,所以這些更高級的特徵值遠比僅僅將 x次方厲害,也能更好的預測新數據。
這就是神經網絡相比於邏輯迴歸和線性迴歸的優勢。
Examples and Intuitions【特徵和直觀理解1】
神經網絡中,單層神經元(無中間層)的計算可用來表示邏輯運算,比如邏輯與(AND)、邏輯或(OR)。
由參數可得:hθ(x)=g(−30+20x1+20x2)。
Examples and Intuitions II 【樣本和直觀理解II】
我們可以利用神經元來組合成更爲複雜的神經網絡以實現更復雜的運算。例如我們要實現XNOR 功能(輸入的兩個值必須一樣,均爲1或均爲0),即
XNOR=(x1ANDx2)OR((NOTx1)AND(NOTx2))
所以我們可以使用還有隱藏層的神經網絡來表示XNOR。
所以我們可以在隱藏層設置一個進行(x1ANDx2)和(NOT x1)AND(NOT x2)的運算。
附
AND(與)
符號:∧
x1 |
x2 |
x1∧x2 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
OR(或)
符號:∨
x1 |
x2 |
x1∨x2 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
NOT(非)
符號:!
XOR(異或)
符號:⊕
x1 |
x2 |
x1⊕x2 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
Multiclass Classification【多類分類】
當我們有不止兩種分類時(也就是y=1,2,3….),比如以下這種情況,該怎麼辦?如果我們要訓練一個神經網絡算法來識別路人、汽車、摩托車和卡車,在輸出層我們應該有4個值。例如,第一個值爲1或0用於預測是否是行人,第二個值用於判斷是否爲汽車
輸入向量x有三個維度,兩個中間層,輸出層4個神經元分別用來表示4類,也就是每一個數據在輸出層都會出現[a b c d]T,且a,b,c,d中僅有一個爲1,表示當前類。下面是該神經網絡的可能結構示例: