# 多层神经网络BP算法解释 ## 前向传播 *** * 该项目采用反向传播算法描述了多层神经网络的教学过程。 为了说明这个过程,使用了具有两个输入和一个输出的三层神经网络,如下图所示:
## BP网络 *** * 将神经网络的输出信号
y^
y
^
与在训练数据集中找到的真实值(
y
y
)进行比较。 该差异被称为输出层神经元的误差信号。

- 每个神经元由两个单元组成。
- 第一单元添加权重系数和输入信号的乘积。
- 第二个单元实现非线性功能,称为神经元激活功能。
- 信号 e e 是加法器输出信号.
- 是非线性元件的输出信号。
- 信号 y y 也是神经元的输出信号。

- 训练数据由(期望输出) 和输入信号 x1 x 1 和 x2 x 2 组成。
- 神经网络训练是一个迭代过程。 在每次迭代中,使用来自训练数据集的新数据来修改节点的权重系数 w w 。
- 使用下面描述的算法计算修改:每个教学步骤从强制来自训练集的两个输入信号开始。 在此阶段之后,我们可以确定每个网络层中每个神经元的输出信号值。
- 下面的图片说明了信号如何通过网络传播,符号表示输入层中网络输入 xm x m 和神经元 n n 之间的连接权重。 符号表示神经元 n n 的输出信号。



y2=f2(w(x1)2∗x1+w(x2)2∗x2)
y
2
=
f
2
(
w
(
x
1
)
2
∗
x
1
+
w
(
x
2
)
2
∗
x
2
)
y3=f3(w(x1)3∗x1+w(x2)3∗x2)
y
3
=
f
3
(
w
(
x
1
)
3
∗
x
1
+
w
(
x
2
)
3
∗
x
2
)
* 其中
f()
f
(
)
函数可以是
sigmod
s
i
g
m
o
d
函数
ex.f(z)=11+e−z
e
x
.
f
(
z
)
=
1
1
+
e
−
z
/div> *** * 通过隐藏层传播信号。 * 符号
wmn
w
m
n
表示下一层中神经元
m
m
的输出与神经元的输入之间的连接的权重。



δ=y−y^
δ
=
y
−
y
^
与下图片对应关系为
y=z
y
=
z
,
y^=y
y
^
=
y

- 无法计算直接计算隐藏层的真实值和误差,因为该过程在实际生产中不存在,或不可得。
为此,八十年代中期,提出了 BP算法
上一条是重点,重点,重点。
- 注意 下图公式有误 ,正确表达为
-
δ4=w46∗δ∗df6(e)de=−w46∗δ∗y^∗(1−y^) δ 4 = w 46 ∗ δ ∗ d f 6 ( e ) d e = − w 46 ∗ δ ∗ y ^ ∗ ( 1 − y ^ )
- 其他的同类表达式也需要类似的修改,请注意。
- 对于有多条边连接的节点, δ δ 为每条边结果的和。





- 获得每个神经元的误差信号后,可以利用误差来修改每个神经元输入节点的权重系数。
- 下面的公式
∂(δ2)∂e=∂(y−y^)2∂e=−(y−y^)∗y^∗(1−y^) ∂ ( δ 2 ) ∂ e = ∂ ( y − y ^ ) 2 ∂ e = − ( y − y ^ ) ∗ y ^ ∗ ( 1 − y ^ )
表示神经元激活函数的导数 残差 。 - δ2 δ 2 即为 损失函数
- 又因为对 dedθ d e d θ 有
-
dedθ=∂θTx∂θ=x d e d θ = ∂ θ T x ∂ θ = x
- 由于链式法则:
- ∂(δ2)∂θ=∂(y−y^)2∂ededθ=−(y^−y)∗y^∗(1−y^)∗x=−δ∗y^∗(1−y^)∗x ∂ ( δ 2 ) ∂ θ = ∂ ( y − y ^ ) 2 ∂ e d e d θ = − ( y ^ − y ) ∗ y ^ ∗ ( 1 − y ^ ) ∗ x = − δ ∗ y ^ ∗ ( 1 − y ^ ) ∗ x
y^ y ^ 表示输出值
- y y 表示真实值
- 代表上一层的输出或者原始的输入
- δ δ 表示误差 这里用到了上一节BP中的假设
- 通过这部分化简,我们利用误差 δ δ 代替了的 y−y^ y − y ^ 从而避开了隐藏层中的未知量 y y
- 最后利用标准的* 梯度下降公式*:






转载请注明出处,csdn的markdown还是很迷的。