反向传播超清晰理解加推导
反向传播超清晰理解+推导
我们知道,输入值的正向传播会得到有意义的输出值,那么误差的反向传播会得到什么呢?得到的东西有什么意义吗?误差反向传播更新W、b有什么依据吗?又有鸡毛用呢?
*总结一下就是:(1)误差通过一个神奇的反向传播过程会越来越小,而通过(2)公式的推导可以得知代价函数J只和W&b有关。(3)梯度下降就是调整W&b来减小J,达到一个所谓的最优,这样你在实际使用这个网络的时候(只有正向传播),会得到一个所谓最优的输出Y。因为整个过程中起作用的只有W&b,那些什么a、z、**函数不过是运算过程中的中间代谢物和规则而已。
接下来我们对总结中标记的问题作出回答。
1、为什么误差通过一个神奇的反向传播过程会越来越小?
对于定义的代价函数J,可以很明显的看出这是一个J关于a的开口向上的二次函数,一定存在极小值点,我们又知道这个极小值点只和他的参数有关(x=-b/2a),这里就是包含在a中的W&b。
(也可能会是其他的凸函数,但保证有极小值点是一定的)
反向传播时会用到梯度下降,直白点就是找到W&b使J能取到这个最小值,而y-a就是那个误差。
2、公式的推导证明J只和W&b有关
借图如下,忽略细节,直接以向量表示开始,便于整体的快速理解,即
J只和W&b有关对吧。
3、梯度下降就是调整W&b来减小J,达到一个所谓的最优
梯度下降为什么能减小J已经在第一个问题中说了,而之所以说是所谓的最优,是因为得到的并不是100%最优的选择,这个问题就先不说了。
重点是最后一层的误差我们可以直接通过y-a得到,那么隐藏层的误差了?其实实际的误差只有一个——就是输出层的误差,隐藏层并不存在真正的误差,它们不过是中间产物而已。
所以这里有个残差的定义:
由它可以推导出反向传播的第一大公式 BP1
其实都一样。
因为y只存在于最后一层,可以这么定义残差,但传入隐藏层的时候就没有下一个残差了,怎么办?
BP2
由于nl 层是输出层,我们从nl-1来计算残差,即
我们把nl和nl-1关系切换到隐藏层l+1和l层,即可得
下面来看BP3
BP4
完全写成向量形式就是:
整个推导只要一步步来就没啥问题,最大的问题就是里面的上下标,这里推荐看着那个三层的网络去写。尤其是在求W的偏导时,并不是一一对应,需要注意!
文献
这种东西也不要多看,大家用的标记都不一样,看的越多越懵逼,这里推荐两个文献,仔细看,完全够用。
[1]:http://deeplearning.stanford.edu/wiki/index.php/反向传导算法
[2]: https://blog.****.net/qq_32865355/article/details/80260212