图一个有单隐层的多层神经网络
上图是一个多层神经网络,包含一个输入层、一个隐层以及一个输出层组成。为了清晰表示,我们分别使用作为输入层单元、隐层单元以及输出层单元的下标。我们分别使用和分别表示隐层单元和输出层单元的网络输入。
接下来需要推导出学习输入层和隐层之间权重的更新公式,以及隐层和输出层之间权重的更新公式。假设所有的计算单元(例如,隐层和输出层中的单元)都使用逻辑斯蒂函数作为链接函数。因此,作为隐层中的一个单元,它的输出定义如下:
公式
同样地,对于输出层中的一个单元,其输出被定义为:
公式
在这里,使用平方误差和函数:
公式
其中,,一个的权重矩阵(输入-隐层);,一个的权重矩阵(隐层-输出),,是一个维向量,表示输出的黄金标准标签。
为了得到和的更新函数,我们只需要分别针对权重得到误差函数的推导即可。为了直接进行推导,我们直接从最右边的层开始计算推导(即:输出层),然后向左移动。对于每一层,我们将计算分为三步:分别计算误差针对输出、网络输入以及权重的推导。流程如下。
从输出层开始。第一步是计算误差相对于输出的推导:
公式
第二部是计算误差相对于输出层网络输入的推导。注意,当我们针对某些变量进行推导时,需要保证其他变量固定。也请注意:这个值非常重要,因为在接下来的计算中,这个值会被重用很多次。在这里,为了方便表示。将其表示为:
公式
第三步是计算误差相对于隐层和输出层之间权重的推导:
公式
到这里,我们就已经得到了隐层和输出层之间权重的更新公式:
公式
其中,,为学习率。
我们可以重复相同的三步来获得之前层权重的更新公式,这就是后向传播的本质思想。
我们重复第一步,计算出误差针对隐层输出的推导。注意:隐层的输出与输出 层中的所有单元都相关:
公式
然后重复上面的第二部来计算误差相对于隐层网络输入的推导。同样地,这个值也非常重要,我们将其表示为:
公式
接下来,我们重复上面的第三步来计算误差相对于输入层和隐层之间权重的推导。
公式
最后,我们可以得到输入层和隐层之间权重的更新公式:
公式
从上面的示例中,我们可以看到在计算某层中的导数时用到的中间结果()可以被之前的层重用。假设如果在输入层之前还有另外一层,那么也可以继续被方便地用于计算导数的链。比较公式和公式,我们可以发现,在公式中,因此有点像隐层单元的“误差”。这样我们也许就可以将这个术语解释为从下一层“向后传播”误差,那么如果网络有更多隐层,该传播也就可以向后传得更远。
领取专属 10元无门槛券
私享最新 技术干货