CNN卷积神经网络tips总结
所有过程的参数都是joint train,其中layer中的所有参数都是同时一起找出来的
Convolution(卷积)过程:
在convolution layer里有一组filter,每个filter都是一个matrix(这里图片假设为黑白的,所以只有一个chanel,即filter可看作3*3的matrix),这些matrix中的参数是被学出来的,我们只是先决定有多少个filter以及每个filter的大小,接下来filter中的参数是machine自己通过training data找出来的
由于一些时候不去要看整张image,所以只需要部分(property 1)
通过输入的image与filter(过滤器)做内积,所得结果可以通过数值大小来反映出相似的部分(property 2)
所有的filter进行convolution后得到的为feature map,可将所得到的feature map看作新的image,与输入的image相比,新的image可能更小,但能被比较多的value所描述,取决于现在有几个filter
如上图,输入的6*6的image与两个3*3的filter经过convolution之后得到的feature map看作新的image,则这个新的image大小缩小为4*4,但每个pixel被两个value描述
当考虑彩色图片时,有三个颜色的chanel,所以此时filter变为3*3*3的立方体
convolution可看作fully connected的简化版
但每个neuron只连接了部分的input,而不是全部的input,且对应到同一个filter的neruon的权重参数数值相同,因此大幅减少了很多参数
如上图,将左边6*6展开得到右边1到36,现在有一个neuron连接到的input对应1-3,7-9,13-15共9维,而这个neuron连接这9个pixel的weight就是filter对应的matrix里的9个数值,neuron连接的output是3;同理第二个neuron与红框框起来的9个为input,output为-1,而他对应的weight和第一个neuron对应的相同,即共用参数。
Pooling(池化)过程:
把通过filter得到的matrix中的元素分组,每组中选择一定操作规则,留下代表元素
如上图,以max pooling为例,将四个元素分为一组,每组中留下最大值
(注意:可选择多个指标作为每组的代表,eg.可以同时留下max pooling 和 average pooling)
卷积和池化可以进行多次,直到得到足够小的输出image
当得到的image足够小时,可以进行flatten
Flatten(平铺)过程:
当经过卷积池化后得到足够小的image输出时,将它拉直
将拉直后得到的vector丢进fully connected network里
fully connected network 会给我们一个output
ps:
通常cnn的filter是由少到多
training 就是 gradient ascent
subsampling 下采样 即 缩小图片