原文:Principles of training multi-layer neural network using backpropagation。以下是我的翻译,有些地方结合自己的理解进行了意译。
本文描述了使用反向传播算法的多层神经网络的训练过程。为了说明这个过程,假设有一个三层神经网络,这个神经网络有两个输入以及一个输出,如下图所示:
每个神经元都由两个单元组成。第一个单元的功能是把每个输入信号和对应权重系数()作乘积然后对这些乘积求和。第二个单元实现了一个非线性函数。这个函数也称为神经元激活函数(neuron activation function)。如下图所示,信号e是加法器(即第一个单元)的输出信号,而
是非线性函数(即第二个单元)的输出信号。显然,
也同时是这整个神经元的输出信号。
为了训练神经网络,我们需要对数据集进行训练。训练数据集由输入信号(和
)组成,这些输入信号都被赋予了相应的目标(期望输出)
。网络的训练是一个不断迭代的过程,在每一次的迭代中,从训练数据集中获得的新数据都会被用来修改结点的权重系数(
)。修改过程的计算是使用下面描述的算法进行的:每个训练过程都从来自训练数据集的两个输入信号开始。在此之后,我们可以确定每个网络层的每个神经元的输出信号值。下面的图片说明了信号是如何通过网络进行传播的。符号
代表了连接着网络的输入
和输入层(input layer)的神经元
的权重系数(我的注释:根据NeuralNetworksAndDeeplearning的解释,input layer代表的应该是
和
所在的这层,和本文所指不同。总之理解本文这里input layer所指的是f1,f2,f3所在这层即可)。符号
代表了神经元n的输出信号。
接着,如下图所示,信号通过隐藏层(hidden layer)进行传播。符号代表了连接着上一层的神经元
的输出(即下一层的神经元的输入)和下一层的神经元
权重。
然后通过输出层(output layer)传播信号,如下图所示。
算法的下一步是把网络的输出信号和在训练集中已经设定好的期望输出值
进行比较。这两者之间的差值被称为输出层神经元的误差信号(error signal)
。(我的注释:假如这是一个训练判断是否包含人脸的神经网络,输入一张带人脸的照片,期望输出值为
,假若网络的实际输出值为
,则
)
直接输出内部神经元的误差信号是不可行的,因为这些神经元的输出值是未知的。许多年来,人们都不知道训练多层神经网络的有效算法。直到八十年代中期,人们才开发出了反向传播算法(backpropagation)。这个算法的思想是把误差信号 反向传播回所有神经元中,这个过程的输出信号会作为输入信号传入前面讨论过的神经元中,如下图所示。
用来反向传播误差的权重系数和我们在计算神经元输出值时使用的权重系数是一样的,不同的只是传播方向。信号从输出神经元一个接着一个地传播到输入神经元中。所有的网络层都会采用这个技术。如果传播的误差来源与不止一个神经元,那么它们将被加起来,如下图所示。
当每个神经元的误差信号都已经被计算出来之后,我们就可以开始修改每个神经元输入结点的权重系数了。在下面的公式中,表示对应的神经元激活函数的导数。
系数会影响网络的训练速度。有几种技术可以用于选择系数
。第一种方法是以较大的参数值开始训练过程。在建立权重系数的同时,参数也逐渐减小。第二种方法更复杂,它以较小的参数值开始训练。在训练的过程中,参数增加,然后在最后阶段参数再次减小。以较小的参数值开始训练使得我们可以确定权重参数的符号。(我的注释:这一段不太理解。)