今天进入正式的深度学习的学习,在学习BP神经网络之前呢,我们需要了解一些概念:
学前准备
感知机
什么是感知机?
感知机(perceptron)是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别。
感知机接收多个输入信号, 输出一个信号。 这里所说的“信号”可以想象成电流或河 流那样具备“流动性”的东西。 像电流流过导线, 向前方输送电子一样, 感知机的信 号也会形成流, 向前方输送信息。
知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。
其中, x1,x2是输入信号,y是输出信号,w1,w2是权重,o是“神经元”,或者叫做节点
sigmoid函数
Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。 在信息科学中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的激活函数,将变量映射到0,1之间。
公式:
知道了这些,可以让我们开始BP神经网络的学习啦~!
什么是BP神经网络
是一种按误差逆传播算法训练的多层前馈网络,是应用最广泛的神经网络模型之一。 BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。
核心思想就是正向传播和误差的反向计算温故知新——前向传播算法和反向传播算法(BP算法)及其推导 - 知乎 (zhihu.com)
正向传播:
将上一层的输出作为下一层的输入,并计算下一层的输出,一直到运算到输出层为止。
反向计算:
允许来自代价函数的信息通过网络向后流动,以便计算梯度。
反向传播是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。该方法对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。
计算流程
BP神经网络的推导
第一层是输入层,包含两个神经元i1,i2,和截距项b1;第二层是隐含层,包含两个 神经元h1,h2和截距项(偏置系数)b2,用于控制神经元被激活的容易程度,第三层 是输出o1,o2,每条线上标的wi是层与层之间连接的权重,激活函数我们默认为 sigmoid函数。
sigmoid函数:
赋值如下
前向传播
输入层-->隐含层:
计算h1的输入加权和:
neth1 = w1* i1 + w2 * i2 + b1 * 1
= 0.15*0.05+0.2*0.1+0.35*1=0.3775
输出:
outh1 = 1/1+e^-0.3775 = 0.593269992
同理,计算出h2的输出 o2
隐含层--->输出层:
计算输出层神经元o1和o2的值:
最后得到输出值为0.75136079和0.772628465
但这与实际值0.01和0.99还相差很远,所以需要反向计算,更新权值,重新计算输出
反向计算
计算总误差
=
分别计算o1和o2的误差,总误差为两者之和:
Eo1 = 1/2(0.01-0.75136507)^2 = 0.274811083
同理 Eo2 = 0.023560026
= Eo1 + Eo2 = 0.298371109
隐含层---->输出层的权值更新
我们以w5为例,如果想要知道w5对整体的误差产生了多少影响,可以用整体误差啊对w5求偏导得到:
直观展示:
计算
计算
计算
则 = w5 - η * = 0.149780716
其中 η为学习率(学习率 - 知乎 (zhihu.com)),设置为0.5,设置范围在0.01-0.8,
学习率如果过大,可能会使损失函数直接越过全局最优点,此时表现为loss过大或者为nan
学习率如果过小,损失函数的变化速度很慢,会大大增加网络的收敛复杂度,并且很容易被困在局部最小值或者鞍点
同理我们更新w2,w3,w4的权值
接着我们重新计算,得到数字0.015912196和0.984065734。与原输入(0.01,0.99)接近,说明效果很好。
如果效果仍不理想,可以继续荀兰,设置迭代次数(比如100);或者计算预测准确率,达到一定门限后停止训练。
最后要感谢陈义学长的讲解!!!!