B P BP BP神经网络的概念
B P BP BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。具体来说,BP神经网络的过程主要分为两个阶段,第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,然后依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。
B P BP BP神经网络的流程
1、网络初始化
假设输入层的节点个数为
n
n
n,隐含层的节点个数为
l
l
l,输出层的节点个数为
m
m
m。输入层到隐含层的权重
w
i
j
w_{ij}
wij ,隐含层到输出层的权重为
w
j
k
w_{jk}
wjk,输入层到隐含层的偏置为
a
j
a_j
aj,隐含层到输出层的偏置为
b
k
b_k
bk。学习速率为
η
\eta
η,激活函数为
g
(
x
)
g(x)
g(x),取
S
i
g
m
o
i
d
Sigmoid
Sigmoid函数,
g
(
x
)
=
1
1
+
e
−
x
g(x) = \frac{1}{1 +e^{-x}}
g(x)=1+e−x1。
2、隐含层的输出
H j = g ( ∑ i = 1 n w i j x i + a j ) H_j = g(\sum _{i=1} ^{n} w_{ij}x_{i}+a_{j}) Hj=g(i=1∑nwijxi+aj)
3、输出层的输出
O k = ∑ j = 1 l H j w j k + b k O_k = \sum _{j=1}^{l} H_{j}w_{jk}+b_{k} Ok=j=1∑lHjwjk+bk
4、误差
E = 1 2 ∑ k = 1 m ( Y k − O k ) 2 E = \frac{1}{2} \sum _{k =1} ^{m} (Y_k -O_k) ^{2} E=21k=1∑m(Yk−Ok)2
其中
Y
k
Y_k
Yk为期望输出,记
Y
k
−
O
k
=
e
k
Y_k - O_k = e_k
Yk−Ok=ek,则
E
=
1
2
∑
k
=
1
m
e
k
2
E=\frac{1}{2} \sum_{k=1} ^{m} e_k ^{2}
E=21k=1∑mek2
5、权值更新
w i j = w i j + η H j ( 1 − H j ) x i ∑ k = 1 m w j k e k w j k = w j k + η H j e k w_{ij} = w_{ij} + \eta H_j (1-H_j)x_i \sum _{k=1} ^{m} w_{jk} e_k \\ w_{jk} = w_{jk} + \eta H_j e_k wij=wij+ηHj(1−Hj)xik=1∑mwjkekwjk=wjk+ηHjek
6、偏置更新
a j = a j + η H j ( 1 − H j ) ∑ k = 1 m w j k e k b k = b k + η e k a_j = a_j + \eta H_j (1-H_j) \sum _{k=1} ^{m} w_{jk} e_k \\ b_k = b_k + \eta e_k aj=aj+ηHj(1−Hj)k=1∑mwjkekbk=bk+ηek
7、算法迭代结束条件
有很多的方法可以判断算法是否已经收敛,常见的有指定迭代的代数,判断误差是否小于指定的值等等。
实验仿真
实验目的
基于 B P BP BP神经网络对函数 y = sin ( x ) y = \sin (x) y=sin(x)进行函数拟合。
实验方法
基于上述的 B P BP BP神经网络算法编写 M a t l a b Matlab Matlab代码进行函数拟合,然后与调用 M a t l a b Matlab Matlab神经网络工具箱的拟合结果进行对比分析。
实验过程
- 首先调用 m a p m i n m a x mapminmax mapminmax函数对样本数据进行归一化处理以加速算法收敛;
- 初始化输入层、隐含层、输出层的节点个数,本实验为对 y = sin ( x ) y = \sin(x) y=sin(x)进行函数拟合,所以设置为输单入单输出,即输入层和输出层都只设置1个节点,隐含层的层数设置为1层,节点个数可以根据拟合效果进行更改;
- 调用 r a n d s rands rands函数对权重和偏置进行初始化;
- 学习率应该设置在0~1之间,视拟合效果对学习率进行调整;
- 权重和偏置的更新根据上述算法进行编写;
- 算法迭代的结束条件设置一个最大迭代次数,在迭代次数之内若满足误差精度则迭代停止;
- 用训练数据训练网络;
- 用测试数据测试网络;
- 将测试结果与 M a t l a b Matlab Matlab神经网络工具箱得到的测试结果进行对比分析。
结果分析
对比自己编写的 M a t l a b Matlab Matlab源码得到的仿真结果与 M a t l a b Matlab Matlab神经网络工具箱得到的仿真结果可以发现,神经网络工具箱使用的算法收敛速度更快,拟合效果更好。当神经网络工具箱设置误差精度为 1 e − 3 1e-3 1e−3,最大迭代次数为1000次时就能拟合出很好的结果,相比之下,自己编写的程序最大迭代次数为10000次,误差精度为 1 e − 7 1e-7 1e−7时才能基本得到比较理想拟合结果。可见代码还有很多值得优化之处。
另外,值得注意的是,不管是神经网络工具箱还是自己编写的代码,尽管参数设置得一样,但是每次训练出的结果都可能不一样,有时可能结果很好,有时结果可能很差,但是,当参数设置得合适的时候,得出较好结果的概率更大,所以,需要不断的调整参数才能找到结果最好的模型。其中学习率 η \eta η是一个很重要的参数,需要考虑样本的大小并结合经验进行调整。除此之外,最大迭代次数和误差精度以及隐含层的层数和节点个数也并不是越大越好,有时可能会出现一些意想不到的结果,比如过拟合现象。