BackPropagation(BP, 误差反向传播)的一些理解

在现代神经网络中, 使用最多的算法当是反向传播(BP). 虽然BP有着收敛慢, 容易陷入局部最小等缺陷, 但其易用性, 准确度却是其他算法无可比拟的.

在本文中, 为连接前一层和后一层的权值.


BackPropagation(BP, 误差反向传播)的一些理解

在MLP中, 对于输出层神经元, 它的输入按下式进行计算(忽略偏置):

可以看到它的输入等于前一层所有神经元的输出和对应连接的加权和, 如上图

的输出按下式计算:

. 这就是一个非线性变换sigmoid,

对于有监督训练, 期望输出和实际输出现在都是已知的, 定义误差为:

其中的是输入-输出样本对的标号, 是输出层神经元的标号.

为求出,

我们先求(之后就知道为何如此):

, 此为误差对神经元输出的偏导.

由链式法则:

, 及上面的输入输出的关系式

我们可以求出误差的输入的偏导:

至此, 我们得到了误差对于输入的偏导, 但网络训练的是权值(偏置), 所以我们必须知道对于的偏导表达式.

同样由链式法则:

, 及本层输入和权值的关系式:

, 可得 , 即:

E/wji=E/xjyi

其中为前一层神经元的输出, 为后一层神经元的输出.

为了处理中间层, 我们同样是按照链式法则, 对于第i个神经元, 我们可以求得误差对其输出的梯度(注意这里是, 不是):

考虑到第i个神经元的所有连接, 可以得到:

 (1)

这里的为误差对于后一层的神经元输入的偏导.


我们梳理一下:

对于连接神经元和神经元的权值, 主要有3个偏导分子, 输入, 输出和权值, 他们的关系如下:

 (2)[基于的非线性转换关系式];

(3)[基于的加权求和公式].

为求得上面的式(3), 我们需要求得, 而为求得, 需要求得.

对于输出层(最后一层), ;

对于中间层, 按式(1)进行计算, 而式(1)中的是由算出来的. 当我们算出中间层的之后, 把式(2)中的全部替换成就可以计算出从而计算出式(3), 注意此时的式(3)中的应该变为第i个神经元的前一层的对应神经元.

如此迭代, 我们就可以更新所有的权值啦.

权值调整的公式如下:

 


 

总结:

BP的精髓: 如何通过链式法则求出

求法: 

注意, 以下推导, 统一使用 作为当前层前一层的神经元下标, 作为当前层的神经元下标,  作为后一层神经元下标.

对于最后一层:

 (1)

其中,

 (2)

(3, 已求出, 谢谢背锅侠指正)

式(2)中,

 (已求出)

 (已求出)

从而计算出误差对[最后一层到倒数第二层的权值]的梯度.

对于倒数第二层:

唯一变化的只有 的求法. 同样适用链式法则展开:

, 其中  为后一层(最后一层)的第个神经元输出.

由于(非固定, 每层表达式取前一层计算结果),

,

其中  (固定的, 每层表达式都一样)

 (固定的, 每层表达式都一样)

 (固定的, 每层表达式都一样)

从而有  (非固定, 用于下一层的误差梯度计算)

最终: 

倒数第三层

可将倒数第二层求出的的作为本层的, 可计算出 , 从而计算出 .


相关文章:点击打开链接