神经网络反向传播的精确数学证明 Back Propagation

为什么要使用Back Propagation? 

 

上模型,直接走到 Forward Propagation 的部分:
j 表示当前层的神经元数量, k 表示上一层神经元的数量,
大括号是激活函数,

 

下一步,我们要训练神经网络,
对每个神经元对参数w、b进行微调,让预测结果更接近真实值,
怎么对w和b进行微调?

 

如果是简单的线性模型,

先找到cost function, 根据cost相对于权重W的导数,
然后让W向导数相反的方向,乘以某个学习率,每次改变一点点, 

线性模型:

  ,

 

可问题是,我们的神经元这么多,
具体到某一个w要怎么调整就成了问题,
求微分也不知道如何下手,

 

如果我们能知道 总误差cost 相对于某个具体的w的的变化率(微分)
那么我们就知道该如何微调了, 

 

                            
 是最后结果的误差,是某个神经元的权重

 

变化率(微分)越大,说明这个w(jk)对cost的影响越大,
我们只要让这个微分降到接近0, 就说明它对总体误差已经几乎没有影响了,
换句话说就是,
这个权重w已经调整到位了,它造成的误差很小了

 

如何求得这个微分呢?
这就是Back Propagation能做到事了

 ---------------------------

现在开始说Back Propagation

(很多解释都要引入概念 Delta,这里不使用)

 

上一部分说到总误差cost 相对于某个具体的w的的变化率(微分)
直接求是求不出来的,中间有很多层,让我们一层一层的剥离开来,

最核心关系就是,   是未激活的神经元,l是层数,j是第j个神经元,

我们可以看出,与 的关系就是靠 w 连接的

 

有什么启示呢,
启示就是,我们可以从最后那个神经元出发, 求出C相对于网络中任意层次的 z 的微分:
 是可以求出来的,因为,                  (1)
然后 任意相邻两层的z的微分, 根据上面的'核心关系'式,也可以求出来,  (2)

,把(1)和(2)两个关系式相乘,你就得到了倒数第二层的z的微分,
根据这个原理,你可以求出倒数第三层,倒数第四层......任意一层的z的微分,

 

在我们已经能求得 cost相对与任意一个神经元z的微分 

再然后,最后一个关系式,
, 明显很容易求出, 因为

 

所以现在我们就能求出一开始我们想要的 

 

//为了偷懒,后面我省略了下标jk

posted @ 2017-07-06 17:48  烧鸭饭真好吃  阅读(395)  评论(0编辑  收藏  举报