CNN 卷积和池化

如何理解卷积神经网络(CNN)中的卷积和池化?- 知乎

CNN 其实可以看作 DNN 的一种特殊形式。它跟传统 DNN 标志性的区别在于两点,Convolution Kernel 以及 Pooling

1. Convolution Kernel

假设现在 Convolution Kernel 大小是 3*3,卷积公式:

y[1, 1] = sum: x[i, j] * h[1 - i, 1 - j]

注意:x 和 h 的位置刚好是翻转的

卷积公式
3*3 卷积核

Input Image 到 Output Image 的变化:
注意细节:这里的 input 和 kernel 的位置已经反转了!

经过卷积核输出

其实二维卷积一样也是加权积分。

1.1 卷积核的意义:

Convolution Kernel 具有的一个属性就是局部性,即它只关注局部特征,局部的程度取决于 Convolution Kernel 的大小。比如用 Sobel 算子进行边缘检测,本质就是比较图像邻近像素的相似性。

另一种解读:原图像与 Convolution Kernel 的卷积,其实对频域信息进行选择。比如,图像中的边缘和轮廓属于是高频信息,图像中某区域强度的综合考量属于低频信息。在传统图像处理里,这是指导设计 Convolution Kernel 的一个重要方面。

1.2 CNN卷积核的独特之处:
  1. CNN 可以看作是 DNN 的一种简化形式,即这里 Convolution Kernel 中的每一个权值就可以看成是 DNN 中的 ω,且与 DNN 一样,会多一个 bias b 参数。
  2. 一个 Convolution Kernel 在 Input 不同区域做卷积时(窗口滑动时),它的参数是固定不变的。在 DNN 的框架中理解,就是对同一层 Layer 中的神经元而言,他们的 ω 和 b 一样!只是连接的数据节点在变化!CNN 里叫做 Shared Weights and Biases
  3. CNN 中,Convolution Kernel 可能是高维的。假如输入是 m × n × k,那么一般 Convolution Kernel 就会选择为 d × d × k 维,也就是与输入的 Depth 一致,比如图像的每一个像素的深度信息。
  4. 最重要的一点,在 CNN 中,Convolution Kernel 的权值不需要提前设计,跟 DNN 一样利用 GD 来优化,只需要初始化。
  5. 如上面所说,其实 Convolution Kernel 卷积后得到的会是原图的某些特征(如边缘信息),所以在 CNN 中,Convolution Kernel 卷积得到的 Layer 称作 Feature Map
  6. 一般 CNN 中两层之间会含有多个 Convolution Kernel,目的是学习出 Input 的不同特征,对应得到多个 Feature Map。又由于 Convolution Kernel 中的参数是通过 GD 优化得到而非我们设定的,于是初始化就显得格外重要了。

2. 池化 Pooling

  • Pooling 的本质其实是采样。
  • Pooling 对于输入的 Feature Map,选择某种方式对其进行压缩。

如下图,表示的就是对 Feature Map 2 × 2 邻域内的值,选择最大值输出到下一层,这叫做 Max Pooling。于是一个 2N × 2N 的 Feature Map 被压缩到了 N × N

Pooling

除此之外,还有 Mean-Pooling,Stochastic-Pooling 等。它们的具体实现如名称所示,具体选择哪一个则取决于具体的任务。

上面的是一般池化的定义,池化还包括:

  • 重叠池化 Overlapping Pooling
  • 空间金字塔池化 Spatial Pyramid Pooling

池化方法总结 - CSDN

Pooling 的意义:
  1. 减少参数。通过对 Feature Map 降维,有效减少后续层需要的参数。
  2. Translation Invariance 平移不变性。它表示对于 Input,当其中像素在邻域发生微小位移时,Pooling Layer 的输出是不变的。这就使网络的鲁棒性增强了,有一定抗扰动的作用。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容