研一主要学习神经网络的知识,导师也有为我们推导过反向传播的公式,但总是不能长期有深刻的印象,用的细节的东西还是需要翻翻笔记,这次有一个池化层(max-pooling)求导的问题有疑惑,故对BP反向传播进行复习,发现了一篇文章记载得特别清楚,且生动形象,故将总体思路在此概括。
原文地址为“https://www.cnblogs.com/charlotte77/p/5629865.html”
我以自己理解的思路为主,进行了下面的整理.
针对下面这样一个单隐层网络,i1,i2是输入,h1,h2是隐含层,o1,o2是输出层,下面有对应的输入输出和各层初始权重,b是偏置.
前向传播
i→h的前向传播公式为(sigmoid为激活函数):
类似可得到。
h→o的前向传播公式为(sigmoid为激活函数):
反向传播
总误差为:
反向传播的目的就是为了利用总误差来调整前几层的权重,如果是SGD优化算法,那就是为了求得公式中的未知项(以w5为例)。
下面以w5和w1为例。
w5:
前文的前向传播公式使得w5,net(o1)是函数关系,net(o1)和Out(o1)是函数关系,如果要求,由于其之间无直接函数关系但有间接函数关系,故而可以由链式法则求解:
由前面前向传播的公式就能很容易求出,并更新w5.
w1:
要求中的,前向的函数关系是w1→net(h1)→out(h1)→E(total) 反向传播是E(total)→out(h1)---->net(h1)---->w1,链式法则公式为:
其中这个根据前向传播公式很方便求解,而又无法直接连接,out(h1)→net(o1)→out(h1)又可以串起来,则
类似求,由此得到,最后更新w1的权重(同一层的权重更新方式雷同)。
解决池化层求导问题:
卷积后的X→经过池化之后→得到Y。
池化层没有权值,故不需要更新,而在更新卷积的权重时,正如更新前述w1的权值类似,需要由总误差对X求偏导数()而此就需要总误差对池化层的输入求导,故而池化处的反向传播,只需对输入参数求导,不需要进行权值更新。也就是:
设L为总误差,
。
fasle表示不被选择输出,即非最大值或该点不在池化框框范围内.
一个输入节点可能和多个输出节点相连。设X(i)为输入层的节点,y(rj)为第r个候选区域的第j个输出节点输出节点
。