问题一: 机器学习的基本流程(15)


如果权重相等, 正如你所期望的, 各分一半.让我们确定一下, 假设w 1 , 1 = \{w}_{1,1}= w1,1?= 4 和w 2 , 1 = 4 \{w}_{2,1}=4 w2,1?=4, 那么针对这种情况,e 1 \{e}_{1} e1? 所分割的比例都等于4 / ( 4 + 4 ) = 4 / 8 = 1 / 2 4 /(4+4)=4 / 8=1 / 2 4/(4+4)=4/8=1/2 .
在更加深入理解之前, 让我们先暂停一下, 退后一步, 从一个较远的 距离观察我们已经做的事情.我们知道需要使用误差来指导在网络内部如 何调整一些参数, 在这里也就是链接权重.我们明白了如何调整链接权 重, 并且我们使用链接权重来调节进入神经网络最终输出层的信号.在存 在多个输出节点的情况下, 我们也看到了这种调整过程没有变得复杂, 只 是对每个输出节点都进行相同的操作.然后就搞定了!
接下来我们要问的问题是, 当神经网络多于 2 层时, 会发生什么事情 呢? 在离最终输出层相对较远的层中, 我们如何更新链接权重呢?
下图显示了具有 3 层的简单神经网络,一个输入层、一个隐藏层和一个最终输出层.
从右手边的最终输出层开始,往回工作,我们可以看到,我们使用在输出层的误差值引导调整馈送到最终层的链接权重.更一般地,我们将输出误差标记为e o u t p u t e_{} ? ,将在输出层和隐藏层之间的链接权重标记为w h o w_{ho} who? .通 过将误差值按权重的比例进行分割,我们计算出与每条链接相关的特定误差值.
通过可视化这种方法,我们可以明白,对于额外的新层所需要做的事情.简单说来,我们采用与隐藏层节点相关联的这些误差e h i d d e n e_{} ? ,再次将这些误差按照输入层和隐藏层之间的链接权重w i h w_{ih} wih? 进行分割.下图就显示了此逻辑.
如果神经网络具有多个层,那么我们就从最终输出层往回工作,对每 一层重复应用相同的思路.误差信息流具有直观意义.同样,你明白为什么我们称之为误差的反向传播了.如果对于输出层节点的e o u t p u t e_{} ? ,我们首先使用了输出误差.那么,对于隐藏层节点e h i d d e n e_{} ? ,我们使用什么误差呢?中间隐藏层节点没有明确显示的误差,因此这是一个好问题.我们知道,向前馈送输入信号,隐藏层的每个节点确实有一个单一的输出.还记得,我们在该节点经过加权求和的信号上应用激活函数,才得到了这个输出.但是,我们如何才能计算出误差呢?
对于隐藏层的节点,我们没有目标值或所希望的输出值.我们只有最 终输出层节点的目标值,这个目标值来自于训练样本数据.让我们再次观察上图,寻找一些灵感!隐藏层第一个节点具有两个链接,这两个链接将这个节点连接到两个输出层节点.我们知道,沿着各个链接可以分割输出 误差, 就像我们先前所做的一样.这意味着,对于中间层节点的每个链接,我们得到了某种误差值.我们可以重组这两个链接的误差,形成这个节点的误差.实际上我们没有中间层节点的目标值,因此这种方法算得上第二最佳方法.下图就可视化了这种想法.
虽然你可以相对清楚地观察到发生的事情,但是我们还是要再次演示, 确认一下.我们需要隐藏层节点的误差,这样我们就可以使用这个误差更新 前一层中的权重.我们称这个误差为 $e_{} .但是,我们不需要明确地回答这 些误差是什么.我们的训练样本数据只给出了最终输出节点的目标值,因此 不能说这个误差等于中间层节点所需目标输出值与实际输出值之间的差.
训练样本数据只告诉我们最终输出节点的输出应该为多少,而没有告诉我们任何其他层节点的输出应该是多少.这是这道谜题的核心. 我们可以使用先前所看到的误差反向传播,为链接重组分割的误差. 因此,第一个隐藏层节点的误差是与这个节点前向连接所有链接中分割误差的和.在上图中,我们得到了在权重为w 1 , 1 w_{1,1} w1,1? 的链接上的输出误差e o u t p u t , 1 e_{,1} ,1? 的一部分,同时也得到了在权重为w 1 , 2 w_{1,2} w1,2? 的链接上第二个输出节点的输出误差e o u t p u t , 2 e_{,2} ,2? 的一部分.