APP下载

浅析BP神经网络基本模型的C语言实现﹡

2013-09-17赵朝凤令晓明

通信技术 2013年1期
关键词:神经元权重公式

赵朝凤, 令晓明

(兰州交通大学 光电技术与智能控制教育部重点实验室,甘肃 兰州 730070)

1 BP神经网络

1.1 BP神经网络的基本模型

人大脑信息的传递、对外界刺激产生反应都由神经元控制的,人脑就是由上百亿个的这样神经元构成。每个神经元平均与几千个神经元相连接,构成了人脑的神经网络,如图1所示。一个神经元并非每次接到其他神经元传递过来的刺激都产生反应。它首先会与其相邻的神经元传来的刺激进行积累,到一定的时候产生自己的刺激将其传递给一些相邻的神经元。这样工作的百亿个神经元构成了人脑对外界进行的反应。而人脑对外界刺激的学习的机制就是通过调节这些神经元之间联系以及其强度。当然,实际上以上说的是对人脑真正神经工作的一种简化的生物模型,利用这种简化的生物模型可以将它推广至机器学习中来,并把它描述成人工神经网络[1]。

图1 神经网络中神经元示意

神经元积累的刺激是由其它神经元传递过来的刺激量和对应的权重之和,用 Xi表示这种积累,Yi表示某个神经元传递过来的刺激量,Wi表示链接某个神经元刺激的权重,得到公式:

Xj=(Y1×W1)+(Y2×W2)+…+(Yi+Wi)+…+(Yn+Wn)。

当Xj完成积累后,完成积累的神经元本身对周围的一些神经元传播刺激,将其表示为yj得到如下所示:

神经元根据积累后Xj的结果进行处理,对外传递刺激 yj。用 f函数映射来表示这种处理,将它称之为激活函数。

1.2 BP神经网络的构成

BP神经网络组成网络后的情形,用图形来说明是最直观的方法,如图2所示。

图2 BP神经网络示意

对第一区域来说,它们相当于外界的刺激,是刺激的来源并且将刺激传递给神经元,因此把第一区域命名为输入层。第二区域,表示神经元相互之间传递刺激相当于人脑里面,因此把第二区域命名为隐藏层。第三区域,表示神经元经过多层次相互传递后对外界的反应,因此把第三区域命名为输出层。

输入层将刺激传递给隐藏层,隐藏层通过神经元之间联系的强度(权重)和传递规则(激活函数)将刺激传到输出层,输出层整理隐藏层处理后的刺激产生最终结果。若有正确的结果,那么将正确的结果和产生的结果进行比较,得到误差,再逆推对神经网络中的链接权重进行反馈修正,从而来完成学习的过程。这就是BP神经网络的反馈机制。

2 BP神经网络的数学推导

从神经网络的生物模型中,可以得到关于 BP神经网络的公式(1)[1-2]:

对于神经元本身的输出的激活函数,一般来说选取Sigmoid函数,那么可以得到公式(2):

通过以上两个公式,可以分析出来 BP神经网络中输出结果的计算过程。每个神经元收到刺激yi,然后加权积累(权重Wji)完成后产生xj,再通过激活函数产生刺激 yj,向下一层与它相连的神经元传递,依次类推得到最终的输出结果。

要修正 Wji就需要得到误差量。首先用 dj来表示真实的正确结果,并且设误差为E,那么(yj– dj)对应的就是E对于yj的微分增量,即yj减去(yj– dj)后就能得到正确值,得到公式(3):

然后,需要知道的是对于权重Wji的误差量,也就是的值。而由公式(1)中知道Wji与xj相关,那么可以推导出公式(4):的值了。它的推导如下:

需要求得Wji的误差量,转换为需要求

所以最终得到的误差量的值为:

这样完成了运用神经网络的输出值yj和正确值dj对最后一层隐藏层Wji的修正。

这样所有的误差量的都可以同理推导完成。

最后一步修正jiW ,设置一个l(0 到 1 之间)学习率。

3 代码的实现

3.1 部分数据的定义

首先,介绍些下文中描述的程序里面的一些重要数据的定义。

#define Data 820

#define In 2

#define Out 1

#define Neuron 45

#define TrainC 5500

Data用来表示已经知道的数据样本的数量,也就是训练样本的数量。In表示对于每个样本有多少个输入变量;Out表示对于每个样本有多少个输出变量。Neuron表示神经元的数量,TrainC来表示训练的次数。

接下来是对神经网络描述的数据定义,图3里面的数据类型都是double型。

图3 神经网络数据定义图

d_in[Data][In]存储Data个样本,每个样本的In个输入。d_out[Data][Out]存储Data个样本,每个样本的Out个输出。用邻接表法来表示图3中的网络,w[Neuron][In]表示某个输入对某个神经元的权重,v[Out][Neuron]来表示某个神经元对某个输出的权重;与之对应的保存它们两个修正量的数组dw[Neuron][In]和 dv[Out][Neuron]。数组 o[Neuron]记录的是神经元通过激活函数对外的输出,Output[Data][Out] 存储BP神经网络的输出。

3.2 执行过程

程序的流程用伪代码来表示,如下:

主函数

int main{

读取样本数ReadData();

//初始化BP神经网络

InitBPNework(){

包括数据的归一,神经元的初始化w[Neuron][In]、v[Out][Neuron]等;

}

//BP神经网络训练

TrainNetwork(){

do{

for(i小于样本容量Data)

{

计算按照第 i 个样本输入,产生的BP神经网络的输出ComputO(i);

累记误差精度;

反馈调节 BP神经网络中的神经元,完成第i个样本的学习BackUpdate(i);

}

}while(达到训练次数或者符合误差精度);

}

存储训练好的神经元信息WriteNeuron();

用一些数据来测试,训练出来的BP神经网络的结果;

return 0;

}

以上是处理的流程,其中函数 ComputO(i)(O是output缩写)是计算BP神经网络预测第i个样本的输出,也就是第一个过程。BackUpdate(i)是根据预测的第i个样本输出对神经网络的权重进行更新。

3.3 主要函数的阐述

3.3.1 初始化BP神经网络

初始化主要是涉及2个方面的功能:

1)是对读取的训练样本数据进行归一化处理,归一化处理就是指的就是将数据转换成0~1之间。由于理论模型没考虑到 BP神经网络收敛的速率问题,但是实际实践过程中,归一化处理是不可或缺的。一般来说神经元的输出对于0~1之间的数据非常敏感,归一化能够显著提高训练效率。可以用以下公式来对其进行归一化,其中加个常数A是为了防止出现 0的情况(0不能为分母)。y=(x–nMin Value+A)/(nMaxValue–nMinValue+A)。

2)是对神经元的权重进行初始化了,数据归一到了(0~1)之间,那么权重初始化为(-1~1)之间的数据,另外对修正量赋值为0。

3.3.2 BP神经网络训练

BP神经网络训练是整个BP神经网络形成的引擎,驱动着样本训练过程的执行。由 BP神经网络的基本模型知道,反馈学习机制包括2个部分:①是 BP神经网络产生预测的结果;②是通过预测的结果和样本的准确结果进行比对,然后对神经元进行误差量的修正。因此,用两个函数来表示这样的两个过程,训练过程中还对平均误差e进行监控,如果达到了设定的精度即可完成训练。由于不一定能够到达预期设定的精度要求,添加一个训练次数的参数,如果次数达到也退出训练。

4 结语

利用神经网络的生物模型来讲述 BP神经网络的数学推导过程。在用伪代码模拟神经网络的基本模型中,主要分析了 BP神经网络的初始化函数和训练函数。其中初始化函数中采用的归一化处理原因是实践中需要考虑的训练效率,另一方面又初始化了神经元的权重;而 BP神经网络的训练则是神经网络形成的引擎,在这里用了两个函数来表示反馈学习机制的两部分。由此模拟了 BP神经网络的基本模型。

[1] ANDERSON J A. An Introduction to Neural Networks[M].[s.l.]:Massachusetts Institute of Technology,1995:7-60.

[2] RUMELHART D E,HINTON G E,WILLIAMS R J.Learning Representations by Back-propagating Errors[J].Nature,323(08):533-536.

[3] 高隽.人工神经网络原理及仿真实例[M].北京:机械工业出版社,2003:49-70.

[4] 郭艳兵,齐占庆,王雪光.一种改进的 BP网络学习算法[J].自动化技术与应用,2002(02):13-14.

[5] 韩力群.人工神经网络理论、设计及应用[M].北京:化学工业出版社,2002:1-29.

[6] 唐建锋,张登玉,罗湘南.一种基于多尺度小波变换的自适应滤波新算法[J].通信技术,2008,42(12):405-407.

[7] 史志举,康桂华,胡波,等.解码协作分集技术研究[J].通信技术,2010,43(06):38-40.

[8] 董杨鑫,郑建宏.编码协作通信技术的研究[J].通信技术,2007,40(11):65-67.

[9] 王阳艳,蔡皖东.一种基于串行代理的重路由匿名通信系统[J].信息安全与通信保密,2008(06):123-125.

猜你喜欢

神经元权重公式
组合数与组合数公式
排列数与排列数公式
等差数列前2n-1及2n项和公式与应用
权重常思“浮名轻”
为党督政勤履职 代民行权重担当
例说:二倍角公式的巧用
跃动的神经元——波兰Brain Embassy联合办公
基于局部权重k-近质心近邻算法
ERK1/2介导姜黄素抑制STS诱导神经元毒性损伤的作用
毫米波导引头预定回路改进单神经元控制