【火爐煉AI】深度學習001-神經網路的基本單元-感知器

煉丹老頑童發表於2018-11-01

【火爐煉AI】深度學習001-神經網路的基本單元-感知器

(本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )

在人工智慧領域,深度學習已經脫穎而出,越來越成為大型複雜問題的首選解決方案。深度學習相對傳統機器學習的區別主要在於,使用模擬人類大腦的神經網路來構建模型。早期的淺層次神經網路也可以認為是機器學習領域的一個分支,但是目前,由於神經網路的層次不斷加深,引數越來越複雜,能夠的解決實際問題越來越多,研究神經網路,特別是深度神經網路的文章越來越多,故而深度學習被劃分到一個單獨的分支中。


1. 感知器簡介

為了更好的理解神經網路,我們首先來看看神經網路的基本組成單元-神經元,神經元是生物學的術語,在計算機領域,我們稱之為感知器。

感知器是一種早期的神經網路模型,由美國學者F.Rosenblatt於1957年提出.感知器中第一次引入了學習的概念,使人腦所具備的學習功能在基於符號處理的數學到了一定程度模擬,所以引起了廣泛的關注。

【火爐煉AI】深度學習001-神經網路的基本單元-感知器

感知器的結構:

1,輸入:一個感知器有一個或多個輸入,用於接收特徵數值。

1,權重:每個輸入都有一個權重,表示該輸入對結果的影響力。

2,偏置:雖然權重能夠表示該輸入對結果的影響力,但為了更好的擬合結果,有時還需要對輸入進行左右移動,即平行地增大或減小,故而有了偏置。

3,輸出:經過計算後會給出一個或多個輸出。

通俗一點來理解,感知器就像一個複雜一點的函式y=f(u,v),其中的u,v就是輸入的特徵數值,f表示權重和偏置的組合方式,也就是計算過程,y為輸出。所以可以用下列公式來表示感知器。

【火爐煉AI】深度學習001-神經網路的基本單元-感知器

其中的x表示輸入,w為權重,sita為偏置,f則為啟用函式,v為輸出。所以,完全可以將感知器理解成一個複雜一點的函式。


2. 感知器的訓練

如果我們要用一條直線擬合一系列資料,假設該直線的方程為y=a*x+b,那麼,我們要做的就是計算出最合適的a和b即可。同理,由於感知器的函式中有兩個未知變數(權重和偏置),故而,我們要做的就是計算出最合適的權重和偏置,這一計算過程就是感知器的訓練。

感知器的訓練是基於感知器規則的,感知器規則認為,如果樣本輸入函式是線性可分的,那麼感知器學習演算法經過有限次迭代之後,便可以收斂得到正確的權值和偏置,也就是說,不管開始時權重和偏置是多少,經過N次迭代後,總能得到唯一的確定的權重和唯一的確定的偏置。這也就是為什麼我們在初始時設定權重和偏置為隨機數或0的原因。

感知器的訓練過程可以簡單概括為:在訓練時,每次從訓練資料中取出一個樣本的輸入向量,使用感知器計算其輸出,再根據感知器規則來調整權重。每處理一個樣本就調整一次權重。經過多輪迭代後(即全部的訓練資料被反覆處理多輪),就可以訓練出感知器的權重,使之實現目標函式。

關於感知器的數學推導和基本理論,可以參考博文:感知器(Perception)

那麼,從程式碼上如何訓練感知器了?執行下列程式碼之前,請先通過pip install neurolab來安裝neurolab模組。

首先準備資料集,並將資料集的分佈情況顯示出來,這部分程式碼太簡單,可以直接看程式碼。

【火爐煉AI】深度學習001-神經網路的基本單元-感知器

# 建立感知器模型
import neurolab as nl
perceptron = nl.net.newp([[dataset_X[:,0].min(),dataset_X[:,0].max()], # 指定特徵1的最小和最大值
                          [dataset_X[:,1].min(),dataset_X[:,1].max()]], # 特徵2的min和max
                          1) # 只有1個感知器
# 為了適合於train,需要將dataset_y處理成二維
dataset_y=dataset_y[:,np.newaxis]
cost=perceptron.train(dataset_X,dataset_y,epochs=50,show=10,lr=0.01) 
# 訓練該單個感知器,50個回合,每10個回合顯示一下訓練結果,學習速率為0.01

# 顯示下訓練過程中cost的變化趨勢
plt.plot(cost)
plt.xlabel('Number of epochs')
plt.ylabel('Training cost')
plt.grid()
plt.title('Training cost progress')
複製程式碼

【火爐煉AI】深度學習001-神經網路的基本單元-感知器

########################小**********結###############################

1,感知器方面主要是理解其基本的含義和理論知識,因為感知器是神經網路的基本組成單元。

2,感知器的訓練在以後的深度學習中用處不大,一般成熟的深度學習框架都已經整合了這部分內容,此處僅僅用於演示。

#################################################################


注:本部分程式碼已經全部上傳到(我的github)上,歡迎下載。

參考資料:

1, Python機器學習經典例項,Prateek Joshi著,陶俊傑,陳小莉譯

相關文章