考慮一個監督學習問題,現在有一些帶標簽的訓練樣本(x(i),y(i)).神經網絡就是定義一個復雜且非線性的假設hW,b(x),其中W,b 是需要擬合的參數.
下面是一個最簡單的神經網絡結構,只含有一個神經元,后面就用下圖的形式代表一個神經元:
把神經元看作是一個計算單元,左邊的x1,x2,x3 (和 截距+1 )作為計算單元的輸入,輸出為:,其中,函數
被稱為激活函數,在這里我們的激活函數是sigmoid函數:
還有一種激活函數是正切函數(tanh function):
下面是兩種激活函數圖像:
tanh(z)函數式sigmoid函數的變體,它的輸出范圍是[−1,1],而不是[ 0,1].
注意一個對后后面推導有用的等式:
對於sigmoid函數f(z) = 1 / (1 + exp( − z)),它的導函數為f'(z) = f(z)(1 − f(z)).
神經網絡模型
神經網絡就是把許多神經元連接到一起,使得一個神經元的輸出作為另一個神經元的輸入。下面是一個小規模的神經網絡:
圖中同樣用圓圈表示神經網絡的輸入(藍色的圓圈表示整個網絡的輸入,紅色圓圈表示神經元),截距項為+1,但是這里稱為偏置節點。網絡的最左邊的一層叫做輸入層,最右邊的一層叫做輸出層(輸出層可以有很多神經元節點,這個例子只有一個節點)。中間的一層稱為隱層,因為它們的值在訓練集中觀察不到。可以說圖中神經網絡有3個輸入節點(不包括偏置節點),3個隱層節點,1個輸出節點。
用 nl 表示網絡的層數,因此例子中 nl = 3,用 Ll 代表 l 層,所以 L1 就是輸入層, 就是輸出層。網絡參數(W,b) = (W(1),b(1),W(2),b(2)),
表示 l 層的節點 j 與 l+1 層的節點 i 之間的連接權重,
表示與 l+1 層的節點 i 連接的偏置,因此,在這個例子中
,
. 注意偏置節點是沒有輸入的,因為偏置節點輸出總為+1. 用 sl 表示 l 層的節點數(不計偏置節點)。
用 表示 l 層的節點 i 的激活值(即輸出值)。當 l = 1 時,用
表示第 i 個輸入。給定參數 W,b, 神經網絡的假設模型 hW,b(x) 輸出一個實數。計算過程如下:
接着用 表示 l 層的節點 i 的輸入加權和(包括偏置節點),如:
,所以
.
於是上面計算過程的表示就可以更簡潔地寫為:
稱這個過程為前向傳播(forward propagation).
更為一般的是,用 a(1) = x 表示輸入層的值,於是 l 層的激活值就是 a(l) ,計算 l + 1 層的激活值 a(l + 1) :
把所有參數矩陣化,用矩陣—向量操作,可以利用線性代數的優勢快速求解網絡參數。
到目前為止,我們只關注了一個神經網絡的例子,但是神經網絡還有許多其它的結構(神經元之間的連接類型),包括多個隱層的神經網絡。最常見的方式是,對於一個 nl 層的神經網絡,第1層代表輸入層,nl 層代表輸出層,中間的每個 l 層與 l+1 層緊密相連。設置好以后,就可以像上述的前向反饋一樣,逐層計算激活值,這就是一種前饋神經網絡(feedforward neural network),因為連接中沒有回路或者閉環。
神經網絡可以有多個輸出節點。這里給出一個含有2個隱層和2個輸出節點的網絡:
訓練這個網絡需要訓練樣本 (x(i),y(i)) ,. 當你需要預測多個值得時候,這種網絡會很有用。例如,在醫療診斷應用中,向量 x 給出一個病人的特征,不同的輸出 yi 可能分別表示不同種類的疾病是否存在。
學習來源:http://deeplearning.stanford.edu/wiki/index.php/Neural_Networks