BP网络是一类多层的前馈神经网络,它的名字源于在网络训练的过程中,调整网络的权值的算法是误差反向传播的学习算法,即为BP学习算法。 它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。 对于遗传算法的基本要素包含:染色体编码方法、适应度函数、遗传操作和运行参数。
- 染色体编码方法是指个体的编码方法,目前包括二进制法、实数法等。二进制法是指把个体编码成为一个二进制串,实数法是指把个体编码成为一个实数。
- 适应度函数是指根据进化目标编写的计算个体适应度值的函数,通过适应度函数计算每个个体的适应度值,提供给选择算子进行选择。
- 遗传操作是指选择操作、交叉操作和变异操作。
- 运行参数是遗传算法在初始化时确定的参数,主要包括群体大小M、遗传代数G、交叉概率Pl和变异概率Pm。
案例描述: 以某拖拉机的齿轮箱为工程背景,使用基于遗传算法的BP神经网络进行齿轮箱故障的诊断。统计表明,齿轮箱故障中60%左右都是有齿轮箱故障导致的,所以这里之研究齿轮的故障,这里选取频域中的几个特征量。频域中齿轮故障比较明显的是在啮合频率处的边缘带上。所以在频域特征信号的提取中选取了在2、4、6挡时,在1、2、3轴的边频带族fs±nfz处的幅值Ai,j1、Ai,j2和Ai,j3,其中fs为齿轮的啮合频率,fz为轴的转频,n=1,2,3,,i=2,4,6表示档位j=1,2,3表示轴的序号,由于在2轴和3轴上有两对齿轮啮合,所以1、2分别表示两个啮合频率。这样,网络的输入就是一个15维的向量。因为这些数据具有不同的量纲和量级所以在输入神经网络之前首先进行归一化处理。 齿轮箱状态数据样本: 从表中可以看出齿轮状态分为三种故障模式,因此可以采用如下的形式来表示输出。 无故障(1,0,0)、齿根裂纹(0,1,0)、断齿(0,0,1) 为了对训练好的网络进行测试,再增加三组测试数据 测试样本数据 算法流程: 因为遗传算法优化参数是BP神经网络的初始权值和阙值,只要网络结构已知,权值和阙值的个数就已知了。 神经元阙值介绍:阙值为一个范围,当外界的某个值超过阙值,就会引起某一变化,不超过阙值,则不会引起变化,一般输入层是没有阙值的因为它只负责处理数据,阙值一般在隐含层和输出层等处理数据的层数有。 神经网络算法实现:
- 网络创建
BP网络结构的确定有以下两条比较重要的指导原则。
- 对于一般的模式识别问题,三层网络可以很好地解决问题。
- 在三层网络中,隐含层神经网络个数n2和输入层神经元个数n1之间有近似关系:
n2 = 2 * n1 +1 本案例中,由于样本有15个输入参数,3个输出参数,所以这里n2取值为31,设置的BP神经网络 结构为15-31-3,即输入层有15个节点,隐含层有31个节点,输出层有3个节点,因此总有15*31+31*3=558个权值(边),31+3=34个阙值,所以遗传算法优化参数的个数为558+34=592.使用训练数据进行网络训练,使用测试数据对训练后的网络进行测试。把测试样本的测试误差的范数作为衡量网络的一个泛化能力,再通过误差范数计算个体的适应度值,个体的误差范数越小,个体适应度值越大,该个体越优。 神经网络的隐含层神经元的传递函数采用S型正切函数tansig(),输出层神经元的传递函数采用S型对数函数logsig(),这是由于输出模式为0-1,正好满足网络的输出要求。假定输入样本矩阵为P,创建网络可以使用如下代码: Net=newff(minmax(P),[31,3],(‘tansig’,’logsig’),‘trainlm’)
- 网络训练和测试
网络训练是一个不断修正权值和阙值的过程,使得网络的输出误差越来越小。 遗传算法实现 遗传算法优化BP神经网络是用遗传算法来优化BP神经网络的初始权重值和阙值,使优化后的BP神经网络能够更好地进行样本预测。
- 种群初始化
个体编码使用二进制编码,每个个体均为一个二进制串,由输入层与隐含层连接权值、隐含层阙值与输出层连接权值、输出层阙值四部分组成,每个阙值和权值都使用二进制编码,将所有权值和阙值的编码连接起来即为一个个体的编码。 465+31+93+3=592,假设权值和阙值的编码均为10位二进制数,那么个体的总编码长度为5920位。前4650位为输入层与隐含层连接权值编码;45614960位为隐含层阙值编码;49615890位为隐含层与输出层连接权值编码;5890~5920位为输出层阙值编码。
- 适应度函数
适应度函数采用排序的适应度分配函数:FitnV = ranking(obj),其中obj为目标函数的目标值。
- 选择算子
采用随机遍历抽样(sus 轮盘赌算法)选择
- 交叉算子
采用最简单的单点交叉算子
- 变异算子
以一定的概率产生变异基因树,用随机方法选择发生变异的基因,如果所选的基因的编码为1,则变为0,反之。 遗传算法相关参数设定: 训练网络:
1 | function rep = BPfun(x,P,T,hiddennum,P\_test,T\_test) |