目录
一、卷积
1、卷积的定义
(1)一维卷积
(2)二维卷积
2、互相关
3、互相关和卷积的区别
4、卷积的变种
5、卷积的数学性质
(1)交换性
(2)导数
二、卷积神经网络
1、卷积代替全连接
2、卷积层
3、汇聚层
4、卷积网络的整体结构
三、参数学习
1、卷积神经网络的反向传播算法
四、典型的卷积神经网络
1、LeNet-5
2、AlexNet
3、Inception网络
扩展学习
1、为什么要解决梯度消失问题?
上一篇已经更新了前馈神经网络,有需要的可以看看:
一文看懂卷积神经网络CNN(1)—前馈神经网络-CSDN博客
卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种具有局部连接、权重共享等特性的深层前馈神经网络。
卷积神经网路刚开始是用于处理图像信息,在使用全连接前馈网络处理图像时,存在一下两个问题:
(1)参数太多:全连接前馈网络中,第一个隐藏层的每个神经元到输入层都有(图像高度×宽度×RGB颜色通道数)个相互独立的连接,每个连接都对应一个权重参数。所以随着隐藏层神经元数量的增多,参数的规模也会急剧增加,这会导致整个神经网络的训练效率非常低,很容易出现过拟合。
(2)局部不变特征:自然图像中的物体都具有局部不变性特征,比如尺度缩放、平移、旋转等操作不影响其语义信息【这些特征对于图像识别和计算机视觉任务非常重要,因为它们允许模型识别出即使在视角变化或图像变形的情况下,仍然是同一个物体或特征】。而全连接前馈网络很难提取这些局部不变性特征,一般需要进行数据增强来提高性能。
为了解决这些问题,研究人员开发了卷积神经网络(Convolutional Neural Networks, CNNs),它们通过使用卷积层来提取图像的局部特征,并利用池化层(Pooling Layers)来增加对尺度缩放和旋转的不变性。卷积层的局部感受野和权重共享特性使得CNNs在图像识别任务中表现出色,尤其是在需要处理局部不变性特征的场景中。
卷积神经网络受生物学感受野机制的启发。
感受野机制(Receptive Field)主要是指听觉、视觉等神经系统中一些神经元的特性,即神经元只接受其所支配的刺激区域内的视觉。特别是在卷积神经网络(CNN)中,感受野指的是网络中某一层的神经元在原始输入图像上能够“看到”或影响的范围。随着网络层次的加深,感受野的大小也会随之增加,这意味着深层网络的神经元能够捕捉到更大范围的视觉信息,从而能够识别更复杂的特征。
目前的卷积神经网络一般是由卷积层、汇聚层和全连接诶层交叉堆叠在一起的前馈神经网络。卷积神经网络有三个结构上的特征:局部连接、权重共享以及汇聚。这三个特征也使得卷积神经网络具有一定程度上的平移、缩放和旋转不变性。和前馈神经网络相比,卷积神经网络的参数更少。
一、卷积
1、卷积的定义
卷积(Convolution),也叫褶积。是通过一系列滤波器(也称为卷积核或特征检测器)来提取输入数据的局部特征。
卷积操作的基本步骤:
-
滤波器定义:在CNN中,滤波器是一个小的矩阵,它包含了一组权重,这些权重在训练过程中会被优化。
-
局部感受野:滤波器覆盖输入数据的一个局部区域,这个区域通常是正方形(如3x3、5x5等),并且这个区域在输入数据上滑动(或卷积)。
-
元素乘积:滤波器中的每个权重与它覆盖的输入数据区域中的相应元素相乘。
-
求和:将乘积的结果求和,得到一个单一的数值,这个数值代表了滤波器在该位置的响应。
-
滑动:将滤波器沿输入数据的宽度和高度滑动,并重复上述步骤,直到覆盖整个输入数据。
-
特征映射:通过这种方式,滤波器会产生一个新的二维数组,称为特征映射(Feature Map),它表示输入数据通过该滤波器的变换。
-
多个滤波器:通常,CNN会有多个滤波器,每个滤波器负责检测输入数据中的不同特征。所有滤波器的特征映射合在一起,形成了一个多通道的特征映射。
卷积操作的特点:
-
局部感知:卷积操作只关注输入数据的局部区域,这使得它非常适合捕捉图像中的局部特征,如边缘、角点等。
-
参数共享:由于滤波器在整个输入数据上滑动,所以相同的滤波器权重被用来提取不同位置的特征,这减少了模型的参数数量。
-
平移不变性:即使输入数据中的特征在不同的位置,卷积操作仍然能够检测到它们,这使得CNN具有平移不变性。
-
自动特征工程:在传统的机器学习方法中,特征工程是一个重要的步骤。而在CNN中,卷积操作自动完成了特征提取,减少了手动特征工程的需要。
-
端到端学习:CNN可以设计成端到端的模型,即从原始输入直接学习到最终的输出,无需额外的特征工程步骤。
(1)一维卷积
一维卷积通常用于信号处理中,用于计算信号的延迟累计。
其中的w就称为滤波器或者卷积核。
一维卷积就是两个向量乘,乘出来的数值就是总的结果。
(2)二维卷积
卷积也经常用于图像处理,因为图像是一个二维结构,所以需要将一维卷积进行扩展。
理解“图像为一个二维结构”这句话:意味着可以将图像数据看成一个二维的矩阵,其中每个元素代表像素中一个特定位置的像素值。这个二维矩阵通常表示为一个高度(行数)和宽度(列数)的组合,每个像素点在矩阵中都有一个对应的位置。
图像的二维结构特点:
-
二维数据:图像数据由多个行和列组成,每一行和每一列都对应图像的一个维度。例如,一个具有宽度为640像素和高度为480像素的图像,可以表示为一个640x480的二维矩阵。
-
像素值:在二维图像矩阵中,每个元素(或像素)通常包含颜色信息,这可以是灰度值(单通道图像)或红、绿、蓝(RGB)三个颜色通道的值(多通道图像)。
-
空间关系:图像的二维结构允许我们考虑像素之间的空间关系,这对于理解图像内容至关重要。例如,相邻像素之间的边缘、纹理和形状等特征在二维空间中是相邻的。
-
局部性:图像中的许多特征(如线条、角点等)往往在局部区域内表现出来,这使得二维卷积成为提取这些特征的理想工具。
一维卷积到二维卷积的扩展:
由于图像数据的二维特性,一维卷积需要扩展到二维卷积来处理图像数据。在二维卷积中:
-
滤波器:滤波器也从一维扩展到二维,它现在是一个二维矩阵,包含了多个权重。
-
局部感受野:滤波器覆盖的是输入图像的一个局部区域,而不仅仅是一行,而是一个方块(如3x3、5x5等)。
-
卷积操作:滤波器在图像的宽度和高度上滑动,对每个局部区域执行元素乘积和求和操作。
-
多通道:对于彩色图像,卷积操作需要在每个颜色通道上独立进行,或者使用可以同时处理多个通道的滤波器。
-
特征映射:每个滤波器会产生一个特征映射,表示图像通过该滤波器的变换。对于多通道图像,每个滤波器会产生一个多通道的特征映射。
图像处理中,卷积经常作为特征提取的有效办法。一幅图像在经过卷积操作后得到结果称为特征映射。下图中最上的滤波器是常用的高斯滤波器,可以用来对图像进行平滑去噪;下面两个滤波器都可以用来提取边缘特征。
2、互相关
在机器学习和图像处理领域中,卷积的主要功能是在一个图像(或者某种特征)上滑动一个卷积核(即滤波器),通过卷积操作可以得到一组新的特征。
其中对图像特征的理解:
图像特征,通常指的是通过卷积操作从原始图像数据中提取的有用信息或模式。这些新特征是原始数据的一种表示,它们能够捕捉到图像中的某些特定属性,这些属性对于完成特定的任务(如图像分类、目标检测等)是有帮助的。
卷积操作中的“新的特征”可以是:
-
边缘和纹理:在图像处理中,卷积核(滤波器)可以设计成专门用于检测图像中的边缘、纹理或其他局部特征。例如,Sobel算子就是一种常用的边缘检测滤波器。
-
更高层次的特征:在深度学习中,卷积神经网络(CNN)通过多个卷积层堆叠,每一层都会从前一层的输出中提取更高层次的特征。第一层可能捕捉到简单的边缘信息,而后续层可能捕捉到更复杂的形状或模式,如角点、曲线或甚至是物体的部分。
-
抽象表示:随着网络深度的增加,卷积层能够生成越来越抽象的特征表示。在网络的深层,这些特征可能对应于图像中的高级概念,如物体的特定部位或整个物体。
-
特征映射(Feature Maps):每次卷积操作后,输出的数据通常被称为特征映射。在卷积层中,多个不同的卷积核可以并行工作,每个卷积核生成一个特征映射,所有这些映射合在一起形成了一个多维的特征表示。
-
通道(Channels):在CNN中,每个卷积层可以有多个卷积核,每个卷积核负责提取不同的特征,这些卷积核的输出合在一起形成了多通道的特征映射。
-
不变性特征:通过使用池化层,CNN可以生成对图像中物体的平移、缩放或旋转等变化保持不变的特征。
-
用于分类的特征:在CNN的全连接层或分类层,这些新特征被用来训练模型进行决策,以识别图像中的物体或执行其他任务。
其中对翻转卷积核的理解:
通常指的是将卷积核(或滤波器)沿着其两个轴进行翻转,也就是进行镜像操作。即卷积核中的被替换为w(j,i)。
翻转卷积核的过程可以用以下步骤描述:
-
沿着水平轴翻转:将卷积核沿着水平轴(即行)翻转,使得第一行变成最后一行,第二行变成倒数第二行,依此类推。
-
沿着垂直轴翻转:接着,将上一步翻转后的卷积核沿着垂直轴(即列)翻转,使得第一列变成最后一列,第二列变成倒数第二列,依此类推。
3、互相关和卷积的区别
-
卷积(Convolution): 在数学中,卷积是指两个函数(如时间序列或空间信号)之间的一种运算,它通过将一个函数翻转并滑动另一个函数来计算它们之间的重叠区域的积分。在图像处理中,卷积涉及将一个小型的矩阵(称为卷积核或滤波器)在图像上滑动,计算卷积核和图像的元素之间的点积。
-
互相关(Cross-Correlation): 互相关是一种类似于卷积的操作,但它不涉及卷积核的翻转。在互相关中,卷积核保持不变,直接与图像的局部区域进行点积计算。在实际应用中,卷积核翻转与否对最终结果的影响通常可以忽略,因为卷积核的权重在训练过程中是可学习的。
在CNN中,互相关操作通常指的是以下过程:
- 有一个输入图像和一个卷积核(或滤波器)。
- 卷积核在输入图像上滑动,覆盖图像的一个局部区域。
- 对于卷积核和图像重叠的区域,计算卷积核和图像对应元素的点积。
- 将点积的结果存储在输出特征图(Feature Map)的一个位置。
- 重复以上步骤,直到卷积核覆盖了输入图像的每个可能的位置。
在大多数深度学习框架中,当提到卷积操作时,实际上执行的是互相关操作,因为它们并不翻转卷积核。同时由于卷积核的权重是可以学习的,所以卷积核是否翻转对模型的性能影响不大。
4、卷积的变种
卷积核的滑动步长和零填充可以用来增加卷积的多样性,更灵活地进行特征抽取。
(1)步长(Stride)是指卷积核在滑动时的时间间隔。
- 滑动步长决定了卷积核在输入图像上滑动的间隔。当步长大于1时,卷积核不会在每个像素上都进行点积计算,而是跳过一些像素。
- 增加滑动步长可以减少特征图的空间尺寸(高度和宽度),从而减少参数数量和计算量,但也可能丢失一些局部信息。
- 不同步长可以捕捉到不同尺度的特征,增加模型对尺度变化的适应能力。
(2)零填充(Zero Padding)是在输入向量两端进行补零。
- 在输入特征图的边缘添加一圈零值像素,可以控制卷积后特征图的尺寸。
- 零填充可以使卷积核在图像边缘处也能进行完整的点积运算,保持或增加特征图的空间尺寸。
- 零填充可以使模型捕捉到图像边缘处的特征,提高对边缘信息的敏感性。
这是一个一维卷积的步长和零填充。
推导过程:为了推导卷积层输出神经元的数量,我们需要考虑输入图像的尺寸、卷积核(滤波器)的尺寸、步长以及填充(padding)的数量。
这个公式表明了输出神经元的数量是如何依赖于输入神经元的数量 𝑁,卷积核大小 𝐹,步长 𝑆,以及填充零个数 𝑃的。注意,这个推导假设了卷积核的尺寸 𝐹 是一个奇数,这样在没有步长的情况下,不进行任何填充时,输出尺寸与输入尺寸相同。如果 𝐹 是偶数或者步长 𝑆>1,那么输出尺寸可能会更小,具体取决于这些参数的值。
常用卷积有以下三种:
(1)窄卷积(Narrow Convolution):步长 𝑆 = 1,两端不补零𝑃 = 0,卷积后输出长度为N − F + 1;
- 窄卷积通常指的是使用比输入特征图宽度和/或高度更小的卷积核进行的卷积操作。这意味着卷积核覆盖的输入特征图的区域比卷积核本身的尺寸要大。
- 窄卷积核可以用于提取图像中的局部特征,但由于其尺寸较小,因此感受野也较小,可能无法捕捉到图像中的长距离依赖关系。
(2)宽卷积(Wide Convolution):步长 𝑆 = 1,两端不补零𝑃 =F - 1,卷积后输出长度为N + F - 1;
- 宽卷积是指使用宽度(或高度)大于输入特征图的单个卷积核进行的卷积操作。这种卷积核覆盖了输入特征图的更大部分,可以捕捉更宽的上下文信息。
- 宽卷积核可能会增加模型的参数数量和计算量,但有助于提取更丰富的特征,特别是在图像分类等任务中,可以提高对全局信息的捕捉能力。
(3)等宽卷积(Equal-Width Convolution):步长 𝑆 = 1,两端不补零𝑃 =(F - 1)/2,卷积后输出长度为N;
- 等宽卷积是指使用正方形的卷积核进行的卷积操作,即卷积核的宽度和高度相等。
- 等宽卷积核是最常见和最标准的卷积类型,它在CNN中被广泛使用。等宽卷积核能够均衡地捕捉图像的局部特征,适用于大多数图像识别和分类任务。
5、卷积的数学性质
(1)交换性
卷积的交换性指的是两个信号之间的卷积操作,其结果与信号的顺序交换后的结果相同。
即输入信号的任意两个元素交换后,点积的结果不变。
(2)导数
卷积的导数等于第一个函数与第二个函数的导数的卷积。
二、卷积神经网络
卷积神经网络一般由卷积层、汇聚层和全连接层构成。
1、卷积代替全连接
根据卷积的定义,卷积层有两个很重要的性质:
(1)局部连接:在卷积层(假设是第l层)中的每一个神经元都只和前一层(第l − 1 层)中某个局部窗口内的神经元相连,构成一个局部连接网络。连接数大大减少。
(2)权重共享:作为参数的卷积核对于第l层的所有的神经元都是相同的。即下图中所有同颜色连接上的权重是相同的。可以理解为一个卷积核只捕捉输入数据中的一种特定的局部特征。因此,如果 要提取多种特征就需要使用多个不同的卷积核。
2、卷积层
卷积层的作用是提取一个局部区域的特征,不同的卷积核相当于不同的特征提取器。
由于卷积网络主要应用在图像处理上,而图像为二维结构,因此为了更充分地利用 图像的局部信息,通常将神经元组织为三维结构的神经层,其大小为高度M×宽度N×深度D,由D个M × N 大小的特征映射构成。
特征映射(Feature Map)为一幅图像(或其他特征映射)在经过卷积提取到的特征,每个特征映射可以作为一类抽取的图像特征。为了提高卷积网络的表示能力,可以在每一层使用多个不同的特征映射,以更好地表示图像的特征。
在输入层,特征映射就是图像本身。如果是灰度图像,就是有一个特征映射,输入层的深度 D = 1;如果是彩色图像,分别有 RGB 三个颜色通道的特征映射, 输入层的深度D = 3。
3、汇聚层
汇聚层(Pooling Layer)也叫子采样层(Subsampling Layer),其作用是进行特征选择,降低特征数量,从而减少参数数量。
卷积层可以减少连接数,但是特征映射组中的神经元个数并没有显著降低,如果后面接一个分类器,分类器的输入维度仍然很高,很容易出现过拟合。所以可以通过汇聚层,降低特征维度,避免过拟合。
汇聚(Pooling)是指对每个区域进行下采样 (Down Sampling)得到一个值,作为这个区域的概括。
常用的汇聚函数有两种:
(1)最大汇聚(Maximum Pooling或Max Pooling):选择这个区域内所有神经元的最大活性值作为这个区域的表示。
(2)平均汇聚(Mean Pooling):一般是取区域内所有神经元活性值的平均值。
例如下图中就是采用最大汇聚函数:
典型的汇聚层是将每个特征映射划分为2 × 2大小的不重叠区域,然后使用最大汇聚的方式进行下采样。汇聚层也可以看作一个特殊的卷积层,卷积核大小 为K × K,步长为S × S,卷积核为max函数或 mean函数。过大的采样区域会急剧减少神经元的数量,也会造成过多的信息损失。
4、卷积网络的整体结构
一个典型的卷积网络是由卷积层、汇聚层、全连接层交叉堆叠而成。
目前常 用的卷积网络整体结构如下图所示:
一个卷积块为连续M个卷积层和b个汇聚层(M通常设置为2 ∼ 5,b为0或1)。一个卷积网络中可以堆叠N个连续的卷积块,然后在后面接着K个全连接层(N的取值区间比较大,比如 1 ∼ 100 或者更 大;K一般为0 ∼ 2)。
目前,卷积神经网络的整体结构趋向于使用更小的卷积核(1*1或者3*3)以及更深的结构(比如层数大于50);同时汇聚层作用也变得越来越小,目前流行的趋势是在卷积网络中,汇聚层的比例正在逐步降低,目前比较流行的卷积神经网络中,汇聚层的比例正在逐渐降低,趋向于全卷积网络。
三、参数学习
在卷积网络中,参数为卷积核中权重以及偏置。和全连接前馈网络类似,卷积网络也可以通过误差反向传播算法来进行参数学习。
在全连接前馈神经网络中,梯度主要通过每一层的误差项进行反向传播,并进一步计算每层参数的梯度。
在卷积神经网络中,主要有两种不同功能的神经层:卷积层和汇聚层。而参数为卷积核以及偏置,因此只需要计算卷积层中参数的梯度(其实就是导数)。
1、卷积神经网络的反向传播算法
四、典型的卷积神经网络
1、LeNet-5
2、AlexNet
使用 GPU 进行并行训练,采用 了 ReLU 作为非线性激活函数,使用 Dropout 防止过拟合,使用数据增强来提高 模型准确率等。
AlexNet的结构如图所示,包括5个卷积层、3个汇聚层和3个全连接层 (其中最后一层是使用 Softmax 函数的输出层)。因为网络规模超出了当时的单 个GPU的内存限制,AlexNet将网络拆为两半,分别放在两个GPU上,GPU间只在某些层(比如第3层)进行通信。
3、Inception网络
Inception 网络中,一个卷积层包含多个不同大小的卷积操作,称为Inception 模块。Inception网络是由有多个Inception模块和少量的汇聚层堆叠而成。
扩展学习
1、为什么要解决梯度消失问题?
梯度消失问题指的是在网络的反向传播过程中,当误差梯度通过网络的每一层传播时,梯度的数值可能会变得非常小,以至于接近于零。这会导致权重更新非常微小或根本没有更新,从而显著减慢学习过程,甚至使得网络无法学习。
梯度消失问题主要受以下因素影响:
-
激活函数:某些激活函数(如sigmoid或tanh)在输入值非常大或非常小的时候,梯度会变得非常小。
-
权重初始化:不适当的权重初始化可能导致梯度消失或梯度爆炸问题。
-
学习率设置:过大的学习率可能导致梯度爆炸,而过小的学习率则可能导致梯度更新过小,难以逃离局部最优解。
-
网络深度:更深层次的网络更容易遇到梯度消失问题,因为梯度需要经过更多的层反向传播。
解决梯度消失问题的原因和重要性包括:
-
提高学习效率:防止梯度消失可以确保网络中的所有层都获得适当的权重更新,从而提高学习效率。
-
训练更深的网络:解决梯度消失问题使得可以训练更深层次的网络,这通常可以提高模型的学习能力和性能。
-
保证收敛:梯度消失可能导致网络无法收敛到全局或局部最优解,解决这一问题有助于确保网络训练的收敛性。
-
提高模型性能:通过确保网络中所有层都能有效地更新权重,可以提高整个模型的性能。
为了解决梯度消失问题,可以采用以下策略:
-
使用ReLU及其变体:ReLU(Rectified Linear Unit)及其变体(如Leaky ReLU、Parametric ReLU)可以减少激活函数导致的梯度消失问题。
-
权重初始化技巧:如He初始化或Xavier初始化,这些技巧可以为不同层的权重提供更合适的初始值。
-
梯度剪切:限制梯度更新的最大值,以防止梯度爆炸,同时也有助于缓解梯度消失问题。
-
使用残差连接:在网络中使用残差连接(如在ResNet中)可以帮助梯度直接流向前面的层。
-
适当的学习率调度:使用学习率衰减或自适应学习率优化器(如Adam)可以更好地调整学习率。
-
批量归一化:Batch Normalization可以减少内部协变量偏移,有助于梯度在网络中的流动。