【DL】卷积神经网络

一、卷积层

1. 卷积

卷积其实是一种数学运算,常用于信号处理和图像处理领域。它的基本思想是将一个函数与另一个函数进行点积,并通过滑动窗口的方式计算整个输入数据的值。一维卷积的数学表示如下:

其中 f 和 g 分别表示输入函数和卷积核函数,∗ 表示卷积运算符,t 表示时间,τ 表示滑动窗口的位置。

二维卷积的数学公式类似,如下所示:

其中 f 和 g 分别表示输入函数和卷积核函数,∗ 表示卷积运算符,x 和 y 表示二维平面上的位置,x′ 和 y′ 表示滑动窗口的位置。

2. 图像卷积

在图像处理中,卷积通常用于图像卷积和图像滤波。图像卷积是指将图像与卷积核进行卷积运算,从而得到新的图像。图像滤波是指使用卷积核对图像进行滤波操作,从而得到滤波后的图像。

例如,假设有一幅二维图像 X∈RH×W,其中 H 和 W 分别表示图像的高度和宽度。我们希望使用卷积核 W∈Rkh×kw 对图像进行滤波操作。那么可以使用以下公式对图像进行卷积:

其中 Y[i,j] 表示输出图像的第 i 行第 j 列的元素值,X[i+m−1,j+n−1] 表示输入图像的第 i+m−1 行第 j+n−1 列的元素值,W[m,n] 表示卷积核的第 m 行第 n 列的元素值。

3. 卷积层

神经网络卷积层是一种特殊的神经网络层,它使用了图像卷积的思想来处理输入数据。卷积层通常用于处理图像数据,但它也可以用于处理一些其他的数据,例如文本数据。

卷积层的主要作用是提取输入数据的局部特征,并将这些局部特征抽象为更高级的特征。卷积层通常由若干个卷积核组成,每个卷积核都是一个小的二维矩阵,可以在输入数据上滑动,并对输入数据进行卷积运算。卷积层的输出是一个多维数组,每个元素的值都是卷积核与输入数据的局部信息进行交互得到的结果。 卷积层有许多参数,包括卷积核的大小、填充大小、步幅大小以及输出通道数。这些参数可以调整卷积层的表现。例如,卷积核的大小决定了局部信息的大小,填充大小决定了输出图像的大小,步幅大小决定了卷积核在输入图像上的滑动步幅,输出通道数决定了卷积层输出的多少信息。卷积层通常与池化层配合使用,以便对输入数据进行下采样。池化层可以使用最大池化或平均池化来进行下采样,这样可以减少卷积层的参数数量,同时还可以增强卷积层的平移不变性。卷积层是深度学习模型中常用的层之一,它在计算机视觉、语音识别、自然语言处理等领域都得到了广泛应用。

前面提到,卷积层和全连接层相比大幅减少了参数量,原因主要有两个:首先,卷积层使用了共享权值的方式,使得卷积层中的参数数量比全连接层少得多。共享权值的方式意味着,同一个卷积层内的所有节点都使用相同的权值。这与全连接层不同,全连接层中的每个节点都有一个独立的权值。因此卷积层的参数数量要比全连接层少得多。其次,卷积层的输入是一个多维数组,而全连接层的输入是一个向量。因此,卷积层的输入数据中有更多的元素,而这些元素之间存在较强的相关性,可以帮助卷积层进一步减少参数数量。举个例子,假设我们有一个三维输入图像 ,其中 H 和 W 分别表示输入图像的高度和宽度,C 表示通道数。假设我们使用一个全连接层来处理这个图像,那么全连接层的输入数据 就是一个向量,全连接层包含的参数数量就是 O(HWC) 级别的。如果使用卷积层来处理这个图像,可以使用若干个卷积核来提取图像的局部特征。假设使用 K 个卷积核,每个卷积核的大小是 kh×kw,那么卷积层包含的参数数量就是级别的。可以看出,卷积层的参数数量要比全连接层的参数数量少得多。此外,卷积层还有一些参数可以调节,例如填充大小、步幅大小等,这些参数也可以帮助卷积层减少参数数量。

4. 填充

在卷积运算时,卷积核会在图像上滑动,并对图像的每个子区域进行卷积运算。例如,假设我们有一个 3x3 的输入图像,并使用一个 3x3 的卷积核。在进行卷积运算时,我们会把卷积核的中心对齐到输入图像的左上角,然后对输入图像的这个子区域进行卷积运算。然后我们会把卷积核向右移一个像素,并对输入图像的下一个子区域进行卷积运算。如此重复,直到我们对整个输入图像进行了卷积运算。但是,在进行卷积运算时,边缘像素会被忽略。例如,在上面的例子中,卷积核的左上角会对输入图像的左上角进行卷积运算,但卷积核的右上角和左下角将不会参与卷积运算。这意味着输入图像的边缘像素将不会参与卷积运算,并可能丢失重要信息。

为了解决这个问题,可以使用 padding。padding 指的是在输入图像周围填充一圈零值像素。这样,卷积核就可以对输入图像的所有像素进行卷积运算,而不会忽略边缘像素。例如,假设使用了一个 3x3 的卷积核和 1 像素的 padding。输入图像是 3x3 的,但实际上使用的是一个 5x5 的图像,其中边缘像素都被填充为 0。这样,卷积核就可以对输入图像的所有像素进行卷积运算,而不会忽略边缘像素。

5. 步长

在卷积神经网络 (CNN) 中,步长(stride)是指卷积核在输入图像上滑动的步长。例如,假设有一个 3x3 的输入图像,并使用一个 3x3 的卷积核。在进行卷积运算时,把卷积核的中心对齐到输入图像的左上角,然后对输入图像的这个子区域进行卷积运算。然后把卷积核向右移一个像素,并对输入图像的下一个子区域进行卷积运算。如此重复,直到对整个输入图像进行了卷积运算。

可以通过调整步长来改变卷积核在输入图像上滑动的距离。例如,如果步长是 2,则卷积核会每次向右移动 2 个像素。这会导致卷积核对输入图像进行卷积运算的次数减少,但同时也会导致输出图像的大小减小。通常来说,步长的值为 1 或 2。当步长为 1 时,卷积核会在输入图像上滑动一个像素。当步长为 2 时,卷积核会在输入图像上滑动两个像素。使用较大的步长可以减少卷积运算的次数,并减少输出图像的大小。这可以降低计算量,但同时也可能导致信息丢失。因此,在选择步长时,需要权衡计算量和信息损失的问题。

此外,步长还可以用于控制卷积核的步长在输入图像的哪一维方向滑动。例如,假设有一个 4x4 的输入图像和一个 3x3 的卷积核。如果我们设置步长为 (1, 2),则卷积核会在输入图像的行方向滑动 1 个像素,在列方向滑动 2 个像素。这样,卷积核会对输入图像进行 4 次卷积运算,并产生一个 2x2 的输出图像。

6. 多通道处理

面对复杂一点拥有多个通道的彩色图像,在进行卷积操作时面临如何处理这多个通道的问题。这主要取决于使用的卷积方式。通常来说,有两种卷积方式可以用于处理多个通道的图像:

分组卷积

在分组卷积中,将输入图像的通道划分成若干组,每组中的通道使用相同的卷积核进行卷积。例如,假设有一个三维输入图像 X∈RH×W×C,其中 C 表示通道数。我们使用的卷积核是一个四维张量 W∈Rkh×kw×C×K,其中 K 表示输出通道数。在使用全连接卷积时,卷积层包含的参数数量为 khkwCK,而在使用分组卷积时,可以将输入图像的通道划分成 G 组,每组包含 C/G 个通道,这样卷积层包含的参数数量就变为 khkw(C/G)K。当 G>1 时,卷积层包含的参数数量就会减少。

全连接卷积

在全连接卷积中,我们对输入图像的每一个通道分别使用不同的卷积核进行卷积。例如,假设我们有一个三维输入图像 X∈RH×W×C,其中 C 表示通道数。我们使用的卷积核是一个四维张量 W∈Rkh×kw×C×K,其中 K 表示输出通道数。在全连接卷积中,我们对输入图像的每一个通道分别使用不同的卷积核进行卷积,得到 C 个二维输出图像 Y1,Y2,...,YC。然后,我们将这 C 个二维输出图像在通道维度上拼接在一起,得到最终的三维输出图像 Y∈RH×W×K。

不仅输入图像可以是多通道的,输出图像也可以有。在卷积神经网络 (CNN) 中,输出通道是指卷积层输出的图像的数量。例如,如果卷积层的输出通道数为 16,则会产生 16 个输出图像,每个图像都是独立的。

使用多个输出通道可以增强 CNN 的能力,因为它可以捕捉不同的特征。例如,在图像分类任务中,卷积层的某些输出通道可能会捕捉边缘特征,而其他通道可能会捕捉颜色特征。举个例子,假设我们正在对一张包含猫的图像进行分类。在这种情况下,卷积层的某些输出通道可能会捕捉到图像中猫的轮廓线,而其他通道可能会捕捉到猫的毛发颜色。这样,CNN 就可以利用这些信息来判断图像中是否存在猫。

7. 池化层(pooling layer)

池化层是用来压缩信息的层。它将输入的多个特征映射到一个更小的特征空间中,从而使网络变得更加紧凑。

如果没有池化层,网络的参数数量就会变得非常大,这会导致训练时间变长,并且容易出现过拟合现象。池化层通过下采样的方式实现了信息的压缩,减少了网络的参数数量,这有助于缩短训练时间,并且可以防止过拟合。这里,下采样是指将输入的特征缩小为原来的一部分。此外,池化层还可以帮助网络学习更加抽象的特征,从而提升分类的准确率。总体而言,池化层在卷积神经网络中起到了信息压缩的作用,减少了参数的数量,防止过拟合,并且可以帮助网络学习更加抽象的特征。

常见池化方法 :常见的下采样方法有最大池化和平均池化。最大池化层 会选取输入特征中的最大值作为输出特征,平均池化层则是将输入特征求平均值作为输出特征。

池化填充和步长 :在池化操作中,填充和步长(也可叫做步幅)是两个重要的概念,它们可以帮助控制池化层的输出大小。填充 是在池化运算之前添加的一些行和列,用于填充输入的边界。这有助于控制池化层的输出大小。例如,在池化层后使用全连接层时,可以使用填充来确保输入和输出大小相同。步长是指在池化运算期间每次滑动的窗口的距离。步长越大,窗口在输入图像上的滑动距离就越大,这意味着输出的特征图就越小。步长越小,窗口在输入上的滑动距离就越小,这意味着输出的特征图就越大。

池化多通道问题:在多个输入通道的情况下,池化层的输入称为多通道数据。池化层可以在每个通道上单独进行池化,也可以在所有通道上进行池化,并将池化结果在通道维度上进行拼接。在多通道数据上进行池化时,通常使用同样的池化方式。例如,如果使用的是最大池化,则池化层会在每个通道上取出每个池化窗口内的最大值,然后将这些最大值拼接在一起。在处理多通道数据时,池化层通常不会对通道维度进行扩展,也不会对通道维度进行下采样。因此,池化层的输出通道数与输入通道数相同。

8. 卷积神经网络

卷积神经网络和多层感知机这类的深度模型相比,最大的特点就在于卷积层。使用卷积层代替全连接层的主要优势在于可以更好地处理空间信息。在图像分类中,使用全连接层可能会丢失空间信息。比如,在一张图像中,如果绿色部分占据较大面积,而蓝色部分占据较小面积,那么使用全连接层可能会把这两种颜色视为同等重要。而使用卷积层,可以通过卷积核在输入图像上滑动的方式,提取局部信息。这样,卷积层可以根据局部信息更好地学习特征,并保留图像的空间信息。此外,使用卷积层还可以减少网络参数的数量。在卷积层中,一个参数就是卷积核的权值,而在全连接层中,每个节点都需要一个权值。因此,使用卷积层可以大幅减少网络参数的数量,使得网络更加简洁。

假设输入是一张 28×28 的图像,输出是 10 个类别。如果使用全连接层,那么第一层就需要 28×28×10=7840 个参数,而使用卷积层,只需要 5×5×10=250 个参数。可以看出,使用卷积层的参数数量大大减少,对于较小的数据集来说,使用卷积层可以避免过拟合的问题。

最经典的深度卷积神经网络,由Yann LeCun在1998年提出的LeNet。它是为了解决手写数字识别问题而设计的,并且在当时取得了很好的成功。

LeNet的结构如下图所示:

  • 输入层:LeNet的输入层接受28x28像素的灰度图像。
  • 卷积层1:这一层包含6个卷积核,每个卷积核的大小为5x5,卷积步长为1。该层使用Sigmoid激活函数。
  • 池化层1:这一层使用2x2的最大池化窗口,步长为2。这一层的作用是降低图像尺寸,并保留最重要的特征。
  • 卷积层2:这一层包含16个卷积核,每个卷积核的大小为5x5,卷积步长为1。该层使用Sigmoid激活函数。
  • 池化层2:这一层使用2x2的最大池化窗口,步长为2。这一层的作用与池化层1相同。
  • 全连接层:这一层包含120个节点,使用Sigmoid激活函数。
  • 全连接层:这一层包含84个节点,使用Sigmoid激活函数。
  • 输出层:这一层包含10个节点,对应0~9的十个数字。
相关推荐
逄逄不是胖胖2 小时前
《动手学深度学习》-55-1RNN的复杂实现
pytorch·深度学习·机器学习
砚边数影2 小时前
决策树原理(一):信息增益与特征选择 —— Java 实现 ID3 算法
java·数据库·决策树·机器学习·kingbase·数据库平替用金仓·金仓数据库
A尘埃2 小时前
数值特征标准化StandardScaler和类别不平衡SMOTE
人工智能·深度学习·机器学习
软件算法开发2 小时前
基于卷尾猴优化的LSTM深度学习网络模型(CSA-LSTM)的一维时间序列预测算法matlab仿真
深度学习·算法·matlab·lstm·一维时间序列预测·卷尾猴优化·csa-lstm
高洁012 小时前
知识图谱如何在制造业实际落地应用
深度学习·算法·机器学习·数据挖掘·知识图谱
逄逄不是胖胖3 小时前
《动手学深度学习》-56门控循环单元GRU
人工智能·深度学习·gru
轻览月3 小时前
【DL】循环神经网络
人工智能·rnn·深度学习
轻览月3 小时前
【DL】复杂卷积神经网络Ⅱ
人工智能·神经网络·cnn
yuan199973 小时前
高光谱遥感图像异常检测KRX算法Matlab实现
算法·机器学习·matlab