1. 程式人生 > >【城北徐公之機器學習】感知機模型

【城北徐公之機器學習】感知機模型

com eno 學習 nwr mys rtl wms fc7 rcu

一、什麽是感知機?

感知機最早由計算科學家Rosenblatt在1958年提出,他是一種單層(註意,輸入層並不計算在內)神經網絡。如圖為一個二元輸入的感知機模型。技術分享圖片

其中x1,x2為輸入,b為偏置,激活函數被稱為符號函數(sign function),我們將激活函數的輸出記為技術分享圖片,其函數表達式及圖像如下所示。

技術分享圖片

技術分享圖片

二、感知機可以用來幹什麽?

感知機可以用來處理線性可分類問題,線性可不可分簡單來說,就是可不可以用一條直線把圖上兩類點劃分開。如第二張圖所示,無論怎麽畫直線都無法將兩類點分區開。

技術分享圖片

線性可分技術分享圖片

線性不可分

對於線性不可分問題一般用多層神經網絡,SVM來處理。

三、感知機如何實現線性分類?

我們舉一個最最最簡單的分類問題,邏輯運算(這裏我們用“與”運算)並且結合matlab代碼來說明感知機如何實現線性分類。

X1

X2

y

0

0

0

0

1

0

1

0

0

1

1

1

也就是說,我們要在平面上找到這樣一條直線,把點(1,1)與其它點劃分開,而這條直線的方程為技術分享圖片(decision boundary),如果把符號激活函數向右平移1各單位,那麽這條直線方程則為技術分享圖片

技術分享圖片

轉化為最優化問題,那如何找這麽一個函數來描述優化程度?因為激活函數不平滑,無法用誤差的形式來描述。

這裏我們提出一種點到直線距離的描述方法J=技術分享圖片,對誤分類點而言,J>0;

我們對數據集中的訓練點逐一進行判別,訓練權重,直至無誤分類點。

權重訓練方法采用的是梯度下降法。

matlab代碼:

close all;
clear;
w=[1 0.5];b=0;%隨機設置初始權值與閾值
%p,t為給定的訓練樣本,p為輸入,t為對應的輸出

%And計算網絡叠代訓練五次
p=[0 0;0 1;1 0;1 1];

t=[-1;-1;-1;1];

p1=[p;p;p;p;p];

t1=[t;t;t;t;t];

%訓練過程傳遞函數為階躍函數

for i=1:size(p1,1)
n=0.5;%學習率
a=unitstep(p1(i,1:2)*w‘+b);
if t1(i)*(p1(i,1:2)*w‘+b)<0
w=w+n*p1(i,1:2)*t1(i);
b=b+n*t1(i);

figure(1)
plot(i,w(1),‘*‘);
hold on;


figure(2)
plot(i,w(2),‘^‘);
hold on;

figure(3)
x1=0:0.1:1;
x2=(-w(1)/w(2))*x1-b/w(2);
plot(x1,x2)
plot([0 0 1 1],[0 1 0 1],‘^‘);
axis([0 1 0 1])
hold on;


end
end

%網絡輸出

a=unitstep(p(1:4,1:2)*w‘+b)

【城北徐公之機器學習】感知機模型