traingd、trangda的原理与重现
梯度下降法
BP梯度公式推导
作者 : 老饼 日期 : 2022-06-09 04:53:14 更新 : 2022-06-29 01:24:58
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com



  一、损失函数表达式  


BP神经网络使用均方差MSE作为损失函数


单输出时的损失函数


单输出时,损失函数如下:       
 
  其中,                                    
  m为样本个数                          
 为第i个样本网络的预测值   
 为第i个样本的真实值         


多输出时的损失函数


k个输出时,损失函数拓展如下 :           
 




  二、预备名词与分析  


以下是推导过程中,涉及的一些重要知识。


   (一) 神经元值与激活值   


神经元值的是神经元上的值,用N表示,
而激活值则是指激活后传递给下一层的值,我们用A表示。



   (二) 权重W的表示方式   


用  表示第 k-1 层到第 层的权重。
它是一个的矩阵(  为第k层的隐神经元个数)
  则代表第k-1层第j个神经元到第k层第i个神经元的权重



   (三) 神经元值的传导关系分析   




k-1层与 k 层的神经元值关系为:

 


图示如下







  三、梯度推导过程  

  (一) 简化推导  


1、转化为求单样本梯度简化推导表达式

即损失函数的梯度,等于单个样本的损失函数的梯度之和(E对b的梯度也类似),

因此,我们先推导单个样本的梯度,最后再对单样本梯度求和即可。


2、使用复合求导简化推导问题

对于求第k-1到第k层的权重梯度 时,
我们可以把E看作第k层隐神经元的函数:

其中,

p:第k层的神经元个数
说明:为简化表达,上标加撇的代表k-1层,不加的代表第k层,
如:用NN 代表第k层的神经元值,用N'代表k-1层的神经元值



  (二) 权重W的梯度  

先对Wij (前层j节点到本层i节点的权重)求偏导:

即Wij的偏导,为第k层第i个节点的梯度,与第k-1层第j个神经元激活值的积。
则对整体的W有:



   (三) 阈值b的梯度   


先对bi(前层j节点到本层i节点的权重)求偏导(与Wij是类似的,只是最后一步不同):

则对整体b有:


   (四) 节点值的梯度   


W和b的梯度都依赖于E对k层节点值N的偏导数,
为了沿用上面的符号,
这里我们不妨求出k-1层节点值N'的偏导数,
这与求 是一样的。
先对第k-1层的第j个节点求偏导:

则对所有的N'有:

由于式中仍然依赖于下一层节点的梯度值,因此,我们需要计算最后一层的节点梯度即 


(五) 未层节点值的梯度


先对 N^{(end)}_j求偏导,有:
(为简化符号,不再加end上标,下面的T和N都是指最后一层的T和N)

即有,



(六) 激活函数的梯度


节点的梯度中,依赖了激活函数的梯度,对于常用的激活函数,有:
当 T 为tansig时:
当 T 为logsig时:
当 T 为purelin时:
备注:N是节点值,A代表N的激活值。



   (七) 梯度计算总流程   


从最后一层开始往前计算W和b的梯度:
计算第k层节点时,如下
(1)计算第k层的节点梯度
 
其中,
当 T 为tansig时:
当 T 为logsig时:
当 T 为purelin时:
(2)计算第k层的阈值梯度 和k层到k-1层的权重梯度\dfrac{\partial E}{\partial W^{(k-1,k)}} 

 



  四、常用三层设置的梯度计算公式   

特别地,当我们只有一个隐层,

并且隐层激活函数为tansig,输出层为purelin时,

即有:

1、隐层到输出层

输出层的节点梯度,

输出层的阈值梯度和隐层到输出层的权重梯度为:


2、输入层到隐层

隐层的节点梯度,

隐层的阈值梯度和输入层到隐层的权重梯度:

  









联系小饼