学习神经网络前要先知道感知机的相关知识,所以先对感知机进行一个简单的介绍。感知机是作为神经网络(深度学习) 的起源的算法。 因此, 学习感知机的构造也就 是学习通向神经网络和深度学习的一种重要思想。
1.感知机
感知机算法全称是Perceptron Linear Algorithm,即PLA算法.感知机是一个具有输入输出的算法,给定一个输入,输出一个既定的值。原理:感知机接收多个输入信号,输出一个信号。
例子:
x1,x2是输入信号,y是输出信号,w1、w2是权重,O是“神经元”或者叫节点,输入信号被送往神经元时,会被分别乘以固定的权重,也叫加权求和,神经元会计算传送过来的信号的总和,即weighted sum等于传过来的信号的总和,step function是激活函数,对加权就和的值进行一个激活函数的计算。
2.BP神经网络介绍
BP(BackPropagation) 算法是神经网络深度学习中最重要的算法之一,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络模型之一 。
BP神经网络算法的核心是信号的正向传播和反向传播。
正向传播:即输入层的神经元负责接受外界发来的各种信息,并将信息传递给中间层 神经元,中间隐含层神经元负责将接收到的信息进行处理变换,根据需求处理信息, 实际应用中可将中间隐含层设置为一层或者多层隐含层结构,并通过最后一层的隐含 层将信息传递到输出层,这个过程就是BP神经网络的正向传播过程。
反向传播:当实际输出与理想输出之间的误差超过期望时,就需要进入误差的反向 传播过程。它首先从输出层开始,误差按照梯度下降的方法对各层权值进行修正,并 依次向隐含层、输入层传播。通过不断的信息正向传播和误差反向传播,各层权值会 不断进行调整,这就是神经网络的学习训练。当输出的误差减小到期望程度或者预先设定的学习迭代次数时,训练结束,BP神经网络完成学习。
一个简单的神经网络包含输入层,隐含层(隐含层可以是多层)、输出层。
如图:
输出层 隐含层 输出层
对于隐含层的注意:
如果隐含层中的神经元节点设置过少,结果可能造成神经网络的训练过程收敛变慢或者不收敛。如果隐层中节点过多,模型的预测精度会提高,但同时网络拓扑结构过大,收敛速度慢,普遍性会减弱。
隐藏层神经元的设置方法:
如果 BP 神经网络中输入层节点数为 m 个,输出层节点是为 n 个,则由下式式 可推出隐藏层节点数为 s 个。 其中 b 一般为 1-9 的整数。
2.BP神经网络实例推导
以波士顿房价预测为例
2.1设计神经网络
此次示例我们设计了一个简单的神经网络进行演示。
首先设计输入层和输出层的节点个数,有几个输入或输出就写几个节点,隐含层节点根据公式及逆行计算,如图
设计的神经网络图如图所示
第一层是输入层,包含两个神经元il,i2,和截距项bl;第二层是隐含层,包含两个神经元h1,h2和截距项(偏置系数〉b2,用于控制神经元被激活的容易程度,第三层是输出o1,o2,每条线上标的wi是层与层之间连接的权重。
接下来我们对各个数据赋上初值。权重是随机取值的。
2.2前向计算
在前向计算的过程中,要搞清楚计算的关系,同时还有一个激活函数。将神经网络计算过程图详细展开则如图所示。
加权求和 激活函数 加权求和 激活函数
计算隐含层时其实分两步,先进行加权求和,即将前面的节点分别乘以权重然后将和相加最后将值赋给neth,然后outh再用激活函数对neth进行运算跳出隐含层。激活函数我们默认为 sigmoid函数。即
具体计算过程为
输入层--->隐含层
同理,可计算出神经元h2的outh2值。
隐含层--->输出层
同理可计算出神经元O2的outo2的值。
这样前向传播的过程就结束了,我们得到输出值为[0.75136079 , 0.772928465],与实际值[0.01 , 0.99]相差还很远,现在我们对误差进行反向传 播,更新权值,重新计算输出。
2.3反向计算
首先通过损失函数计算我们的总误差
计算过程为
隐含层---->输出层的权值更新
以W5为例。
首先将损失函数对W5求偏导。
每个部分的偏导都计算出来了,然后相乘得出损失函数对W5的偏导值。
然后就是更新W5的值。
同理,可更新其他参数W6、W7、W8等权重。
隐含层---->隐含层的权值更新:
方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对 w5的偏导时,是从out(o1)---->net(o1)---->w5,但是在隐含层之间的权值更新 时,是out(h1)---->net(h1)---->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的 误差,所以这个地方两个都要计算。
至此,所有权值可更新完毕,,然后继续按照前向计算更新损失函数的值,这样一个前向计算加后向计算成为一次迭代,我们的目的是让损失函数达到最低,找到理想的权重值。
2.4训练结束
一般通过设计停止迭代的期望值或设置迭代次数来停止迭代。不过,我们喜欢选择第二种,设置迭代次数来停止迭代,这样时间不会花费很多,要不然为了达到理想之,我们可能要跑模型跑一整天或者更长。
设置最大迭代次数,比如使用数据集迭代100次后停止训练
计算训练集在网络上的预测准确率,达到一定门限值后停止训练
3.计算整体步骤