神经网络之反向传播算法
反向传播(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(
)比较接近的时候停止。

6942

被折叠的 条评论
为什么被折叠?



