一、感知机
1、概念
感知机是二分类的线性模型,我们假设数据是线性可分的,则感知机可以训练这些数据以达到以+1或-1的形式完全分开;反之,如果不是线性的,可达到的效果远远不及线性数据的效果,曾经感知机因为不能处理异或问题,而被人批判,导致神经网络的研究停滞了几十年。
2.1、形式
感知机就是为了确定一条直线WX+b,我们这里引入了sign函数进行计算,构建模型。
2.2、学习过程
感知器的训练过程就是确定W,b,从而确定一个平面分离正类和负类。这时我们采取的策略是:引入损失函数
我们求解w,b的过程可以转换成求该损失函数的最小值。
求解过程中,我们可以采用批量梯度的算法来求解
2.3、算法
3、主要代码
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)
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)
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})
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})
4、运行结果
二、BP神经网络
1、概念
BP神经网络又称为后传播学习的前馈型神经网络(Back Propagation Feed-forward Neural Network,BPFNN/BPNN),它是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。其拥有一个输入层,一个隐含层,一个输出层。推导中采用这种简单的三层的神经网络,其主要分为两个阶段,第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层。
2、网络结构:前馈过程
设网络输入为x,则隐含层第j个节点的输入为:
网络输出层第k个结点的输入为: