概述

CNN,全名为卷积神经网络,英文为 Convolutional Neural Network,简称CNN。CNN 有着更好的处理图像和序列数据的能力,因为它能够自动学习图像中的特征,并提取出最有用的信息。卷积神经网络仿造生物的视知觉(visual perception)机制构建,可以进行监督学习和非监督学习,其隐含层内的卷积核参数共享和层间连接的稀疏性使得卷积神经网络能够以较小的计算量对格点化(grid-like topology)特征,例如像素和音频进行学习、有稳定的效果且对数据没有额外的特征工程(feature engineering)要求。

通俗的讲,CNN是模拟人类对于物体识别的过程。例如,区分猫和狗,我们可以通过一些特征来确定,比如体型、耳朵、尾巴等特征,然后根据这些特征的组合,来判断出是一只猫还是一只狗。

在CNN中,卷积层用来进行特征的提取,激活函数来进行特征的激活,池化层来对结果进行降维、提取主要特征,减少计算量。

CNN结构

Convolution:卷积层
Max-Pooling:最大池化层
Fully-Connected:全连接层

卷积层

卷积的过程,其实是一种滤波的过程,所以卷积核(Convolution Kernel)还有一个别名叫做Filter,也就是滤波器。
输入一个55的矩阵,通过一个33的卷积核,得到一个3*3的结果

卷积核的计算过程

  1. 从图像左上角开始,将卷积核与输入图像的某一部分进行逐元素相乘。
  2. 将相乘后的结果求和,得到卷积核在该部分的输出值。
  3. 重复以上步骤,将卷积核在输入图像上滑动,计算出每个位置的输出值。
  4. 将所有输出值组成一个新的矩阵,为卷积后的输出图像,即生成了新的特征图。

图像执行卷积操作

图像可以通过卷积进行一些列操作,例如边缘检测、锐化、高斯模糊、提取特定特征等等。

使用特定特征的卷积核可以识别出来特定的特征,例如识别字母X的对角线和交叉线

池化层(汇聚层)

池化层用来子采样、降采样、汇聚,常见的有最大池化、平均池化等。局部平移不变性是池化操作的前提,我们只需要关注某个特征是否出现,而不需要关注特征在哪里出现。

使用最大池化,来进行降采样,最大池化(max-pooling)保留了每一小块内的最大值,也就是相当于保留了这一块最佳的匹配结果(因为值越接近 1 表示匹配越好)。池化不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了,这也就是局部平移不变性的体现。

池化层的特点:

  1. 提高计算速度:通过降维缩小模型大小,可以提高计算速度
  2. 影响精度:虽然可以进行降采样,但是会丢失一些信息,影响模型精度

激活函数

激活函数通常用来把卷积后提取到的特征进行激活,通常使用的激活函数有阶跃函数、Sigmoid、ReLU等等,函数类似于过滤器,在ReLU函数中,会将图像中小于0的置零,大于0的保留原值

ReLU函数:

使用ReLU来对图像进行激活:

全连接层

通过加大网络的深度,增加更多的层,就得到了深度神经网络,如下图:

由于神经网络是属于监督学习,在模型训练时,根据训练样本对模型进行训练,从而得到全连接层的权重(如预测字母 X 的所有连接的权重),

其中,全连接层也可以有多个,最终,会得到一个CNN的结构:

参考:
https://my.oschina.net/u/876354/blog/1620906
https://www.analyticsvidhya.com/blog/2021/05/convolutional-neural-networks-cnn/
https://baike.baidu.com/item/%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/17541100?fr=ge_ala