反向传播的数学推导

痛定思痛。 2022-05-31 04:45 426阅读 0赞

前一篇手写识别的博文《深度学习数学基础—反向传播》中已经简单分析和推导过反向传播的原理,但是基于特定的场景给出的推导过程,现在我们再来系统的加深下神经网络反向传播的算法理解。

首先定义几个变量。

我们用20180207162235971来表示(l-1)层第k节点到l层第j节点的权重w

例如:

20180207162312404

我们用20180207162347293来表示l层第j节点的偏差b,用20180207162438363来表示l层j节点所受到的总影响。

例如:

20180207162511310

可以分析得出整个神经网络正向是个递归推进的过程,公式如下:

20180207162544462

其中σ是转换函数,在手写识别案例中σ就是sigmoid函数。

公式用矩阵简化后为:

20180207162629253

20180207162659888再对公式进行一次简化:

20180207162728356

整个网络输出的误差计算公式:

20180207162828904

这里需要注意前面用的都是小写的l,对应着具体的l层节点的运算;最终误差这里用的是大写的L,对应着整个神经网络的总体的运算。

以上都是铺垫,下面我们来真正看一下一旦我们对神经网络中的某个节点做出改变会如何影响到整个网络。

如图对l层第j节点有个小恶魔做了微小的变动20180207162909834

20180207162921438

改变后对该节点的产出变为:20180207163010101,对α的的影响是20180207163028003

假设20180207163047279

套用公式三后结果为:

20180207163130441

前面介绍过L大小写的区别了,小恶魔对整个网络引起的差异速率为:

20180207163151198

对公式四求导带入上面公式得:

20180207163211417

PS:这是很重要的一步,因为万事开头难,对于反向传播来说整个网络output层反倒是修正时的最原始的input,到目前为止我们已经有了这个“input”的计算公式了,下面要解决的就是如何将其一点点往真正的input方向传递。

上面是站在整个网络上宏观的来分析对最终的输出造成的影响,下面我们聚焦到小恶魔只对后面一层(也就是l+1层的影响速率)

根据公式二推导出:

20180207163245506

PS:这是另一个里程碑式的成功,因为我们具备了从l+1层计算l层误差率的方式。


有了上面2个ps的理论,我们反向传播LàL-1àL-2à……l+1àlàl-1à….这条路就彻底打通了。

我们上面的小恶魔改动的是20180207163317535,最终我们产出的是每层的权重和偏差,再根据公式二求偏导:

20180207163353603

这两个结果很容易推导的过来,但是给我们的启发是在求偏差还好通过结果数据可以计算的出来,但是在求每层权重的时候需要用到本节点的输入(也就是上一个节点的输出),所以我们在正向的运算时就需要把这些数据维护起来,否则无法完成反向传播的过程。

于是理解了上面的推导过程我们在处理反向传播时就有了一套很成熟的方法论了:

第一步:

将原始出入x作为α1的输入

第二步:

利用20180207163445725正向运算记得维护每层的输出。

第三步:

利用20180207163515717求网络总输出的误差率

其实这么写是为了方便理解,因为我们这里的求误差的方式是公式四,如果不是用欧氏距离来求误差需要修改等号右边第一个括号内的内容。

第四步:

利用20180207163548016从后向前求每一层的误差率

第五步:

利用20180207163609135求每一层的权重和偏差

第六步:

设置好步长和循环次数不断调优。

有了本篇的理论基础再回头看深度学习数学基础—反向传播求导过程和代码应该如虎添翼了吧。

发表评论

表情:
评论列表 (有 0 条评论,426人围观)

还没有评论,来说两句吧...

相关阅读

    相关 反向传播数学推导

    前一篇手写识别的博文《[深度学习数学基础—反向传播][Link 1]》中已经简单分析和推导过反向传播的原理,但是基于特定的场景给出的推导过程,现在我们再来系统的加深下神经网络反

    相关 BP反向传播详细推导

    BP神经网络是反向传播算法,他是一个非线性的前馈神经网络。由于网络参数需要更新,反向指的是参数梯度的反向传播,输入向前传播。非线性是因为神经元的激活函数是一个非线性可导的sig