標籤:

深度學習之單層感知器(一)

當我們最初學習機器學習時候,了解到最簡單的神經網路可能便是單層感知器,他也是監督學習的最簡單一種。本文章就通過《人工神經網路理論、設計及應用》書中介紹的單層感知器一節,進行python的代碼實現。

單層感知器的網路結構如下:

上圖便是一個單層感知器,很簡單的一個結構,圖中說明我們有個3維的輸入值分別是x1、x2、x3,輸入端和其上的權值0.3相乘,然後將乘積相加後,最後通過激活函數對乘積和進行處理得到輸出值y。

感知器學習演算法:

採用感知器學習規則(對誤差平方求導推極值問題),考慮到訓練過程是感知器權值隨每一步調整改變的過程,為此用t表示學習的迭代次數,權值看作t的函數。t=0表示學習開始前的初始狀態,此時對應的權值為初始化值。訓練可按如下步驟進行:

(1)、對各權值 W_{0j},W_{0j},......W_{nj} , j=1,2,......m (m為計算層的節點數)賦予較小的非零隨機數;

(2)、輸入樣本對 { x^{p},d^{p} } ,x是訓練樣本,d是樣本的目標值;

(3)、計算各節點的實際輸出 o_{j} ^{p} (t) = sgn[ W_{j} ^T(t) X^{p} ] , j =1 ,2 ...... m;

(4)、調整各節點的權值 W_{j} (t+1) = W_{t} + alpha [ d_{j} - o_{j}(t) ] X_{p} ,j=1,2......m;其中 alpha 為學習率,用於控制調整速度,學習率太大會影響訓練的穩定性,太小則使訓練的收斂速度變慢,一般取值範圍0< alphaleq 1;

(5)、返回到步驟2輸入下一對樣本

好了,有了上面的基本知識後,我們通過簡單的python代碼來實現單層感知網路。比如我們有如下圖的例子:

首先建立數據集

import numpy as np#建立數據集x = np.mat([[1,0,0],[1,0,1],[1,1,0],[1,1,1],[0,0,1],[0,1,0],[0,1,1],[0,0,0]])y = np.mat([[-1],[1],[1],[1],[-1],[-1],[1],[-1],])#設置初始權值和偏置值w = np.mat([0.3,0.3,0.3])baise = 0.4#學習率rate = 0.01#激活函數def sgn(x): return np.where(x >= 0.0, 1, -1)#通過學習規則,進行迭代for i in range(1000): #誤差計算 errors = 0 for j in range(len(x)): #誤差計算 r = rate*(y[j] - sgn(x[j]*w.T+baise)) #r = rate*(y[j] - (x[j]*w.T+baise)) #調整權值 w += r*x[j] baise += r #誤差計算 errors += abs(r) print(i, iter :error is , errors) if errors ==0: break

下圖,是我運行上面程序的結果,可以看到迭代了8次後,誤差為0:

通過計算出來的權值W和偏置值baise進行驗證模型是否正確:

sgn(x*w.T+baise)

可以看到模型的輸出和實際y的值一模一樣:


推薦閱讀:

我的人工智慧學習筆記(一)
Siamese network 孿生神經網路--一個簡單神奇的結構
馬庫斯:DeepMind新出的機器心智網路不錯,但有誤導性
自動調參、ROC——2017.03.13
李宏毅機器學習筆記(一)前言

TAG:機器學習 |