卷积神经网络基础
一、卷积神经网络的提出
卷积神经网络的提出
1980年日本NHK技术研究所的研究员福岛邦彦(Kunihiko Fukushima)提出最早期的卷积网络。
2020年鲍尔奖之科学成就奖。获奖理由: 他将神经科学和工程学的原理联系起来,发明了一种具有视觉模式识别能力的神经网络,从而推动了当今人工智能的兴起。
LeNet-5
Yann LeCun等在1998年,论文《Gradient-based learning applied to document recognition)中提出。
它是第一个成功应用于手写数字识别问题并产生实际商业(邮政行业)价值的卷积神经网络。
二、卷积神经网络关键部件
卷积神经网络(也称作 ConvNets 或CNN)是神经网络的一种,它在图像识别和分类等领域已被证明非常有效。
卷积神经网络中的四个主要操作
1、卷积
卷积神经网络的名字来源于“卷积“运算。在卷积神经网络中,卷积的主要目的是从输入图像中提取特征。通过使用输入数据中的小方块来学习图像特征,卷积保留了像素间的空间关系。
对于同一张输入图像,不同的过滤器矩阵将会产生不同的特征映射。只需在卷积运算前改变过滤器矩阵的数值就可以执行边缘检测,锐化和模糊等不同操作 -这意味着不同的过滤器可以检测图像的不同特征,例如边缘 ,曲线等。
特征映射(卷积特征)的大小由我们在执行卷积步骤之前需要决定的三个参数控制
-
深度: 深度对应于我们用于卷积运算的过滤器数量。
-
零填充: 将输入矩阵边界用零来填充会很方便,这样我们可以将过滤器应用于输入图像矩阵的边界元素。零填充一个很好的特性是它允许我们控制特征映射的大小。添加零填充也称为卷积,而不使用零填充是为窄卷积
-
步幅: 步幅是我们在输入矩阵上移动一次过滤器矩阵的像素数量。当步幅为1时,我们一次将过滤器移动1个像素。当步幅为2时,过滤器每次移动2个像素。步幅越大生成的特征映射越小
输入尺寸 F i n F_{in} Fin,Padding=p,卷积核大小为k,步长为s。输出大小 F 0 = [ F i n − k + 2 p s ] F_0 = [\frac {F_{in}-k+2p}{s}] F0=[sFin−k+2p]
2、非线性变换(ReLu)
ReLU 是一个针对元素的操作(应用于每个像素),并将特征映射中的所有负像素值替换为零
ReLU 的目的是在卷积神经网络中引人非线性因素,因为在实际生活中我们想要用神经网络学习的数据大多数都是非线性的(卷积是一个线性运算 一按元素进行矩阵乘法和加法,所以我们希望通过引人 ReLU 这样的非线性函数来解决非线性问题)
激活函数的作用: 增加模型的非线性表达能力
3、池化或子采样
池化(pooling)是一种特殊的卷积,作用是逐步减少输入的空间大小
- 没有要学习的参数
- 通道数不发生变化
- 使输入(特征维度)更小,更易于管理
- 减少网络中的参数和运算次数,因此可以控制过拟合
- 使网络对输入图像微小的变换、失真和平移更加稳健(输入图片小幅度的失真不会改池化的输出结果–因为我们取了邻域的最大值/平均值)
- 可以得到尺度几乎不变的图像(确切的术语是“等变”)。这是非常有用的,这样无论图片中的物体位于何处,网络都可以检测到。
4、分类(完全连接层)
全连接层就是将最后一层卷积得到的特征图(矩阵)展开成一维向量,并为分类器提供输入
全连接层对模型影响参数就是三个:
- 全连接层的总层数(长度)
- 单个全连接层的神经元数(宽度)
- 激活函数
全连接层的作用: 全连接层在整个网络卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数等操作是将原始数据映射到隐层特征空间的话(特征提取+选择的过程),全连接层则起到将学到的特征表示映射到样本的标记空间的作用。换句话说,就是把特征整合到一起(高度提纯特征),方便交给最后的分类器或者回归。
全连接层存在的问题: 参数冗余(仅全连接层参数就可占整个网络参数80%左右)降低了训练的速度,容易过拟合CNN(带有FC层)输入图片尺寸是固定的原因:全连接层要求固定的输入维度(如4096)
一个简单的卷积神经网络
卷积神经网络CNN的整体结构,它包含了3种层(layer)
-
Convolutional layer(卷积层–CONV )
由滤波器filters和激活函数构成。一般要设置的超参数包括filters的数量、大小、步长,以及padding是“valid”还是“same”。当然,还包括选择激活函数
-
Pooling layer(池化层–POOL)
这里没有参数需要学习,因为这里的参数主要是Maxpooling,或者Averagepooling。需要指定的超参数,包括是Max还是average,窗口大小以及步长。通常,选择较多是Maxpooling,而且一般取大小为(2,2)步长为2的filter,这样,经过pooling之后,输入的长宽都会缩小2倍channels不变。 -
Fully Connected layer(全连接层–FC)
就是我们之前学的神经网络中的那种最普通的层,就是一排神经元。因为这一层是每一个单元都和前一层的每一个单元相连接,所以称之为“全连接”。 这里要指定的超参数,无非就是神经元的数量,以及激活函数。
需要说明的是,在经过数次卷积和池化之后,最后会先将多维的数据进行“扁平化”,也就是把(height,width,channeI)的数据压缩成长度为height x width xchannel的一维数组然后再与 FC层连接这之后就跟普通的神经网络无异了。
卷积神经网络 VS 传统神经网络
传统的神经网络,其实就是多个全连接层叠加起来,卷积神经网络,把全连接层改成了卷积和池化,就是把传统的由一个个神经元组成的层,变成了由filters组成的layer
卷积神经网络的优点
- 参数共享机制(parameterssharing):同一个卷积核在对输入图像的不同位置进行卷积操作时,使用的是相同的权重参数
- 局部感知:卷积神经网络中的神经元不是与前一层的所有神经元相连,而是只与输入图像的一个局部区域内的神经元相连
- 连接稀疏:神经元间非全连接,如通过局部感知机制,每个神经元仅与输入数据局部区域相连,这能降低计算量和存储需求、聚焦局部特征,还可减少过拟合风险。
三、卷积神经网络训练过程
卷积神经网络的训练过程分为两个阶段:
1、前向传播阶段
- 数据输入与特征提取:将训练数据输入网络,数据在卷积层中通过卷积核进行卷积操作,提取局部特征,生成特征图。这些卷积核以滑动窗口的形式遍历输入数据,每个卷积核提取一种特定的局部模式。
- 非线性激活与池化:在卷积层之后,通常会应用激活函数引入非线性因素,增强网络的表达能力。随后进行池化操作,例如最大池化或平均池化,通过对局部区域进行聚合,减少数据维度同时保留主要特征。
- 全连接层处理:经过多个卷积和池化层后,将得到的特征图展平为一维向量,然后输入到全连接层。全连接层中的神经元与上一层的所有神经元完全连接,对特征进行整合和进一步处理,最终输出预测结果,比如在分类任务中输出每个类别的概率。
2、反向传播阶段
- 计算损失与梯度:根据网络输出和真实标签计算损失函数值,以衡量预测结果与真实情况的差异。然后基于损失函数,使用链式法则从输出层向输入层反向传播计算梯度,梯度表示损失函数对网络中每个参数(卷积核权重、偏置等)的变化率,它指出了参数调整的方向和幅度。
- 参数更新:根据计算得到的梯度,利用优化算法(如随机梯度下降及其变种 Adagrad、Adadelta、Adam 等)来更新网络参数。通过调整参数朝着使损失函数值减小的方向改变,逐步优化网络的性能,使得模型在训练数据上的预测更加准确。在多次迭代中不断重复这两个阶段,提升模型对数据的拟合能力。
训练过程为
- 网络进行权值的初始化
- 输入数据经过卷积层、下采样层、全连接层的向前传播得到输出值:
- 求出网络的输出值与目标值之间的误差:
- 当误差大于我们的期望值时,将误差传回网络中,依次求得全连接层,下采样层,卷积层的误差。各层的误差可以理解为对于网络的总误差,网络应承担多少;当误差等于或小于我们的期望值时,结束训练。
- 根据求得误差进行权值更新。然后在进入到第二步
四、典型卷积神经网络
图像识别(分类)算法-LeNet-5
LeNet 是整个卷积神经网络的开山之作,是卷积神经网络的现代雏形,1998年由LeCun提出。最初设计的目的是识别手写字母,被广泛应用在美国支票手写识别系统当中。
LeNet-5共5层(未包含池化层,Subsamplinglayer)。输入图像大小为32*32
如下图:C1,C3,C5为卷积层。S2,S4为降采样层。F6为全连接层,还有一个输出层。
每一个层都有多Feature Map(每个Feature Map中含有多个神经元),输入通过一种过滤器作用,提取输入的一种特征,得到一个不同的Feature Map
C1 层是卷积层。
6@28x28:该层使用了6个卷积核,每个卷积核的大小为5x5,这样就得到了6个feature map(特征图)大小为(32-5+1)x(32-5+1)=28x28,没有padding操作,步长为1。参数个数为(5x5+1)x6=156,其中5x5为卷积核参数,1为偏置参数。卷积后的图像大小为28x28,因此每个特征图有28x28个神经元
S2 层是池化层(也称汇聚层、下采样层)。
采样窗口为2x2,使用了平均池化。6@14x14:该层主要是做池化或者特征映射(特征降维),池化单元为2x2,因此,6个特征图的大小经池化后即变为(28/2)即14x14
C3层-卷积层
使用了16 个5 x5的卷积核,得到16组尺寸为10x10的特征映射,参数数量为1516。16@10 x10:C3层有16个卷积核,卷积模板大小为5x5;特征图大小为(14-5+1)x(14-5+1)=10x10C3与 S2并不是全连接而是部分连接,有些是C3接到S2 三层、有些四层、甚至达到6层,通过这种方式提取更多特征。
S4 层是池化层
池化窗口为2x2,得到 16 个5 x5大小的特征映射。16@5x5,池化单元大小为2x2,因此,该层与C3一样共有16个特征图,每个特征图的大小为5 x5。
C5 层是卷积层
该层有120个卷积核,每个卷积核的大小仍为 5x5,因此有120个特征图。由于S4层的大小为 5x5而该层的卷积核大小也是5x5,因此特征图大小为(5-5+1)x(5-5+1)=1x1。这样该层就刚好变成了全连接,这只是巧合。如果原始输入的图像比较大,则该层就不是全连接了,不过这种方式是可以代替全连接的,后续的网络结构有这种实现。本层的参数数目为 120x(5x5x16+1)=48120:由于该层的特征图大小刚好为 1x1,因此连接类为48120x1x1=48120
F6层-全连接层
Convolutions参数数量为 84x(120+1)= 10164。
输出层
由10个径向基函数(Radial Basis Function,RBF)组成输出变量为 10 维。
特点
最早的深度卷积神经网络模型,用于字符识别。网络具有如下特点:
- 卷积神经网络使用三个层作为一个系列: 卷积,池化,非线性
- 使用卷积提取空间特征
- 使用映射到空间均值的下采样(subsample)
- 双曲线(tanh)或S型(sigmoid)形式的非线性
ial Basis Function,RBF)组成输出变量为 10 维。