感知机学习

感知机学习

一 感知器概述

感知器一般指单层感知器,它是指只含有输入层和输出层的神经网络,模型如下:

输入层为p1、p2、… 、pn个神经元输入和对应的权值w1、w2、… 、wn。输入层用向量表示为:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GnQ118Yv-1570945104686)(https://private.codecogs.com/gif.latex?%5Csmall%20P%3D%5Cbegin%7Bbmatrix%7D%20p1%2C%20p2%2C%20…%20%2Cpn%20%5Cend%7Bbmatrix%7DT)],[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iWM3VlOJ-1570945104687)(https://private.codecogs.com/gif.latex?%5Csmall%20W%3D%5Cbegin%7Bbmatrix%7D%20w1%2Cw2%2C…%2Cwn%20%5Cend%7Bbmatrix%7DT)],。输出层包含一个求和操作和函数f映射,其中y为感知器的输出(多输入,单输出),a为输入加权求和的结果,b为偏置,f为一种对a的传递函数,对于感知器来说,f一般为符号函数,即输出结果只有-1和1(每次输入,对应一个单值的输出;多次输入,得到输出向量),输出层可以表示为:

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tHplHQgs-1570945104688)(https://private.codecogs.com/gif.latex?%5Csmall%20a%3D%5Csum_%7Bi%3D1%7D%5E%7Bi%3Dn%7Dpi%5Ccdot%20wi%20+b)]

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fkD9wbhl-1570945104690)(https://private.codecogs.com/gif.latex?%5Csmall%20y%3Df%28a%29)]

了解了神经网络的基本结构和计算流程之后,再对其工作原理进行分析。

首先是感知器的学习规则(梯度下降法):对于输入为P,输出为y,目标输出为T的感知器,误差为e=T-y。则感知器的权值和偏置的修正公式为:

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WPOgJDFn-1570945104691)(https://private.codecogs.com/gif.latex?%5Csmall%20%5CDelta%20w%28i%2Cj%29%3D%5BT%28i%29-y%28i%29%5D%5Ccdot%20P%28j%29%3De%28i%29%5Ccdot%20P%28j%29)]

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fSxndXLM-1570945104691)(https://private.codecogs.com/gif.latex?%5Csmall%20%5CDelta%20b%3D%5BT%28i%29-y%28i%29%5D%5Ccdot%201%3De%28i%29)]

公式说明:P为多次输入的向量,y为多次输入对应的输出向量,T为期望结果(目标向量),e为网络误差。i表示输出向量的维数(i=1,2,…,D),j为神经元的个数(j=1,2,…,n)。

更新之后的权值:

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D1671J8W-1570945104692)(https://private.codecogs.com/gif.latex?%5Csmall%20w%28i%2Cj%29%3Dw%28i%2Cj%29+%5CDelta%20w%28i%2Cj%29)]

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s3CKGi2C-1570945104694)(https://private.codecogs.com/gif.latex?%5Csmall%20b%28i%29%3Db%28i%29+%5CDelta%20b%28i%29)]

二,利用感知器的学习规则进行训练:
  step1:  初始化网络,计算实际输出和目标输出之间的误差,利用学习规则修正权值和偏置。

  step2:计算在新的权值和偏置下的误差,继续修正权值和偏置。

  step3:当达到一定的误差要求或者满足最大迭代次数时,训练结束,得到感知器模型。

下面介绍matlab神经网络工具箱中的关于感知器的相关函数:

 newp:  创建一个感知器

 sim: 仿真函数

 train:训练函数

 plotpc: 在感知器向量中绘制分界线

 plotpv:  绘制感知器的输入向量和目标向量

 mae:计算平均绝对误差
三,简单举例说明各种函数的用法:

例1:利用单层感知器实现与门电路的逻辑功能

P=[0 0 1 1;0 1 0 1];
T=[0 0 0 1];
figure(1)
plotpv(P,T)
net=newp(minmax§,1);
y=sim(net,P);
net.trainParam.epochs=50;
net=train(net,P,T);
Y=sim(net,P);
perf=mae(Y-T);
plotpc(net.IW{1,1},net.b{1})
输出Y=[0 0 0 1]

输入向量P为4个输入向量:[0 0],[0 1],[1 0],[1 1],目标输出:[0]、[0]、[0]、[1]

newp函数:net=newp(pr,ps,tf,lf),pr为输入向量每行的最大最小值组成的多行两列的矩阵,ps为感知器的层数,tf为传递函数,默认是hardlim还有hardlims,lf为学习函数,默认是learnp还有learnpn。

minmax函数:求矩阵每行的最大最小值,返回一个多行两列的矩阵。

sim函数:对模型进行仿真。

train函数:根据网络、输入、目标输出,训练网络得到输出。

感知器主要是实现简单的线性可分的分类问题,在实际应用中应当根据面对的问题,转化为感知器能够处理的情况。

另外,多层感知器在机器学习、人工智能方面有着非常重要的作用,感知器的研究在人工智能领域具有很多的研究意义.

四 , 具体构建过程的代码结果
4.1感知器神经网络的构建
4.1.1生成网络
net=newp([0 2],1);%单输入,输入值为[0,2]之间的数
inputweights=net.inputweights{1,1};%第一层的权重为1
biases=net.biases{1};%阈值为1
4.1.2 网络仿真
net=newp([-2 2;-2 2],1);%两个输入,一个神经元,默认二值激活
net.IW{1,1}=[-1 1];%权重,net.IW{i,j}表示第i层网络第j个神经元的权重向量
net.IW{1,1}
net.b{1}=1;
net.b{1}
p1=[1;1],a1=sim(net,p1)
p2=[1;-1],a2=sim(net,p2)
p3={[1;1] [1 ;-1]},a3=sim(net,p3) %两组数据放一起
p4=[1 1;1 -1],a4=sim(net,p4)%也可以放在矩阵里面
net.IW{1,1}=[3,4];
net.b{1}=[1];
a1=sim(net,p1)
4.1.3 网络初始化
net=init(net);
wts=net.IW{1,1}
bias=net.b{1}
4.1.4改变权值和阈值为随机数
net.inputweights{1,1}.initFcn='rands';
net.biases{1}.initFcn='rands';
net=init(net);
bias=net.b{1}
wts=net.IW{1,1}
a1=sim(net,p1)
4.2感知器神经网络的学习和训练
4.2.1 网络学习
net=newp([-2 2;-2 2],1);
net.b{1}=[0];
w=[1 -0.8]
net.IW{1,1}=w;
p=[1;2];
t=[1];
a=sim(net,p)
e=t-a
help learnp
dw=learnp(w,p,[],[],[],[],e,[],[],[],[],[])
w=w+dw
net.IW{1,1}=w;
a=sim(net,p)

net = newp([0 1; -2 2],1);
P = [0 0 1 1; 0 1 0 1];
T = [0 1 1 1];
Y = sim(net,P)
net.trainParam.epochs = 20;
net = train(net,P,T);
Y = sim(net,P)

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F1AU17Kb-1570945104695)(C:\Users\59287\Desktop\训练1.1.jpg)]

Performance显示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MaQLQrj9-1570945104696)(C:\Users\59287\Desktop\训练1.PNG)]

4.2.2 网络训练
net=init(net);
p1=[2;2];t1=0;p2=[1;-2];t2=1;p3=[-2;2];t3=0;p4=[-1;1];t4=1;
net.trainParam.epochs=1;
net=train(net,p1,t1)
w=net.IW{1,1}
b=net.b{1}
a=sim(net,p1)
net=init(net);
p=[[2;2] [1;-2] [-2;2] [-1;1]];
t=[0 1 0 1];
net.trainParam.epochs=1;
net=train(net,p,t);
a=sim(net,p)
net=init(net);
net.trainParam.epochs=2;
net=train(net,p,t);
a=sim(net,p)
net=init(net);
net.trainParam.epochs=20;
net=train(net,p,t);
a=sim(net,p)

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9VZrsBcP-1570945104696)(C:\Users\59287\Desktop\训练2.2.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fFKTO85Q-1570945104697)(C:\Users\59287\Desktop\训练2…jpg)]

4.3二输入感知器分类可视化问题
P=[-0.5 1 0.5 -0.1;-0.5 1 -0.5 1];
T=[1 1 0 1]
net=newp([-1 1;-1 1],1);
plotpv(P,T);
plotpc(net.IW{1,1},net.b{1});
%hold on;
%plotpv(P,T);
net=adapt(net,P,T);
net.IW{1,1}
net.b{1}
plotpv(P,T);
plotpc(net.IW{1,1},net.b{1})
net.adaptParam.passes=3;
net=adapt(net,P,T);
net.IW{1,1}
net.b{1}
plotpc(net.IW{1},net.b{1})
net.adaptParam.passes=6;
net=adapt(net,P,T)
net.IW{1,1}
net.b{1}
plotpv(P,T);
plotpc(net.IW{1},net.b{1})

plotpc(net.IW{1},net.b{1})

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0yT4w8lI-1570945104698)(C:\Users\59287\Desktop\训练3.3.jpg)]

4.3.2仿真
a=sim(net,p);
plotpv(p,a)

p=[0.7;1.2]
a=sim(net,p);
plotpv(p,a);
hold on;
plotpv(P,T);
plotpc(net.IW{1},net.b{1})
%感知器能够正确分类,从而网络可行

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K9J2yxD0-1570945104700)(C:\Users\59287\Desktop\训练4.jpg)]

4.4标准化学习规则训练奇异样本
P=[-0.5 -0.5 0.3 -0.1 -40;-0.5 0.5 -0.5 1.0 50]
T=[1 1 0 0 1];
net=newp([-40 1;-1 50],1);
plotpv(P,T);%标出所有点
hold on;
linehandle=plotpc(net.IW{1},net.b{1});%画出分类线
E=1;
net.adaptParam.passes=3;%passes决定在训练过程中训练值重复的次数。
while (sse(E))
    [net,Y,E]=adapt(net,P,T);
    linehandle=plotpc(net.IW{1},net.b{1},linehandle);
    drawnow;
end;
axis([-2 2 -2 2]);
net.IW{1}
net.b{1}

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IFWqcliL-1570945104701)(C:\Users\59287\Desktop\训练5.jpg)]

另外一种网络修正学习(非标准化学习规则learnp)
hold off;
net=init(net);
net.adaptParam.passes=3;
net=adapt(net,P,T);
plotpc(net.IW{1},net.b{1});
axis([-2 2 -2 2]);
net.IW{1}
net.b{1}
%无法正确分类
%标准化学习规则网络训练速度要快!

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jFTuy2jD-1570945104702)(C:\Users\59287\Desktop\训练6.jpg)]

4.4.2训练奇异样本

用标准化感知器学习规则(标准化学习数learnpn)进行分类

net=newp([-40 1;-1 50],1,'hardlim','learnpn');
plotpv(P,T);
linehandle=plotpc(net.IW{1},net.b{1});
e=1;
net.adaptParam.passes=3;
net=init(net);
linehandle=plotpc(net.IW{1},net.b{1});
while (sse(e))
[net,Y,e]=adapt(net,P,T);
linehandle=plotpc(net.IW{1},net.b{1},linehandle);
end;
axis([-2 2 -2 2]);
net.IW{1}%权重
net.b{1}%阈值
%正确分类

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qjaBFIs7-1570945104704)(C:\Users\59287\Desktop\训练7.jpg)]

4.4.3非标准化感知器学习规则训练奇异样本的结果
net=newp([-40 1;-1 50],1);
net.trainParam.epochs=30;
net=train(net,P,T);
pause;
linehandle=plotpc(net.IW{1},net.b{1});
hold on;
plotpv(P,T);
linehandle=plotpc(net.IW{1},net.b{1});
axis([-2 2 -2 2]);

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bjqZxBLH-1570945104705)(C:\Users\59287\Desktop\训练8.jpg)]

performance显示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gVwzU1VK-1570945104706)(C:\Users\59287\Desktop\训练8.8.jpg)]

4.5设计多个感知器神经元解决分类问题
p=[1.0 1.2 2.0 -0.8; 2.0 0.9 -0.5 0.7]
t=[1 1 0 1;0 1 1 0]
plotpv(p,t);
hold on;
net=newp([-0.8 1.2; -0.5 2.0],2);
linehandle=plotpc(net.IW{1},net.b{1});
net=newp([-0.8 1.2; -0.5 2.0],2);
linehandle=plotpc(net.IW{1},net.b{1});
e=1;
net=init(net);
while (sse(e))
[net,y,e]=adapt(net,p,t);
linehandle=plotpc(net.IW{1},net.b{1},linehandle);
drawnow;
end;
五,MATLAB中Neural Network Traing工具界面的参数解释

5.1,Neural Network
    这里显示的是输入大小,中间层数量以及每层的神经元个数。

5.2,Algorithms (括号中的灰色字体都是链接,可以查看)
  Training:RProp。这表示学习训练函数。
  Performance:Mean Squared Error。这表示性能用均方误差来表示。
  Calculations: MATLAB。暂时没发现用处。

5.3,Progress
  Epoch:迭代次数。
  Time:运行时间。
  Performance:训练数据集的性能。

5.4,Plots (3个都可以点进去,会有相应的图出来)
  Performance:通过均方差开衡量网络的性能,可以看出,迭代次数越多,性能越好。

Network Traing工具界面的参数解释

5.1,Neural Network
    这里显示的是输入大小,中间层数量以及每层的神经元个数。

5.2,Algorithms (括号中的灰色字体都是链接,可以查看)
  Training:RProp。这表示学习训练函数。
  Performance:Mean Squared Error。这表示性能用均方误差来表示。
  Calculations: MATLAB。暂时没发现用处。

5.3,Progress
  Epoch:迭代次数。
  Time:运行时间。
  Performance:训练数据集的性能。

5.4,Plots (3个都可以点进去,会有相应的图出来)
  Performance:通过均方差开衡量网络的性能,可以看出,迭代次数越多,性能越好。

Training state:记录Gradient和Validation Checks,训练状态的跟踪

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值