一、卷积神经网络介绍
1、CNN概述
卷积神经网络(Convolutional Neural Network,简称 CNN)是深度学习领域的重要分支,凭借独特的结构设计和强大的特征提取能力,在计算机视觉、自然语言处理等众多领域取得了突破性进展,深刻改变了人工智能的发展格局。

卷积神经网络的主要思想源于对人类视觉系统的模拟。它通过卷积层、池化层和全连接层等组件,自动从数据中提取特征。卷积层利用卷积核在输入数据上滑动进行卷积操作,提取局部特征,这种操作不仅减少了网络参数数量,还能有效保留数据的空间结构信息。例如在图像识别中,卷积核可以捕捉图像中的边缘、纹理等基础特征。池化层则对卷积层输出的特征图进行降采样,降低数据维度,减少计算量,同时增强网络对数据平移、旋转等变换的鲁棒性。全连接层将经过多层提取和处理后的特征进行整合,用于最终的分类或回归任务。
2、CNN的体系结构
卷积神经网络(Convolutional Neural Network,简称 CNN)是一种专门为处理具有网格结构数据(如图像、音频)而设计的深度学习模型,在图像识别、目标检测、语义分割等领域取得了巨大成功。其独特的体系结构由多个不同功能的层组成,每个层都在特征提取和模型训练中发挥着关键作用,下面将对 CNN 体系结构中主要的各个层进行详细介绍。


(1) 输入层
输入层是 CNN 的第一层,负责接收原始数据。对于图像数据而言,输入层的形式通常是一个多维数组,数组的维度对应图像的高度、宽度以及通道数。
以常见的 RGB 彩色图像为例,输入数据一般是一个三维张量,形状为 [高度,宽度,3] ,其中 “3” 代表红、绿、蓝三个颜色通道;如果是灰度图像,通道数为 1,输入张量形状则是 [高度,宽度,1]。输入层的主要作用是将原始数据标准化,使其符合模型后续处理的要求,例如将图像像素值归一化到 [0, 1] 或 [-1, 1] 区间,以加快模型的收敛速度。
(2) 卷积层
卷积层是 CNN 的核心层,承担着特征提取的关键任务。其基本原理基于卷积操作,通过使用多个可学习的卷积核(也称为滤波器)在输入数据上滑动,与输入数据对应区域进行元素相乘再求和,从而得到卷积特征图。
每个卷积核都具有特定的尺寸(如 3×3、5×5)和深度(通道数),并且在训练过程中不断调整自身参数,以提取不同类型的特征。例如,浅层的卷积层往往学习到图像的边缘、纹理等基础特征,而深层的卷积层则能够提取更抽象、语义更强的特征,如物体的形状、类别等。
卷积层有几个重要的超参数,如卷积核的数量、步长和填充方式。卷积核数量决定了输出特征图的数量,数量越多,网络能够学习到的特征种类也就越丰富;步长指的是卷积核在滑动时每次移动的像素数,步长越大,输出特征图的尺寸就越小;填充是在输入数据边界添加额外像素的操作,目的是控制输出特征图的尺寸,保持输入和输出数据的尺寸一致或按照特定比例变化。通过这些超参数的设置,卷积层能够灵活地调整特征提取的方式和结果。
(3) 激活函数层
激活函数层通常紧跟在卷积层之后,其作用是为网络引入非线性因素。如果没有激活函数,无论 CNN 有多少层,本质上都只是对输入数据进行线性变换,这将极大限制网络的表达能力,使其无法学习到复杂的模式和关系。常见的激活函数包括 ReLU(Rectified Linear Unit,修正线性单元)、Sigmoid 和 Tanh 等。
ReLU 函数是目前最常用的激活函数之一,其数学表达式为 f (x) = max (0, x),即当输入 x 大于 0 时,输出为 x;当 x 小于等于 0 时,输出为 0。ReLU 函数具有计算简单、收敛速度快以及缓解梯度消失问题等优点,能够有效提高网络的训练效率和性能。Sigmoid 函数将输入值映射到 0 到 1 之间,常用于二分类问题的输出层;Tanh 函数则将输入映射到 – 1 到 1 之间,在一些特定的网络结构中也有应用。
(4) 池化层
池化层的主要作用是对卷积层输出的特征图进行下采样,降低数据的维度,减少计算量和参数数量,同时在一定程度上防止过拟合。常见的池化操作有最大池化(Max Pooling)和平均池化(Average Pooling)。
最大池化是在每个池化窗口内选取最大值作为输出,能够保留特征图中最显著的特征,突出图像中的关键信息;平均池化则是计算每个池化窗口内元素的平均值作为输出,对图像中的变化相对更具鲁棒性。池化层也有超参数,如池化窗口大小和步长,通常池化窗口大小为 2×2 或 3×3,步长与之相等,这样每次池化操作后,特征图的高度和宽度都会缩小为原来的一半。
(5) 展平层
在卷积神经网络(CNN)的体系结构里,展平层(Flatten Layer)虽不直接参与特征提取,却在数据处理流程中扮演着不可或缺的角色。它是连接卷积层、池化层与全连接层的关键纽带,承担着数据格式转换的重要任务,确保网络各部分能够顺畅协作。
展平层的作用:
卷积层和池化层在处理图像数据时,会输出具有特定形状的多维特征图,例如形状为 [batch_size, height, width, channels] 的张量,其中 batch_size 表示一批数据中的样本数量,height 和 width 代表特征图的高度和宽度,channels 则是特征图的通道数。而全连接层要求输入是一维向量,以便每个神经元能与上一层所有元素进行连接计算。因此,展平层的核心作用就是将卷积层和池化层输出的多维特征图,“压平” 成一维向量,使其满足全连接层的输入要求,从而实现特征从局部抽象到全局整合的过渡。
展平层的工作原理:
展平层的操作过程较为简单直接。假设卷积神经网络中某一层输出的特征图尺寸为 [2, 4, 4, 6],这里 “2” 表示 batch_size(即一次处理 2 个样本),“4, 4” 代表特征图的高度和宽度,“6” 为通道数。经过展平层时,它会按照一定顺序(通常是按行优先的顺序)将这些多维数据依次排列,最终得到形状为 [2, 96] 的二维张量,其中 “2” 依然是 batch_size,“96” 是通过计算 4×4×6 得到的,即将每个样本的多维特征图展平为一个长度为 96 的一维向量。这样,展平后的一维向量就可以作为全连接层的输入,开启后续的分类或回归任务流程。
展平层的优势与潜在问题:
展平层的存在简化了卷积神经网络从特征提取到分类回归的衔接过程,使得网络结构的设计更加模块化和逻辑化。它能够有效保留卷积层和池化层提取到的所有特征信息,不会对特征进行额外的筛选或改变,只是单纯改变数据的维度结构,为全连接层对特征的整合与分析奠定基础。
然而,展平层也存在一些潜在问题。由于它将多维特征图直接转换为一维向量,会导致数据失去原有的空间结构信息。这些空间信息在某些对图像空间布局敏感的任务中至关重要,例如语义分割任务,丢失空间结构信息可能影响模型对图像中物体位置和边界的准确判断。此外,展平后的数据维度往往较高,会增加全连接层的参数数量,从而加大计算量和模型训练的时间成本,还可能引发过拟合问题。
展平层在实际网络中的应用:
在经典的 CNN 网络结构,如 LeNet、AlexNet、VGG 等中,展平层都是重要组成部分。以 LeNet 为例,在经过多层卷积和池化操作提取图像特征后,展平层将得到的多维特征图转换为一维向量,再输入到全连接层进行手写数字的分类。在现代深度学习框架(如 TensorFlow、PyTorch)中,实现展平层非常便捷。在 TensorFlow 里,可以使用 tf.keras.layers.Flatten() 函数构建展平层;在 PyTorch 中,通过 torch.flatten() 函数就能完成数据维度转换操作,方便开发者根据需求搭建 CNN 模型。
(6) 全连接层
全连接层在 CNN 的末端,其作用是将经过前面多层卷积和池化操作提取到的特征进行整合,并映射到具体的类别输出。在全连接层中,每个神经元都与上一层的所有神经元相连,因此全连接层包含大量的参数。
例如,假设上一层输出的特征图展平后的长度为 1000,全连接层有 10 个神经元(对应 10 个类别),那么仅这一层就包含 1000×10 + 10 = 10010 个参数(加上 10 个偏置项)。全连接层通过对输入特征进行加权求和并经过激活函数处理,输出每个类别的预测得分,最后通过 Softmax 函数(在多分类问题中)将得分转换为概率分布,从而得到最终的分类结果。
(7) 输出层
输出层是 CNN 的最后一层,其结构和激活函数的选择取决于具体的任务类型。在分类任务中,若为二分类问题,输出层通常只有一个神经元,并使用 Sigmoid 激活函数,输出值表示样本属于正类的概率;若为多分类问题,输出层的神经元数量等于类别数,使用 Softmax 激活函数,将每个神经元的输出转换为概率值,概率最大的类别即为预测结果。
在回归任务中,输出层的神经元数量根据需要预测的目标变量数量而定,并且不使用激活函数,直接输出连续的数值结果。
CNN 的各个层通过层层递进、相互协作,实现了从原始数据到高级特征的提取与分类预测。输入层接收数据,卷积层和激活函数层提取和增强特征,池化层降低数据维度,全连接层整合特征,最后输出层给出任务结果。理解这些层的工作原理和功能,对于掌握 CNN 的运行机制、优化网络结构以及应用到实际问题中都具有重要意义 。
3、CNN卷积的计算
(1)卷积神经网络的图像数据
在卷积神经网络(CNN)中,图像通常被表示为一个三维矩阵,也称为张量(tensor)。具体来说,对于彩色图像,图像矩阵包含三个维度:宽度、高度和通道数。每个通道对应于图像中的一个颜色通道,例如红色、绿色和蓝色。
假设有一幅彩色图像,宽度为W像素,高度为H像素,通道数为C。图像的矩阵表示为一个三维张量,形状为(H,W,C)。其中,H表示图像的高度,W表示图像的宽度,C表示图像的通道数。
举例来说,对于一幅尺寸为28×28像素的彩色图像,它的图像矩阵是一个形状为(28,28,3)的三维张量。这个矩阵中的每个元素代表图像中对应位置的像素值,而通道维度则表征了像素的颜色信息。我们把图像的数据可以看作是一个个像素点组成的矩阵。

(2)卷积计算过程
【1】单通道图像卷积的计算
卷积核(Convolutional Kernel),也称为滤波器(filter),是卷积神经网络中的一个重要组件。卷积核是一个二维数组,用于对输入图像进行卷积操作。在卷积神经网络的卷积层中,卷积核通过滑动窗口的方式在输入图像上进行卷积操作,从而提取图像的特征信息。
示例-1:单通道图像卷积的计算

【2】多通道图像卷积的计算
示例-2:多通道图像卷积的计算
假设有形状为(H,W,C) = 5 x 5 x 3的图像,即高= 5、宽= 5;C = 3通道的RGB图像的如下所示:

这里我们设截距B = 0,设卷积的滑动窗口步长为1。
R通道:
R通道及其卷积核如下所示:

则输入数据:
X_R = [
[ 0, 0, 0, 0, 0 ],
[ 0, 1, 2, 3, 0 ],
[ 0, 1, 1, 2, 0 ],
[ 0, 1, 0, 1, 0 ],
[ 0, 0, 0, 0, 0 ]
]
卷积核数据:
W_R = [[ 0, 0, 0 ], [ 0, -1, -1 ], [ 0, 0, 0 ]]
G通道:

则输入数据:
X_G = [
[ 0, 0, 0, 0, 0],
[ 0, 0, 1, 2, 0 ],
[ 0, 1, 1, 2, 0 ],
[ 0, 1, 0, 1, 0 ],
[ 0, 0, 0, 0, 0 ]
]
卷积核数据:
W_G = [[ 0, 0, 0 ], [ 0, -1, 1 ], [ 0, 0, 0 ]]
B通道:

则输入数据:
X_B = [
[ 0, 0, 0, 0, 0 ],
[ 0, 0, 1, 0, 0 ],
[ 0, 1, 0, 0, 0 ],
[ 0, 1, 0, 1, 0 ],
[ 0, 0, 0, 0, 0 ]
]
卷积核数据:
W_R = [[ 0, 1, 0 ], [ 0, -1, 0 ], [ 0, 0, 0 ]]
其输出结果是三个通道计算结果之和,然后加上偏置B:
Y = X_R * W_R + X_G * W_G + X_B * W_B + B

其中X_R * W_R、 X_G * W_G、X_B * W_B为内积计算形式,这里举一个计算过程,剩下的读者自行计算。
R通道:F1_R = [ 0*0 + 0*0 + 0*0 ] + [ 0*0 + 1*(-1) + 2*1 ] + [ 0*0 + 1*0 + 1*0 ] = 1
G通道:F1_G = [ 0*0 + 0*0 + 0*0 ] + [ 0*0 + 0*(-1) + 1*1 ] + [ 0*0 + 1*0 + 1*0 ] = 1
B通道:F1_B = [ 0*0 + 0*1 + 0*0 ] + [ 0*0 + 0*(-1) + 1*0 ] + [ 0*0 + 1*0 + 0*0 ] = 0
Y1 = F1_R + F1_G + F1_B + b1 = 1 + 1 + 0 + 0 = 2
同理可以计算Y2到Y9的值。
4、卷积的作用
在卷积神经网络(Convolutional Neural Network, CNN)中,卷积(Convolution)是一种重要的操作,它在卷积神经网络中起着特征提取、参数共享、稀疏连接和平移不变性等重要作用。通过卷积操作,神经网络可以从输入数据中提取高级别的特征,实现图像识别、目标检测、图像分割等复杂的视觉任务。卷积神经网络的成功离不开卷积操作的精妙设计和有效实现。
(1)特征提取
卷积操作在卷积神经网络中主要用于特征提取。通过卷积操作,网络可以从输入的图像中提取出不同的特征信息,这些特征包括边缘、纹理、形状等。卷积操作可以检测局部区域的特征,然后通过堆叠多个卷积层来提取更高级别的特征。
假设我们要训练一个卷积神经网络来识别猫的图片。在这个例子中,我们可以通过卷积操作来进行特征提取,以便区分图像中的猫和其他物体。
首先,在网络的第一个卷积层中,我们可以使用一些卷积核(也称为滤波器)来检测不同的特征。例如,一个卷积核可能会检测图像中的边缘,另一个卷积核可能会检测纹理。当这些卷积核在输入图像上进行卷积操作时,它们会突出显示不同的特征信息。
假设我们有一个卷积核可以检测垂直边缘,当这个卷积核与输入图像进行卷积操作时,它会强调图像中的垂直边缘。通过这种方式,网络可以学习到图像中存在的边缘特征。
接着,在下一个卷积层中,我们可以堆叠多个卷积核来提取更高级别的特征,例如检测轮廓、形状等。通过不断堆叠多个卷积层,网络可以逐渐学习到图像中更加复杂和抽象的特征,最终实现对猫图像的准确识别。
因此,通过卷积操作在不同层级上提取不同的特征信息,卷积神经网络可以逐步学习到图像中的各种特征,从而实现图像分类和识别的任务。这个例子展示了卷积神经网络中特征提取的过程,帮助我们更好地理解卷积操作在神经网络中的重要作用。
(2)参数共享
在卷积操作中,卷积核(filter)被视为特征检测器,它通过滑动窗口在输入图像上进行卷积操作。参数共享是卷积操作的一个重要特性,即在整个输入图像上使用同一个卷积核进行卷积操作,这样可以大大减少神经网络的参数数量,降低过拟合的风险。
假设我们要训练一个卷积神经网络来识别手写数字的图片。在这个例子中,我们可以通过参数共享这个特性来理解卷积操作是如何减少参数数量和降低过拟合风险的。
首先,我们可以将卷积核看作是一个特征检测器,用于在输入图像上检测不同的特征,比如边缘、纹理等。当这个卷积核在输入图像上进行卷积操作时,它会提取出对应的特征信息。
现在,假设我们有一个卷积核用于检测水平边缘。在传统的全连接神经网络中,每个神经元都会有自己的权重参数,用于学习不同的特征。但在卷积神经网络中,我们使用同一个卷积核在整个输入图像上进行卷积操作,这就是参数共享的概念。
通过参数共享,我们可以在整个图像上使用同一个卷积核,而不是为每个位置都创建一个独立的卷积核。这样做可以大大减少神经网络的参数数量,因为每个卷积核的权重参数是共享的,只需要学习一次。这不仅降低了模型的复杂度,还减少了过拟合的风险。
因此,通过参数共享这个特性,卷积神经网络可以有效地减少参数数量,降低过拟合风险,提高模型的泛化能力。这个例子展示了参数共享在卷积操作中的作用,帮助我们更好地理解为什么卷积神经网络在图像识别任务中表现出色。
(3)稀疏连接
在全连接神经网络中,每个神经元都与上一层所有神经元相连接,参数数量庞大。而在卷积神经网络中,卷积操作只在局部区域进行,相邻神经元之间的连接是稀疏的,这样可以减少参数数量和计算复杂度。
假设我们要训练一个神经网络来识别一张图片中的狗。在这个例子中,我们可以通过稀疏连接这个概念来理解全连接神经网络和卷积神经网络之间的区别。
首先,让我们看看全连接神经网络。在全连接神经网络中,每个神经元都与上一层的所有神经元相连接,这意味着每个神经元都有很多权重参数需要学习。如果我们要处理一个像素为 100×100 的图片,那么输入层就会有 10000 个神经元,每个神经元都与下一层的所有神经元相连,参数数量就会非常庞大。
现在,让我们看看卷积神经网络。在卷积神经网络中,卷积操作只在局部区域进行,这意味着神经元只与局部区域内的神经元相连接,而与整个图像上的神经元并非全部相连。这种局部连接的方式使得相邻神经元之间的连接是稀疏的,即大部分连接是不存在的。
通过稀疏连接,卷积神经网络可以减少参数数量和计算复杂度。因为神经元之间的连接是稀疏的,每个神经元只需要学习与局部特征相关的权重参数,而不是学习与整个图像相关的参数。这样不仅降低了模型的复杂度,而且提高了模型对于局部特征的感知能力。
因此,通过稀疏连接这个特性,卷积神经网络可以更有效地处理图像数据,减少参数数量和计算复杂度,提高模型的效率和泛化能力。这个例子展示了稀疏连接在卷积神经网络中的作用,帮助我们更好地理解为什么卷积神经网络在图像识别任务中表现出色。
(4)平移不变性
卷积操作具有平移不变性的特性,即当输入图像发生平移时,卷积核可以检测相同的特征。这使得卷积神经网络在处理图像时具有一定的平移不变性,使得模型更加鲁棒和泛化能力强。
假设我们要训练一个神经网络来识别一张图片中的猫。在这个例子中,我们可以通过平移不变性这个概念来理解卷积神经网络相对于全连接神经网络的优势。
首先,让我们看看全连接神经网络。在全连接神经网络中,每个神经元都与上一层的所有神经元相连接,这意味着神经元对于输入的位置是敏感的。如果我们要处理一个猫的图片,如果图片发生了平移,那么全连接神经网络可能无法正确识别这张图片,因为位置的改变会导致不同的神经元接收到不同的输入。
现在,让我们看看卷积神经网络。在卷积神经网络中,卷积操作具有平移不变性的特性,即当输入图像发生平移时,卷积核可以检测相同的特征。举个例子,如果我们要检测图片中的猫的眼睛,无论眼睛出现在图片的左上角还是右下角,具有检测眼睛特征的卷积核都能够识别到眼睛的存在。
通过平移不变性,卷积神经网络能够更好地处理图像数据,使得模型对于位置的改变具有一定的鲁棒性和泛化能力。因为卷积核具有检测相同特征的能力,无论这些特征出现在图像的哪个位置,模型都可以正确识别。这样可以降低模型对于具体位置的敏感度,增强模型的稳定性和泛化能力。
因此,通过平移不变性这个特性,卷积神经网络在处理图像任务时可以更好地应对输入图像位置的变化,提高模型的鲁棒性和泛化能力,这也是卷积神经网络在图像识别任务中表现优秀的一个重要原因。
5、卷积层涉及到的参数
(1)滑动窗口的步长
卷积层滑动窗口的步长是指在进行卷积操作时,滑动窗口每次移动的距离大小。在卷积操作中,我们使用一个固定大小的卷积核对输入数据进行滑动窗口操作,通过将卷积核与输入数据逐元素相乘并求和来得到输出。
步长的大小决定了滑动窗口在对输入数据进行卷积时每次移动的距离。通常情况下,步长的大小可以设定为1或者更大的值。如果步长为1,表示每次滑动窗口移动一个元素大小;如果步长为2,表示每次滑动窗口移动两个元素大小,依此类推。
通过调整步长的大小,我们可以改变卷积操作的输出大小和特征提取的方式。较小的步长通常会产生更多的输出特征图,而较大的步长则会减少输出特征图的大小。步长的选择需要根据具体的任务和模型结构进行调整,以获得更好的性能和效果。
步长对卷积的结果有以下几个影响:
输出尺寸:步长的大小会影响卷积操作的输出尺寸。较小的步长会导致输出尺寸变大,而较大的步长会导致输出尺寸变小。这是因为步长决定了滑动窗口在输入数据上移动的距离,从而影响了输出的大小。
特征提取:步长的大小也会影响卷积操作提取的特征。较小的步长会产生更多的重叠区域,从而更多地考虑输入数据的局部信息;而较大的步长会导致输出特征图覆盖范围较大,可能会损失一些细节信息。
参数数量:较大的步长会减少输出特征图的大小,从而减少了需要学习的参数数量。这可能有助于减少模型的复杂度和计算量,但也可能降低模型的特征提取能力。
(2)卷积核的尺寸
卷积核的尺寸是卷积神经网络中非常重要的超参数之一,它决定了卷积操作中滑动窗口的大小。卷积核的尺寸通常以矩阵形式表示,其中包括行数和列数,如3×3、5×5等。
以下是卷积核尺寸的一些重要方面:
【1】 receptive field(感受野):卷积核尺寸决定了每个神经元在输入数据上感受的范围大小,也称为感受野。较大的卷积核尺寸可以捕获更广泛的局部特征,有助于提取更大范围的特征信息,而较小的卷积核尺寸则更适合提取局部细节特征。
【2】 参数数量:卷积核尺寸的大小直接影响了需要学习的参数数量。较大的卷积核包含更多的参数,可能会增加模型的复杂度和计算量;而较小的卷积核则具有更少的参数,有助于减少模型复杂度。
【3】 特征提取能力:不同尺寸的卷积核对于特征的提取能力不同。较小的卷积核可以通过多层叠加来模拟大尺寸的感受野,有助于提取更为复杂的特征;而较大的卷积核可以一次性捕获更广泛的特征信息。
在实际应用中,常见的卷积核尺寸包括3×3、5×5、7×7等,其中3×3是最常用的尺寸,因为它具有适中的感受野和较少的参数数量。但在一些特定任务中,也会使用更大的卷积核尺寸或者多尺寸组合来提取更丰富的特征信息。选择合适的卷积核尺寸需要根据具体任务需求、数据特点和实验结果进行调整。
(3)卷积核的个数
卷积核的个数是卷积神经网络中的另一个重要超参数,它指的是在每一层卷积操作中使用多少个不同的卷积核。每个卷积核在卷积操作中会学习不同的特征,因此卷积核的个数直接影响了网络对输入数据的特征提取能力和表达能力。
以下是卷积核个数的一些重要方面:
【1】特征多样性:使用多个不同的卷积核可以使网络学习到更多种类的特征,从而提高网络对输入数据的特征提取能力。每个卷积核可以学习不同的特征,如边缘、纹理、形状等,多个卷积核的组合可以捕获更丰富的特征信息。
【2】模型复杂度:卷积核的个数直接影响了网络的复杂度和参数数量。较多的卷积核会增加网络的参数数量,可能导致过拟合和计算量增加;而较少的卷积核可能会限制网络的特征提取能力。因此,选择合适数量的卷积核需要在模型性能和计算效率之间进行权衡。
【3】训练效果:适当增加卷积核的个数可以提高网络的训练效果,尤其是在较复杂的任务和数据集中。多个卷积核可以共同学习特征,有助于网络更好地适应输入数据的分布。
在实际应用中,常见的卷积核个数通常是增加的,即从较浅的网络层到较深的网络层,卷积核的个数逐渐增加。通常,较浅的网络层需要较少的卷积核来提取简单的特征,而较深的网络层需要更多的卷积核来提取更复杂的特征。选择合适的卷积核个数需要考虑网络结构、任务需求和实验结果等因素,并进行适当的调整。
选择卷积核的个数是一个重要的超参数,对于卷积神经网络的性能和效率都有很大的影响。一般来说,选择卷积核的个数需要根据具体的任务需求、数据集的复杂性以及计算资源等因素来进行权衡。以下是一些常见的指导原则:
【1】初始选择:在开始设计卷积神经网络时,可以从少量的卷积核开始,例如16或32个。这样可以快速构建一个简单的网络,用于初步验证模型的有效性和性能。
【2】学习能力:随着网络深度的增加,逐渐增加卷积核的个数是比较常见的做法。在深层网络中,增加卷积核的个数有助于提高网络的学习能力,使其能够更好地捕捉数据中的复杂特征。
【3】数据复杂性:对于复杂的任务或数据集,通常需要更多的卷积核来提取更多种类的特征。如果数据集包含大量不同种类的信息,增加卷积核的个数可以帮助网络更好地理解和区分这些信息。
【4】计算资源:增加卷积核的个数会增加网络的参数数量和计算量,可能会导致模型过拟合或者训练时间过长。在资源有限的情况下,需要根据计算资源的限制来选择适当数量的卷积核。
综合上述因素来看,选择卷积核的个数需要进行实验验证,根据具体情况进行调整。可以通过交叉验证、调参实验等方法来找到最佳的卷积核个数。最终的选择应该是在模型性能、计算效率和资源消耗之间取得平衡。
(4)边缘填充
边缘填充(Padding)是卷积神经网络中的一个重要概念,它指的是在输入数据的边缘周围添加额外的值(通常是0),以便在卷积操作时保持输入和输出的大小一致。边缘填充在卷积神经网络中有以下几个作用:
【1】保持特征图大小:在卷积操作中,如果不进行边缘填充,输入数据的边缘像素会因为卷积核的尺寸而受到影响,导致输出特征图的大小减小。通过边缘填充,可以在输入数据周围添加额外的像素,使得输出特征图大小与输入数据大小一致,有助于保持特征图的空间信息。
【2】避免信息丢失:在卷积神经网络中,通过多次卷积操作逐渐提取和汇集特征,如果不进行边缘填充,经过多次卷积操作后,输入数据的边缘信息会逐渐丢失。通过边缘填充,可以保持输入数据的边缘信息,有助于网络更好地学习和理解特征。
【3】卷积核位置对齐:在卷积操作中,卷积核通常是在输入数据的左上角开始滑动的,逐步覆盖整个输入数据。如果不进行边缘填充,最终卷积核的位置可能靠近输入数据的边缘,导致边缘像素的信息不够充分。通过边缘填充,可以使卷积核的位置与输入数据的边缘对齐,确保所有像素都能被充分考虑。
在实际应用中,边缘填充的大小通常根据卷积核的大小和步长来确定。常见的填充方式包括“valid”(不进行填充,只适用有效像素)、“same”(填充使输出特征图大小与输入数据大小一致)等。选择合适的填充方式和大小可以帮助网络更好地学习和提取特征,从而提高模型的性能和稳定性。
6、Softmax函数
Softmax函数是一种常用的激活函数,总的来说,Softmax函数在深度学习中广泛应用于多分类任务,通过将神经网络输出转换为概率分布,帮助神经网络学习并预测不同类别的概率。
Softmax函数将神经网络输出的原始分数(score)转换为每个类别的概率。通过Softmax函数,神经网络最后一层的输出被约束在0到1之间,并且所有类别的输出之和为1,可以解释为每个类别的预测概率。这使得我们可以将神经网络输出解释为对不同类别的置信度或概率。Softmax函数也叫归一化函数。
Softmax函数的特点:
– Softmax函数是平滑的,对输入的小变化有较小的影响,有助于训练的稳定性。
– Softmax函数是可微的,适合于梯度下降算法的优化。
– Softmax函数的输出概率和为1,可以解释为类别的预测概率。
– Softmax函数在多分类任务中有良好的数学性质,可以很好地捕捉不同类别之间的关系。
Softmax函数的计算如下:

示例:
E1 = 3.105, E2 = 150.123, E3 = 30.101 , 试计算Softmax 。
解:
E1 + E2 + E3 = 3.105 + 150.123 + 30.101 = 183.329
AVG1 = E1/(E1 + E2 + E3) = 3.105/183.329 = 0.017
AVG2 = E2/(E1 + E2 + E3) = 150.123/183.329 = 0.819
AVG3 = E3/(E1 + E2 + E3) = 30.101/183.329 = 0.164
所以 Softmax = [ 0.017, 0.819, 0.164 ]
7、池化层
池化层(Pooling Layer)是CNN中的一个重要组成部分,用于减小特征图的空间尺寸、减少参数数量和计算量,同时有助于提取更加鲁棒和抽象的特征。
池化层的作用主要包括以下几个方面:
【1】降采样:通过降低特征图的空间尺寸,减少计算量,提高计算效率。
【2】参数数量减少:池化层并没有需要学习的参数,它只是对输入特征进行简单的统计汇总。
【3】特征不变性:池化层可以提高模型对输入的平移、旋转、缩放等变换的鲁棒性,帮助模型更好地泛化到新样本。
常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling),其中最大池化是最常用的一种。最大池化在每个区域内选择最大的值作为输出,从而保留最显著的特征,有助于保持图像中物体的位置和形状信息;而平均池化则是取区域内所有值的平均值作为输出,用于减少噪声和过拟合。
池化层通常与卷积层交替使用,通过堆叠多个卷积层和池化层构建卷积神经网络结构。在卷积神经网络中,池化层的作用是不可或缺的,它有助于提取更加鲁棒和抽象的特征,降低计算复杂度,提高模型的泛化能力。
示例-1:
假设我们有一个4×4的矩阵作为输入特征图,如下所示. 现在我们要对这个4×4的特征图进行最大池化降采样,采样窗口大小为2×2,步长为2。我们将采样窗口在特征图上以步长为2滑动,每次从窗口中选择最大值作为输出。

具体过程如下:
步骤-1: 第一个采样窗口
2 5
6 4
最大值为6,输出为6。
步骤-2: 第二个采样窗口
3 1
8 2
最大值为8,输出为8。
步骤-3:第三个采样窗口
9 7
3 1
最大值为9,输出为9。
步骤-4:第四个采样窗口
5 3
7 9
最大值为9,输出为9。
最终经过最大池化降采样后得到了一个2×2的特征图:
6 8
9 9
如下图所示:

通过降采样,我们将原始4×4的特征图降低到了2×2的尺寸,减少了计算量和参数数量,提高了计算效率。同时,最大池化操作保留了每个采样窗口内最显著的特征值,有助于保持重要特征信息,提高模型的鲁棒性和泛化能力。
在这个例子中,最大池化层也不需要学习任何参数,它只是对输入特征进行简单的最大值选择操作。因此,参数数量并没有增加,这样可以减少模型中需要训练的参数数量,降低了计算复杂度,提高了计算效率。
通过最大池化操作,我们可以观察到即使输入特征图发生平移、旋转或缩放等变换,最大池化层在选择最大值的过程中保持了特征的不变性。换句话说,无论输入图像如何变换,最大池化层都能提取出相同的特征并保持特征的稳定性。这种不变性有助于模型更好地泛化到新样本,提高了模型对不同图像变换的鲁棒性。
二、经典的卷积神经网络介绍
1、卷积神经网络AlexNet模型
AlexNet是由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在2012年提出的一种卷积神经网络模型,它被广泛认为是深度学习领域的一个重要里程碑,因为它在当年的ImageNet图像识别比赛中取得了惊人的成绩。下面详细介绍一下AlexNet的主要特点和架构:
【1】深度:AlexNet是一个较深的卷积神经网络,共有8个卷积层和3个全连接层。这是当时较为深的神经网络,有助于提取更复杂的图像特征。
【2】卷积层和池化层交替:AlexNet中的卷积层和池化层交替出现,卷积层用于提取图像的特征,池化层用于减少特征图的尺寸和参数量,同时保留重要信息。
【3】ReLU激活函数:在AlexNet中,使用了ReLU(Rectified Linear Unit)激活函数,它可以解决梯度消失的问题,加快网络的收敛速度。
【4】局部响应归一化(LRN):AlexNet引入了LRN层,对卷积层输出的特征图进行局部响应归一化,增强特征的鲁棒性。
【5】Dropout:为了减少过拟合,AlexNet在全连接层中使用了Dropout技术,随机丢弃一部分神经元,防止模型过于依赖某些特征。
【6】Softmax输出层:最后一层是一个输出层,采用Softmax函数将网络的输出转换为概率分布,用于多类别分类任务。
【7】训练策略:AlexNet使用了数据增强和随机抽样的方法来扩充训练数据集,增加了网络的泛化能力。
AlexNet在深度、卷积层和全连接层的结构、激活函数的选择、LRN、Dropout等方面做出了创新,提升了卷积神经网络在图像分类任务中的性能。它的成功也为后续深度学习模型的发展奠定了基础,对于推动深度学习的发展起到了重要的作用。
虽然AlexNet在当时取得了巨大成功,但也存在一些不足之处:
【1】训练难度较大:由于AlexNet模型较深,参数较多,需要较大的训练数据集和计算资源来训练,训练时间较长。
【2】过拟合问题:虽然AlexNet引入了Dropout等技术来减少过拟合,但在一些情况下仍然存在过拟合的风险,需要进一步的优化。
【3】内存消耗高:由于AlexNet包含大量的卷积层和全连接层,需要较大的内存来存储网络参数和中间计算结果,对硬件资源要求较高。
【4】参数调优困难:AlexNet中有许多超参数需要调优,包括学习率、批大小等,需要较多的经验和实验来找到最优的超参数组合。
【5】不适用于小型设备:由于AlexNet模型较大,不适合在资源受限的小型设备上部署,限制了其在一些应用场景中的应用。
尽管存在这些不足,AlexNet作为深度学习领域的开创性工作,为后续深度卷积神经网络的发展奠定了基础,为图像识别和分类等任务的研究提供了重要的参考和启示。随着深度学习技术的不断发展,后续的网络模型也在不断改进和优化,以应对AlexNet的一些不足之处。
Dropout的作用:
在AlexNet中,全连接层采用了Dropout技术来减少过拟合,提高网络的泛化能力。Dropout是一种正则化技术,通过在训练过程中随机将部分神经元的输出置为0,达到随机舍弃一部分神经元的效果。
具体来说,Dropout在全连接层的训练过程中,以一定的概率p(通常为0.5)随机选择部分神经元,并将其输出值设为0,即将神经元“丢弃”。这样的操作可以使得网络在训练过程中变得不稳定,迫使网络去学习更加鲁棒的特征,减少网络对某些特定神经元的依赖,从而降低过拟合的风险。
在前向传播过程中,Dropout会以概率p舍弃某些神经元,但在反向传播过程中,被舍弃的神经元的梯度也会被设置为0,不参与参数的更新。这样可以确保每一层神经元都有可能被舍弃,从而使得网络更具鲁棒性。
在测试阶段,由于Dropout是一种训练时的技巧,为了保持一致性,一般会在测试时将所有神经元的输出值乘以概率p,以保持期望输出的一致性。
通过引入Dropout技术,AlexNet可以有效地降低模型的过拟合风险,提高泛化能力,使得网络在更广泛的数据集上表现更好。这种正则化技术已经被广泛应用于深度学习领域,并在许多深度神经网络模型中得到了应用。
2、卷积神经网络VGGNet模型
VGGNet是由牛津大学计算机视觉组(Visual Geometry Group)在2014年提出的一个深度卷积神经网络模型,是深度学习领域的一个重要里程碑。VGGNet在当时的ImageNet图像识别挑战赛中取得了优异的成绩,大大推动了深度学习领域的发展。
VGGNet的主要特点包括:
1. 深度:VGGNet采用了较深的网络结构,具有16-19层的卷积层和全连接层,通过增加网络深度来提高特征提取的能力。这种深度对于提高模型的表现至关重要。
2. 小卷积核:VGGNet全部采用3×3的卷积核和2×2的池化核,使得网络结构更加简洁。使用多个3×3的卷积层代替一个大的卷积核可以增加非线性,同时保持感受野的大小。
3. 参数共享:VGGNet中的卷积层和池化层采用了参数共享的策略,减少了模型参数的数量,有助于降低过拟合的风险。
4. 全连接层:VGGNet在全连接层中采用了Dropout技术来减少过拟合的风险,提高模型的泛化能力。
VGGNet的工作流程如下:
1. 输入层:输入一张彩色图像,通常为224×224的RGB图像。
2. 卷积层:VGGNet包含多个卷积层,每个卷积层都使用3×3的卷积核,步长为1,保持输入图像的大小。
3. 池化层:每个卷积层后跟一个2×2的最大池化层,步长为2,用于下采样和提取特征。
4. 全连接层:在所有卷积层之后,VGGNet包含若干全连接层用于分类任务,最后一层通过softmax激活函数输出预测结果。
5. Dropout:在全连接层中引入Dropout技术,随机丢弃部分神经元,减少过拟合风险。
6. 训练:使用反向传播算法更新网络参数,通过训练数据来优化损失函数。
7. 测试:在测试阶段,输入图片通过网络前向传播,得到预测结果。
总的来说,VGGNet以其深度、简洁的网络结构和优秀的性能在深度学习领域取得了巨大成功,推动了深度神经网络的发展。VGGNet被广泛应用于图像分类、目标检测、图像分割等计算机视觉任务中,为深度学习的研究和发展做出了重要贡献。
尽管VGGNet在深度学习领域取得了很大成功,但也存在一些缺点:
1. 复杂性:VGGNet具有较深的网络结构,包含较多的卷积层和全连接层,导致模型较为复杂,训练和推理的时间消耗较大。这使得VGGNet在实际应用中可能需要更多的计算资源和时间。
2. 参数量大:由于VGGNet的深度和复杂性,模型的参数数量较大,导致需要更多的存储空间和计算资源。这可能会限制VGGNet在一些资源受限的环境中的应用。
3. 过拟合风险:尽管VGGNet在全连接层中引入了Dropout技术来减少过拟合风险,但在某些情况下仍可能存在过拟合问题,特别是当训练数据不足时。
4. 训练时间长:由于VGGNet的深度和复杂性,训练模型所需的时间较长,特别是在大规模数据集上训练时。这可能会影响模型的迭代和调优速度。
3、卷积神经网络模型ResNet
ResNet(Residual Neural Network)是由微软研究院提出的一种深度卷积神经网络模型,于2015年在ImageNet图像识别挑战赛上取得了优异的成绩。ResNet的提出解决了深度神经网络训练过程中的梯度消失和梯度爆炸等问题,推动了深度学习领域的发展。
ResNet的主要特点包括:
1. 残差学习:ResNet引入了残差学习的思想,即通过引入跨层的直接连接(shortcut connection)和残差块(residual block),使得网络可以学习残差函数,减轻了梯度消失问题,有助于训练更深的网络。
2. 深度:ResNet可以构建非常深的网络结构,甚至达到上百层,而不会出现梯度消失或过拟合的问题。这种深度对于提取更复杂的特征非常重要。
3. 全局平均池化:ResNet在全连接层之前使用全局平均池化层,可以减少参数数量,降低过拟合风险。
4. 批标准化:ResNet中使用批标准化(Batch Normalization)技术,有助于加速网络的收敛,提高训练效率。
ResNet的工作流程如下:
1. 输入层:输入一张彩色图像,通常为224×224的RGB图像。
2. 卷积层:ResNet包含多个卷积层,每个卷积层后跟一个批标准化层和ReLU激活函数。
3. 残差块:每个残差块包含两个3×3的卷积层,中间有跳跃连接(shortcut connection),将输入直接加到输出中,形成残差学习。这可以减轻梯度消失问题。
4. 全局平均池化:在所有卷积层之后,ResNet使用全局平均池化层对特征图进行降维。
5. 全连接层:在池化层之后连接一个全连接层,通过softmax激活函数输出预测结果。
6. 训练:使用反向传播算法更新网络参数,通过训练数据来优化损失函数。
7. 测试:在测试阶段,输入图片通过网络前向传播,得到预测结果。
ResNet在图像分类、目标检测、图像分割等计算机视觉任务中取得了优异的成绩,在许多深度学习应用中得到了广泛应用。其强大的特征提取能力和深度学习能力使得ResNet成为深度学习领域的研究热点之一。















暂无评论内容