原文地址:神经网络-BP神经网络
感知器作为初代神经网络,具有简单、计算量小等优点,但只能解决线性问题。BP神经网络在感知器的基础上,增加了隐藏层,通过任意复杂的模式分类能力和优良的多维函数映射能力,解决了异或等感知器不能解决的问题,并且BP神经网络也是CNN等复杂神经网络等思想根源。
1、基本概念
BP神经网络是一种通过误差反向传播算法进行误差校正的多层前馈神经网络,其最核心的特点就是:信号是前向传播,而误差是反向传播。前向传播过程中,输入信号经由输入层、隐藏层逐层处理,到输出层时,如果结果未到达期望要求,则进入反向传播过程,将误差信号原路返回,修改各层权重。
2、BP神经网络结构
BP神经网络包含输入层、隐藏层和输出层,其中,隐藏层可有多个,其中,输入层和输出层的节点个数是固定的(分别是输入样本的变量个数和输出标签个数),但隐藏层的节点个数不固定。以具有单隐藏层的BP神经网络为例,其网络结构如下图:
3、BP神经网络原理公式
以单隐藏层的BP神经网络为例,各阶段原理公式如下:
前向传播。设输入层有n个节点,隐藏层有q个节点,输出层有m个节点,输入层与隐藏层间的权重为V,隐藏层与输出层的节点为W,输入变量为X,则隐藏层和输出层的输出分别为:
误差函数。设有p个输入样本,则每个输入样本的误差函数为:
根据误差调整权重。函数是沿梯度的方向变化最快,BP神经网络中也是通过梯度下降法更新权重。根据链式法则及上述关系,可以得到权重W和V的变化公式分别为:
4、python代码实现
这里,我们用手写数字图片建立一个仅有1层隐藏层的BP神经网络,并进行训练及预测。每张图片大小为8*8,因此有64个图片像素变量及1个偏置项,共65个输入层节点;训练目标是将手写图片判断为0-9,因此有10个输出层节点;隐藏层节点数这里设置为100。图片示例如下:
另外,这里两个激活函数我们都选用sigmoid函数,且这个函数都导数有一个特点,即f′(x)=f(x)(1−f(x))。
step 1:导入相应模块及定义sigmoid、dsigmoid函数
step 2:建立BP神经网络模型
初始过程中,给定两个权重V和W的初始值。训练过程中,首先给数据增加偏置项,然后每次训练时,随机选择一个样本,计算隐藏层和输出层的输出,并对W,V进行更新,同时每训练10000次计算一下预测准确率。
step 3:结果计算
导入数据时,对输入数据进行归一化处理,不然sigmoid求导结果接近于0,权值的改变也将接近0,无法学习。
输出结果如下,可以看到随着训练次数提升,模型准确率稳定在0.95、0.96。
相关推荐: