目录
一、卷积的作用
1、张量(Tensor)
张量(Tensor)是指在数学和物理学中广泛使用的一种多维数组结构,可以看作是标量、向量、矩阵等的自然推广。在深度学习中,张量是指一种多维数组,它是神经网络中最基本的数据结构。
在深度学习中,张量一般用于表示神经网络的输入、输出和参数等。一个张量的维度数(也称为阶数或轴数)被称为它的秩(Rank)。例如,一个标量可以看作是一个零阶张量,一个向量可以看作是一个一阶张量,一个矩阵可以看作是一个二阶张量,依此类推。
张量的每个维度可以有一个任意大小的值,这意味着我们可以使用张量来表示各种不同形状的数据。在深度学习中,常见的张量包括标量(0-D张量)、向量(1-D张量)、矩阵(2-D张量)、图像(3-D张量)和视频(4-D张量)等。
在深度学习中,张量通常是通过计算图(Computation Graph)来进行计算的,其中每个计算节点都可以表示为一些输入张量的函数,它们之间的关系被描述为一系列张量计算操作(例如矩阵乘法、卷积、池化等)。深度学习中的大多数算法都可以被看作是计算图中的一些特定操作或操作序列,这些操作用于学习从输入到输出的复杂映射。
2、卷积的定义
在深度学习中,卷积是一种特殊的数学运算,它被广泛应用于卷积神经网络(Convolutional Neural Networks,CNNs)中。在卷积神经网络中,卷积主要是指对于输入张量(通常是图像或时间序列数据)的一种特殊的线性变换。
卷积的定义在深度学习中稍有不同,具体来说,在卷积神经网络中,卷积操作是通过将一个可训练的小型过滤器(也称为卷积核或滤波器)应用于输入张量的不同位置来计算输出张量的过程。这个过滤器被滑动到输入张量的每个位置,并且在每个位置进行点乘和求和来计算一个输出值。这个过程可以看作是在输入张量上进行的一系列可重用的局部线性变换。
卷积操作通常用符号“”表示,例如,对于一个形状为的输入张量和一个形状为的卷积核:
对于一个形状为(H,W,C)的输入张量,
- H表示输入张量在高度方向(垂直方向)上的大小,即输入张量的行数。
- W表示输入张量在宽度方向(水平方向)上的大小,即输入张量的列数。
- C表示输入张量的通道数,也就是每个位置上的数值由C个数值构成,通道数决定了输入张量的深度或者厚度。例如,对于彩色图像,C通常为3,分别对应红色、绿色、蓝色三个通道。
对于一个形状为的卷积核,
- 括号中的第一个数字表示卷积核的高度,即卷积核在高度方向上的大小(也就是卷积核的行数)。
- 括号中的第二个数字表示卷积核的宽度,即卷积核在宽度方向上的大小(也就是卷积核的列数)。
- 括号中的第三个数字表示输入张量的通道数,也就是输入张量每个位置上的数值由个数值构成。
- 括号中的最后一个数字表示卷积核的数量,也就是进行卷积的时候会使用个不同的卷积核对输入张量进行卷积操作,最终得到个输出特征图。
卷积操作可以写成:
- :表示输出张量在第行第列第个通道上的元素,也可以理解为输出张量在第个位置上的个通道的值。
- :表示对于每一个输出张量上的位置,遍历所有输入张量上的位置,是卷积核的高度和宽度,是输入张量的通道数。
- :表示卷积核在高度方向上移动步,在宽度方向上移动步,取到输入通道,输出通道上的权重值。
- :表示输入张量在高度方向上移动步,在宽度方向上移动步,取到通道上的值。
- :表示卷积操作,即对应元素的乘积之和。
综合来看,这个公式的含义是:对于输出张量上的每个位置,通过遍历输入张量的所有位置并且使用卷积核中对应的权重对其进行加权,得到输出张量上该位置的值。符号“”表示了这个加权操作。
3、卷积核
卷积核(convolutional kernel),也称为滤波器(filter)或卷积矩阵(convolution matrix),是应用于卷积神经网络(CNN)中的一种数学工具。卷积核是一组权重参数,它通过与输入数据进行卷积运算来提取特征。
卷积核通常是一个小的二维矩阵,其大小通常为正方形。对于图像数据,卷积核通过在输入图像上滑动并计算局部区域的加权和来提取特征。卷积核的权重参数是通过网络的训练过程中学习得到的。
每个卷积核可以学习到不同类型的特征,例如边缘、纹理、形状等。通过应用多个卷积核,神经网络可以学习到更多不同类型的特征,并且通过参数共享的方式减少需要学习的参数数量。
在卷积神经网络中,卷积核的尺寸(大小)是一个重要的超参数。较小的卷积核可以提取更加局部的特征,而较大的卷积核可以提取更为全局的特征。通过在网络中堆叠多个卷积层,可以逐渐提取出越来越抽象和高级的特征。
总之,卷积核是卷积神经网络中的重要组成部分,通过在输入数据上进行卷积运算来提取特征。它的权重参数可以在网络的训练过程中学习得到,用于捕捉输入数据中的不同特征。
notes:
卷积神经网络通过卷积核提取图像的局部特征,模型通过训练更新卷积核参数矩阵,使卷积核能够更好的按照模型的目的有针对性地提取图像的特征。
输入图像有多少个通道,卷积核的通道数就需要相同。
一个图像可以对应多个卷积核,多个卷积核可以提取出多个特征图。
同一个卷积层中多个卷积核之间大小维度都应该相同。
卷积核滑动过程中,每滑动一次,计算卷积核覆盖面图像数值与卷积核矩阵内积得到一个值。
4、卷积的作用
在神经网络中,卷积的作用是通过应用卷积核(也称为滤波器)来提取输入数据的特征。卷积是一种数学运算,通过对输入数据的局部区域进行加权和求和的操作,来生成输出数据。
具体来说,卷积在神经网络中的作用包括以下几个方面:
-
特征提取:卷积可以通过滤波器对输入数据进行特征提取。卷积核的权重可以学习到输入数据中的不同特征,例如边缘、纹理、形状等。通过应用多个卷积核,神经网络可以学习到更多不同类型的特征。
-
参数共享:卷积神经网络中的卷积层使用相同的卷积核对输入数据的不同区域进行卷积操作。这种参数共享的方式可以大大减少需要学习的参数数量,提高网络的训练效率。
-
空间不变性:卷积在局部区域进行操作,同时保留了输入数据的空间结构信息。这种空间不变性使得卷积神经网络在处理图像等具有局部相关性的数据时非常有效。
-
下采样:卷积神经网络中的池化层通常与卷积层一起使用,用于对特征图进行下采样。池化操作可以减少特征图的尺寸,从而降低网络的计算复杂度,并且可以提取出更加具有鲁棒性的特征。
综上所述,卷积在神经网络中起着重要的作用,能够有效地提取输入数据的特征,并且通过参数共享和空间不变性等特性提高网络的性能和效率。
5、卷积层的参数
1)、滑动窗口步长
滑动窗口步长是在卷积操作中指定滑动窗口在输入数据上移动的距离。它表示滑动窗口每次移动的步长大小。步长通常以像素为单位进行定义,可以是一个正整数。例如,步长为1表示滑动窗口每次水平和垂直移动一个像素,步长为2表示滑动窗口每次水平和垂直移动两个像素。
在卷积操作中,滑动窗口通过与输入数据进行逐元素相乘,然后求和来计算输出特征图中的每个位置的值。步幅大小决定滑动窗口在输入数据上的移动速度,从而影响输出特征图的尺寸和内容。较大的步长会导致输出特征图尺寸减小且内容较为稀疏,而较小的步长会导致输出特征图尺寸增大且内容较为密集。
滑动窗口步长的选择需要综合考虑任务需求、输入数据的大小和计算资源的限制。较大的步长可以减少计算量和提取较为全局的特征,但可能会丢失一些细节信息。较小的步长可以保留更多的细节信息,但会增加计算复杂度。因此,需要根据具体情况选择合适的滑动窗口步长。
2)、卷积核尺寸
卷积核的尺寸决定了卷积操作的感受野大小和特征提取能力。较小的卷积核可以提取细节特征,但可能会丢失一些局部上下文信息。较大的卷积核可以提取更大范围的特征,但可能会增加计算开销。
3)、边缘填充
在深度学习中,边缘填充(Padding)是指在输入数据的边缘周围添加额外的像素值,以扩展输入数据的尺寸。这样做的目的是为了在进行卷积操作时保留输入数据的边缘信息,并避免在边缘位置上进行卷积运算时,输出数据尺寸缩小的问题。
边缘填充是通过在输入数据的边缘上添加额外的像素值来实现的。常见的填充方式包括:
- 零填充(Zero Padding):在输入数据的边缘周围添加值为零的像素。
- 边缘填充(Edge Padding):在输入数据的边缘周围添加与边缘像素值相同的像素。
- 反射填充(Reflect Padding):在输入数据的边缘周围添加与边缘像素值相对称的像素。
边缘填充可以用来控制输出数据的尺寸,使其保持与输入数据相同的尺寸或者通过填充来改变输出数据的尺寸。边缘填充在卷积神经网络中广泛应用,特别是在处理边缘信息等重要特征时,边缘填充可以有效地避免信息丢失。
notes:
在靠近图像内部的像素点被卷积的次数多,而靠近边界的像素点则被卷积的次数少,为了充分利用边界信息,在边界周围填充0数据。
4)、卷积核个数
在一个卷积层中,卷积核的个数决定了卷积层的输出通道数。每个卷积核对应一个输出通道,通过与输入数据进行卷积运算产生一个特征图(feature map)。
通常情况下,卷积层中的卷积核个数是一个超参数,可以根据任务需求进行选择。较少的卷积核个数可能会导致模型提取不够丰富的特征,而较多的卷积核个数可能会导致模型参数过多,增加了计算复杂度。
选择卷积核个数的一种常用的方法是逐渐增加。例如,在网络的初始卷积层中,可以使用较少的卷积核个数较少(如16个或32个),逐渐向后的卷积层中增加卷积核个数。这样做的目的是逐渐提取越来越抽象和复杂的特征。
不同的网络架构和任务可能会选择不同的卷积核个数。因此,在设计网络结构时,需要根据具体任务和数据特点进行调整和优化。
notes:
卷积核个数代表了一层卷积层能得到多少个特征图,但是同一层内每个卷积核的矩阵数值都是不一样的,各自进行参数更新。
5)、超参数
在深度学习中,超参数是指那些不由模型自身学习得到的参数,需要手动设置的参数。超参数的选择对于模型的性能和训练过程的效果有着重要的影响。以下是深度学习中常见的超参数:
-
学习率(learning rate):控制模型在每次迭代中更新参数的步长。过大的学习率会导致模型震荡,而过小的学习率会让模型收敛缓慢。
-
批大小(batch size):每次迭代使用的样本数量。较大的批大小可以提高训练速度,但可能导致模型陷入局部最优解。较小的批大小可以提高模型的泛化能力,但训练速度较慢。
-
迭代次数(number of epochs):指定模型需要对整个训练集进行多少次迭代。过少的迭代次数可能导致模型未能充分学习样本的特性,而过多的迭代次数可能导致过拟合。
-
正则化参数(regularization parameter):用于控制正则化项在损失函数中的权重。正则化可以减小模型的复杂度,防止过拟合。
-
激活函数(activation function):选择使用哪种激活函数,如ReLU、sigmoid、tanh等。激活函数的选择会影响模型的非线性能力和收敛速度。
-
优化器(optimizer):选择使用哪种优化算法,如随机梯度下降(SGD)、Adam、Adagrad等。不同的优化器会影响模型的收敛速度和稳定性。
-
卷积核大小(kernel size):在卷积层中,设置卷积核的大小。较小的卷积核可以捕捉局部特征,而较大的卷积核可以捕捉更广泛的特征。
这些超参数的选择是一项非常重要的任务,通常需要通过实验和调优来确定最佳的取值。不同的数据集和任务可能需要不同的超参数设置。
二、卷积特征值计算方法
1、卷积特征值计算步骤
计算卷积特征值的方法可以分为以下几个步骤:
-
定义卷积核:首先需要确定卷积核的大小和权重参数。卷积核通常是一个小的二维矩阵,其大小可以根据需要进行设置。权重参数可以在网络的训练过程中学习得到。
-
输入数据与卷积核的卷积运算:将输入数据与卷积核进行卷积运算。具体的计算方式是:将卷积核与输入数据的局部区域进行按元素相乘,然后将得到的结果进行求和。这个过程可以通过在输入数据上滑动卷积核并进行相应的计算来实现。
-
应用激活函数:对卷积运算的结果应用激活函数。激活函数可以增加网络的非线性能力,并且有助于提取更有意义的特征。常用的激活函数包括ReLU(修正线性单元)、Sigmoid和Tanh等。
-
下采样:在一些情况下,为了减少参数数量和计算量,可以进行下采样操作。下采样可以通过最大池化(Max Pooling)或平均池化(Average Pooling)等方法来实现。它可以将特征图的尺寸降低,同时保留重要的特征。
通过上述步骤,可以计算出卷积特征值。卷积特征值具有局部感知性,能够捕捉输入数据中的不同特征。在卷积神经网络中,通过堆叠多个卷积层,可以逐渐提取出越来越抽象和高级的特征,从而实现对输入数据的更深层次的理解和分析。
2、下采样
下采样是指通过减少特征图的尺寸来降低数据的维度。它的主要目的是减少模型参数和计算量,同时可以保留重要的特征信息。
下采样通常是在卷积层之后进行的,可以通过两种主要的方法来实现:最大池化和平均池化。
-
最大池化(Max Pooling):最大池化是指在给定的区域内,选择最大的特征值作为代表。具体来说,在每个池化窗口(通常是2x2)中,选取该窗口内最大的值作为输出。通过这种方式,最大池化可以有效地保留图像中最显著的特征。
-
平均池化(Average Pooling):平均池化是指在给定的区域内,计算特征值的平均值作为代表。与最大池化类似,在每个池化窗口中,计算窗口内特征值的平均值作为输出。平均池化在某些情况下可以更加平滑化特征图,但可能会丢失一些细节信息。
下采样的作用有以下几个方面:
-
减少参数和计算量:通过降低特征图的尺寸,可以减少模型的参数数量和计算量,从而加快模型的训练和推断速度。
-
缩小特征图尺寸:下采样可以通过降低特征图的空间维度,从而缩小输入数据的尺寸。这有助于减少数据的复杂性,使得模型能够更好地处理和学习更抽象的特征。
-
提取主要特征:通过选取最大值或取平均值,下采样可以帮助筛选出更重要和显著的特征,从而减少噪声对模型的干扰。
总之,下采样是神经网络中常用的一种操作,可以降低特征图的尺寸和复杂性,减少模型参数和计算量,并且提取出重要的特征信息。这有助于提高模型的效率和性能。
3、上采样
上采样是指通过增加特征图的尺寸来提高数据的维度。它的主要目的是将低分辨率的特征图恢复到原始输入图像的分辨率,并且提供更多的细节信息。
上采样通常是在卷积神经网络的某些层之后进行的,可以通过两种主要的方法来实现:反卷积(转置卷积)和双线性插值。
-
反卷积(Transposed Convolution):反卷积层通过将输入的特征映射进行输出填充和卷积操作,可以将低分辨率的特征图上采样到原始输入图像的尺寸。它使用与卷积层相反的操作来进行上采样,通过将特征图的像素值重复填充到更大的空间范围,从而增加特征图的尺寸和维度。
-
双线性插值(Bilinear Interpolation):双线性插值是一种常用的图像处理技术,它通过计算给定像素周围四个邻域像素的加权平均值,来估算新像素的值。在上采样过程中,双线性插值通过对特征图中的每个像素进行插值,来生成更高分辨率的特征图。
上采样的作用主要有以下几个方面:
-
恢复细节信息:上采样可以通过增加特征图的尺寸,提供更多的细节信息,从而恢复原始输入图像的细节和纹理。
-
增加分辨率:上采样可以将低分辨率的特征图恢复到原始输入图像的尺寸,以便在后续层中进行更准确的特征提取和分类。
-
生成密集预测:上采样可以将原始输入图像的特征映射恢复到与原始输入图像相同的分辨率,从而生成密集的预测结果,有助于对图像中的每个像素进行分类或分割。
总之,上采样是神经网络中常用的一种操作,可以通过增加特征图的尺寸来提高数据的维度,恢复细节信息和增加分辨率。这有助于提高模型的准确性和对细粒度特征的感知能力。
notes:
下采样和上采样是图像处理中常用的技术,用于改变图像的分辨率和大小。
下采样是指将图像的分辨率减小,即降低图像的像素数量。下采样可以用于减少图像的文件大小,提高图像的处理速度,或者用于减少特征数量以便于分类或识别任务。下采样通常可以通过直接删除图像中的某些像素来实现,或者通过对图像进行平均或插值来减少像素的数量。
上采样是指将图像的分辨率增加,即增加图像的像素数量。上采样可以用于增加图像的细节和清晰度,或者用于使图像适应更高分辨率的显示设备。上采样通常可以通过复制、插值或重采样图像的像素来实现。
具体使用下采样还是上采样要根据具体的图像处理任务和需求来决定。一般而言,如果需要减少图像的分辨率、文件大小或特征数量,则可以使用下采样;如果需要增加图像的分辨率、细节或清晰度,则可以使用上采样。
三、特征图表示
1、特征图是怎么得到的
特征图是卷积神经网络中的一种数据结构,用于表示卷积层输出的特征。特征图是通过卷积操作在输入数据上提取的特征。
在卷积神经网络中,输入数据被传递到卷积层,卷积层由多个卷积核组成。每个卷积核都是一个小的局部感知区域,它在输入数据的不同位置进行卷积操作,计算出一个特定位置的特征值。这样,每个卷积核都生成一个特征图。
具体来说,卷积操作是通过将卷积核的权重与输入数据的对应区域相乘,并求和得到一个单个值。然后,卷积核在整个输入数据上滑动,每次计算一个新的特征值。这样,卷积核在整个输入数据上进行卷积操作,生成一个特征图。
卷积操作的结果是特征图中的每个像素都对应一个卷积核在输入数据上的卷积计算结果。每个特征图中的像素值可以表示该位置上的特征是否存在或具有某种特定的特征。
通过在不同的卷积层中使用多个卷积核,可以提取不同的特征。每个卷积核和其对应的特征图都可以捕捉到不同的局部特征,最终组合起来形成更高级的特征表示。这些特征图可以通过汇总或连接在一起,传递到后续的网络层进行分类或其他任务。
2、每一个卷积层生成的特征图有什么特点
-
局部感知:卷积层中的每个卷积核都是在输入数据的局部感知区域上进行卷积操作。这意味着每个特征图都对应于输入数据中的某个小区域,而不是全局的。这样的局部感知性使得卷积神经网络能够捕捉到局部的特征,例如边缘、纹理等。
-
特征重用:卷积层中的每个卷积核在整个输入数据上滑动,计算出每个位置的特征值。这意味着同一个卷积核可以在不同的位置上提取相似的特征。这种特征的重用使得卷积神经网络能够对输入数据的不同位置具有一定的平移不变性。
-
特征映射:每个卷积层由多个卷积核组成,每个卷积核生成一个特征图。这些特征图可以看作是输入数据在不同特征维度上的映射。通过使用不同的卷积核,卷积层可以提取不同类型的特征。这种多通道的特征映射允许卷积神经网络对输入数据的多个方面进行建模。
-
特征空间:特征图可以看作是输入数据的一个低维表示,其中每个像素值表示对应位置的特征强度。通过在网络的不同层级上堆叠特征图,卷积神经网络能够逐渐学习到更高级的特征表示,从低级的边缘和纹理到高级的形状和物体。
总之,卷积层生成的特征图通过局部感知、特征重用、特征映射和特征空间等特性,可以高效地对输入数据进行特征提取和表示,为后续的分类、检测或其他任务提供有用的特征表示。
3、由同一层内多个卷积核得到的特征图之间有以下几个特点
-
多样性:不同卷积核学习到的特征是不同的,因此由不同卷积核生成的特征图具有多样性。每个卷积核都可以捕捉输入数据的不同特征方面,例如边缘、纹理、颜色等。因此,特征图之间的多样性有助于丰富网络对输入数据的表示能力。
-
局部性:每个卷积核只关注输入数据的局部区域,并从中提取相应的特征。因此,由不同卷积核生成的特征图具有局部性,每个特征图对应于不同的局部特征。这种局部性有助于提取出数据中不同位置的特征,从而提高模型对位置和空间信息的敏感性。
-
并行性:不同卷积核的操作是并行进行的,每个卷积核生成一个特征图。这意味着特征图之间是独立的,不存在直接的内在关系。这种并行性有助于模型的训练和推理过程的加速,同时也使得网络对输入数据的不同特征维度具有并行的处理能力。
-
堆叠性:通过将不同卷积核生成的特征图堆叠在一起,可以获得更丰富的特征表示。这种特征图的堆叠性质可以通过增加网络的深度或者通过多个分支连接来实现。堆叠特征图使得网络能够同时考虑多个特征维度,从而提升模型的表达能力和鲁棒性。
综上所述,由同一层内多个卷积核得到的特征图之间具有多样性、局部性、并行性和堆叠性等特点,这些特点有助于提高卷积神经网络对输入数据的特征提取和表达能力。
notes:
卷积核的数量决定了该层的输出特征图数量。通过调整卷积核的规模和数量,可以控制特征图的维度和网络的表达能力。
四、步长与卷积核大小对结果的影响
1、步长大小对结果的影响
-
特征图尺寸:较大的步长会导致特征图尺寸减小,因为在进行卷积操作时,每次移动的距离增加了。这可能会导致丢失一些细节信息,因为特征图的空间分辨率降低了。较小的步长则会保留更多的细节信息,但计算量会增加。
-
特征提取能力:较大的步长可能会减少特征提取的能力,因为在每次卷积操作时,感受野的空间范围减小了。这意味着每个卷积核只能感知到输入的部分信息,从而减少了特征提取的能力。较小的步长可以增加感受野的范围,使卷积核能够感知更广泛的上下文信息。
-
计算效率:较大的步长可以减少卷积操作的数量,从而降低计算复杂度。这对于大型网络和大数据集是有益的,因为可以加快训练和推理速度。但是,较大的步长也可能导致信息丢失和性能下降。较小的步长会增加卷积操作的数量,从而增加计算复杂度,但可以提高网络的表示能力和预测性能。
综上所述,步长大小对结果有影响,较大的步长会减小特征图尺寸、降低特征提取能力,但可以提高计算效率。较小的步长会保留更多的细节信息、增加特征提取能力,但计算复杂度较高。选择合适的步长大小需要根据具体任务和资源要求进行权衡。
2、卷积核大小对结果的影响
-
特征提取能力:较大的卷积核可以捕捉更大范围的上下文信息,因为其感受野更广。这可以帮助提取更全局的特征,尤其对于处理大图像或长序列数据非常有效。较小的卷积核则更适合于提取局部特征,因为其感受野更小,可以更细粒度地查看图像或序列的细节。
-
空间分辨率:较大的卷积核会导致输出特征图尺寸较小,因为每次卷积操作移动的距离增加了。这可能会导致一些空间细节的丢失。相反,较小的卷积核会保留更多的空间细节,因为每次卷积操作移动的距离较小。
-
参数量和计算复杂度:较大的卷积核具有更多的参数,而较小的卷积核具有更少的参数。因此,使用较大的卷积核会增加模型的参数量和计算复杂度。这可能会导致过拟合和训练时间较长。使用较小的卷积核可以减少模型的参数数量和计算复杂度,但需要更多的层来达到相同的感受野范围。
综上所述,卷积核大小影响特征提取能力、空间分辨率、参数量和计算复杂度。选择合适的卷积核大小需要根据具体任务和资源要求进行权衡。通常,对于处理全局信息和大尺寸输入的任务,较大的卷积核更适用;对于处理局部信息和保留细节的任务,较小的卷积核更适用。
五、特征图尺寸计算与参数共享
1、卷积结果计算公式
长度:
宽度:
- 和表示输出特征图的长度和宽度;
- 和表示输入的长度和宽度;
- 和表示卷积核的长度和宽度;
- 表示边界填充(加几圈);
- 表示滑动窗口的步长。
notes:
经过卷积操作之后也可以保持特征图长度、宽度不变。
六、池化层
1、定义
池化层是卷积神经网络(CNN)中的一种重要层,常用于降低特征图的空间尺寸、减少参数数量以及控制过拟合。池化操作在每个特征图的局部区域内(通常是非重叠的)进行,通过计算该区域内特征的统计量来产生输出。
主要的池化操作有两种:最大池化(Max Pooling)和平均池化(Average Pooling)。
最大池化是指在池化操作的每个局部区域内,选择最大的特征值作为输出。这样可以保留主要的特征,并且对于不同物体的旋转、平移等变换具有一定的不变性。
平均池化是指在池化操作的每个局部区域内,计算特征的平均值作为输出。这样可以减少特征图的空间尺寸,并且对于一些局部细节的变化不敏感。
池化层的核心思想是通过降采样(downsampling)来减少特征图的尺寸。通常,池化操作会减少特征图的高度和宽度,但是保持特征图的通道数不变。
池化层的一些主要特点如下:
- 没有需要学习的参数,仅进行固定的池化操作。
- 可以减小特征图的空间尺寸,降低模型复杂度。
- 可以减少特征图的细节,从而提取出更显著的特征。
- 可以增强模型的平移不变性和部分旋转不变性。
需要注意的是,池化操作会丢失一些细节信息,因此在某些情况下,可能会对模型的性能产生一定的影响。因此,在设计网络结构时,需根据具体任务和数据集的特点来决定是否使用池化层,以及采用何种池化操作。
notes:
池化只会缩减特征图的长和宽,并不会更改特征图的个数。
2、池化核(Pooling Kernel)
池化核(Pooling Kernel)是指池化层中用于对输入特征图进行窗口划分和池化操作的核心部分。在卷积神经网络(CNN)中,池化核的大小决定了窗口的尺寸,用于在特征图上移动并提取统计信息,从而实现对输入特征的下采样操作。
具体而言,池化核的大小通常由用户在设计网络时进行指定。常见的池化核大小包括 2x2、3x3 等,不同大小的池化核会对特征图进行不同程度的下采样操作。在池化操作中,池化核的工作流程一般包括以下几个步骤:
- 窗口划分:将输入特征图划分为不重叠的窗口,每个窗口的大小由池化核的大小决定。
- 统计特征:对每个窗口内的特征进行统计,最常见的池化操作是最大池化(Max Pooling)和平均池化(Average Pooling)。最大池化操作是取窗口内特征的最大值作为输出,而平均池化则是取窗口内特征的平均值。
- 下采样:根据统计得到的特征值作为输出,压缩特征图的尺寸,实现对输入特征图的下采样操作。
池化核的大小直接影响着池化层的输出特征图的尺寸和特征维度。较小的池化核可以更细致地对特征图进行下采样,提取更多的细节信息,但也可能带来过度拟合的风险;而较大的池化核则会更粗略地降低特征图尺寸,减小模型参数量,但也可能损失一些细微的特征。因此,在设计神经网络和选择池化核大小时,需要充分考虑任务需求、数据特点和模型复杂度等因素,以达到合理的平衡和性能优化。
总之,池化核作为池化操作的关键组成部分,在神经网络中扮演着提取特征并进行下采样处理的重要角色,通过合理选择池化核的大小,可以有效地控制特征图的尺寸和特征的提取,从而对网络性能产生重要影响。
3、最大池化(Max Pooling)
最大池化是一种常用的池化操作,它将输入层的特征图划分为不重叠的矩形区域,并在每个区域中选择最大值作为输出值。这种操作能够有效地减小特征图的大小,同时保留主要的特征信息。
最大池化的主要优势是能够提取出图像的最显著特征,对于边缘、纹理等细节信息有很好的保留和提取能力。在卷积神经网络中,最大池化常用于降低特征图的维度,减少模型计算量和参数数量,同时增强模型的鲁棒性和泛化能力。
下面是最大池化的详细操作步骤:
-
输入:首先需要一个输入特征图,该特征图通常是由卷积层产生的。
-
池化窗口:选择一个固定大小的池化窗口,通常情况下是一个正方形窗口。这个窗口会在输入特征图上滑动,从而将特征图分割成不重叠的区域。
-
最大值选择:在每个池化窗口中,找到窗口内的最大值,作为该窗口的池化输出。这意味着只保留了窗口内最显著的特征。
-
填充:如果输入特征图的尺寸不能被池化窗口的大小整除,可以选择在特征图的边缘进行填充,以便使得池化操作可以进行。
-
步幅:确定池化窗口在特征图上滑动的步幅。步幅决定了输出特征图的尺寸。较大的步幅可以进一步减小输出特征图的尺寸。
-
输出:最终,最大池化操作将产生一个输出特征图,其中每个窗口的值是该窗口内最大值。
最大池化可以有效地减小特征图的空间尺寸,同时保留了特征的显著性。它还具有一定的平移不变性,因为在不同位置发现的最大值是一样的。这使得最大池化成为卷积神经网络中常用的池化操作方法之一。
notes:
基本上最大池化的效果要比平均池化要好。
4、平均池化(Average Pooling)
平均池化也是一种常用的池化层。与最大池化不同的是,平均池化将每个池化窗口中的像素值求平均来池化特征图。
平均池化的操作步骤如下:
- 定义池化窗口的大小和步幅大小。
- 滑动池化窗口,将窗口中的像素值求平均。
- 将平均值作为池化后的特征值。
与最大池化相比,平均池化的特点和作用如下:
- 平均池化减少了特征图的维度,并保留了原始特征图的一些统计信息。
- 平均池化可以减轻特征图中的噪声,并提高模型的鲁棒性。
- 平均池化在图像分类问题中较为常用,因为它能够保留整体特征。
总的来说,池化层在卷积神经网络中起到了降维和提取主要特征的作用。无论是最大池化还是平均池化,它们都可以减少特征图的维度,减少计算量,并提高模型的准确性。
5、降采样(Downsampling)
在深度学习中,降采样是一种常见的数据处理操作,用于减少数据维度、提高计算效率、减少过拟合风险以及改善模型的泛化能力。降采样通常应用于输入数据、特征图或神经网络层的输出,以下是深度学习中常见的降采样技术:
- 池化层降采样:在卷积神经网络(CNN)中,池化层用于对特征图进行下采样操作,以减小特征图的尺寸和数量,从而降低计算负担和控制模型复杂度。
- 步长卷积降采样:卷积神经网络中的卷积操作通常使用一个或多个步长(stride)来实现降采样,即在卷积过程中直接跳过部分像素点,减小输出特征图的尺寸。
- 自适应降采样:一些具有自适应能力的神经网络层(比如自注意力层)可以通过自学习的方式对输入数据进行降维处理,以减少数据维度和提取有效特征。
- 特征选择降采样:在特征工程中,可以通过特征选择的方式对原始特征进行降维,从而剔除冗余信息、减少噪声影响,提升模型效果。
降采样的目的包括降低数据维度、减少模型复杂度、提高计算效率、防止过拟合以及改善泛化能力。值得注意的是,在进行降采样时需要考虑对数据信息的保留程度,以免丢失重要的特征信息。因此,在实际应用中,降采样的操作通常需要结合任务需求、数据特点和模型复杂度等因素进行合理的调整和权衡。
七、整体网络架构
卷积神经网络(Convolutional Neural Network,简称CNN)是一种基于深度学习的神经网络模型,特别适用于图像识别、语音识别、自然语言处理等领域。它的整体架构包括输入层、卷积层、池化层、全连接层和输出层等几个部分。
CNN的整体架构如下:
-
输入层:负责接收输入数据,一般为图像、语音等数据。
-
卷积层:卷积层是CNN的核心层之一,包括多个卷积核进行卷积操作,提取出不同的特征。卷积操作可以理解为在图像或语音等数据上通过滤波器扫描,即为对输入数据进行卷积、加权求和、激活等操作,输出一定数量的卷积特征图。
-
池化层:常见的池化方式有最大池化和平均池化,用于对特征图进行下采样,减小特征图的大小,同时提取出特征图的主要特征,保留特征信息并减少模型计算量。
-
全连接层:全连接层是连接卷积和池化层的连接层,也是CNN的核心部分之一,用于将特征图映射到标签空间,进行分类和识别等任务。
-
输出层:输出层一般用于分类和预测等任务,输出结果为类别概率或预测结果。
CNN的整体架构一般包括多个卷积层、池化层、全连接层和输出层等,每一层的输出都作为下一层的输入,形成了多层的网络结构。整个网络通过反向传播算法对模型参数进行优化,提高模型的准确率和泛化能力。
notes:
带参数计算的才能算作一层网络,卷积层和全连接层算一层神经网络,激活函数和池化层都不算。
八、卷积神经网络经典网络
1. LeNet-5
LeNet-5是一种经典的深度卷积神经网络,在1998年由Yann LeCun等人提出,用于手写数字识别任务。它是第一个成功应用于实际问题的卷积神经网络之一,也为后来的深度学习研究奠定了基础。
LeNet-5的结构包含七个层,分别是两个卷积层、两个池化层和三个全连接层。下面是每个层的详细介绍:
-
输入层:LeNet-5接受32x32像素大小的灰度图像作为输入。
-
第一个卷积层:使用5x5大小的卷积核进行卷积操作,得到六个特征图。每个特征图的大小为28x28,使用sigmoid函数作为激活函数。
-
第一个池化层:采用2x2大小的最大池化操作,将特征图的大小缩小到14x14。
-
第二个卷积层:使用5x5大小的卷积核进行卷积操作,得到16个特征图。每个特征图的大小为10x10,使用sigmoid函数作为激活函数。
-
第二个池化层:采用2x2大小的最大池化操作,将特征图的大小缩小到5x5。
-
第一个全连接层:将16个5x5的特征图展开为一个一维向量,共有120个节点。使用sigmoid函数作为激活函数。
-
第二个全连接层:具有84个节点的全连接层,使用sigmoid函数作为激活函数。
-
输出层:具有10个节点的全连接层,对应10个手写数字的类别。使用softmax函数将输出转化为概率分布。
LeNet-5的训练过程使用反向传播算法进行优化,采用交叉熵作为损失函数。在训练过程中,采用随机梯度下降法对网络参数进行更新。LeNet-5的参数量较小,适用于简单任务的处理。
2. AlexNet
AlexNet是由Alex Krizhevsky等人在2012年提出的卷积神经网络,它是第一个在ImageNet图像识别竞赛中取得突破性成果的网络。
AlexNet的主要特点如下:
-
网络结构:AlexNet由8层神经网络组成,其中前5层为卷积层,后3层为全连接层。整体结构是一串卷积层-池化层组合。最后一层是具有1000个神经元的全连接层,对应于ImageNet数据集中的1000个类别。
-
卷积核尺寸:AlexNet使用了较大的卷积核尺寸,第一层卷积层使用了11x11的卷积核,而后续几层都使用了较小的卷积核。
-
ReLU激活函数:AlexNet使用了ReLU(Rectified Linear Unit)作为激活函数,用于增加网络的非线性特性和防止梯度消失问题。
-
数据增强和Dropout:为了减少过拟合,AlexNet在训练过程中采用了数据增强技术,如随机裁剪、水平翻转等。同时,还引入了Dropout层,以随机地丢弃一些神经元的输出。
-
并行计算:为了加速训练过程,AlexNet使用了两个GPU进行并行计算,使得训练时间大大缩短。
AlexNet的提出对深度学习和计算机视觉领域的发展产生了重要影响。它通过引入更深的网络结构、使用更大的数据集和数据增强技术,以及采用更大的卷积核尺寸等创新,显著提升了图像分类任务的准确率。同时,AlexNet也标志着卷积神经网络的崛起,并为后续更深、更复杂的网络奠定了基础。
3. VGGNet
VGGnet是由Karen Simonyan和Andrew Zisserman在2014年提出的卷积神经网络模型,它的目标是通过增加网络深度来提高图像分类性能。
VGGnet的主要特点如下:
-
网络结构:VGGnet总共有16或19层神经网络,由卷积层、池化层和全连接层组成。卷积层主要使用3x3的卷积核尺寸,保持网络的参数数量较小。池化层采用2x2的MaxPooling操作,用于减小特征图的尺寸。全连接层负责将特征映射转化为最终的分类概率。
-
网络深度:VGGnet是目前为止最深的卷积神经网络之一。根据模型的版本,它可以有16或19层。增加网络的深度有助于提取更丰富的特征,提高图像分类性能。
-
卷积核尺寸:VGGnet主要使用3x3的卷积核。通过多次堆叠3x3的卷积层,并采用较小的卷积核尺寸,可以增加网络的非线性表达能力,并减少参数数量。
-
模型复杂性:VGGnet的模型相对较大,参数数量较多,导致计算复杂度较高。它需要更多的计算资源进行训练,但同时也能够提供更准确的分类结果。
-
预训练模型:由于VGGnet的训练成本较高,研究者通常采用在大规模图像数据集(如ImageNet)上预训练的模型。这些预训练模型可以通过迁移学习的方式,快速应用于其他任务,提高效果。
VGGnet的提出证明了增加网络深度对提高图像分类性能的重要性。它为后续深度卷积神经网络的设计提供了重要的参考,并成为图像识别任务中的基准模型之一。
notes:
经过2X2的池化操作之后会损失一些信息,体积会变为原来的,为了弥补回来,在下一次卷积时使得特征图数量翻倍,用特征图的个数弥补特征图长宽的损失。
4. GoogLeNet
GoogleNet,也被称为Inception V1,是由Google团队在2014年提出的卷积神经网络模型,旨在解决深层网络中的计算和参数量过大的问题。
GoogleNet的主要特点如下:
-
网络结构:GoogleNet由22个卷积层和全连接层组成,其中包含多个并行的卷积分支。每个分支都使用不同尺寸的卷积核来捕捉不同尺度的特征,这样可以同时考虑局部和全局信息。之后,每个分支的特征图会被串联起来,并通过1x1的卷积核进行混合。
-
Inception模块:GoogleNet的核心是Inception模块,它是通过一系列的并行操作来提取特征。一个Inception模块包含了多个不同大小的卷积核,并且在卷积操作之前使用了1x1的卷积核来减少维度。这种多尺度的处理方式可以在保持较低计算成本的情况下,提取丰富的特征。
-
减少参数量:为了减少模型的参数数量,GoogleNet使用了1x1的卷积核来降低特征图的通道数量,以减少计算成本。这些1x1卷积层被称为“降维层”,它们可以减少特征图的尺寸,提高计算效率。
-
辅助分类器:为了缓解梯度消失问题和改善训练过程,GoogleNet在中间层添加了两个辅助分类器,这些分类器将中间层的特征图作为输入,并与最终分类器的输出进行联合训练。这种设计可以促使网络在不同的层级学习到有效的特征表示。
-
模型复杂性:相较于之前的网络模型,GoogleNet相对较为复杂,但它通过Inception模块的设计,显著减少了参数量和计算量,使得在相同计算资源下获得更好的性能。
GoogleNet的成功启示了后续深度卷积神经网络的发展,如Inception V3、Inception-ResNet等。它在ILSVRC 2014的图像分类任务中取得了优异的成绩,证明了多尺度和并行操作在图像分类中的重要性。
5. ResNet
ResNet(残差网络)是由微软研究院在2015年提出的卷积神经网络模型,用于解决深度神经网络中的退化问题和梯度消失问题。
ResNet的主要特点如下:
-
残差连接:ResNet中引入了残差连接,通过将输入直接连接到输出,使得网络可以学习到恒等映射。这个跨层的直接连接可以使得梯度更容易地传播,避免了深层网络中梯度消失的问题。残差连接的基本形式是将输入通过一个卷积层后与输出相加,然后经过非线性激活函数。这种跳跃连接的设计使得网络可以更容易地学习到残差项,从而提高了网络的性能。
-
深层网络:ResNet的网络层数可以很深,达到100多层甚至更多。较深的网络可以学习到更复杂和抽象的特征表示,从而提升网络的性能。而传统的深层网络存在梯度消失和退化问题,ResNet通过残差连接解决了这些问题,使得网络可以有效地训练。
-
残差块:ResNet中的基本构建块是残差块,它由两个卷积层和一个跳跃连接组成。每个残差块内部的卷积层通常使用较小的卷积核,例如3x3,来保持特征图的尺寸。这种设计可以控制网络的复杂度,并减少参数量。
-
恒等映射和投影映射:在残差块中,如果输入和输出的维度相同,那么残差连接就是恒等映射。如果输入和输出的维度不同,需要使用一个额外的1x1卷积层来匹配维度。这个1x1卷积层称为投影映射,可以学习到特征图的非线性映射,使得输入和输出的维度匹配。这样的设计使得网络可以适应不同维度的特征表示。
ResNet的成功推动了深度卷积神经网络的发展,许多后续的模型(如ResNet-18、ResNet-34等)都是基于ResNet架构进行的改进。在ImageNet挑战赛中,ResNet取得了优异的成绩,并成为了目前广泛使用的卷积神经网络模型之一。
notes:
残差就是指网络对应函数的差,即残差=网络估计函数-目标函数。残差网络的基本思想是,为了解决深层神经网络中的梯度消失问题,在网络中引入跳跃连接(shortcut connection)将网络中前面层的输入直接传递到后面的层中,从而实现更深的网络层数。这些跳跃连接可以让低层信息和反向传播的梯度更加容易传播到高层,使训练更稳定。
在标准的神经网络中,每个网络层都是对输入进行变换,然后通过激活函数输出变换后的结果。残差网络与标准神经网络的不同之处在于,残差网络中的每个网络块都使用跳跃连接,可以直接跳过前面的层,将前面的特征直接传递到后面的层。
跳跃连接可以通过一个单元来实现,即残差块(residual block)。残差块由两个卷积层、一个激活层和跳跃连接组成(可以有多个卷积层,主要取决于需要处理的数据集的大小和复杂程度)。具体地,残差块首先对输入特征进行两次卷积操作,并在两次卷积之间插入了激活函数。然后,将这个特征与跳跃连接中传递的特征相加,并再次进行激活函数。
设F(x)为网络块的映射函数,其中x为网络块输入的特征,公式H(x) = F(x) + x表示了在残差网络中,如何利用跳跃连接将输入数据直接传递给残差块的输出。
具体来说,假设F(x)表示残差块对输入特征进行变换后的特征表示,x表示输入特征本身。我们将这两者相加,得到H(x)。这样做的目的是让输出结果H(x)包含输入特征x的信息,并将其传递到后面的网络层中。
在该表达式中,x是某个网络块的输入特征。残差块对应的输出值是H(x),所以我们需要求解如何将x转化为H(x)以更新网络参数。如果分类器使用非线性激活函数(如ReLU函数),它会删除或带来负修正项。此外,每一层都会添加直连连接,可以解决梯度弥散、梯度爆炸。
在这种方式下,原始的输入特征会直接跨过前面的卷积层和激活函数的部分,然后和后面层卷积的结果相加进入后面的卷积层和激励部分。这种方式能够保证网络的层数越多,残差块可以学习到的基础数据变量就越多。
九、感受野
1、定义
感受野(Receptive Field)是指在卷积神经网络(CNN)中,一个神经元对应输入图像或特征图上的局部区域大小。
具体而言,对于一个卷积神经网络中的某个神经元,它在输入图像或特征图上所关注的区域就是它的感受野。这个感受野区域是通过卷积操作和池化操作逐渐扩大的。
在最初的卷积层中,神经元的感受野仅限于输入图像或特征图中的一个小区域,因为每个神经元只与输入图像的一个局部区域进行卷积操作。然而,随着网络的层数增加,上一层神经元的感受野会扩展到下一层的更大区域,这是由于卷积操作和池化操作的性质。
在卷积操作中,卷积核的大小决定了其感受野。具体而言,一个在某一层的神经元只与上一层中同样大小的区域进行卷积,这决定了该神经元的局部感受野。随着网络深度的增加,每一层的卷积核大小和步幅(stride)通常都相同,以保持感受野的一致性。
此外,池化操作也会影响感受野的大小。最大池化或平均池化操作会减小特征图的大小,从而进一步扩大了每个神经元的感受野。
感受野的大小对于网络的特征提取能力和任务性能具有重要影响。较小的感受野有助于提取图像的细节特征,而较大的感受野则更适合于捕捉更大尺度的语义信息。
了解神经元的感受野大小有助于我们理解网络的组织结构和信息传递方式,并在网络设计和调整中进行合理的选择,以使网络在特定任务上表现出更好的性能。
2、局部感受野
局部感受野(Local Receptive Field)是指神经网络中某一层的神经元对前一层的输出进行卷积操作时所观察到的输入区域的大小。
在卷积神经网络(CNN)中,每个神经元只与前一层的一小块局部区域进行卷积操作,这个局部区域即为神经元的局部感受野。神经元的局部感受野大小取决于卷积核(filter kernel)的尺寸。
假设在某一层的神经元上,使用的卷积核尺寸为3x3,那么该神经元的局部感受野大小为3x3,即其感知并处理的输入数据范围是前一层输出中的一个3x3的局部区域。其中心像素是神经元位置对齐的像素。
局部感受野对于神经网络具有重要的作用。通过卷积操作,局部感受野内的特征被提取并与卷积核的权重相乘,形成了神经元的输出。不同神经元的局部感受野在整个输入数据中逐渐平移,从而覆盖整个输入数据,实现对输入的全局感知。
通过堆叠多个卷积层和池化层,每一层神经元的局部感受野不断扩张,使网络能够捕捉到不同尺度、不同层次的特征,从而逐渐实现对输入数据的全局感知和语义理解。
3、全局感受野
全局感受野(Global Receptive Field)是指在神经网络中,一个神经元对于整个输入数据的感知范围。
在卷积神经网络(CNN)中,随着网络层数的增加,每个神经元的局部感受野逐渐扩大,从而实现对输入数据更大尺度的感知。当网络中的每一层神经元的局部感受野逐渐扩展时,神经元的感受野会逐渐覆盖整个输入数据,形成全局感受野。
全局感受野的大小与网络的深度和每个神经元的局部感受野大小有关。随着网络深度的增加,每一层神经元的局部感受野不断扩张,并且通过堆叠多个卷积层和池化层,神经元的感受野范围逐渐增大。
通过增加网络的深度和调整卷积核的尺寸、步幅等参数,可以增加神经元对输入数据的感知范围,从而获得更广阔的全局感受野。全局感受野对于捕捉输入数据中的全局结构、语义信息和上下文关系非常重要。
在进行视觉任务时,例如图像分类、目标检测和图像分割,全局感受野的大小可以决定网络是否能够捕捉到物体的整体信息以及上下文关系。较大的全局感受野可以帮助网络识别物体的整体形状和结构,而较小的全局感受野则更适合于提取物体的局部细节特征。
4、感受野大小对特征提取的影响
感受野大小对特征提取的影响主要体现在以下几个方面:
-
局部信息和全局信息:较小的感受野主要用于捕捉局部的细节信息,例如边缘、纹理等。这些低级别的特征有助于感知输入图像的细微变化。而较大的感受野可以捕捉更大范围的语义信息,例如物体的整体形状、关系和上下文。这些高级别的特征有助于感知输入图像的整体结构和意义。
-
特征表示的多尺度性:通过逐渐增大感受野,神经网络可以实现多尺度的特征提取。较小的感受野提取的特征主要集中在图像的局部区域,较大的感受野则能够获取更宽广的图像上下文信息。这种多尺度的特征表示有助于解决物体尺度变化、遮挡和姿态变化等问题。
-
空间位置的感知范围:感受野大小还决定了神经元对输入图像中不同位置的敏感程度。较小的感受野只关注输入图像的某个小区域,对于整个图像来说,神经元的感受野可以重叠或不重叠。而较大的感受野可以覆盖更多的空间位置,对整个图像有更全局的感知范围。
总的来说,感受野大小的选择影响了神经网络对输入图像的特征提取能力。较小的感受野适合提取局部细节特征,适用于处理一些低级别的任务。而较大的感受野适合提取全局的语义特征,适用于处理一些高级别的任务。通过合理设计网络结构和感受野大小,可以提高神经网络在不同任务上的性能。