深度學習 – 人工神經元
關於人工神經元,前面章節稍微提過,本章將詳細討論。
生物神經元
人腦有數十億個神經元。神經元是人腦中相互連接的神經細胞,參與處理和傳遞化學信號和電信號。樹突是從其他神經元接收信息的分枝。
細胞核處理從樹突接收到的信息。軸突是一種神經細胞用來傳遞信息的生物電纜。突觸是軸突和其他神經元樹突之間的連接。
人工神經元的出現
1943年,研究人員沃倫·麥卡洛克(Warren McCullock)和沃爾特·皮茨(Walter Pitts)發表了簡化模擬腦細胞的首個概念設計,被稱為McCullock-Pitts (MCP)神經元。他們將這種神經細胞描述為一個簡單的邏輯門,輸出二進制信息。
人腦神經元處理信息的過程:多個信號到達樹突,然后整合到細胞體中,如果積累的信號超過某個閾值,就會產生一個輸出信號,由軸突傳遞。
人工神經元
人工神經元是一個基於生物神經元的數學模型,神經元接受多個輸入信息,對它們進行加權求和,再經過一個激活函數處理,然后將這個結果輸出。
生物神經元對照人工神經元
生物神經元 |
人工神經元 |
細胞核 |
節點 (加權求和 + 激活函數) |
樹突 |
輸入 |
軸突 |
帶權重的連接 |
突觸 |
輸出 |
小結
人工神經元具有以下特點:
- 人工神經元是生物神經元的數學模型
- 它是人工神經網絡中的一個基本單元
- 多個輸入信息被加權求和
- 加權求和的結果經過一個激活函數后,生成輸出信息
- 每個神經元連接到下一層神經元
深度學習 – 感知器原理
人工神經元也稱為感知器。它接受輸入信號,處理后再向一下層神經元輸出信號。
感知器由Frank Rosenblatt在1957年提出,他介紹了一種基於人工神經元的感知器學習規則。
感知器定義
感知器的結構,如下圖所示:
感知器中,輸入信息被加權求和,再經過一個激活函數處理,然后生成輸出信息。
假設正確的輸出是預定義的,每次通過感知器傳遞數據時,都會將最終結果與正確的結果進行比較,並根據差值對感知器中的輸入權重值進行調整,直到網絡可以生成正確的最終輸出。
所以,感知器的學習過程,實際上就是根據一組樣本數據,確定感知器輸入權重的過程。
感知器輸入
一個感知器可以接受多個輸入(x_1, x_2, …, x_n)(x1,x2,…,xn),每個輸入都有一個權重值,另外還有一個偏置項(bias),即上圖中的w0,通常也記為b(bias)。
加權求和
對於輸入信號,感知器首先會對其加權求和:
z(x) = w_0 + w_1x_1 + w_2x_2 + … + w_nx_nz(x)=w0+w1x1+w2x2+…+wnxn
激活函數
激活函數作用是模擬生物神經元中閾值的作用,當信號強度達到閾值時,就輸出信號,否則就沒有輸出。數學中的許多函數可以作為激活函數使用,例如階躍函數(step funciton),sign函數,sigmoid函數。
- 階躍函數的輸入信號大於t, 輸出1,否則輸出0。
- 符號(sign)函數的輸入大於0,輸出1,小於0,輸出-1。
- Sigmoid函數是s曲線,輸出值在0到1之間。
感知器的輸出
感知器的輸出,可以表示為:
輸入
輸入項:1, x_1, x_2, …, x_n1,x1,x2,…,xn,表示為向量x
X = [1, x_1, x_2, …, x_n]X=[1,x1,x2,…,xn]
權重
權重項:w_1, w_2, …, w_nw1,w2,…,wn,表示為向量w
W = [w_0, w_1, w_2, …, w_n]W=[w0,w1,w2,…,wn]
偏置項(bias)
偏置項為 w_0 \times 1w0×1,也記為bb
激活函數
激活函數為f(Z)f(Z)
輸出
加權求和的值可以表示為:
Z = W · X = W^TX = \sum _{i=0}^n w_i*x_iZ=W⋅X=WTX=i=0∑nwi∗xi
經過激活函數處理后:
Y = f( W · X )Y=f(W⋅X)
例子:用感知器實現邏輯門
用感知器實現邏輯與
設計一個感知器,實現邏輯與功能。邏輯與函數,有兩個輸入,一個輸出,真值表如下所示:
x1 | x2 | y |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
0表示false, 1表示true。
我們讓權重:w0 = -0.8, w1 = 0.5, w2 = 0.5,激活函數使用階躍函數(t=0),這時,感知器就相當於and函數。
我們驗算一下:
x1 = 1
,x2 = 1
,y = x1 * w1 + x2 * w2 + w0 = 0.5*1 + 0.5*1 + (-0.8) = 0.2 > 0
,輸出為1,即truex1 = 0
,x2 = 1
,y = x1 * w1 + x2 * w2 + w0 = 0.5*0 + 0.5*1 + (-0.8) = -0.3 < 0
,輸出為0,即false
用感知器實現邏輯或
類似的,可以使用感知器實現邏輯或功能。
我們讓權重:w0 = -0.3, w1 = 0.5, w2 = 0.5,激活函數使用階躍函數(t=0),這時,感知器就相當於or函數。
x1 = 1
,x2 = 1
,y = x1 * w1 + x2 * w2 + w0 = 0.5*1 + 0.5*1 + (-0.3) = 0.7 > 0
,輸出為1,即truex1 = 0
,x2 = 1
,y = x1 * w1 + x2 * w2 + w0 = 0.5*0 + 0.5*1 + (-0.3) = 0.2 > 0
,輸出為1,即true
感知器還能做什么
事實上,感知器不僅僅能實現簡單的布爾運算。它可以擬合任何的線性函數,任何線性分類或線性回歸問題都可以用感知器來解決。
感知器訓練
現在,你可能困惑前面的權重項和偏置項的值是如何獲得的呢?
在感知器學習規則中,將實際輸出與樣本中的正確輸出進行比較,根據輸出偏差調整權重與偏置項。重復多次迭代樣本數據,直到實際輸出與正確輸出匹配,從而得出正確的權重與偏置項,這就是感知器的學習過程。后面章節,將有更詳細的介紹。
深度學習 – 感知器學習規則
如前所述,在 20 世紀 50 年代,感知器 (Rosenblatt, 1956, 1958) 成為第一個能根據每個類別的輸入樣本來學習權重的模型。約在同一時期,自適應線性單元 (adaptive linearelement, ADALINE) 簡單地返回函數 f(x) 本身的值來預測一個實數 (Widrow and Hoff, 1960),並且它還可以學習從數據預測這些數。
自適應線性單元(Adaline)的激活函數是一個線性函數,該函數的輸出等於輸入,實際上就相當於沒有激活函數,線性激活函數φ(Z)的定義:
自適應線性單元的訓練
自適應線性單元的訓練規則
- 權重根據線性激活函數進行更新
- 將樣本數據中的實際輸出與線性激活函數的輸出進行比較,計算模型偏差,然后更新權重。
感知器訓練規則
- 權重是根據單位階躍函數更新的
- 將樣本數據中的實際輸出與模型輸出進行比較,計算模型偏差,然后更新權重。
自適應線性單元與感知器的區別,在於激活函數不同,自適應線性單元將返回一個實數值而不是0,1分類。因此自適應線性單元用來解決回歸問題而不是分類問題。
自適應線性單元訓練時,用於調節權重的訓練算法是被稱為梯度下降法。稍加改進后的隨機梯度下降算法仍然是當今深度學習的主要訓練算法。后面將詳細介紹。
監督學習與無監督學習
監督學習:對有標記(分類)的訓練樣本進行學習,以盡可能對訓練樣本集外的數據進行標記(分類)預測。
監督學習中,所有的標記(分類)是已知的。因此,訓練樣本的岐義性低。
無監督學習:對沒有標記(分類)的訓練樣本進行學習,以發現訓練樣本集中的結構性知識。
這里,所有的標記(分類)是未知的。因此,訓練樣本的岐義性高。
聚類就是典型的無監督學習,經過聚類后的樣本數據就可以用來做監督學習。
目標函數
通常,神經網絡的訓練都屬於監督學習類別,即使樣本數據沒有分類,也可先做聚類處理,把樣本數據分類,然后就可以用來做監督學習了。
在監督學習下,對於一個樣本,我們知道它的特征(輸入)x,以及標記(輸出)y。同時,我們還可以得到神經網絡的預測輸出y^。注意這里面我們用y表示訓練樣本里面的標記,也就是實際值;用y^表示神經網絡的的預測值。我們當然希望預測值y^和實際值y越接近越好。
數學上有很多方法來表示預測值y^和實際值y接近程度,比如我們可以用y^和y的差的平方的21來表示它們的接近程度
我們把
e叫做單個樣本的誤差。至於為什么前面要乘21,是為了后面計算方便。
訓練數據中會有很多樣本,比如N個,我們可以用訓練數據中所有樣本的誤差的和,來表示神經網絡的誤差E,也就是
上式的
e(1)表示第一個樣本的誤差,e(2)表示第二個樣本的誤差……。
上面的也可以表示為和式:
x
(i)表示第i個訓練樣本的特征,y(i)表示第i個樣本的標記,我們也可以用元組(x(i),y(i))表示第i個訓練樣本。y^(i)則是神經網絡對第i個樣本的預測值,φ(z(i))中z(i)表示第i個樣本的加權求和值,φ(z)表示線性激活函數。
對於一個訓練數據集來說,我們當然希望誤差E最小越好。對於特定的訓練數據集來說,(x(i),y(i))的值都是已知的,所以E其實是參數w的函數。
w。
由此可見,神經網絡的訓練,實際上就是求取到合適的權重
w,使差值E取得最小值。這在數學上稱作優化問題,而J(w)就是我們優化的目標,稱之為目標函數,也被稱為代價函數、損失函數。
注意:前面提到,目標函數實際上是差值平方和,從數學上來說,平方與線性激活函數讓目標函數變成可微凸函數。
對於可微凸函數,可以使用一種簡單但功能強大的優化算法,梯度下降法來求取目標函數J(w)的最小值,及其對應的參數
深度學習 – 激活函數
感知器中的激活函數模擬生物神經元中閾值的作用,當信號強度達到閾值時,就輸出信號,否則就沒有輸出。數學中的許多函數可以作為激活函數使用,本章將詳細介紹幾種常用的激活函數。
激活函數的本質作用
從數學上來說,激活函數是用來加入非線性因素的,解決線性模型所不能解決的問題。
神經網絡從數學上來看,是對函數的擬合,理論上已經證明,兩層以上的神經網絡可以逼近任意函數。
Sigmoid 函數
Sigmoid函數,即S形函數,是一個具有S形曲線的數學函數。Sigmoid函數是常用的激活函數。函數的數學定義如
可以看到Sigmoid 函數的值,總是在0到1之間。Sigmoid 函數的缺點是,在神經網絡訓練時,計算時間較長,速度比較慢。
ReLU/Rectifier函數 與 Softplus 函數
ReLU函數和Softplus函數也是常見的激活函數。這兩個的函數曲線如下:
ReLU函數是目前深度神經網絡中最常用的激活函數。
從函數曲線可以看出,ReLU函數的作用是,當輸入信號小於0,沒有輸出;當輸入信號大於0,按原樣輸出輸入信號,也就是說ReLU函數祛除了負值的信號。
softplus函數與ReLU函數作用類似,softplus的曲線更平滑,softplus函數也被稱為光滑的ReLU函數。
Softplus 函數的數學定義:
其他
其他還有 Softmax, Hyperbolic, sign等等激活函數,如需進一步了解可參考相關資料。
下圖列舉了常用的各種激活函數
如前所述,在 20 世紀 50 年代,感知器 (Rosenblatt, 1956, 1958) 成為第一個能根據每個類別的輸入樣本來學習權重的模型。約在同一時期,自適應線性單元 (adaptive linearelement, ADALINE) 簡單地返回函數 f(x) 本身的值來預測一個實數 (Widrow and Hoff, 1960),並且它還可以學習從數據預測這些數。
自適應線性單元(Adaline)的激活函數是一個線性函數,該函數的輸出等於輸入,實際上就相當於沒有激活函數,線性激活函數φ(Z)的定義:
φ(Z)=Z=WTX
自適應線性單元的訓練
自適應線性單元的訓練規則
- 權重根據線性激活函數進行更新
- 將樣本數據中的實際輸出與線性激活函數的輸出進行比較,計算模型偏差,然后更新權重。
感知器訓練規則
- 權重是根據單位階躍函數更新的
- 將樣本數據中的實際輸出與模型輸出進行比較,計算模型偏差,然后更新權重。
自適應線性單元與感知器的區別,在於激活函數不同,自適應線性單元將返回一個實數值而不是0,1分類。因此自適應線性單元用來解決回歸問題而不是分類問題。
自適應線性單元訓練時,用於調節權重的訓練算法是被稱為梯度下降法。稍加改進后的隨機梯度下降算法仍然是當今深度學習的主要訓練算法。后面將詳細介紹。
監督學習與無監督學習
監督學習:對有標記(分類)的訓練樣本進行學習,以盡可能對訓練樣本集外的數據進行標記(分類)預測。
監督學習中,所有的標記(分類)是已知的。因此,訓練樣本的岐義性低。
無監督學習:對沒有標記(分類)的訓練樣本進行學習,以發現訓練樣本集中的結構性知識。
這里,所有的標記(分類)是未知的。因此,訓練樣本的岐義性高。
聚類就是典型的無監督學習,經過聚類后的樣本數據就可以用來做監督學習。
目標函數
通常,神經網絡的訓練都屬於監督學習類別,即使樣本數據沒有分類,也可先做聚類處理,把樣本數據分類,然后就可以用來做監督學習了。
在監督學習下,對於一個樣本,我們知道它的特征(輸入)x,以及標記(輸出)y。同時,我們還可以得到神經網絡的預測輸出y^。注意這里面我們用y表示訓練樣本里面的標記,也就是實際值;用y^表示神經網絡的的預測值。我們當然希望預測值y^和實際值y越接近越好。
數學上有很多方法來表示預測值y^和實際值y接近程度,比如我們可以用y^和y的差的平方的21來表示它們的接近程度
e=21(y–^)2
我們把e叫做單個樣本的誤差。至於為什么前面要乘21,是為了后面計算方便。
訓練數據中會有很多樣本,比如N個,我們可以用訓練數據中所有樣本的誤差的和,來表示神經網絡的誤差E,也就是
E=e(1)+e(2)+e(3)+…+e(n)
上式的e(1)表示第一個樣本的誤差,e(2)表示第二個樣本的誤差……。
上面的也可以表示為和式:
E=e(1)+e(2)+e(3)+…+e(n)=i=1∑ne(i)=21i=1∑n(y(i)–y^(i))2
其中
y^(i)=φ(z(i))=wTx(i)
x(i)表示第i個訓練樣本的特征,y(i)表示第i個樣本的標記,我們也可以用元組(x(i),y(i))表示第i個訓練樣本。y^(i)則是神經網絡對第i個樣本的預測值,φ(z(i))中z(i)表示第i個樣本的加權求和值,φ(z)表示線性激活函數。
對於一個訓練數據集來說,我們當然希望誤差E最小越好。對於特定的訓練數據集來說,(x(i),y(i))的值都是已知的,所以E其實是參數w的函數。