写在前面

在这篇文章里面将分析标准BP算法

初始条件

在上一篇博客中已经分析了简单的神经元应用,那就是与、或、非功能的神经网络实现,但是实际应用中的需求往往比这复杂许多,因此两层的神经元满足不了我们的需求,于是我们就需要带有隐层的神经网络,也就是多层的神经网络

在说到神经网络的层数的时候,因为输入层是不对数据做处理的,所以不算一层,因此上图左边的神经网络是单隐层神经网络,右边的神经网络是双隐层神经网络
接下来介绍以下这篇文章里的主角

就是上图中的单隐层神经网络了,当针对训练单个样本的时候x1~ xd表示输入层的d个神经元,b1~ bq表示隐层的q个神经元输出,y1~ yl表示输出层的l个神经元输出θ1~ θj表示输出层神经元的阈值γ1~γq表示隐层神经元的阈值,因此我们可以得到第h个隐层神经元的输入

j个输出神经元的输入

整个模型输出的均方误差

我们用的激励函数就是sigmoid(x)函数

因为这个激励函数有一个很好的性质,如下图所示

训练

那么我们现在空有一个数学公式,那这个神经网络到底是怎么通过自我学习到最终能够实现特定的功能呢?我们可以将整个神经网络的输出经过数学变换之后得到如下所示的等式

那么当我们设定好了学习率之后,将一个样本送入神经网络,输出层会有相应的输出,那么这个输出会重新送入到隐层做为隐层的输入,再由上述公式来更新权重ωhj,vih阈值θj和γh,经过多次的重复,使得神经网络的均方误差最小就可以得到最终的权重和阈值参数输出
但是这个解往往不是最优解,因为我们这些权重和阈值都是针对特定样本的,因此为了保证整个模型的强泛化能力,我们还需要用整个训练集来训练神经网络模型,那么在这时会有哪些变数呢?这些我将在下一篇博客中进行分享