反向传播算法是什么

反向传播算法是神经网络算法的核心所在。反向传播算法的核心理念就是把下一层神经元对于上一层神经元的所有期待汇总,从而指导上一层神经元改变。假设神经网络还没有被训练好,这个时候输出层神经元的激活值看起来比较随机,与我们期望的正确结果相差较大。我们当然希望对此做出改变,但是我们并不能直接改变神经元的激活值,我们能够改变的只是权重和偏置。

神经网络输入和输出情况当输入层的手写数字是“6”时,我们期望输出层神经元的理想状态是,代表数字“6”的神经元激活值为1,其他数字的神经元激活值为0。现实的情况却不令人满意,目前输出层代表数字“6”的激活值只有0.3,其他神经元的激活值也与期望的状态相差较大。如何提升输出层中代表数字“6”的神经元激活值呢?从前文讲述的内容可以知道,该神经元激活值由上一层神经元激活值的加权表达式决定,因此,提升激活值可以采用的方法为改变权重wi和偏置b、改变上层神经元激活值ai。

(1)改变权重wi和偏置b。权重表示了上一层对应神经元对目标神经元影响程度的不同,一般来说上一层激活值越大的神经元对目标神经元的影响也越大,对应的权重也越大。所以增大上一层神经元中激活值更大的神经元的权重比增大上一层神经元中激活值更小的神经元的权重,对最后目标神经元激活值的提升效果更为明显。同样,改变偏置b也可以改变神经元的输出情况,从而改变目标神经元激活值。

打开凤凰新闻,查看更多高清图片

(2)改变上层神经元激活值ai。根据目标神经元激活值表达式[插图],如果我们将权重为正数的神经元激活值增大,同时将权重为负数的神经元激活值减小,那么目标神经元激活值就会增大。不过,我们并不能改变上一层神经元激活值,我们能够改变的只是权重和偏置。因此,假设输入手写数字是“6”,我们期望良好的神经网络输出结果是,输出层中代表数字“6”的神经元激活值为1,其他数字的神经元激活值为0。为了使输出层中代表数字“6”的神经元激活值为1,我们可以调整上一层神经元的权重和偏置,例如增大上一层神经元a1和a2的权重w1和w2。同样为了使代表其他数字如“9”的神经元激活值为0,我们也可以减小上一层神经元a1和a2的权重w1和w2。上一层神经元权重和偏置的变化情况会综合考虑输出层各神经元的“要求”。

这就是反向传播算法的核心思想,通过调整上一层各神经元的权重和偏置来实现下一层各神经元激活值的“期待”,重复这个过程到神经网络的所有层。截至目前,神经网络中权重和偏置的调整只考虑到一个手写数字“6”的要求,要得到应用范围广泛的神经网络,还需要考虑其他训练样本的情况。也就是说,我们需要对所有的训练样本都进行一遍上述反向传播算法的过程,最后得到权重和偏置变化“需求”的均值作为最终变化值。这些权重和偏置的变化值就是代价函数梯度的相反数或者某个倍数。