1.12 反向传播误差到更多层中
下图显示了具有3层的简单神经网络,一个输入层、一个隐藏层和一个最终输出层。
从右手边的最终输出层开始,往回工作,我们可以看到,我们使用在输出层的误差值引导调整馈送到最终层的链接权重。更一般地,我们将输出误差标记为eoutput ,将在输出层和隐藏层之间的链接权重标记为who 。通过将误差值按权重的比例进行分割,我们计算出与每条链接相关的特定误差值。
通过可视化这种方法,我们可以明白,对于额外的新层所需要做的事情。简单说来,我们采用与隐藏层节点相关联的这些误差ehidden ,再次将这些误差按照输入层和隐藏层之间的链接权重wih 进行分割。下图就显示了此逻辑。
如果神经网络具有多个层,那么我们就从最终输出层往回工作,对每一层重复应用相同的思路。误差信息流具有直观意义。同样,你明白为什么我们称之为误差的反向传播了。
如果对于输出层节点的eoutput ,我们首先使用了输出误差。那么,对于隐藏层节点ehidden ,我们使用什么误差呢?中间隐藏层节点没有明确显示的误差,因此这是一个好问题。我们知道,向前馈送输入信号,隐藏层的每个节点确实有一个单一的输出。还记得,我们在该节点经过加权求和的信号上应用激活函数,才得到了这个输出。但是,我们如何才能计算出误差呢?
对于隐藏层的节点,我们没有目标值或所希望的输出值。我们只有最终输出层节点的目标值,这个目标值来自于训练样本数据。让我们再次观察上图,寻找一些灵感!隐藏层第一个节点具有两个链接,这两个链接将这个节点连接到两个输出层节点。我们知道,沿着各个链接可以分割输出误差,就像我们先前所做的一样。这意味着,对于中间层节点的每个链接,我们得到了某种误差值。我们可以重组这两个链接的误差,形成这个节点的误差。实际上我们没有中间层节点的目标值,因此这种方法算得上第二最佳方法。下图就可视化了这种想法。
虽然你可以相对清楚地观察到发生的事情,但是我们还是要再次演示,确认一下。我们需要隐藏层节点的误差,这样我们就可以使用这个误差更新前一层中的权重。我们称这个误差为ehidden 。但是,我们不需要明确地回答这些误差是什么。我们的训练样本数据只给出了最终输出节点的目标值,因此不能说这个误差等于中间层节点所需目标输出值与实际输出值之间的差。
训练样本数据只告诉我们最终输出节点的输出应该为多少,而没有告诉我们任何其他层节点的输出应该是多少。这是这道谜题的核心。
我们可以使用先前所看到的误差反向传播,为链接重组分割的误差。因此,第一个隐藏层节点的误差是与这个节点前向连接所有链接中分割误差的和。在上图中,我们得到了在权重为w1,1 的链接上的输出误差eoutput,1 的一部分,同时也得到了在权重为w1,2 的链接上第二个输出节点的输出误差eoutput,2 的一部分。
让我们将这些值写下来。
这有助于我们看到这个理论的实际作用,下图详细阐释了在一个简单的具有实际数字的3层网络中,误差如何向后传播。
让我们演示一下反向传播的误差。你可以观察到,第二个输出层节点的误差0.5,在具有权重1.0和4.0的两个链接之间,根据比例被分割成了0.1和0.4。你也可以观察到,在隐藏层的第二个节点处的重组误差等于连接的分割误差之和,也就是0.48与0.4的和,等于0.88。
如下图所示,我们进一步向后工作,在前一层中应用相同的思路。
关键点
· 神经网络通过调整链接权重进行学习。这种方法由误差引导,误差就是训练数据所给出正确答案和实际输出之间的差值。
· 简单地说,在输出节点处的误差等于所需值与实际值之间的差值。
· 然而,与内部节点相关联的误差并不显而易见。一种方法是按照链路权重的比例来分割输出层的误差,然后在每个内部节点处重组这些误差。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论