为什么使用CNN?
相比全连接网络,CNN有更少的参数,且经常用于图像处理问题,这是因为图像处理任务自身的特点:
- small region:
大部分的pattern其实要比整张的image还要小,对一个neuron来说,假设它要知道一个image里面有没有某一个pattern出现,它其实是不需要看整张image,它只要看image的一小部分。
- same patterns:
同样的pattern在image里面,可能会出现在image不同的部分,但是代表的是同样的含义,它们有同样的形状,可以用同样的neural,同样的参数就可以把patter侦测出来。
- subsampling:
我们知道一个image你可以做subsampling,你把一个image的奇数行,偶数列的pixel拿掉,变成原来十分之一的大小,它其实不会影响人对这张image的理解。对你来说:这张image跟这张image看起来可能没有太大的差别。是没有太大的影响的,所以我们就可以用这样的概念把image变小,这样就可以减少你需要的参数。
CNN架构
所以整个CNN的架构为:首先input一张image以后,这张image会通过convolution layer,接下来做max pooling这件事,然后再做convolution,再做max pooling这件事。这个process可以反复无数次,反复的次数你觉得够多之后,(但是反复多少次你是要事先决定的,它就是network的架构(就像你的neural有几层一样),你要做几层的convolution,做几层的Max Pooling,你在定neural架构的时候,你要事先决定好)。你做完决定要做的convolution和Max Pooling以后进行flatten,再把flatten的output放入一般的fully connected feedforward network,然后得到影像辨识的结果。
图像处理任务的第一个特点是,要生成一个pattern,不要看整张的image,你只需要看image的一小部分。第二是,通用的pattern会出现在一张图片的不同的区域。第三个是,我们可以做subsampling。前面的两个property可以用convolution来处理掉,最后的property可以用Max Pooling这件事来处理。
convolution
property1
property2
convolution和fully connected之间的关系
convolution就是fully connected layer把一些weight拿掉了。经过convolution的output其实就是一个hidden layer的neuron的output。
max pooling
相对于convolution来说,Max Pooling是比较简单的。我们根据filter 1得到4*4的maxtrix,根据filter2得到另一个4 *4的matrix,接下来把output ,4个一组。每一组里面可以选择它们的平均或者选最大的都可以,就是把四个value合成一个value。这个可以让你的image缩小。
做完一个convolution和一次max pooling,就将原来6 * 6的image变成了一个2 *2的image。这个2 *2的pixel的深度depend你有几个filter(你有50个filter你就有50维),得到结果就是一个new image but smaller,一个filter就代表了一个channel。
flatten
flatten就是feature map拉直,拉直之后就可以丢到fully connected feedforward netwwork,然后就结束了。