神经网络之反向传播算法
反向传播(BackPropagation)算法(也叫误差逆传播算法)适用于训练多层网络,学习BP算法告诉我们:
1、当我们改变权值和偏置的时候,损失函数的改变速度
2、如何改变权值和偏置以训练神经网络的整体表现
BP算法基于梯度下降策略,以目标的负方向梯度对参数进行调整。BP算法最关键的部分就是求梯度(某一函数在该点处的方向导数沿着该方向取得最大值)。
这里通过一个例子来理解反向传播算法
第一层是输入层,包含两个神经元i1,i2和截距项b1;第二层是隐层,包含两个神经元h1, h2和截距项b2,第三层是输出层o1,o2,每条线上的是层与层之间连接的权重,激活函数使用书上(机器学习(周志华))的Sigmoid函数。
该算法的目标是通过输入数据i1,i2,使输出尽可能与原始输出尽可能接近(这里假设
的输出分别为:
)。
一、反向传播:
1、输入层——>隐层
隐层/输出层第h个神经元接收到的输入为
这里的,这里的
为偏置*偏置项(书上没有偏置,直接就是输入点*全值的和),即
接受的神经元的输入为
;利用Sigmoid函数(
)来计算h1
的输出:即,
同理,接受的输入函数为
,同样可以算出
的输出为:
2、隐层——>输出层
同样使用公式和
公式来计算o1
的输入
;
的输出(即:最终的输出)
同理,接受的输入函数为
;
的输出为
然后通过比较的值来确定是否要更新权值,重新计算输出。
3、计算总误差
这里的分别是输出层第j个神经元(一共n个)的理想输出和实际输出
所以本例中E=+
=
(后面有用)
接下来就可以开始进行权值更新了
1)隐层——>输出层的权值更新
以为例,计算
对整体误差产生了多少的影响,可以用整体误差对
求偏导求出:
(链式法则)
根据的定义,显然有:
Sigmoid函数有一个很好的性质:
然后即E=
+
对
求导
即:
三者相乘得到最终结果:
=
*(
)
令*(
)
得到了BP算法中关于w5的更新公式:
为学习率
最后更新的值:
同理可得的更新权值。
2)输入层——>隐层的权值更新
以为例,这里需要注意一下,
会接受来自o1、o2两个地方传来的误差,所以在计算
中
时:
同理
所以
同理,更新
这样,就完成了方向传播算法的第一次迭代,然后将更新之后的权值重新带入计算,直到f()和g(
)比较接近的时候停止。