车辆重识别(关于卷积神经网络一些资料)2024/9/11

关于卷积神经网络的介绍
一,全连接神经网络
1,全连接神经网络的整体结构
请添加图片描述
X代表左边输入的数据(向量或者矩阵等等),Y代表模型对数据处理之后的结果,中间的节点都可以算作为隐藏层。请添加图片描述
2,全连接神经网络的单元结构
请添加图片描述
x1,x2,x3是输入的数据,w1,w2,w3是权重,b1是偏置项,h是激活函数,a是输出。以此图为例,节点是一个求和函数,它负责把x1w1,x2w2,x3*w3,b1这几项加起来,得到的结果再通过激活函数的处理,最终得到输出a。
假如x1,x2,x3是一张图片的数据,如果输出a为1,那么这张图片是狗,如果为0,那么这张图片是猫。对于这张图片来说,我们现在的目的就是为了找一组w和b,使得这张图片的数据经过处理,要么为1,要么为0,从而能够对这张图片进行分类,那么这个模型就暂时被训练完成。但是现在这个模型仅仅能够识别这一张图片,而对于不同的多组图片来说,我们的目的是能够尽量地找到一组w和b,使得这个模型对于不同的多组图片的识别尽量地贴合输出结果a,那这样这个模型就能够暂时的对图片进行识别。

3,激活函数
激活函数的功能其实和寻找一组w和b的用途一样,也是为了对输入数据处理后的结果进行调整,使其能够贴合预期输出的结果a。另外,激活函数分为线性和非线性的,对于线性的激活函数,存在的问题就是客观上可能会减少神经网络的层数(一般情况下神经网络层数越深,模型效果越好)。
请添加图片描述
具体的激活函数的优缺点暂时不做解释,等全部内容学完之后,再解释为什么不同的激活函数有不同的优缺点或者说为什么这种激活函数会有这种优缺点。
补充
请添加图片描述
请添加图片描述
请添加图片描述
通过后面的学习,我们发现对于w的更新,存在一个公式:w=w(旧)-a*(损失函数对w的偏导)。其实这个损失函数对w的偏导是一个激活函数导数(这个导数对x*w+b的导数)的乘积式子,在输入数据和学习率a不变时,w的更新就和激活函数的导数有密切关系,这就解释了为什么不同的激活函数有不同的优缺点。

对于sigmod函数的缺点1的解释:就比如(x*w+b)的值小于-5或大于5时,这时候sigmod的导数变化很小,就导致w的变化很小。
对于sigmod函数的缺点3的解释:sigmod导数的范围是(0-0.25),最大的导数值也就是0.25,这就导致w(旧)每次向使得损失函数达到最小值的w1走的步幅太小,结果就是训练所需要的轮次多,训练耗时长。
对于Tanh函数优点2的解释:Tanh导数的范围是(0-1),最大的导数值是1,这就导致w(旧)每次向使得损失函数达到最小值的w1走的步幅较大,结果就是训练所需要的轮次少,训练时间短。

总之,如果想要达到较好的训练过程,学习率a和激活函数的最大导数值不能太大也不能太小。
请添加图片描述

4,神经网络的前向传播
所谓前向传播就是输入数据经过每一层网络不断计算的过程。

5,损失函数
如果一个模型的预测值为连续的值,那么每一轮预测结束,结果都会与真实值之间存在误差。但是误差的计算绝对不能让预测值与真实值进行简单的相减,这样会出现一些问题,所以在这种情况下采取均方误差的方式来计算误差。
损失函数还有一种用途:通过绘制损失和训练轮数的图表,可以看到当训练达到一定轮数后,损失就会稳定在一个值左右,这表明模型在某轮之后达到收敛,再训练已经无法提升模型的性能了。
这告诉了我们模型训练的一系列步骤,先前向传播传递输入数据,计算结果,再计算误差。如果误差比较大,那就反向传播调整w权重和b偏置项,然后再前向传播重复此过程。

6,梯度下降法
在这里插入图片描述
那么梯度下降法如何对w和b进行更新呢?首先观察这个误差公式可以看出(在假定w只有一个):在每一次传输图片数据时,x是确定的。数据通过前向传播最终得到的结果也是确定的,然后y’(真实值)也是确定的,那么唯一不确定的就是w和b,最终这个误差函数其实是关于w和
b的二元二次函数。既然知道了这个函数那么我们就可以绘制出这个函数图像,通过图像可以看出,我们可以使得w和b在梯度方向上不断减少,最终可以得到误差的最小值。
在这里插入图片描述
在这里插入图片描述
既然理论上已经可行了,我们该如何确定具体的w和b呢?
首先我们还是要看这个误差函数,当我们只针对w时,b暂且可以看做常量,那么这个函数就是关于w的一元二次函数(对于多个w时也是一样,只是把w1、w2、w3等看做常量而已)。但是这时候想要求最小的loss值不能用求根公式,因为w不只是一个变量,也有可能时一个矩阵,所以这时候只能用梯度下降的方式来接近w1(得到最小loss值的w),所以对于w的更新公式如图所示,w(旧)一步步地走,直到接近w1。而对于b,也是一样的理论。
另外,图上的a也叫做学习率。对于a来说,不能太大也不能太小。如果a太小,那么w接近w1的速度会很慢,也就是说可能训练很多轮,w变化不大。如果a太大,那么w有可能会走过头,直接越过
w1导致训练效果没有变化或者变差。

7,图像在计算机中的本质
在这里插入图片描述
图像在计算机中其实就是矩阵,对于灰度图来说,每个像素点的值的范围是0-255,其中0是黑色,255是白色,值越大越偏向255,那么颜色越浅,值越小越偏向0,那么颜色越深。我们把这种图叫做单通道的图,也就是说只有一张图片。
在这里插入图片描述
对于彩色图来说,都是由红绿蓝三种颜色的图组合而成的,每一张图的每一个像素点又有不同的值。这种图叫做三通道的图,是由三张图片叠加而成的。

8,全连接神经网络存在的问题
在这里插入图片描述
全连接神经网络接收的是长条形的数据,而对于图片这种矩阵类型的数据来说,全连接神经网络不适合处理这种数据,如果想要处理这种图片,就要把图片进行切割、拼接,但是这样会破坏原本的图片信息。

二,卷积神经网络
1,卷积运算过程
什么是卷积神经网络?我们可以说含有卷积运算的神经网络就是卷积神经网络。请添加图片描述
在这里插入图片描述
其实整个卷积运算过程和全连接神经网络的过程差不多,只不过我们把运算的单位聚焦在每一个小矩阵上而不是一个变量,那么这个运算过程就是输入数据与卷积核相乘,再加偏置,最后经过激活函数的处理得到最终结果。对于输入的图片数据,每一个小矩形的这些小方块其实就是x1、x2、x3、x4,卷积核的这些小方块其实就是w1、w2、w3、w4。以上图为例,运算过程是:选取第一个22矩形,x1w1、x2w2…对应位置的元素值相乘,最后相加,再和偏置项b相加,然后经过激活函数处理,得到结果,然后22矩形进行平移,再继续上述运算。
(①22矩形块在运算时可以上下左右甚至斜着平移
②偏置项b可以有也可以没有
③最后不要忘了经过激活函数处理得到最终结果
④卷积核的大小也不是固定的,不一定都是2
2)

2,关于步幅
在这里插入图片描述
当这个输入图片稍微大些时,面对一个较小的卷积核,这个2*2的计算单位每次不一定要平移一格,也可以平移两格,不同的平移情况会导致最终得到的特征图的大小不一样。

3,关于填充
在这里插入图片描述
我们观察发现,输入图像经过卷积之后得到的特征图是比本来的图像小了,但是在应用层面上来说,我们的运行过程是卷积-池化-卷积-池化,也就是说我们需要不断地卷积,但是经过多次卷积之后原图可能会和卷积核一样大,这样再卷积下去原图就比卷积核要小了,这就导致无法再卷积,因为这种情况我们提出了填充操作,就比如在原图上增加一圈0。

4,计算输出特征图
请添加图片描述
根据输入图片和卷积核计算输出特征图大小,H是输入图片高,W是输入图片宽,P是输入图片填充的圈数,S是步幅,FH是卷积核高,FW是卷积核宽,OH是输出特征图高,OW是输出特征图宽。
有可能算出来的OH和OW是小数,这时候因为不同框架的处理结果不同,有可能是向上取整也可能是向下取整。

5,多通道数据卷积运算
在这里插入图片描述
比如三通道的图片,如图所示,我们暂且把它的这三张图称为上中下通道,在做卷积运算时,都有与其对应的卷积核的上中下通道,然后输入图片的上通道与卷积核的上通道进行卷积,输入图片的中通道与卷积核的中通道进行卷积,输入图片的下通道与卷积核的下通道进行卷积分别得到上通道特征图、中通道特征图、下通道特征图,最后这三个特征图合在一起成为最终的特征图(这个最终的特征图是单通道,也就是说输出特征图的通道数取决于卷积核的数量)。
在这里插入图片描述
如果卷积核数量多,则可以形成多通道的输出特征图。

6,池化层
在这里插入图片描述
在这里插入图片描述
对于池化操作而言,尤其是最大池化和平均池化,其实就是选择计算单位的最大值或者平均值,然后这些值重新组成一张数据(叫做感受野)。和卷积操作相比,同样有步幅的概念,计算输出特征图的公式也一样。
另外,最重要的一点,对于卷积操作而言,输出特征图的通道数是由卷积核的数量决定,而对于池化操作而言,输出特征图的通道数是由输入特征图的通道数决定。

7,卷积神经网络整体结构
在这里插入图片描述
通过不断卷积和池化操作后的数据再直接输入到全连接神经网络进行处理就不会出现破坏原有信息。
**补充
关于卷积神经网络的一些疑问:
1,在卷积操作中可以设置不同的步幅吗?
在同一层网络中步幅必须一致,在不同层可以设置不同的步幅。
2,那么在卷积过程中,一会步幅为1,一会步幅为2,这样可以吗?
不行,因为步幅是一个参数,在运行过程中要保证参数统一性。
3,如果想要识别一张图片,可以采用全连接神经网络吗?
可以,但是比较麻烦,就比如一张28×28像素的灰度图片,把它展开成一条向量就是784个元素,这就导致网络的参数太多。
4,能不能举个例子,来说明全连接神经网络如何工作的?
5,“输出层可能有10个神经元,每个神经元代表一个数字(0-9)”,那么那个神经元代表哪一个数字是人为指定的吗?
在训练之前,也就是说在构造网络的时候就规定了。
6,对于手写数字识别,如果识别错误该如何通过反向传播调整参数?请举个例子说明?
和下一题一样。
7,如果隐藏层有多层,那么内部层该如何调整参数?
假设现在有一个三层的全连接神经网络,1,2,3,层为隐藏层。我们对于3层参数的调整很熟悉了,现在要调整2层的参数,把损失函数再写开一层,那么这个函数就是关于w2,b2的,之前的w3,b3已经调整完了,那么在1层的输出不变的情况下,我们仍然可以用之前的方法进行调整,这样一层一层扩展,最终所有参数都调整完毕。
8,损失函数不同,为什么梯度下降法都是适用的?
只要有梯度,我们都可以用这种方法来处理。
9,对于一个CNN,第一次训练时参数是人为给一组数据吗?
在训练卷积神经网络(CNN)时,初始参数(即权重和偏置)通常不是人为指定的,而是随机初始化的。这种随机初始化有助于打破对称性,确保不同神经元学习到不同的特征。
**
补充知识:

深度学习中的过拟合和梯度消失问题:
过拟合:

	定义:过拟合是指模型在训练集上表现很好,但在验证集或测试集上表现差。换句话说,模型学习到了训练数据中的噪声和细节,而不是捕捉到数据的普遍规律。
	表现:训练误差很低,而验证误差较高。
	解决方法:
		数据增强:通过旋转、平移等方式扩增训练数据。
		正则化:使用L1或L2正则化来限制模型的复杂度。
		提前停止:监控验证误差,验证误差开始上升时停止训练。
		使用更简单的模型:降低模型的复杂性,以避免过拟合。
	复杂模型容易发生过拟合的原因:
		模型容量:复杂模型(如深层神经网络)有更多的参数和更强的表达能力,能够拟合训练数据中的细节和噪声。这使得它们在训练集上表现得非常好,但对未见数据的泛化能力较差。
		噪声学习:复杂模型可能会学习到训练数据中的噪声而不是潜在的规律,这导致在验证集或测试集上的性能下降。
		数据不足:如果训练数据量较小,而模型又很复杂,模型容易记住训练样本而不是学习到一般化的特征。
	如何防止过拟合?
		使用正则化:如L1或L2正则化,来限制模型复杂度。
		数据增强:增加训练数据的多样性,从而提高模型的泛化能力。
		提前停止:在验证集上监控模型表现,当验证误差开始上升时停止训练。
		简化模型:使用较少的层或神经元。

梯度消失:

为什么梯度会在反向传播过程中逐层衰减?

激活函数的特性:
	使用如sigmoid或tanh等激活函数时,当输入值非常大或非常小时,它们的导数接近于零。这意味着在反向传播		中,后续层的梯度会受到很大的衰减,导致前面的层几乎没有更新。

链式法则:
	在反向传播中,梯度是通过链式法则计算的,每一层的梯度都是与该层的参数导数相乘。这种乘积的连锁效应可能导致梯度在多层网络中迅速减小。

深度网络的结构:
	随着层数的增加,梯度从输出层传递到输入层的过程中,经过的层数越多,可能会出现更大幅度的衰减,尤其在没有适当的激活函数和正则化手段的情况下。

权重初始化:
	不当的权重初始化也可能导致梯度消失。例如,如果初始化的权重太小,前几层的激活值会变得非常小,导致梯度也随之减小。

首先我们对深层次的网络导致梯度消失做出一个解释。对于一个模型来说,我们给定初始参数w,b,规定参数都是正数,还规定输入数据都是正数,这样每一层的输出也都是正数。对于反向传播更新参数来说,w’=w-a激活函数对(wx+b)的偏导组合式这个公式中wx+b是大于0的,而sigmod函数的导数又是大于0的,所以整个组合式子是大于0的,这就导致w所减去的都是一个正数。这所导致的是随着反向传播,w不断变小,wx+b这个式子也在不断变小,根据sigmod导数图像我们可以看出,当网络的层数足够深的时候随着w*x+b再变小,导数也在慢慢趋近于0,这导致的结果就是w慢慢变小,w更新的幅度慢慢变小,当反向传播的层数深的时候,w就不在更新了,这就导致梯度消失。在推导过程中,我们也发现了梯度消失也与输入数据x、初始参数w,b的大小有密切关系。

为了缓解梯度消失问题,可以采取以下措施:

使用ReLU及其变种:ReLU(修正线性单元)及其变种(如Leaky ReLU、Parametric ReLU等)在正区间的导数为常数,能够有效减轻梯度消失的问题。

批归一化:批归一化在每一层进行标准化,可以帮助保持激活值在合理范围内,从而减轻梯度消失。

残差网络(ResNet):通过引入跳跃连接,允许梯度在网络中更有效地传播,从而减轻梯度消失的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值