浅谈神经网络
一、神经网络介绍
神经网络是由具有适应性的简单单元组成的广泛并行互联的网络,它的组织能够模拟生物神经系统对真实世界物体作出的交互反应。
神经网络中最基本的成分是神经元(neuron)模型,即简单神经元。
(1)神经元:模拟人体结构,将数据输入神经元,中间通过激活函数f(x),即一组算法,输出结果。它是组成神经网络的最小单位。
神经元示意图如下图所示:
图1 神经元示意图
为输入向量的各个分量;为神经元各个突触的权值;系数1与为偏置;f为传递函数,通常为非线性函数;t为神经元输出。
可见,一个神经元的功能是求得输入向量与权向量的内积后,经一个非线性传递函数得到一个标量结果。
(2)神经网络
由无数个(人工)神经元组成的神经元网络即为(人工)神经网络。
神经网络需要按照一定的规则进行学习,它的参数权值(以上图为例说明),即为学习成果。通过学习减少神经网络下次犯同样错误的可能性,达到这一目标后,网络才能开展工作。网络学习时,首先给网络的各连接权值赋予(0,1)区间内的随机值,网络将输入模式加权求和、与门限比较,再进行非线性运算。
神经元收到的总输入值与神经元的阈值比较,然后通过激活函数(activation function)处理以产生神经元的输出。一般激活函数为Sigmoid函数(逻辑回归中使用的),该函数连续、可导,具有很好的数学特性。
当激活函数输出值为正时,输出为“1”,为负则输出“0”。
以下将以下图为例介绍神经网络的运算过程。
图2 多层神经网络意图
上图是由一个输入层、两个隐藏层和一个输出层构成的神经网络。这种也叫多层前馈神经网络(multi-layer feedforward neural networks)。输入层神经元接收外界输入,不进行函数处理,隐层与输出层对信号进行加工,即包含功能神经元,最终输出。只要包含隐层,即可称为多层网络。
隐藏层可以找到数据内在特点,后续层可以在这些特点(而不是嘈杂庞大的原始数据)基础上进行操作,所以隐藏层越多模型效果越好。事实上,直到最近,机器学习技术都没有普遍直接用于原始数据输入,比如图像和音频。相反,机器学习被用于经过特征提取后的数据——也就是说,为了让学习更简单,机器学习被用在预处理的数据上,一些更加有用的特征,比如角度,形状早已被从中提取出来。
(3)神经网络学习方法
神经网络的学习过程,就是根据训练数据来调整神经元之间的连接权,(connection weight)以及每个功能神经元的阈值,所以学习的就是阈值和连接权。譬如说,如果输出结果为“1”(结果正确),则增大连接权值;如果输出结果为“0”(结果错误),则将连接权值向着综合输入加权值减小的方向调整,减小犯同样错误的可能性。网络经过若干次类似的学习调整后,其输出的判断正确率会有明显的改善,达到了学习的目的。
今后当该网络再次遇到类似模式判断时,就能及时做出准确的判断和识别。一般说来,构成网络的神经元个数越多,则它能记忆和识别的模式也就越多,准确度也会越高。
二、BP神经网络(Back-Propagation Neural Networks)
BP神经网络思想如下图所示:
图3 BP神经网络思想
给定训练集。这是一个拥有d个神经元、l个输出神经元、q个隐层神经元的多层前馈网络结构。其中输出层第j个神经元的阈值用表示,隐层第h个神经元阈值用表示,输入层第i个神经元与隐层第h个神经元间连接权为,隐层与输出层为。
如下图所示,隐层第h个神经元收到的输入为,输出层第j个神经元收到的输入为,其中为第h层神经元输出。
图4 BP网络算法及变量符号
对于训练集,假定神经网络输出为,。在网络上的均方误差。
图4的网络中有(d+l+1)q+l个参数需要确定。BP是一个迭代(iterate)学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计。
BP算法基于梯度下降(gradient decent)策略,以目标的负梯度方向对参数进行调整,而Sigmoid函数的性质是。所以可以根据一系列计算得到,类似有,,。
学习率控制着算法每一轮迭代更新的步长,太大容易振荡找不到最小值,太小收敛速度过慢。BP算法的工作流程:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差来对连接权和阈值进行调整,迭代过程循环进行,直到达到条件停止。
三、神经网络matlab仿真实验
实验问题:
蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af与Apf)进行鉴别,
依据的资料是触角和翅膀的长度,已经测得了9支Af和6支Apf的数据如下:
Af: (1.24,1.27),(1.36,1.74),(1.38,1.64),(1.38,1.82),(1.38,1.90),(1.40,1.70),(1.48,1.82),(1.54,1.82),(1.56,2.08).
Apf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96).
现在的问题是:
(i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。
(ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的3个标本,用所得
到的方法加以识别。
解答:如上的问题是有代表性的,它的特点是要求依据已知资料(9支Af的数据和6支
Apf的数据)制定一种分类方法,类别是已经给定的(Af或Apf)。我们将9支Af及6支Apf的数据集合称之为学习样本。而(1.24,1.80),(1.28,1.84)与(1.40,2.04)的3个标本为测试集。
(1)首先画出散点图
图5 蜢虫分类散点图
其可能具有一定的非线性特征,此处采用BP(后向传播算法)神经网络算法对其进行分类。
(2)将数据导入matlab;形成p矩阵,为训练集输入,设Af标记为,Apf标记为,则标签矩阵为goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]。
(3)设定相关参数:
训练网络采用对数S型函数logsig;
训练目标最小误差为0.000001,即goal=0.000001;
训练次数epoch=5000;
学习速率lr=0.05(为(0,1)之间的一个数);
显示频率:show=20,即每训练20次显示一次。
训练界面
图6 蜢虫分类训练界面
可见为两层神经网络,其中中止时仅迭代了18次,此时已经达到中止条件。
图7 实验结果摘要
最终分类结果:
将测试集代入可以得到矩阵则测试结果分别为Af、Af、Apf(分类结果)。
表1分类结果表
序号123
触角长度1.241.281.40
翅膀长度1.801.842.04
分类结果AfAfAp
四、总结
神经网络的优势在于可以处理非线性问题的分类,只要设定好了学习参数(如阈值函数、学习速率、目标误差、最大迭代次数等)即可开始训练,计算机可以自动搜索到一个网络模型,训练过程自动化、操作方便。但是由于其使用梯度下降法寻优,不可避免会陷入局部最小值,此时可以加入附加动量mc来进行优化。另外,如果网络规模大,计算量增加,训练时间、收敛时间变长,且学习速率固定,不能根据实际训练过程进行更新和改变。网络的学习和记忆也具有不稳定性,如果增加了学习样本,训练好的网络又需要从头开始训练,对于以前的权值和阈值是没有记忆的。但是可以将预测、分类或聚类做的比较好的权值保存。
附代码:
clear
p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.001.28,2.00;1.30,1.96];
p=[p1;p2]';
pr=minmax(p);%确定每行的最大最小值
goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)];
plot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o')
net=newff(pr,[3,2],{'logsig','logsig'});%设置为两层神经网络且均为logsig型函数
net.trainParam.show = 10;%显示频率
net.trainParam.lr = 0.01;%学习速率
net.trainParam.goal =0.000001;%目标误差
net.trainParam.epochs = 5000;%迭代次数
net = train(net,p,goal);%开始训练
x=[1.24 1.80;1.28 1.84;1.40 2.04]';%测试集数据
y0=sim(net,p)