1.背景
在工作中我应用到YOLO算法检测图片目标,但我对其中的卷积神经网络其实还不太理解,今天记录一下我对卷积神经网络的探究
2.概念
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。卷积神经网络具有表征学习(representation learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant classification),因此也被称为"平移不变人工神经网络(Shift-Invariant Artificial Neural Networks, SIANN)" 。
从概念里面,接触到至少如下三个陌生的概念:卷积计算、前馈神经网络、表征学习,接下来我们一步一步了解各自的原理
3.卷积计算
卷积计算是通过两个函数f和g生成第三个函数的一种数学运算 ,其本质是一种特殊的积分变换 ,表征函数f与g经过翻转和平移的重叠部分函数值乘积对重叠长度的积分。卷积运算在图像处理、信号处理等领域有广泛应用,例如,图像处理中的mask运算就是卷积的一种应用。
3.1.卷积计算过程
以图像处理中的卷积运算为例,假设有一个简单的3x3图像矩阵和一个2x2的卷积核,卷积运算的过程如下:
- 将卷积核置于图像的左上角,对应元素相乘后求和,得到的结果作为输出图像对应位置的像素值。
- 然后将卷积核向右移动一列(或根据步长移动),重复上述过程。
- 当卷积核移动到图像边缘无法再移动时,根据边界填充(如零填充)或忽略边缘的策略处理剩余部分。
- 最终得到一个新的、经过卷积运算处理的图像。
3.2.这样进行卷积的意义在哪里呢?
说道卷积的意义,必须提到卷积出现的背景。卷积是在信号与线性系统的基础上或背景中出现的,脱离这个背景,单独说卷积计算,其实并没有多大的意义,卷积就是数学上面的矩阵积分计算。
信号与线性系统讨论的就是信号经过一个线性系统以后发生的变化(就是输入 输出 和所经过的所谓系统,这三者之间的数学关系)。所谓线性系统的含义,就是,这个所谓的系统,带来的输出信号与输入信号的数学关系式之间是线性的运算关系。
因此,实际上,都是要根据我们需要待处理的信号形式,来设计所谓的系统传递函数,那么这个系统的传递函数和输入信号,在数学上的形式就是所谓的卷积关系。
卷积运算可以进行图像滤波、边缘检测、特征提取等多个方面。例如,卷积运算基于一个核(卷积核)与图像进行相乘并求和的过程,通过这一个操作可以实现对图像的平滑、锐化、边缘检测等多种功能。
3.3 卷积在代码中应用
卷积的实现方式特别多,有C++版本,有Python版本,可以到网上找到很多直接使用的版本。
4.前馈神经网络
4.1.定义
前馈神经网络,是一种最简单的神经网络,各神经元分层排列,每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层,各层间没有反馈。是应用最广泛、发展最迅速的人工神经网络之一。
4.2.实现原理
这是一个CNN神经网络,该结构使得CNN具有局部连接、权值共享、平移不变性的特点,具体而言:(1)卷积层中的神经元仅与输入数据的一个局部区域(即局部感受野)相连,这有助于捕捉图像的局部特征;(2)同一个卷积核在输入数据的所有位置上共享权重,这大大减少了网络的参数数量,降低了模型的复杂度;(3)无论输入数据中的特征出现在哪个位置,卷积操作都能提取到相同的特征,这使得卷积神经网络在处理图像等具有网格结构的数据时具有很高的效率和准确性。
4.3.代码实现
神经网络就是需要将不同层的神经元进行连接,则可以找TensorFlow、pytorch等框架进行实现。
5.表征学习
5.1 定义
表征学习(或表示学习)是一种将原始数据转换成为更容易被机器学习应用的数据的过程。对于输入数据,对其进行学习得到新的数据或者对原始数据进行选择得到新的数据都称为表征学习,表征学习的目的是对复杂的原始数据化繁为简,把原始数据提炼成更好的数据表达,使后续的任务事半功倍。
5.2 原理
上图是表征学习的示意图,通过机器学习简化了推理方法,输入数据可以直接与结果进行直接的对应。
表征学习分为无监督学习、监督学习、树模型和深入学习等方面,这些内容后面内容过于庞大,后面继续学习。
6.小结一下
综上所述,卷积神经网络是一种深度学习模型,它通过简单的矩阵乘法操作实现了对图像的多种处理效果。卷积神经网络,在计算机视觉、NLP、语音识别等多个领域都发挥着至关重要的作用。