神经网络专题 (一) 感知器
人工神经网络,简称神经网络,它是一种算法,来源是模拟人的生物神经元工作机制。其实不需要去详细了解生物神经网络的细节原理,大概知道些关键名词即可,对以后神经网络的理解没什么影响。神经网络算法的主要功能是预测、分类、识别。神经网络有:感知器、线性神经网络、BP神经网络、RBF神经网络、Hopfield神经网络、RNN卷积神经网络等。感知器是最简单的神经网络,线性神经网络在线性处理上很有用,BP神经网络是应用最广泛的网络,Hopfield神经网络是反馈型神经网络,RNN卷积神经网络在人工智能研究领域新兴起来的网络。
感知器一般指单层感知器,它是指只含有输入层和输出层的神经网络,模型如下:
输入层为p1、p2、... 、pn个神经元输入和对应的权值w1、w2、... 、wn。输入层用向量表示为:,。输出层包含一个求和操作和函数f映射,其中y为感知器的输出(多输入,单输出),a为输入加权求和的结果,b为偏置,f为一种对a的传递函数,对于感知器来说,f一般为符号函数,即输出结果只有-1和1(每次输入,对应一个单值的输出;多次输入,得到输出向量),输出层可以表示为:
了解了神经网络的基本结构和计算流程之后,再对其工作原理进行分析。
首先是感知器的学习规则(梯度下降法):对于输入为P,输出为y,目标输出为T的感知器,误差为e=T-y。则感知器的权值和偏置的修正公式为:
公式说明:P为多次输入的向量,y为多次输入对应的输出向量,T为期望结果(目标向量),e为网络误差。i表示输出向量的维数(i=1,2,...,D),j为神经元的个数(j=1,2,...,n)。
更新之后的权值:
接下来就是利用感知器的学习规则进行训练:
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(P),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函数:根据网络、输入、目标输出,训练网络得到输出。
感知器主要是实现简单的线性可分的分类问题,在实际应用中应当根据面对的问题,转化为感知器能够处理的情况。
另外,多层感知器在机器学习、人工智能方面有着非常重要的作用,感知器的研究在人工智能领域具有很多的研究意义。