反向传播
神经网络学习的核心算法-反向传播算法
梯度下降法,所谓学习是指我们要找到特定的权重偏置,使代价函数的值达到最小。
代价函数牵扯到上完个训练样本?
考虑一个训练样本,就2.看他的激活值输出
要增加这个激活值 , 有3条路
- 增加偏置b
- 增加权重w
i- 增加哪些权重?连接到0,2的,激活值更亮的,连接更紧密的
- 改变上一层的激活值
- 如果所有正权连接的神经元更亮,所有负权连接的神经元更暗的话,那么数字2的神经元就会更强烈地激发。想造成更大的影响,就要依据对应权重的大小,对激活值做出呈比例地改变。当然我们并不能直接改变激活值,我们只能改变权重和偏置。
- 但对最后一层来说,记住我们期待(激活值)的变化还是很有帮助的
- 还需要最后一层其余的神经元的激发变弱,这些神经元对倒数第二层也分别有自己期待的变化
- 因此,我们会把数字2神经元的期待,和别的输出神经元的期待全部加起来,作为对如何改变倒数第二层神经元的指示。这些期待变化不仅是对应的权重的倍数
- 这些期待对神经元激活值期待的变化不仅是对应的权重的倍数,也是每个神经元激活值需要改变的倍数(这段可能翻译不准确)
- 这其实就是在实现反向传播的理念,重复上面的过程,从后往前,一直循环到第一层
我们说梯度下降时,我们并不是看每个参数是该增大还是减少,我们还看哪个参数的性价比最高
放眼全局,还记得 我们是在考虑单个训练样本 对所有权重偏置的影响吗?
最后,如果只关注那个2的要求,网络只会把所有图像都分类成是2;
所以要对其他所有的训练样本,同样地过一遍反向传播,记录下每个样本想怎样修改权重与偏重(13000个参数)
最后再取一个平均值
这一系列的权重偏置的平均微调大小,不严格地说,就是上期视频提到的代价函数的负梯度,至少是其标量的倍数,不严格是说,还没有准确地解释如何量化这些微调
但如果你清楚我提到的所有改动,为什么有些数字是其他数字的好几倍 ?以及最后要怎么全部加起来,你就懂得了反向传播的真实工作原理
实际操作中,如果梯度下降的每一步,都用上每一个训练样本来计算的话,那么花的时间就太长了
所以,一般我们这么做,
- 然而,每个minbatch都会给你一个不错的近似,这样,你的计算量会大大减少
随机梯度下降
- 它看上去会有点像醉汉漫无目的地溜下山(这个技巧就叫随机梯度下降),但起码步伐很快,而不像是细致入微的人,踏步之前先准确地算好下坡的方向,然后再向那个方向谨小慎微地漫漫走一步
总结:
反向传播算法算的是单个训练样本想怎样修改权重和偏置,不仅是说每个参数应该变大还是变小,还包括了这些变化的比例是多大,才能最快地降低代价,真正地梯度下降,得对好几万个训练样本都这么操作,然后对这些值去平均,但算起来太慢了,所以你会先把所有的样本分到各个minibatch中去,计算1个minibatch来作为梯度下降的第一步
计算每个minibatch的梯度,调整参数,不断循环,最终你就收敛到代价函数的一个局部最小值上,此时就可以说,你的神经网络对付训练数据已经很不错了,总而言之,实现反向传播算法的每一句代码,其实或多或少地都对应了大家知道的内容,下一期:把本期内容用微积分的形式呈现
反向传播的微积分原理
一个训练样本的代价
多个取平均
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!