原文地址请猛戳这里
该项目描述了采用反向传播算法的多层神经网络学习过程。为了说明这一过程, 使用两个输入层和一个输出层的三层神经网络, 如下图所示:
每个神经元由两个单元组成。第一单元添加权重系数和输入值的产出。第二单元实现非线性函数, 称为神经元激活函数。 e e 是加法器输出值, y=f(e) y = f ( e ) 是非线性元件的输出值。 y y 也是神经元的输出值。
为了学习神经网络, 我们需要训练数据集。训练数据集包括输入值 ( x1 x 1 和 x2 x 2 ), 分配了相应的目标 (期望输出) z z 。网络训练是一个迭代过程。在每个迭代中, 节点的权重系数都使用来自训练数据集的新数据进行修改。修改是使用下面描述的算法计算的: 每个学习步骤都是从训练集强制输入值开始的。在此阶段之后, 我们可以确定每个网络层中每个神经元的输出值。下图说明了值是如何通过网络传播的, 符号 w(xm)n w ( x m ) n 表示在输入层中的网络输入 xm x m 和神经元 n n 之间的连接权重。符号 yn y n 表示神经元 n n 的输出值。
通过隐藏层传播值。符号 wmn w m n 表示神经元 m m 的输出与下一层神经元 nn 的输入之间的连接权重。
值通过输出层传播。
在下一个算法步骤中, 将网络 y y 的输出值与所需的输出值 (目标) 进行比较, 这在训练数据集中找到。其差异称为输出层神经元的误差值 d d 。
由于这些神经元的输出值未知, 因此无法直接计算内部神经元的误差值。多年来, 多层网络训练的有效方法尚不得而知。只有在八十年代中旬, 反向传播算法被算出。其思想是将误差值 d d (在单学习步骤中计算) 反馈给所有神经元, 输出值输入给正在讨论的神经元。
用于传播错误的加权系数 wmn w m n 等于计算输出值时使用的权重。只有数据流的方向发生了变化 (值从输出传输到输入, 一个接一个)。此技术用于所有网络层。如果传播的错误来自很少的神经元, 它们被添加。图示如下:
当计算出每个神经元的误差值时, 可以修改每个神经元输入节点的权重系数。在下面的公式中, df(e)/de d f ( e ) / d e 代表神经元激活函数的导数 (权重被修改)。
系数 h h 影响网络学习速度。有几种方法可以选择此参数。第一种方法是启动具有较大参数值的学习过程。在建立权重系数的同时, 参数也逐渐减少。第二, 比较复杂的方法, 以小参数值开始学习。在学习过程中, 随着学习的推进, 在最后阶段一次又一次地降低了参数。采用低参数值的启动学习过程, 可以确定权重系数符号。
References
Ryszard Tadeusiewcz “Sieci neuronowe”, Kraków 1992