研一主要学习神经网络的知识,导师也有为我们推导过反向传播的公式,但总是不能长期有深刻的印象,用的细节的东西还是需要翻翻笔记,这次有一个池化层(max-pooling)求导的问题有疑惑,故对BP反向传播进行复习,发现了一篇文章记载得特别清楚,且生动形象,故将总体思路在此概括。

原文地址为“https://www.cnblogs.com/charlotte77/p/5629865.html”

我以自己理解的思路为主,进行了下面的整理.

针对下面这样一个单隐层网络,i1,i2是输入,h1,h2是隐含层,o1,o2是输出层,下面有对应的输入输出和各层初始权重,b是偏置.

基于BP的误差反向传播/Max-pooling反向传播

前向传播

i→h的前向传播公式为(sigmoid为**函数):

基于BP的误差反向传播/Max-pooling反向传播

基于BP的误差反向传播/Max-pooling反向传播

类似可得到基于BP的误差反向传播/Max-pooling反向传播

h→o的前向传播公式为(sigmoid为**函数):

基于BP的误差反向传播/Max-pooling反向传播

基于BP的误差反向传播/Max-pooling反向传播

反向传播

总误差为:

基于BP的误差反向传播/Max-pooling反向传播

反向传播的目的就是为了利用总误差来调整前几层的权重,如果是SGD优化算法,那就是为了求得公式基于BP的误差反向传播/Max-pooling反向传播中的未知项基于BP的误差反向传播/Max-pooling反向传播(以w5为例)。

下面以w5和w1为例。

w5:

基于BP的误差反向传播/Max-pooling反向传播

前文的前向传播公式使得w5,net(o1)是函数关系,net(o1)和Out(o1)是函数关系,如果要求基于BP的误差反向传播/Max-pooling反向传播,由于其之间无直接函数关系但有间接函数关系,故而可以由链式法则求解:

基于BP的误差反向传播/Max-pooling反向传播

由前面前向传播的公式就能很容易求出基于BP的误差反向传播/Max-pooling反向传播,并更新w5.

w1:

基于BP的误差反向传播/Max-pooling反向传播

要求基于BP的误差反向传播/Max-pooling反向传播中的基于BP的误差反向传播/Max-pooling反向传播,前向的函数关系是w1→net(h1)→out(h1)→E(total) 反向传播是E(total)→out(h1)---->net(h1)---->w1,链式法则公式为:

基于BP的误差反向传播/Max-pooling反向传播

其中基于BP的误差反向传播/Max-pooling反向传播这个根据前向传播公式很方便求解,而基于BP的误差反向传播/Max-pooling反向传播又无法直接连接,out(h1)→net(o1)out(h1)又可以串起来,则

基于BP的误差反向传播/Max-pooling反向传播

基于BP的误差反向传播/Max-pooling反向传播

类似求基于BP的误差反向传播/Max-pooling反向传播,由此得到基于BP的误差反向传播/Max-pooling反向传播,最后更新w1的权重(同一层的权重更新方式雷同)。

解决池化层求导问题:

卷积后的X→经过池化之后→得到Y。

池化层没有权值,故不需要更新,而在更新卷积的权重时,正如更新前述w1的权值类似,需要由总误差对X求偏导数(基于BP的误差反向传播/Max-pooling反向传播)而此就需要总误差对池化层的输入求导,故而池化处的反向传播,只需对输入参数求导,不需要进行权值更新。也就是:

设L为总误差,

基于BP的误差反向传播/Max-pooling反向传播

fasle表示不被选择输出,即非最大值或该点不在池化框框范围内.

一个输入节点可能和多个输出节点相连。设X(i)为输入层的节点,y(rj)为第r个候选区域的第j个输出节点输出节点

基于BP的误差反向传播/Max-pooling反向传播

基于BP的误差反向传播/Max-pooling反向传播

相关文章: