Convolutional Neural Network (to be continued)

来源:互联网 发布:蚁群算法matlab 编辑:程序博客网 时间:2024/05/21 17:10

毕设决定做CNN,东西确实挺繁的,今天刚把CNN中具体的反向传播算法搞明白,感觉收获也有一些:

1,起先总是认为所谓的CNN,局部感受野,权值共享什么的都是预先训练好的,主要是因为自己刚看完Ng的UFLDL,其中出现用Feature extraction using convolution and pooling这些。。后来想到其实这只是一个例子而已,可能还算不上广义的CNN(可能蕴含了CNN的思想吧)。总的来说,应该把CNN理解成一种network architecture,也就是受神经生物学启发,设计的一种具有“局部感受野,权值共享”性质的网络结构。

2,有了第一点的认识,自己就开始考虑所谓的广义的CNN应该怎么训练呢,毕竟这种网络结构挺特殊的,具体的BP算法怎么弄呢。。
带着疑问读了notes on convolutional neural networks 这篇论文也是UFLDL推荐阅读的,自己读了一部分(具体的:3.3以后关于组合特征图的比重学习部分没怎么看明白),真是反反复复地看了好几遍,才总算摸清了一些,期间主要参考了tornadomeet的cnblog,这个博客作者总结得挺好的,理解清楚如何在CNN中使用BP其实就是两个问题:

  • 卷积层后接pooling层时
  • pooling层后接卷积层时

两个场景下,均通过传统的先求sensitivity map然后再求bias gradient的方法。而具体的公式说到底还是要把网络结构、连接情况捋清楚,然后严格地按数学原理一步步来就行了。

简单说:
第一个问题卷积层的sensitivity map 计算比较简单,难点主要是理解清楚下面这个公式,是关于卷积核的梯度公式(注意是卷积核,不是权重矩阵),这里事实上是用卷积运算代替了相关运算(问题二才真正地是要用卷积)
这里写图片描述

第二个问题主要在于sensitivity map的计算,这里为了计算pooling层的sensitivity map,确实要用权重矩阵(下图是用卷积核表示的,也就是rot180(k l+1 j ) )去卷积δ l+1 j  , 并且参数要用 ‘full’.
这里写图片描述

简单先写这些,具体可以看论文或者推荐的博客。

0 0
原创粉丝点击