BP神经网络的伪代码分析

Posted AI + UTO | Robot

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BP神经网络的伪代码分析相关的知识,希望对你有一定的参考价值。

本文就借助伪代码来简述BP神经网络的形成过程

伪代码

我们先来看一下BP神经网络的伪代码

假设数据集中有m个样本

INPUT:训练集 D = {(xi,yi)}(i:1~m)
       学习率 η

在(01)内初始化神经元的连接权值和阈值;
REPEAT
	FOR  ALL (xi,yi)IN  D
		根据式1计算当前样本的数据yi;
		根据式2计算输出层神经元的梯度项gi;	
		根据式3计算隐层神经元的梯度项eh;
		根据式4更新连接权ωhj,νih与阈值θj,γh;
	END
UNTIL	达到停止条件
OUTPUT = BP神经网络

公式图

这个BP神经网络中有2层循环,一次内循环就是一轮训练,一轮训练就会将所有样本都遍历一遍从而产生连接权值和阈值参数,外循环就是需要模型的性能符合我们预期的要求才会停止。

标准BP神经网络针对的是单个样例进行训练,因此如果将整个数据集带到标准BP网络里面的时候,神经网络里面的参数就会迭代得很快,而且也很有可能会有重复的参数迭代,因此我们需要将标准BP网络的误差进行累加,即进行了整个数据集的一次遍历之后的所有累积误差之和就是我们的优化目标,这个网络也是在标准BP网络的基础上进行的改良,叫做累积BP算法,但是这样就会引出新的问题,那就是这个累积误差该怎么找到最小值呢?

局部最优和全局最优

其实这其中的说法就有很多了,我们先来介绍一下局部最优全局最优的概念。

首先确定我们的目标,那就是需要找到上述函数图像中的全局最小点,也就是函数最小值,也是全局最优值
在这里插入图片描述
在这里插入图片描述

从上图中的函数中我们可以看出,假如说我们找的范围不够大,只在特定区间内进行了查找,那么我们可能就会把A点当作我们的全局最小值,但其实A点并不是全局最小点,A点是局部最小点,B点才是全局最小点。

同样的,在模型训练过程中,我们会用梯度下降法,牛顿法等算法查找全局最优点,但是我们并不知道当前算出来的值是不是最小值,它有可能是,也有可能不是,其实这就是找最优解方法的弊端了,按照特定的方法去查找最优解的话肯定会因为规则等原因找到算法认为的最优解,但是这个最优解有可能只是局部的,那该怎么办呢?
于是就有了一些启发式的算法,启发式听起来很高级,其实可以理解成一些推理起来有用,但是并无严谨数学证明的方法,接下来我来介绍一些:

1).模拟退火法。在查找最小值的过程中,算法以特定的概率p接受比当前点更差的点,从而跳出局部最优解;
2).以多组不同的参数初始化神经网络,并且取其中误差最小的解作为最终参数;
3).随机梯度下降。在使用标准梯度下降时,会将随机数据加到计算出来的梯度数值中,这样即使在局部最优点梯度也不为0,从而使得算法有机会跳出局部最优点。

通过上面的办法可以在一定程度上帮助我们找到全局最优点,那么伪代码中描述的“停止条件”就是累积BP网络的累积误差的全局最优点,达到了全局最优点的参数就是我们想要的参数,对应的模型就是我们训练得出的模型。

这里还有一个问题要进行说明一下,那就是为什么不直接记录累积BP网络的累积误差最小值直接进行输出呢?因为模型还有一个欠拟合和过拟合的问题,那么就有可能会有这种情况,那就是累积误差很小,但是模型过拟合或者欠拟合了,这显然是不行的,因此我们就需要记录下训练过程中的参数和输出,并且在外循环进行全局最优点的查找。


疯狂明示,这次一定

在这里插入图片描述

以上是关于BP神经网络的伪代码分析的主要内容,如果未能解决你的问题,请参考以下文章

读懂反向传播算法(bp算法)

在看了案例二中的BP神经网络训练及预测代码后,我开始不明白BP神经网络究竟能做啥了。。。 程序最后得到

毕业设计/Matlab系列基于PCA和BP神经网络的人脸识别系统(附matlab代码)

BP神经网络matlab源程序代码讲解

matlab BP神经网络预测代码

BP神经网络matlab代码