【城北徐公之機器學習】感知機模型
一、什麽是感知機?
感知機最早由計算科學家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)
【城北徐公之機器學習】感知機模型