粗浅认识

卷积神经网络(Convolutional Neural Network)是一个对图像处理深度学习神经网络架构。说白了,就是人家用深度学习的那个神经元,模仿生物视觉,搭建了一个网络架构,这个网络架构可以有效实现对图像的特征提取。

解决问题

最开始机器学习想要处理图像的问题时,要么直接把图像的数据变成一个一维数据,使用特征工程提取数据的多个特征,就直接用SVM什么的传统机器学习算法对提取的特征进行预测分类要么人工提取特征,统计数据分布,把分布概率作为特征向量。

总之就是很笨的方法,可以看到有这里面两个痛点:

1.如果图像需要处理的数据量太大,现在随随便便一个图片都是1000x1000以上的,每个像素点用RGB三个参数来表示颜色,如果我们要处理一张1000x1000的图片,就有
1000×1000×3=3,000,000 三百万个参数!!!
人工根本处理不过来,根本处理不过来,导致成本很高,效率很低

2.图像在数字化的过程中很难保留原有的特征,导致图像处理的准确率不高,由于图像本身的像素点数据很多,手动设计特征不够充分,图像中关联信息未被发掘等等因素,特征充分很难保留。

然后就有CNN来解决这些问题,让图像数据处理快速,并且保留尽可能完整的特征。

它怎么这么实力就解决了这些问题?我们现在就来说。

逻辑直觉

要想让数据好处理,首先是要把复杂的问题简化,把大参数降维成少量参数,再进行处理。

从图像的直觉也可以发现,无论是高清蓝光的图片还是流畅画质的图片,你依然可以分辨出图像的内容是什么。也就是说降维能够在不损失特征的同时减少参数。

而要保留原本特征的信息,就得关注到细微的特征。

这两行特征只是一个1的位置不同,表达的信息就完全不一样了,所以要关注到细微的特征。

基于以上两点,CNN的逻辑直觉就是对输入数据分块式的处理,捕捉数据的空间结构,然后提取微小的局部特征,进行降维,得到图像中边缘、纹路等低级特征,通过堆叠多个卷积层,网络逐渐组合这些低级特征,形成更高层次,更抽象的整体特征。

基本原理

经典的卷积神经网络主要由三个部分构成:

  • 卷积层
  • 池化层
  • 全连接层

一般来说,卷积层负责获取特征,通过卷积操作学习图像中的局部特征,然后池化层负责降维,通过保留主要信息的方式减小特征图的空间尺寸,全连接层放在最后根据先前层提取的的特征执行分类任务。当然卷积层和池化层可以交替摆放,可以在降维的同时对重要信息捕捉。全连接层可能也没有用到,而是用平均池化层来输出。这里先说一般的情况。

卷积层

卷积是CNN中的核心操作之一,负责大部分计算。

卷积的目的是获取特征。

卷积运算常用的计算方式是通过将卷积核与输入数据进行逐元素相乘,然后对结果求和(矩阵点乘),最后将求和的结果放在输出的相应位置。如下图,绿色的是(5\times 5)的输入数据,黄色的是(3\times3)的卷积核,然后是输出结果(3\times 3)的特征图。

卷积核(Kernel):卷积核是卷积神经网络中的参数,它是一个小型的可学习的矩阵。卷积核的作用是像一个窗口一样对输入数据进行局部的特征提取。有些地方它也叫做过滤器(Filter)

过滤器(Filter):可以看做是卷积核的集合,包含一个或者多个卷积核。一个filter对应图像的一种特征,比如亮度,锐度,纹理等,一个卷积层可以有过多个filter,用来提取对应数量的特征,并送往下一层。

具体而言,假设有一个大小为 (k \times k) 的卷积核和一个大小为 (m \times n) 的输入矩阵,那么输出矩阵的大小将是 ((m - k + 1) \times (n - k + 1))。

一个卷积核的卷积运算

文字表达卷积操作的计算过程可以用以下步骤概括:

  1. 将卷积核与输入数据的一个局部区域进行逐元素相乘。
  2. 将所有相乘得到的值相加,得到一个标量值。
  3. 将这个标量值放置在输出矩阵的相应位置。
  4. 移动卷积核,重复上述步骤,直到覆盖整个输入矩阵。

然后到这里,卷积的原理就说完了。但是一个卷积核一般认为具有识别一个特征的能力,因为图像可能会有更加复杂多样的特征,所以这种单通道单卷积核的设计还是不够强。也就有有多通道多卷积核这样在一个卷积层里进行多个卷积运算,得到到多个特征图的设计。

更复杂的卷积运算也是基于我们说的这种运算,每个通道对应一个卷积核,得到多个特征图,这一过程可以更好地捕捉输入数据中的多层次特征。

通道(channel):是特征图的深度维度。我的理解就是特征数,像是彩色图像,通道数量通常为3,分别对应于红、绿、蓝三个颜色通道。对于中间层的特征图,通道的数量由过滤器的数量决定。

池化层

在池化层,主要就是对特征图进行下采样,数据降维,特征保留

大概的内容很简单,就是在把特征图的一片数据,选着最大值或者平均值作为输出

一般是通过设置池化窗口的大小和步长来调节下采样的程度。较大的池化窗口和步长会导致更大程度的下采样,而较小的窗口和步长则会相对保留更多特征。

虽然池化层中会丢失大量信息,但它还是给卷积神经网络带来的许多好处。该层有助于降低复杂性、提高效率,并限制过度拟合的风险。

全连接层

经过上面的卷积层和池化层的处理,得到的特征图相对来说已经小很多了,

全连接层最后整合前面层次提取的特征,并映射出最终的预测输出。

一些概念

对于整个卷积神经网络,只是讲了它逻辑框架设计的流程,但是有关它梯度下降、参数更新的部分基本没有涉及,但是它的大体流程也符合神经网络:向前传播,计算损失,反向传播,参数更新。感受野和激活函数是对这部分理解比较有用的东西。

感受野(Receptive Field):感受野是指输入层中某个神经元对应的区域,该区域内的信息会影响该神经元的输出。在卷积神经网络中,随着网络的深度增加,感受野逐渐变大,即神经元对输入的影响范围逐渐扩展。理解感受野有助于了解神经网络对输入的局部和全局信息的感知程度。

激活函数:在神经网络中,每个神经元中的激活函数引入了非线性性质,使得网络能够学习和表示更加复杂的函数关系。常见的激活函数包括ReLU(Rectified Linear Unit)、Sigmoid、和Tanh等。梯度下降通过反向传播算法计算损失函数对于每个参数的梯度,而激活函数在这个过程中起到了非线性变换的作用,使得梯度能够传递到网络的前一层。

优化操作

特征图补零(zero-padding)
对数据卷积后,它变小了,形状不一样了,不方便训练迭代,所以在输入数据周围添加零值来调整卷积操作对特征图尺寸的影响。这种操作在卷积神经网络中被广泛使用,以提高网络的性能和稳定性。

滑动步长(stride)
指卷积核在输入数据上滑动的步长或间隔,不一定是原来卷积核一步移动一格。具体而言,滑动步长定义了在进行卷积操作时卷积核每次在输入数据上移动的距离。

滑动步长的选择会影响卷积操作后特征图的尺寸,以及网络对输入数据的感受野。较大的步长会导致特征图尺寸减小,感受野增大,而较小的步长则会产生更大的特征图,感受野相对较小。

批归一化(Batch Normalization)
批归一化通过对网络中的每一层的输入进行归一化,以规范化激活值的分布,从而减少梯度消失和梯度爆炸问题,并有助于网络更快地收敛。

著名卷积神经网络

AlexNet

著名卷积神经网络开山之作AlexNet,设计思想和结构对后续深度学习模型发展产生深远影响,具有启发意义。

RestNet

震惊整个AI届,具有革命性的ResNet,可以让网络训练更深的层次,轻轻松松达到100层,甚至上千层的深度。

实战案例理解

想写一个猫狗分类的实例,但是还没开始写,填一个坑吧。

总结

卷积神经网络在计算机视觉,图像分类检测等图像处理领域有着巨大作用,而且在语音识别处理,自然语言处理NLP方面也有很好的性能,可以说是很重要的,但是这只是最简单基础的东西,机器学习发展得太快了,还有很多东西需要学习,当然还要实践。

参考资料:
https://zhuanlan.zhihu.com/p/268179286
https://www.ibm.com/cn-zh/topics/convolutional-neural-networks
https://easyai.tech/ai-definition/cnn/
https://www.zhihu.com/question/62818935/answer/3114161291