反向传播算法是用来求非常复杂的梯度的。梯度向量每一项的大小,是在说代价函数对每一个参数有多敏感。

我们来考虑一个还没有被训练好的网络。我们并不能直接改动这些激活值,只能改变权重和偏置值。但记住,我们想要输出层出现怎样的变动,还是很有用的。

如果我们要增加这个激活值,我们有三条路可走,一增加偏置,二增加权重,或者三改变上一层的激活值。

先来看如何调整权重,各个权重它们的影响力各不相同,连接前一层最亮的神经元的权重,影响力也最大,因为这些权重会与大的激活值相乘。增大了这几个权重值,对最终代价函数造成的影响,就比增大连接黯淡神经元的权重所造成的影响要大上好多倍。

请记住,当我们说到梯度下降的时候,我们并不只看每个参数是该增大还是减小,我们还看哪个参数的性价比最高。

不过别忘了,从全局上看,这只不过是这一层某个神经元所期待的变化。


所以我们会把这个神经元的期待,和别的输出神经元的期待全部加起来,作为对如何改变倒数第二层神经元的指示。这些期待变化不仅是对应的权重的倍数,也是每个神经元激活值改变量的倍数。

我们对其他的训练样本,同样的过一遍反向传播,记录下每个样本想怎样修改权重与偏置,最后再取一个平均值。这里一系列的权重偏置的平均微调大小,不严格地说,就是代价函数的负梯度,至少是其标量的倍数。

实际操作中,我们经常使用随机梯度下降法。

首先把训练样本打乱,然后分成很多组minibatch,每个minibatch就当包含了100个训练样本好了。然后你算出这个minibatch下降的一步,这不是代价函数真正的梯度,然而每个minibatch会给你一个不错的近似,计算量会减轻不少。

就像是一个醉汉找下山的路,每一步不是最好的,但是是近似好的,并且速度很快,而使用常规方法计算就想一个谨慎的人,每一步都非常好,但是速度很慢。


反向传播的微积分原理

你看你看,归根到底都是一些数学问题,加油。