阅读 298

使用反向传播算法训练多层神经网络的原理【译】

写在前面:之前写了一篇机器学习基本算法之神经网络里面涉及了一个重要算法,今天看到一篇关于这个算法的图示解释,所以打算翻译一下作为以后学习的一个参考。这是一篇关于反向传播算法的译文,译自 Principles of training multi-layer neural network using backpropagation。里面通过通俗易懂的图示方式介绍了神经网络中的前向和后向传播的整个过程。如果要深究其中原理和进行数学推导还是要参考其他资料,这篇文章中不涉及推理证明。图片来自原文,如果有侵权我会自行删除。

这篇文章描述了采用反向传播算法的多层神经网络的训练过程。为了说明这个过程,我们采用三层神经网络,两个输入一个输出作为示例。如下图所示:

每个神经元由两个单元组成。第一个单元是权重系数和输入型号的乘积和。第二个单元是实现非线性功能,这种功能叫做神经元激活。信号 e 是加法器输出信号,y=f(e) 是非线性元素的输出信号。信号 y 也是神经元的输出信号。

为了训练神经网络,我们需要训练数据集。训练数据集是由输入信号(x_1 , x_2)和相应的正确目标(期望输出) z组成的。训练网络是一个迭代的过程。在每一次迭代中,节点的权重系数都会被来自训练数据集中的新的数据修改。修改是通过下面描述的算法计算的:每次训练步骤开始都是强制使用来自训练集的数据作为输入数据。这个步骤之后,我们就能确定在每一个网络层的每一个神经元的输出信号的值。下面的图片显示了信号是怎么通过网络传播的,信号 w_{(xm)n} 代表在网络输入 x_m 和在输入层的神经元 n 之间连接的权重。信号 y_n 代表神经元 n 的输出信号。

信号通过隐藏层传播。信号 w_{mn} 代表在输出神经元 m 和下一层的输入神经元 n 之间的连接权重。

信号通过输出层的传播过程。

在接下来的算法步骤中,把网络输出信号 y 和在训练数据集中的期望输出值(目标)比较。它们之间的差称为输出层神经元的误差信号 d

直接计算内部神经元的误差信号是不可能的,因为这些神经元的输出值是不知道的。多年来,训练多层神经网络的方法不为人所知。只有在。只有在八十年代中期,反向传播算法才被制定出来。这个思想是把误差信号 d (在单层中所计算的)往回传到各个神经元,输出神经元视为输入。

权重系数 w_{mn} 用来传播误差时和它在计算输出值是类似。只有这个数据流的方向是改变的(信号一个接一个地从输出传播到输入)。这个技术引用于所有的网络层,如果传播误差来自于它们添加的少数几个神经元。看下面例子:

当每一个神经元的误差信号被计算,每一个神经元的权重系数可能被修改。在下面公式,\frac{df(e)}{de} 代表神经元激活函数的导数(权重被修改)。

系数 h 影响网络训练速度。选择参数也是有技术含量的。第一个方法是开始训练时使用较大的参数。当权重系数被确定参数可以逐渐减小。第二个稍微复杂一点。在开始时使用较小的参数去训练,在训练过程中,随着训练趋势变好增加参数的值,最后阶段再减小。以小参数值开始的训练过程可以确定权重系数符号。

参考: References Ryszard Tadeusiewcz "Sieci neuronowe", Kraków 1992

译者注:里面有一个误差参数 d 和学习系数 h 应该是分别对应图中的 \delta\eta。可能是作者不方便编写从而使用 dh 做取舍吧。

关注下面的标签,发现更多相似文章
评论