Backpropagation介绍
深度学习中,常见的CNN、RNN神经网络中,参数估计通常在经过样本批处理时,使用SGD算法更新权重W和偏置b。SGD会根据样本Loss将误差后向传播,根据chain rule链式法则计算每一层的误差,从而计算总误差关于W、b的导数,从而更新W或者b。
几个定义
- 神经元:这里考虑误差传播时,通常意义下的隐藏层、输出层、输入层点
- 神经元输入:u = 前一层输出x * W + b
- 神经元输出:经过激活函数处理logistic或其他 f(u)
经典Backpropagation实现
参考文档:UFLDL反向传播算法
CNN bp实现
与全连接神经网络相比,主要区别是添加了池化功能和稀疏连接、权值共享功能。这篇论文【1】讲的很清楚。
- -总误差损耗
- -层级关系
- -相对于偏置导数
- -卷积层
- -卷积层后跟一个下采样层,计算下采样层误差
- -普通卷积传播误差计算
同时这篇文章【2】也基本上体现了我要表达的内容。
这里我只说明不同的
- -最大池化:后向传播时,只更新最大值的损耗,其他网格误差设为0即可。
- -Dropout:没选中的神经元,不用更新权重。
RNN bp实现
每个时刻都有输出,每个时刻有输出和后一个时刻的隐藏层的连接,故后向时需考虑两块导数即可。参考bptt算法。
Trick
建议看下链式法则,两个相乘时,和求和时处理。
参考
【1】Notes on Convolutional Neural Networks, Jake Bouvrie
【2】http://blog.youkuaiyun.com/u010555688/article/details/38780807
【4】UFLDL后向传播算法
【5】cs231n-convolutional-networks
【6】Supervised Sequence Labelling with Recurrent Neural Networks