斯坦福大學機器學習第六課“神經網絡的表示(Neural Networks: Representation)”
本次課程主要包括7部分:
1) Non-linear hypotheses (非線性hypotheses)
2) Neurons and the brain (神經元和大腦)
3) Model representation I (模型表示一)
4) Model representation II (模型表示二)
5) Examples and intuitions I (例子和直觀解釋一)
6) Examples and intuitions II (例子和直觀解釋二)
7) Multi-class classification (多類分類問題)
以下是每一部分的詳細解讀。
1) Non-linear hypotheses (非線性hypotheses)
非線性分類器:
我們之前談過線性迴歸,邏輯迴歸,當我們遇到一些比較複雜的分類問題時,是否還有其他選擇?例如,對於多項式迴歸:
可以得到如下的非線性分類器:
假設這是一個房價預測問題,不過這一次不再是預測房價(迴歸問題),而是預測未來6個月是否能售出(分類問題)。如果有100個獨立特徵,例如:
那麼,當我們任取兩個特徵作爲組合特徵時,大約可以得到5000個特徵(O(n^2));當我們任取3個特徵作爲組合特徵時,大約可以得到170000(O(n^3))個特徵.
這樣的問題還有很多,例如在計算機視覺的汽車檢測問題中,對於一副汽車圖片來說,你可以輕易的辨別出這是一輛汽車,但是在計算機或者相機“眼裏”,這只是一堆像素的數字矩陣而已:
所以,對於汽車檢測問題,我們需要一堆汽車圖片:
和一堆非汽車圖片作爲訓練集:
訓練一個用於汽車檢測的分類器,對於一個測試圖片,判斷是否是汽車:
一種方法是從每輛汽車是取兩個像素點作爲樣本的特徵,然後通過學習算法來訓練分類器:
那麼這些正負例(汽車 or 非汽車)訓練樣本可以用圖形表示如下:
假設每幅圖片有50 * 50 = 2500個像素,那麼每個樣本有2500個像素點可以選擇,如果是是二次項組合特徵,大約有3百萬個特徵組合:
對於這樣的有着大量特徵的分類問題,除了邏輯迴歸,是否還有其他的學習算法?接下來,我們將引入神經網絡(Neural Networks),一種試圖模擬人類大腦的學習算法,這個算法,對於複雜的假設空間和複雜的非線性問題有很好的學習能力。
2) Neurons and the brain (神經元和大腦)
神經網絡:
- 起源於嘗試讓機器模仿大腦的算法;
- 在80年代和90年代早期非常流行,慢慢在90年代後期衰落;
- 最近得益於計算機硬件能力,又開始流行起來:對於很多應用,神經網絡算法是一種“時髦”的技術;
大腦很神奇,可以讓我們去聽,去看,去觸,也可以做數學題,做微積分,做很多神奇的事情,要模仿大腦,似乎需要我們寫很多程序來做不同的事情?但是恰恰與此相反,做這些事情僅僅需要一個學習算法。下面是兩個例子,是神經科學家做的非常酷的兩個實驗,這些實驗可以說明我們僅需一種學習算法就可以模擬很多事情。
聽覺皮層實驗:
上圖是大腦的一部分,紅色的部分是聽覺皮層,用來處理耳朵收集的聲音信號並讓大腦理解。神經科學家做了一個實驗,切斷耳朵和聽覺皮層的聯繫,並且連接眼睛和聽覺皮層,這樣從眼睛採集的信號不再傳送到視神經而是聽覺皮層,這樣做得最終結果是聽覺皮層將會學習“看"。
體感皮層實驗:
上圖的紅色區域是體感皮層,主要身體的觸覺,與聽覺皮層實驗相似,如果我們做相似的實驗,那麼體感皮層也將學會”看“。
上述兩個實驗統稱爲神經重佈線實驗(neuro-rewiring experiments), 這些實驗給我們的感覺就是同樣的一塊兒腦組織既可以處理視覺,也可以處理聽覺,還可以處理觸覺,也許就存在一種學習算法來處理視覺信號,聽覺信號和觸覺信號。如果我們能近似模擬或實現大腦的這種學習算法,我們就能獲得絕大部分大腦可以完成的功能,因爲大腦可以自己去處理不同類型的數據。以下是一些模擬大腦傳感器的例子:
包括:用舌頭去“看”;回聲定位或者聲納定位;觸覺皮帶-方向感(向小鳥一樣感知方向);給青蛙植入第三隻眼。
這些都是很酷的例子,也許人類的AI之夢並不遙遠了!
3) Model representation I (模型表示一)
大腦中的神經元:
神經網絡的目標就是模擬大腦中的神經元或網絡,因此在介紹hypotheses的表示之前,先讓我們來看一看大腦中神經元:
注:關於這一塊兒,由於不太熟悉,即使聽Andrew Ng 老師的課也有很多糊塗的地方,於是Google了一下神經網絡,發現了一個非常不錯的介紹神經網絡的材料《神經網絡入門(連載)》,以下轉載自該連載中對於大腦中的神經元的描述,我覺得非常清楚:
在人的生命的最初9個月內,這些細胞以每分鐘25,000個的驚人速度被創建出來。神經細胞和人身上任何其他類型細胞十分不同,每個神經細胞都長着一根像 電線一樣的稱爲軸突(axon)的東西,它的長度有時伸展到幾釐米[譯註],用來將信號傳遞給其他的神經細胞。神經細胞的結構如圖1 所示。它由一個細胞體(soma)、一些樹突(dendrite) 、和一根可以很長的軸突組成。神經細胞體是一顆星狀球形物,裏面有一個核(nucleus)。樹突由細胞體向各個方向長出,本身可有分支,是用來接收信號的。軸突也有許多的分支。軸突通過分支的末梢(terminal)和其他神經細胞的樹突相接觸,形成所謂的突觸(Synapse,圖中未畫出),一個神經 細胞通過軸突和突觸把產生的信號送到其他的神經細胞。
每個神經細胞通過它的樹突和大約10,000個其他的神經細胞相連。這就使得你的頭腦中所有神經細胞之間連接總計可能有l,000,000,000,000,000個。這比100兆個現代電話交換機的連線數目還多。所以毫不奇怪爲什麼我們有時會產生頭疼毛病!
神經細胞利用電-化學過程交換信號。輸入信號來自另一些神經細胞。這些神經細胞的軸突末梢(也就是終端)和本神經細胞的樹突相遇形成突觸 (synapse),信號就從樹突上的突觸進入本細胞。信號在大腦中實際怎樣傳輸是一個相當複雜的過程,但就我們而言,重要的是把它看成和現代的計算機一 樣,利用一系列的0和1來進行操作。就是說,大腦的神經細胞也只有兩種狀態:興奮(fire)和不興奮(即抑制)。發射信號的強度不變,變化的僅僅是頻 率。神經細胞利用一種我們還不知道的方法,把所有從樹突上突觸進來的信號進行相加,如果全部信號的總和超過某個閥值,就會激發神經細胞進入興奮 (fire)狀態,這時就會有一個電信號通過軸突發送出去給其他神經細胞。如果信號總和沒有達到閥值,神經細胞就不會興奮起來。這樣的解釋有點過分簡單 化,但已能滿足我們的目的。
注意對於我們的這幅圖來說,比較關鍵的是樹突(dendrite)是輸入(input wires),軸突(axon)是輸出(output wires).
現在我們模擬大腦中的神經元結構建立一個簡單的模型-Logistic unit:
其中(x1, x2, x3)稱爲輸入(來自與其他神經元的輸入信號),x0稱爲偏置單元(bias unit), (theta)稱爲權重或參數, (h_theta(x))稱爲激活函數(activation function), 這裏的激活函數用了sigmoid(logistic) function:
[g(z) = 1/(1+e^{-z})]
將多個神經元組織在一起,我們就有了神經網絡,例如如下的三層結構的神經網絡:
第一層稱爲輸入層,第二層是隱藏層,第三層是輸出層,注意輸入層和隱藏層都存在一個偏置(bias unit). 其中:
(a^{j}_i) = j層第i個單元的激活函數
(Theta^(j)) = 從第j層映射到第j+1層的控制函數的權重矩陣
對於上圖,我們有如下的公式表示:
如果神經網絡在第j層有s(j)個單元,在第j+1層有s(j+1)個單元,那麼權重矩陣\(\Theta^{(j)}\)的緯度是\(s_{j+1} \times (s_j + 1)\)
4) Model representation II (模型表示二)
前饋網絡:向量化實現
上一節我們講到的神經網絡稱爲前饋網絡,也稱前向網絡,這種網絡只在訓練過程會有反饋信號,而在分類過程中數據只能向前傳送,直到到達輸出層,層間沒有向後的反饋信號,因此被稱爲前饋網絡。感知機( perceptron)與BP神經網絡就屬於前饋網絡。我們已經給出了這個神經網絡的模型表示,但是不夠簡潔,下面我們來向量化這個模型(具體的過程推薦看視頻,以下僅給出總結):
其他的網絡結構:
除了上述的前饋網絡外,神經網絡還有其他的一些網絡結構,譬如:
其中第一層仍是輸入層,最後一層第四層數輸出層,中間兩層是隱藏層。
5) Examples and intuitions I (例子和直觀解釋一)
本節和下一節的例子均是“邏輯代數”中的邏輯函數,因此有必要在這裏交代一點邏輯代數的背景,以下文字摘錄自清華大學出版社的《電子技術基礎》6.2節,電子書鏈接來自Google book,同時會在例子的介紹中引用該書中的一些基本定義:
邏輯代數是描述客觀事物邏輯關係的數學方法,它首先是由英國數學家喬治*布爾提出,因此也稱爲布爾代數,而後克勞德*香農將邏輯代數應用到繼電器開關電路的設計中,所以又稱爲開關代數。和普通代數一樣,在邏輯代數中用字母表示變量與函數,但變量與函數的取值只有0和1兩種可能。這裏的0和1已不再表示數量的大小,只代表兩種不同的邏輯狀態。我們把這種二值變量稱爲邏輯變量,簡稱爲變量,這種二值函數稱爲邏輯函數,簡稱爲函數。
非線性分類器例子-異或(XOR)/同或(XNOR)
我們的目標是利用神經網絡實現一個邏輯代數中的同或運算,因此首先介紹一下同或運算和異或運算:
同或邏輯和異或邏輯是隻有兩個邏輯變量的邏輯函數。如果當兩個邏輯變量A和B相同時,邏輯函數F等於1,否則F等於0,這種邏輯關係稱爲同或。反之,如果當兩個邏輯變量A和B相異時,邏輯函數F等於1,否則F等於0,這種邏輯關係稱爲異或。
下圖是一個同或預算的示例,其中\(x_1, x_2\)是二值變量(0, 1):
可以將其對應到一個非線性分類器,如下圖所示:
同或邏輯和異或邏輯互補:
同或運算和異或運算是邏輯代數中的複合運算,因此下面我們先介紹三種最基本的邏輯運算(與邏輯運算、或邏輯運算、非邏輯運算),同時分別介紹其對應的神經網絡實現,最後將這幾種基本的邏輯運算組合,形成最終的同或邏輯運算的神經網絡。
與(AND)邏輯運算示例:
相信大家對於與(AND)運算很熟悉,其基本的表達式如下:
我們可以用一個簡單的神經網絡(一個神經元)表示與邏輯運算:
其中激活函數\(h_\Theta(x)\)可以用如下公式表示:
這裏的激活函數是sigmoid(logistic) function,其圖形表示如下:
對於g(z)來說,當z>=4.0時,g(z)約等於1;當z<=-4.0時,g(z)約等於-1. 對於上述激活函數,將二值(0, 1)變量\(x_1, x_2\)代入,我們得到如下的對應表:
可以看出,這裏的神經網絡激活函數\(h_\Theta(x)\)近似等於與邏輯運算。
或(OR)邏輯運算示例:
同理,我們也給出一個簡單的神經網絡模型來模擬或(OR)邏輯運算:
將二值(0, 1)變量\(x_1, x_2\)代入,得到如下的或邏輯運算對應表:
6) Examples and intuitions II (例子和直觀解釋二)
繼續上一節的例子,我們介紹第三個基本的邏輯運算:非(NOT)邏輯運算
用一個簡單的神經網絡模型來模擬非(NOT)邏輯運算:
得到的對應表如下:
非邏輯運算僅針對一個輸入值,我們來表示一個略微複雜的邏輯表達式:
這個表達式等於1的前提是”當且僅當x1=x2=0".
可以用神經網絡模擬如下:
好了,有了上述三個基本邏輯運算的基礎和相關的神經網絡模型表示,我們可以將其組合爲一個略微複雜的”同或(XNOR)邏輯運算的神經網絡“:
對於這個神經網絡,這裏稍作一點解釋,同或運算的表達式如下:
\[F = A \odot B = AB + \overline{A}\overline{B}\]
上圖中第二層隱藏網絡a1和a2分別代表了A And B和Not A And Not B,a1和a2又做了一次或邏輯運算就得到了同或邏輯運算。該神經網絡對應的輸出與同或運算的真值表相同:
第6節的手寫數字識別(分類)的演示請讀者自行觀看視頻,此處略。
7) Multi-class classification (多類分類問題)
在邏輯迴歸的筆記中,我們談到了多類分類問題,而神經網絡同樣可以應用於多類分類問題,只不過在表達上略有區別。首先來看一個機器視覺中分類的例子:
對於一個輸入圖片,需要識別其屬於行人、轎車、摩托車或者卡車中的一個類型,這是一個多類分類的問題。用神經網絡表示如下:
其中輸出\(h_\Theta(x)\)是一個4維向量,如下表示:
當向量的某個元素爲1,其他爲0時,代表分類結果爲某個爲1元素所對應的類別。這與之前邏輯迴歸中的多類分類表示不同,在邏輯迴歸中,輸出y屬於類似於{1, 2, 3,4}中的某個值,而非一個向量。因此,如果要訓練一個多類分類問題的神經網絡模型,訓練集是這樣的:
特別注意\(y^{(i)}\)是一個向量。
本章到此結束,下一講將會將神經網絡的學習問題。轉載請註明出處"我愛公開課”,謝謝。
參考資料:
http://en.wikipedia.org/wiki/Neural_network
http://en.wikipedia.org/wiki/Artificial_neural_network
神經網絡編程入門
神經網絡入門連載
http://library.thinkquest.org/29483/neural_index.shtml
http://home.agh.edu.pl/~vlsi/AI/xor_t/en/main.htm
http://en.wikipedia.org/wiki/NOR_logic
http://en.wikipedia.org/wiki/Logic_gate
清華大學出版社的《電子技術基礎》,google book