关于Backpropagation在DeepLearning的一点思考

Backpropagation介绍

深度学习中,常见的CNN、RNN神经网络中,参数估计通常在经过样本批处理时,使用SGD算法更新权重W和偏置b。SGD会根据样本Loss将误差后向传播,根据chain rule链式法则计算每一层的误差,从而计算总误差关于W、b的导数,从而更新W或者b。

几个定义

  • 神经元:这里考虑误差传播时,通常意义下的隐藏层、输出层、输入层点
  • 神经元输入:u = 前一层输出x * W + b
  • 神经元输出:经过激活函数处理logistic或其他 f(u)

经典Backpropagation实现

参考文档:UFLDL反向传播算法

关于Backpropagation在DeepLearning的一点思考_第1张图片

CNN bp实现

与全连接神经网络相比,主要区别是添加了池化功能和稀疏连接、权值共享功能。这篇论文【1】讲的很清楚。

  • -总误差损耗

  • -层级关系

  • -相对于偏置导数

  • -卷积层

关于Backpropagation在DeepLearning的一点思考_第2张图片

  • -卷积层后跟一个下采样层,计算下采样层误差

  • -普通卷积传播误差计算


同时这篇文章【2】也基本上体现了我要表达的内容。

这里我只说明不同的

  • -最大池化:后向传播时,只更新最大值的损耗,其他网格误差设为0即可。

关于Backpropagation在DeepLearning的一点思考_第3张图片

  • -Dropout:没选中的神经元,不用更新权重。


RNN bp实现

每个时刻都有输出,每个时刻有输出和后一个时刻的隐藏层的连接,故后向时需考虑两块导数即可。参考bptt算法。

Trick

建议看下链式法则,两个相乘时,和求和时处理。

参考

【1】Notes on Convolutional Neural Networks, Jake Bouvrie

【2】http://blog.csdn.net/u010555688/article/details/38780807

【3】wiki-Backpropagation

【4】UFLDL后向传播算法

【5】cs231n-convolutional-networks

【6】Supervised Sequence Labelling with Recurrent Neural Networks

你可能感兴趣的:(ml,随笔)