一天搞懂深度学习—学习笔记2(CNN)

1.卷积神经网络(convolutional neural network)

当处理图片的时候,第一层全连接层将会非常大。为什么呢?想像一下,对于一个100 * 100 * 3的图片,如果第一层神经元个数为1000个,那么将会需要3*10^7+1000个参数,这是很大的一个数字,各位可以感受下。

神经元需要知道整个图片的信息去找到它的模式么?
答案是否定的,一般来说,对于一类图片,有一些特征可以唯一标识这一个种类。好比据说人的耳朵有个部位是一个人的标识,而且不会随着年龄的增大而变化。而且对于输入的图片,我们不能担保它可用对象一定能出现在某个位置,因为我们需要找寻这个位置(这也是很热门的一个领域,detection)。一旦我们找到这样一个小范围,我们可以输入这个小范围的图片信息,减少了各层次间连接的参数。

卷积神经有哪些结构
卷积、池化、卷积、池化、卷积、池化、……、flatten
我们来看一个好看的图,让我们更形象的去理解卷积神经网络。这是卷积神经网络算法的一个实现中的一张图片

一天搞懂深度学习—学习笔记2(CNN)

该图的输入是一张28*28大小的图像,在C1层有6个5*5的卷积核,因为C1层输出6个(28-5+1)(28-5+1)大小的feature map。然后经过子采样层,这里假设子采样层是对卷积层的均值处理(mean pooling), 其实一般还会有加偏置和**的操作,为了简化,省略了这两步,只是对卷积层进行一个采样的操作。因此S2层输出的6个feature map大小为(24/2)(24/2).在卷积层C3中,它的输入是6个feature map,与C1不一样(C1只有一个feature map,如果是RGB的话,C1会有三个channel)。C3层有12个5*5卷积核,每个卷积核会与上一层的6个feature map分别做卷积(事实上,一般是选择几种输入feature map来做卷积,而不是全部的feature map),然后对这6个卷积结果求和组成一个新的feature map,即该层会有12个大小为(12-5+1)*(12-5+1)的feature map,这个feature map是经过sigmod 函数处理然后结果下一层S4。

再来一张动态图,让你们更清楚了解CNN卷积过程

一天搞懂深度学习—学习笔记2(CNN)

以上代码块中的卷积和中的参数是需要学习的,也就是说会给定一个初始值,然后在反复训练的过程中更新参数。另外想说的是,如果存在全0填充的话,图片经过巻积层后维度不会降低;没有的话,就会根据步长大小维度减少。

一天搞懂深度学习—学习笔记2(CNN)

池化层才是维度降低的关键位置,简单的例子看下图,池化层的步长和大小决定了维度降低的数量。

一天搞懂深度学习—学习笔记2(CNN)

flatten见下图,就是做了一个reshape操作,数据不变,维度改变。

一天搞懂深度学习—学习笔记2(CNN)

参考文献:
1. http://blog.csdn.net/zhongkeli/article/details/51854619
2. http://blog.sina.com.cn/s/blog_8e5ce7190102wspj.html
3. http://www.cnblogs.com/hunttown/p/6830581.html