深度调参是门手艺,仅回答下第一个问题 -- 卷积神经网络的卷积核大小?
答案 -- 是越小越好么?
本回答仅给出为何流行的DCNN通常采用小而深的卷积核。
请看下面俩页PPT,可以给出一点启发。
(出自海德堡大学HCI Prof. Ommer 人工智能lecture)
上左图:
假设卷积核(又叫filter,neuron)是3*3,第一层卷积核的中心pixel,可以“看到”(receptive field)输入图3*3的区域(这里把它理解成“连通性”),第二层卷积核作用在第一层之上,这个卷积核的中心pixel可以“看到”原图的区域扩大成5*5.
上右图:
把三个3*3的卷积核堆积起来,第三层中的一个pixel,可以“看到”原图的pixel个数,和一个7*7卷积核一样。
下左图:
但是计算复杂度,1个7*7卷积核的复杂度是49M(M是一个常数),三个3*3的复杂度是27M
下右图:
嫌3*3这个filter还不够小?那么再把它拆成俩个1*3的"向量”卷积核吧!
结果是复杂度从9降到了6!
结论:
几个小的卷积核(例如3*3)叠加(stack)在一起,相比一个大的卷积核(例如7*7),与原图的连通性不变,
但是却大大降低了参数的个数以及计算复杂度!!!
一个直观的例子:
上图是一个7*7的卷积核(神经元),它可以刻画(识别)右图中的曲线。(当输入图片出现右图中的模式时,这个神经元就会“放电”)
然而,由于空间太小,一个3*3的卷积核却表示不了。
搞三个3*3的叠加不就行了嘛!?(把叠加想象成拼图,于是右图可以由三小块拼成)
我们还可以搞个100*100的卷积核,它可以刻画几乎任何复杂的形状。
但是,复杂度太太太高。
或许搞20个3*3的叠加就可以复现上面的任何形状。
结论:
这就是深度学习
喜欢小而深,厌恶大而短。
这里指的是卷积核大小,和层数。
So, why not use smaller neurons, and deeper and deeper?
参考文献和博客:
更多人工智能、优化理论干货,尽在 @运筹OR帷幄:『运筹OR帷幄』大数据人工智能时代的运筹学zhuanlan.zhihu.com