1、什么是感知机?网络
感知机最先由计算科学家Rosenblatt在1958年提出,他是一种单层(注意,输入层并不计算在内)神经网络。如图为一个二元输入的感知机模型。函数
其中x1,x2为输入,b为偏置,激活函数被称为符号函数(sign function),咱们将激活函数的输出记为,其函数表达式及图像以下所示。学习
2、感知机能够用来干什么?优化
感知机能够用来处理线性可分类问题,线性可不可分简单来讲,就是可不能够用一条直线把图上两类点划分开。如第二张图所示,不管怎么画直线都没法将两类点分区开。spa
线性可分blog
线性不可分ci
对于线性不可分问题通常用多层神经网络,SVM来处理。it
3、感知机如何实现线性分类?io
咱们举一个最最最简单的分类问题,逻辑运算(这里咱们用“与”运算)而且结合matlab代码来讲明感知机如何实现线性分类。table
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)