機器學習——從感知機到BP神經網絡(20分鐘神經網絡入門全解)附BP神經網絡python代碼

人工神經網絡的由來

爲什麼要使用神經網絡?

我們知道使用線性迴歸和邏輯迴歸可以解決線性可分問題,對於有些線性不可分的問題,也可以通過增加多項式來解決,但是對於決策邊界較爲複雜的情況:
在這裏插入圖片描述
此時,往往需要引入較多的多項式,對於變量較多的情況極爲複雜,甚至容易出現過擬合。
由於大量數據的湧入和收集(大數據的驅動)我們有了新的算法:人工神經網絡(ANN),它的研究是由試圖模擬生物神經系統而激發的。

從人體神經網絡系統到人工神經網絡

人體神經網絡的構造
人的大腦主要由稱爲神經元(節點)的神經細胞組成,神經元通過突觸的纖維絲連在一起。當神經元受到刺激時,神經脈衝(輸入)通過軸突從一個神經元傳到另一個神經元。一個神經元的樹突連接到其他神經元的軸突,其連接點稱爲神經建(權重)。
神經學家發現,人的大腦通過在同一個脈衝(輸入)反覆刺激下改變神經元之間的神經建連接強度(權值)來進行學習
PS.以一個例子來看人工神經網絡的運作方式:
這裏借用朱江老師上課所講的例子——《甄嬛傳》高潮部分:滴血認親
看過甄嬛傳的同學應該不會忘了這一集,劇情是相當刺激~內容是這樣的,祺嬪張羅一羣人來指認甄嬛腹中雙生子並非皇上的,而是太醫溫實初的。
圖片爲博主原創,轉載請註明出處!
(PS.圖片爲博主原創,轉載請註明出處,謝謝!)
如上圖,開始有祺嬪、丫鬟佩兒、侍女玢兒、尼姑淨白被幕後主使召集起來,分別指認甄嬛腹中並非龍種,此時,這四個人作爲信息的輸入(input)作爲幕後主使的皇后,和當事人甄嬛分別對輸入信息加權彙總找出對自己有利的信息,並適當爲收集信息“添油加醋”。上圖連接線的粗細表示信息的權重(Weights),作爲皇上,自然擔心自己孩子血統是否純正,因此對於皇后觀點權重較大,此時皇上作爲對全部信息的彙總輸出,可能得出結論:孩子不是自己的。但是根據不斷的信息湧入和轉換,對權重進行調整,最終的結果是皇上認爲:孩子是自己的。
以上就是一個人工神經網絡傳遞信息的例子。由上可知,人工神經網絡的一些組成是:{Input:x1,x2,...,xn(n)Weights:w1,w2,...,w3f(x)[]Output:\begin{cases}輸入Input:x1,x2,...,xn(n個特徵)\\權值Weights:w1,w2,...,w3\\激活函數f(x)[可想象爲皇后對輸入信息“添油加醋”]\\輸出Output:對加權和套用激活函數的結果\end{cases}
下面,我們從最簡單的神經網絡:感知機出發,詳細捋一捋神經網絡的知識。

最簡單的神經網絡——感知機

感知機是二分類的線性分類模型,其輸入是實例的特徵向量,輸出爲實例的類別。感知器是最簡單的神經網絡,它只有輸入層和輸出層兩層結構,沒有中間層。

感知機的構造

在這裏插入圖片描述
如上圖,每個神經元都是多輸入,單輸出的信息處理單元,輸入信號通過帶權重的連接傳遞,和閾值對比後得到總輸入值,再通過激活函數的處理產生單個輸出。
PS.激活函數的意義就是通過進行映射,解決非線性可分問題,激活函數有:
在這裏插入圖片描述
其中,常用的激活函數爲:sigmoid函數、tanH函數和強大的ReLU函數。
此時,從激活函數到輸出有:
輸入:w1x1+w2x2+x3x3w_1x_1+w_2x_2+x_3x_3
輸出:O=f(w1x1+w2x2+x3x3+)O=f(w_1x_1+w_2x_2+x_3x_3+閾值)
爲了方便計算,我們常將偏置因子b作爲w0w_0,引入偏置神經元:x0=1x_0=-1
將閾值也看做加權和的一部分——w0x0w_0x_0(+閾值或-閾值),即引入了x0x_0
x0:取值1或-1
w0:閾值
輸出:f(w0x0+w1x1+w2x2+...+wnxn)f(w_0x_0+w_1x_1+w_2x_2+...+w_nx_n)
和我們剛纔所說人腦的神經網絡系統一樣,我們的人工神經網絡也是:輸入一定,通過調整權重來影響輸出。下面,我們看一看感知器的權值更新計算過程。

感知機權值更新的概念和計算

感知機的權值更新

感知器是怎樣更新權值的呢?它通過輸入信息的加權彙總,帶入激活函數中,計算的輸出值與target目標值(原本的標籤)進行對比,若有差異,則調整權重,直到滿足一定的迭代次數或者達到預設的最小誤差值時停止。
簡要理解感知器的權值更新過程(具體的推導請參考:《統計學習方法》第二章)
首先,我們要明瞭,感知機的權值更新同樣採用梯度下降的方法:
當感知機採用sigmoid函數作爲激活函數時,此時相當於邏輯迴歸!採用同樣的決策邊界,可以得到:
Oj={1,Xw<01,Xw>0O_j=\begin{cases} -1 ,&Xw<0\\1, &Xw>0\end{cases} 注意:此時採用雙極性閾值,取值在-1~1!
i)當t=O=sign(Xw)t=O=sign(Xw)時,無需更新權值;
ii)當tO=sign(Xw)t\not=O=sign(Xw)時,{O<0,Xw<0,Δw=η(tO)X=2ηX>0Ot=1O>0,Xw>0Δw=η(tO)X=2ηX<0Ot=1\begin{cases}O<0,&Xw<0,\Delta w=\eta(t-O)X=2\eta X>0,O不斷向t=1靠近\\O>0,&Xw>0,\Delta w=\eta(t-O)X=-2\eta X<0,O不斷向t=-1靠近\end{cases}
從而實現權值更新。

感知機詳細計算過程

下面,我們用一個例子來說明感知機的計算過程:
某計算節點感知器有3個輸入。給定樣本:X1=(1,2)TX2=(0,1.5)TX3=(1,1)TX^1=(1,-2)^T,X^2=(0,1.5)^T,X^3=(-1,1)^T輸入向量中需要加入第一個恆等於-1的分量。期望輸出向量d=(1,1,1)Td=(-1,-1,1)^T。初始權向量w=(0.5,1,1)Tw=(0.5,1,-1)^T,學習率η=0.1,激活函數採用雙極性閾值函數。
解:
在這裏插入圖片描述

增加hidden layer的神經網絡——BP神經網絡

引入:本文一開始“滴血認親”的例子就是屬於含有一層隱層的神經網絡。隱層的甄嬛和皇后這兩個“神經元”對輸入層信息進行加權彙總並帶入激活函數,所得的輸出作爲輸出層的輸入。
在這裏插入圖片描述
(PS.圖片爲博主原創,轉載請註明出處,謝謝!)

爲什麼要增加隱層?

沒有隱層的神經網絡可以看做對輸入信息的線性組合。單層感知機即是其中一個例子,但是單層感知機的侷限是:它只能解決線性可分的“與”,“或”,“非”問題,不能解決線性不可分的"異或"問題。這個時候,增加隱層相當於相當於在第一次sigmoid變換的基礎上再次進行sigmoid轉換,對數據進行兩次映射,可以轉換爲線性可分問題。可以推廣到:通過增加隱層可以解決各種情形的線性不可分問題。有如下圖:
在這裏插入圖片描述
PS.關於“或”,“與”,“非”問題大家可以自行百度,或者直接理解爲:線性可分問題。

BP(back propagation)神經網絡是1986年由Rumelhart和McClelland爲首的科學家提出的概念,是一種按照誤差逆向傳播算法訓練的多層前饋神經網絡,是目前應用最廣泛的神經網絡。它的基本思想是梯度下降法,利用梯度搜索技術,以期使網絡的實際輸出值和期望輸出值的誤差均方差爲最小

delta學習規則

δ學習規則是一種利用梯度下降法的一般性的學習規則。
首先,BP神經網絡的損失函數(Cost Function):E=12(tO)2E=\frac{1}{2}(t-O)^2其中,t爲數據原始標籤,即爲target。O爲我們的預測輸出。delta學習規則即是通過梯度下降法,使我們的預測輸出和目標標籤的誤差平方和最小。
使用梯度下降法來最小化E的值:Δw=ηEw=ηXT(tO)f(Xw)w=ηXTδ,(δ=(ty)f(Xw)w)\Delta w=-\eta \frac{\partial E}{\partial w}=-\eta X^T(t-O)\frac{\partial f(Xw)}{\partial w}=\eta X^T\delta ,(\delta=-(t-y)\frac{\partial f(Xw)}{\partial w}) ww+Δww≔w+\Delta w

BP神經網絡權值更新的梯度下降法推導過程

對於三層網絡,推導輸出層和隱層權值更新公式。(實質是基於delta規則的鏈式法則)
在這裏插入圖片描述
具體推導如下:
例:下圖爲三層神經網絡,隱層三節點,使用激活函數爲sigmoid函數。
在這裏插入圖片描述
PS.在進行後續運算前,對數據向量化處理。輸入數據爲矩陣:XX,第一層權重爲向量:W(1)W^{(1)},第二層權重爲向量:W(2)W^{(2)},隱層輸出矩陣:Z(2)Z^{(2)},輸出層輸入矩陣:a(2)a^{(2)}
已知,E=12(tO)2E=\frac{1}{2}(t-O)^2在本例(上圖)中可得E=12(ta1(3))2E=\frac{1}{2}(t-a_1^{(3)})^2
Step1Step 1'輸出層—>隱層權值更新:Ew(2)=Ea1(3)a1(3)z1(3)z1(3)w(2)=(ta1(3))a1(3)(1a1(3))a(2)\frac{\partial E}{\partial w^{(2)}}=\frac{\partial E}{\partial a_1^{(3)}}·\frac{\partial a_1^{(3)}}{\partial z_1^{(3)}}·\frac{\partial z_1^{(3)}}{\partial w^{(2)}}=-(t-a_1^{(3)})·a_1^{(3)}(1-a_1^{(3)})·a^{(2)} 記:δL=(ta1(3))a1(3)(1a1(3))\delta_L=-(t-a_1^{(3)})·a_1^{(3)}(1-a_1^{(3)})
梯度下降更新權值:w:=w+Δw=w+ηδLa(2)w:=w+\Delta w=w+\eta·\delta_L·a^{(2)}
Step2Step2'隱層—>輸入層權值更新:Ew(1)=Ea1(3)a1(3)z1(3)z1(3)a(2)a(2)z(2)z(2)w(1)\frac{\partial E}{\partial w^{(1)}}=\frac{\partial E}{\partial a_1^{(3)}}·\frac{\partial a_1^{(3)}}{\partial z_1^{(3)}}·\frac{\partial z_1^{(3)}}{\partial a^{(2)}}·\frac{\partial a^{(2)}}{\partial z^{(2)}}·\frac{\partial z^{(2)}}{\partial w^{(1)}} =(ta1(3))a1(3)(1a1(3))w(2)a(2)(1a(2))X=-(t-a_1^{(3)})·a_1^{(3)}(1-a_1^{(3)})·w^{(2)}·a^{(2)}(1-a^{(2)})·X =δLw(2)a(2)(1a(2))X=\delta_L·w^{(2)}·a^{(2)}(1-a^{(2)})·X 記:δl=(ta1(3))a1(3)(1a1(3))w(2)a(2)(1a(2))\delta_l=-(t-a_1^{(3)})·a_1^{(3)}(1-a_1^{(3)})·w^{(2)}·a^{(2)}(1-a^{(2)})
梯度下降更新權值:w:=w+Δw=w+ηδLw(2)a(2)(1a(2))Xw:=w+\Delta w=w+\eta·\delta_L·w^{(2)}·a^{(2)}(1-a^{(2)})·X

BP神經網絡計算實例

基本BP算法包括信號的前向傳播和誤差的反向傳播兩個過程,我們通過一個例子詳細計算BP神經網絡的信號前向傳播誤差反向反饋過程。
以上圖爲例,
Step1Step 1' 信號向前傳播
第一層——數據輸入爲:X1,X2,X3a1(1)a2(1)a3(1)X_1,X_2,X_3即a_1^{(1)},a_2^{(1)},a_3^{(1)}
中間層——a1(2)=g(z1(2))z1(2)=w01(1)x0+w11(1)x1+w21(1)x2+w31(1)x3a_1^{(2)}=g(z_1^{(2)} ),z_1^{(2)}=w_{01}^{(1)} x_0+w_{11}^{(1)} x_1+w_{21}^{(1)} x_2+w_{31}^{(1)} x_3 a2(2)=g(z2(2))z2(2)=w02(1)x0+w12(1)x1+w22(1)x2+w32(1)x3a_2^{(2)}=g(z_2^{(2)} ),z_2^{(2)}=w_{02}^{(1)} x_0+w_{12}^{(1)} x_1+w_{22}^{(1)} x_2+w_{32}^{(1)} x_3 a3(2)=g(z3(2))z3(2)=w03(1)x0+w13(1)x1+w23(1)x2+w33(1)x3a_3^{(2)}=g(z_3^{(2)} ),z_3^{(2)}=w_{03}^{(1)} x_0+w_{13}^{(1)} x_1+w_{23}^{(1)} x_2+w_{33}^{(1)} x_3 輸出層——O=hw(x)=a1(3)=g(z1(3)),z1(3)=w01(2)a0(2)+w11(2)a1(2)+w21(2)a2(2)+w31(2)a3(2)O=h_w (x)=a_1^{(3)}=g(z_1^{(3)}),z_1^{(3)}=w_{01}^{(2)}a_0^{(2)}+w_{11}^{(2)}a_1^{(2)}+w_{21}^{(2)}a_2^{(2)}+w_{31}^{(2)}a_3^{(2)}
Step2Step 2'誤差反向反饋
輸出層—>隱層δL=(ta1(3))a1(3)(1a1(3))\delta_L=-(t-a_1^{(3)})·a_1^{(3)}(1-a_1^{(3)}) 隱層—>輸入層δl=δLw(2)a(2)(1a(2))\delta_l=\delta_L·w^{(2)}·a^{(2)}(1-a^{(2)})
Step3Step 3'權值更新 W(2):=W(2)+ηδLa(2)W^{(2)}:=W^{(2)}+\eta·\delta_L·a^{(2)} W(1):=W(1)+ηδlXW^{(1)}:=W^{(1)}+\eta·\delta_l·X

notes:感知機和線性迴歸、邏輯迴歸的關聯

① 感知機+sigmoid/logit函數——>邏輯迴歸
② 感知機+f(x)=wx+b線性函數——>線性迴歸
③ 三層網絡+sigmoid/logit函數——>非線性迴歸

總結

本文主要介紹了神經網絡入門必須要瞭解的兩個算法:感知機和BP神經網絡。從人工神經網絡的由來到感知機算法的原理、BP算法的原理及推導。

python實現——sklearn葡萄酒分類

  1. 導入所需庫
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split #用於數據分割
from sklearn.preprocessing import StandardScaler #做數據標準化
from sklearn.metrics import classification_report,confusion_matrix
import numpy as np
  1. 導入所需數據
data = np.genfromtxt('data/wine_data.csv', delimiter=',')
data
  1. 數據轉化——區分X和Y
x_data = data[:,1:]
y_data = data[:,0]   #第一列是標籤值
  1. 數據分割
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data)
  1. 數據標準化
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.fit_transform(x_test)
  1. 調用神經網絡包並傳入參數,擬合模型
mlp = MLPClassifier(hidden_layer_sizes=(100, 50),max_iter=500)
mlp.fit(x_train, y_train)
  1. 模型預測並輸出混淆矩陣
predictions = mlp.predict(x_test)
print(classification_report(y_test, predictions))
print(confusion_matrix(y_test,predictions))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章