让我们考虑一个反向传播 (BP) 网络中的节点。它有多个输入,并产生一个输出值。我们希望使用纠错进行训练,因此它还将根据节点的错误估计更新权重。
每个节点都有一个偏差值 θ。您可以将其视为对内部恒定 1.0 值输入的权重。
激活是加权输入和偏差值的总和。让我们将我们感兴趣的节点称为 j,前一层的节点的值为 i,而后一层的节点的值为 k。我们的节点 j 的激活是:
净j = ∑<sub>i (o i × w ij ) + θ j
也就是说,j 的激活值是节点 i 的输出与连接节点 i 和 j 的相应权重的乘积之和,再加上偏差值。
我们节点 j 的输出是激活的传递函数:
o j = f(净j )
f 通常是 sigmoid 函数。
f(净j ) = 1 / (1 + e -净j )
sigmoid 函数有一个易于指定的一阶导数:
f'(净j ) = f(净j ) × (1.0 - f(净j ))
无论我们使用什么传递函数,我们都需要知道如何计算它的一阶导数。BP 通过链式法则通过梯度下降工作,所以这很重要。上面的方程会随着不同的传递函数而不同。
到目前为止,我们知道如何获取输入值、计算激活、计算输出以及计算激活的一阶导数。现在我们需要处理错误和权重调整。
BP 中用于节点误差估计的值称为 δ。节点的 δ 与节点激活的一阶导数和它接收的误差项成正比。接收到的误差项有两种公式,一种用于输出节点,一种用于隐藏节点。
一般来说,
δ = f'(net) × (接收误差)
对于输出节点,
δ输出= f'(net) × (t - o)
其中 t 是该输出节点的期望值,o 是该输出节点的实际输出值。
对于我们的隐藏节点 j,它是这样的:
δ j = f'(net j ) × ∑<sub>k (δ k × w jk )
我们节点 j 的 δ δ j是给定激活函数的传递函数的一阶导数乘以下一层(更接近输出)中的增量之和乘以连接权重的值的乘积。有了这个,我们可以计算如何调整前一层节点(更接近输入)的权重。
dw ij = L × o i × δ j
这里的 dw 代表“权重变化”,所以方程的意思是,从节点 i 到我们的节点 j 的权重变化等于学习参数 L 的乘积(通常网络中所有节点的值相同) ,节点 i 的输出值,以及节点 j 的 δ(误差项)。
调整偏差值类似于调整权重。
dθ j = L × f(θ j ) × δ j
这里的dθ表示“θ的变化”。我们必须将传递函数应用于偏置值 θ j以获得类似于节点输出的术语。否则,它看起来就像另一个等式。
我应该注意,计算权重变化应该在整个网络范围内完成,然后在计算完所有这些变化后应用这些变化。