反向传播

神经网络学习的核心算法-反向传播算法

梯度下降法,所谓学习是指我们要找到特定的权重偏置,使代价函数的值达到最小。

代价函数牵扯到上完个训练样本?

考虑一个训练样本,就2.看他的激活值输出

image-20200525195142966

要增加这个激活值 , 有3条路

  1. 增加偏置b
  2. 增加权重wi
    • 增加哪些权重?连接到0,2的,激活值更亮的,连接更紧密的
  3. 改变上一层的激活值
    • 如果所有正权连接的神经元更亮,所有负权连接的神经元更暗的话,那么数字2的神经元就会更强烈地激发。想造成更大的影响,就要依据对应权重的大小,对激活值做出呈比例地改变。当然我们并不能直接改变激活值,我们只能改变权重和偏置。
    • 但对最后一层来说,记住我们期待(激活值)的变化还是很有帮助的
    • 还需要最后一层其余的神经元的激发变弱,这些神经元对倒数第二层也分别有自己期待的变化
    • 因此,我们会把数字2神经元的期待,和别的输出神经元的期待全部加起来,作为对如何改变倒数第二层神经元的指示。这些期待变化不仅是对应的权重的倍数
    • 这些期待对神经元激活值期待的变化不仅是对应的权重的倍数,也是每个神经元激活值需要改变的倍数(这段可能翻译不准确)
    • 这其实就是在实现反向传播的理念,重复上面的过程,从后往前,一直循环到第一层

我们说梯度下降时,我们并不是看每个参数是该增大还是减少,我们还看哪个参数的性价比最高

image-20200525195520864

放眼全局,还记得 我们是在考虑单个训练样本 对所有权重偏置的影响吗?

  • 最后,如果只关注那个2的要求,网络只会把所有图像都分类成是2;

  • 所以要对其他所有的训练样本,同样地过一遍反向传播,记录下每个样本想怎样修改权重与偏重(13000个参数)

  • 最后再取一个平均值image-20200525203312003

  • 这一系列的权重偏置的平均微调大小,不严格地说,就是上期视频提到的代价函数的负梯度,至少是其标量的倍数,不严格是说,还没有准确地解释如何量化这些微调

  • 但如果你清楚我提到的所有改动,为什么有些数字是其他数字的好几倍 ?以及最后要怎么全部加起来,你就懂得了反向传播的真实工作原理

实际操作中,如果梯度下降的每一步,都用上每一个训练样本来计算的话,那么花的时间就太长了

image-20200525203859653

所以,一般我们这么做,

image-20200525203935682

image-20200525203946812

image-20200525204004073

image-20200525204017098

image-20200525204030601

  • 然而,每个minbatch都会给你一个不错的近似,这样,你的计算量会大大减少

image-20200525204132891

随机梯度下降

  • 它看上去会有点像醉汉漫无目的地溜下山(这个技巧就叫随机梯度下降),但起码步伐很快,而不像是细致入微的人,踏步之前先准确地算好下坡的方向,然后再向那个方向谨小慎微地漫漫走一步

总结:

反向传播算法算的是单个训练样本想怎样修改权重和偏置,不仅是说每个参数应该变大还是变小,还包括了这些变化的比例是多大,才能最快地降低代价,真正地梯度下降,得对好几万个训练样本都这么操作,然后对这些值去平均,但算起来太慢了,所以你会先把所有的样本分到各个minibatch中去,计算1个minibatch来作为梯度下降的第一步image-20200525210230447

计算每个minibatch的梯度,调整参数,不断循环,最终你就收敛到代价函数的一个局部最小值上,此时就可以说,你的神经网络对付训练数据已经很不错了,总而言之,实现反向传播算法的每一句代码,其实或多或少地都对应了大家知道的内容,下一期:把本期内容用微积分的形式呈现

反向传播的微积分原理

image-20200526091832121

image-20200526091841477

image-20200526092014383

image-20200526092057272

一个训练样本的代价

多个取平均

image-20200526092200953


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!