目录
老饼讲解:一步一步上手学习

【推导】BP神经网络-梯度的推导

作者 : 老饼 发表日期 : 2025-11-16 15:04:56 更新日期 : 2026-05-14 15:12:30
老饼讲解-简单易懂,干货满满,爽过嗦螺!


BP神经网络的训练算法很多,但各种训练算法一般都要用到各个参数(w,b)在误差函数E中的梯度,因此求出w,b在误差函数中的梯度就成为了必不可少的一环。好了,这节我们就带大家一起来推导一下BP神经网络的梯度。

前言

事实上,并不建议入门同学跑来详细看推导过程,真的很繁琐,而且看了也没啥用、浪费时间,一般都是调用工具箱来训练,没必要自己去算梯度。但是,我前面给大家展示了BP神经网络是怎么用梯度下降算法训练的,所以为了完整性,我这里不得不展示梯度公式的推导,但入门同学不用跟着我来这么较真,以后无聊时想看再看就好了。

      对于一些确实需要用到三层BP梯度公式的同学,可以耐心的看完本文的推导,初看这么多公式的确很劝退人,但其实再也没有比这更易懂、更清晰、更准确的推导了,只要一点耐心,就会发现它虽繁琐但却简单,越看越会往下看。真人真事,有个读者需要三层BP梯度的公式推导,我让他自己看文章,他是抗拒的,说他的符号表示不一样什么的,希望我能用他的符号帮他写一下推导,300还是500我也忘了,我是一点也不想赚这个钱,只需换一下符号而已,我让他自己看,最后他自己实在没办法了,只能自己来看了,然后发现这东西根本一看就明,就是耗时而已。

一、BP神经网络-梯度公式-推导前的准备

好了,由于BP神经网络的梯度公式推导公式非常繁琐,全程必须保持清晰,所以在推导前,我们先来把一些推导过程中涉及到的内容梳理一下。

1.1. BP神经网络-梯度公式-推导目标

首先,我们先把BP梯度推导的目标清晰化。

ok,求BP神经网络的梯度公式,其实就是求以下误差函数E对各个w,b的偏导:

 其中,

    :训练样本个数                

    :为输出个数                  

   :第k个样本第m个输出的真实值  

           :网络对第k个样本第m个输出的预测值 

所以呢,梯度推导在理论上很简单,只需要利用我们高中时期那点知识,来对函数求导就可以了。

1.2. 本文梯度公式推导目标

虽然BP神经网络的梯度只是简单地求E对w,b的偏导,但E中包含BP神经网络的表达式f(x),求偏导就成了极度艰巨晦涩的苦力活,对于多层结构的BP神经网络,梯度推导稍为抽象,本文不妨以最常用的三层结构作为具体例子入手,求出三层结构的梯度公式,即:输入层-隐层(tansig)-输出层(purelin) 这种结构。

虽然只是三层的BP神经网络梯度公式推导,但整个梯度公式的推导过程,仍然不仅是一个体力活,还是一个细致活,且让我们细细一步一步慢慢来。

1.3. 三层BP神经网络的表达式-梳理

由于BP神经网络的误差函数E中包含了BP神经网络的表达式,因此,在推导梯度之前,先将网络的表达式梳理清晰,有助于后面的推导。

好了,我们先来展示一下BP神经网络表达式,一个隐层传递函数为tansig,输出层传递函数为purelin的三层BP神经网络(2输入、3隐节点、1输出), 它的数学表达式参考形式如下:

三层BP-模型表达式-参考形式

它的矩阵形式为:

 

其中,

是隐层的权重和阈值,是输出层的权重和阈值

这里的为矩阵,为向量,特别地注意,代表的是:后层的第i个节点与前层的第j个节点连接权重。

为了更形象,我们以2输入,4隐节点,2输出的BP神经网络为例,它的公式图解如下:

 BP神经网络的参数Size

好了,大家也不用太仔细看,直接跳过就可以了,这里展示得这么细节,这都是为了在下面看推导的时候方便参考,如果下面看推导时,不觉得抽象,就不用回头来看啦,如果觉得很抽象,就回头来看看,可能会好理解些。

二、BP神经网络梯度-推导过程(三层)

好了,终于开始正式推导啦,推导过程有些长,但是,如果你仔细看就会发现,长是因为详细、简单、具体,每一步都不跳跃,看起来只会繁琐,但不会很费脑子,闲话少说,开干!

预备:简化BP神经网络梯度推导目标

由于误差函数E的表达式较为复杂,不妨先将问题转化为"求单样本梯度"来简化BP神经网络梯度推导。

对于任何一个需要求偏导的待求参数w,都有:

 

提示:第一个等号是利用了上面所说的E的公式表述哦

也就是说,误差函数E的梯度,等于单个样本的误差函数的梯度之和的均值(E对b的梯度也如此),因此,我们可以先推导单个样本的梯度,最后再对单样本梯度求和取均值即可。

对于BP神经网络梯度推导,现在问题简化为求单个样本的梯度:

其实这是很重要的,许多推导里都没指出这点,也就是BP神经网络的梯度是"先求单样本梯度、再求梯度均值"。

2.1. 输出层权重的梯度推导

输出层的权重为"输出个数*隐节点个数"的矩阵,现推导任意一个权重wji (即连接第i个隐层与第j个输出的权重)的单样本梯度,如下:

 

事实上,只有第j个输出是关于 的函数,也即对于其它输出 ,因此, 上式即等于:

 

继续求导

由于是第j个输出的误差,简记为

由于是第i个隐节点的激活值,简记为

上式即可写为:

   

上述是单样本的梯度,整体样本的梯度则应记为 

  

其中,为样本个数、输出个数

是第m个样本第j个输出的误差

是第m个样本第i个隐节点的激活值 

2.2. 输出层阈值梯度推导

对于阈值 (第j个输出节点的阈值)的推导与权重梯度的推导是类似的,只是上述标蓝部分应改为

 

简记为:

 

上述是单样本的梯度,将它的形式推广到整体,则整体样本的梯度则应记为 

  

 为样本个数、输出个数

是第m个样本第j个输出的误差

2.3. 隐层权重的梯度推导

隐层的权重为"隐节点个数*输入个数"的矩阵,现推导任意一个权重 (即连接第i个输入与第j个隐节点的权重)的单样本梯度,如下:

只有第j个tansig是关于 的函数,所以上式可以写成

 

继续求导 

又由,所以上式为:

简写为

上述是单样本的梯度,对整体样本则有:

 

其中,

 为样本个数、输出个数                                                 

是第个样本第个输出的误差       

是第m个样本第个隐节点的激活值          

是第个样本第个输入                                                   

2.4. 隐层阈值的梯度推导

对于阈值 (第j个隐节点的阈值)的推导与隐层权重梯度的推导是类似的,只是蓝色部分应改为:

又由所以上式为:

简写为

                          

上述是单样本的梯度,对整体样本则有:

      

其中,

 为样本个数、输出个数                                    

     是第m个样本第k个输出的误差

 是第m个样本第j个隐节点的激活值


三、三层BP神经网络梯度推导-结果总结

综合上述推导结果,BP神经网络梯度公式如下:

一、输出层梯度公式
       输出层权重梯度:
 
       输出层阈值梯度: 
二、隐层梯度公式
       隐层权重梯度:  
       隐层阈值梯度: 
三、符号说明
       :样本个数、输出个数
       
:第m个样本第i个输入
       
:第m个样本第k个输出的误差,即
       
:第m个样本第i个隐节点的激活值                     

从公式可以看到只要先计算出误差E和隐层激活值H,然后代入公式就可以计算出各层参数的梯度了。

总结

好了,这节详细的推导了三层BP神经网络的梯度公式,事实上,这是一种较为粗爆的推导方式,毕竟,三层的BP神经网络如此简单,直接粗爆推导是最简单的事情了,但是,如果是很多层,那这样的推导方式就不行了,就要采用BP后馈传播算法来推导。



图标 评论
添加评论