卷积两个关键:权重共享/平移不变性,局部性。
几个相关超参数:kernel_size,stride,padding,out_channels。
一、卷积
两个原则:平移不变性,局部性。以下图为例,所谓平移不变性,就是指我在识别不同区域(即输入Xij发生平移)的红帽子的时候,既然都是识别红帽子,那么所用的识别器应当一样,即权重应该一样(权重共享,这就是我们常说的kernel)。所谓局部性,是说我们要识别帽子,只需要盯着某个像素Xij和它附近的几个像素就行了,只需要这个局部区域的信息就足以识别。
总结:对全连接层使用平移不变性和局部性得到卷积层。
二、卷积层
计算实现:二维交叉相关。二维交叉相关和二维卷积没有太大区别。
一般选用的卷积核kernel:5x5,3x3。一个kernel有一个bias值。
拓展:一维交叉相关——文本,语言,时序序列;三维交叉相关——视频,医学图像,气象地图。
总结:
三、填充padding,步幅stride
当我不想图像卷积之后变得太小,我可以对输入填充。填充:在输入周围添加额外的行/列,这样输入变大了,输出自然也变大了。
注意:上面的 和nn.Conv2d()参数里的padding不同,padding=1表示上下左右各填充1行/列,表示上下(或左右)填充的总和。 = padding*2
要想输出的图更小,把步幅变大。宽度和高度的步幅可以不一致。
步长一般取2,比如stride=2。nn.Conv2d()里的参数stride和上面一样。
总结:
四、多输入多输出通道
这个超参数需要认真去考量。
多输出通道:每个输出通道可以识别特定模式。多输入通道可以被多个kernel分别识别并组合得到一个输出通道。那么在神经网络里,底层可能识别出一些边角纹理,上层会不断组合出一个完整物体。一个核提取的特征是单一的,输出一个通道是一种特征。
下面说一个特别的东西,1x1卷积层。卷积核大小1x1,其不识别空间模式,只是融合多个输入通道。相当于in_channels * out_channels的全连接层。