Fork me on GitHub

深度卷积神经网络的基础知识

​ 今天主要是对卷积神经网络中的概念和经典结构做一个梳理,我主要接触到的是机器学习中偏向计算机视觉的深度学习部分,所以今天这里主要总结CNN以及一些典型结构。尽量用简单明了的语言说明每一个概念。

CNN

  • 基本概念

    • 现代的卷积神经网络,简单来说就是用卷积层来模拟对特定图案的响应,池化层模拟感受野。
    • 数据输入,输入首先经过卷积层得到响应进行仿射变换,然后经过激活层进行非线性变换。
  • 卷积层和特征响应图

    • 在深度学习中使用的卷积在不同的深度学习框架中的实现可能有些不同,有些框架中的卷积就是卷积,而有些框架中的卷积是互相关

    • 我们把卷积核做卷积之后的结果叫做 feature map。

    • 卷积核可以可以找到图像中和自身纹理最相似的部分,如果相似度越大,则响应度越高。

      同变性:

      可以想象有个框在图像上移动,不论是先做卷积再移动,还是先移动再做卷积,得到的结果 feature map 都是相同的。

  • 参数共享

    • 卷积核在任何一个位置都是不变的,所以在和卷积核对应位置求和的时候,相当于就是和同一套weight 相乘。
  • 稀疏连接

    • 这里主要是和全连接有所区别。

    假设有一个 4x4 的二维输入和 3x3 的二维输出。

    对于全连接层,权值一共有 16 x 9 个权值,但是对于稀疏连接,假设卷积核的大小是 2x2 的,卷积形式是valid,那么权值一共有 4 x 9 = 36 个权值,权值的个数只有原来的 1/4。这里还没有考虑 卷积核移动的stride所带来的对权值个数的减少。

  • 多通道卷积

    • 一张图片通常会有多个通道 channel
    • 对于多通道的输入,我们给每个通道用不同的卷积核做卷积,然后将三个通道得到的feature map 相加就可以了。
  • 激活函数

    • 卷积层的激活函数和全连接层没有多大的区别,就是要给我们的卷积结果做一个非线性变换。

    常用的的激活函数:

    Sigmod,tanh,ReLu,leaky ReLU

  • 池化、不变性和感受野

    • 池化,也就是对统计信息的提取。
      • 举个最简单的例子,我们得到一堆数据不好处理,我们将这些数据求一个均值代表这组数据,这也是一种池化。
      • 在CNN中的池化,主要是代表着对feature map上的给定区域求出一个代表这个区域特点的数值,常用的有 max-polling 和 average-polling。
      • 池化层的作用就是引入了不变性。
    • 感受野,也就是一个神经元对应feature map中的值的范围。池化相当于模拟了感受野,在感受野内任何一个值的变化,这个变化的响应都会传播到池化后的层中。
      • 所以越是高的层中一个神经元对应的感受野也就越大。
  • 分布式表征

    • 这个名称听起来比较高端,其实就是一个自然概念。
    • 比如体检的时候表格上的姓名、性别、年龄、身高等,这些特征分别列举出来,这就是分布式表征。
    • 在神经网络中,考虑每个神经元将空间划分为两个线性区域,那么n个神经元就可以划分 2^n 个区域。
    • 和分布式表征对应的局部表征或者符号表征,也就是每个概念都用一个编码或者一个样本来表述。
  • 分布式表征和局部泛化

    • 假设在一个二维空间中的样本已经是线性可分的了,那么和局部表征相比分布式表征显然有更好的泛化能力。
    • 在采用分布式表征的时候,由于局部泛化是基于函数在空间中的连续的假设,所以在样本量很大的时候,能够进行很好的泛化。
  • 分层表达

    • 神经网络每一层都相当于经过了 一层 仿射变换 + 非线性变换,把样本在一个新的空间中表示,一层层表达的传递过程中,数据在不同层面的分布式表征进行了新的表示。
    • 在计算机视觉中
      • 像素 -> 边缘 -> 基本形状 ->纹理 -> 复杂图案->……