神经网络反向传播的精确数学证明 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,这里不使用)
 Delta,这里不使用)
上一部分说到总误差cost 相对于某个具体的w的的变化率(微分),
直接求是求不出来的,中间有很多层,让我们一层一层的剥离开来,
最核心关系就是 ,
,    是未激活的神经元,l是层数,j是第j个神经元,
是未激活的神经元,l是层数,j是第j个神经元,
我们可以看出, 与
与  的关系就是靠 w 连接的
的关系就是靠 w 连接的
有什么启示呢,
启示就是,我们可以从最后那个神经元 出发, 求出C相对于网络中任意层次的 z 的微分:
出发, 求出C相对于网络中任意层次的 z 的微分:
  是可以求出来的,因为
是可以求出来的,因为 ,                  (1)
,                  (1)
然后  任意相邻两层的z的微分, 根据上面的'核心关系'式,也可以求出来,  (2)
任意相邻两层的z的微分, 根据上面的'核心关系'式,也可以求出来,  (2)
 ,把(1)和(2)两个关系式相乘,你就得到了倒数第二层的z的微分,
,把(1)和(2)两个关系式相乘,你就得到了倒数第二层的z的微分,
根据这个原理,你可以求出倒数第三层,倒数第四层......任意一层的z的微分,
在我们已经能求得 cost相对与任意一个神经元z的微分 
再然后,最后一个关系式, , 明显
, 明显 很容易求出, 因为
很容易求出, 因为
所以现在我们就能求出一开始我们想要的 
//为了偷懒,后面我省略了下标jk
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号