深度学习之卷积神经网络学习笔记一

news2024/11/24 10:52:04

1. 引言

深度学习是一系列算法的统称,包括卷积神经网络(CNN),循环神经网络(RNN),自编码器(AE),深度置信网络(DBN),生成对抗模型(GAN)等。由于各算法的网络结构不同,被运用到的领域也不尽相同。卷积神经网络常被用于图像处理,如图像分类,语义分割,目标识别等领域。相比于传统的算法,深度学习能够自动构建特征,并联合这些特征完成相应任务。

2. 卷积神经网络

2.1 分类模型

卷积神经网络常被用于图像分类任务中。在图像分类任务中,模型更倾向于找到图像的主要语义特征,如手写数字集中的几何特征,imagenet数据集中的主体的纹理和颜色特征等。

LeCun(1989)提出了第一个卷积神经网络LeNet,并将其用于数字识别,且取得了较好的成绩。该文章首次提出了权值共享(weight sharing)和特征图像(feature map)的概念。模型包括一个输入层,三个隐藏层,一个输入层。隐藏层包括两层卷积,一层全连接。激活函数使用了双曲正切(tanh)函数,损失函数使用了均方误差函数,网络训练采用了反向传播算法。特征图像指的是卷积层通过在被提取层上滑动计算,得到的结果图。权值共享是指在一个卷积核在卷积过程时共享相同的参数,即一个卷积核对应一种特征图。反向传播算法是1986年Hinton提出用于训练浅层神经网络的算法,该算法能够通过计算神经元的梯度,优化神经元权值,从而得到最佳的神经网络模型。

自2012年,Hinton等提出AlexNet模型以来,卷积神经网络一直围绕以下几个方面进行优化:

1卷积核尺寸及多尺寸卷积核的研究;

2反向传播算法时出现的梯度消失问题;

3模型体量大小的优化问题;

4低层特征与高层特征融合问题。

AlexNet首次使用Relu激活函数在一定程度上解决了sigmoid和tanh等激活函数存在的梯度弥散问题,同时在全连接层使用了dropout随机忽略部分神经元,避免模型的过拟合,在Relu激活函数后使用了局部响应归一化函数增强较大值的神经元,抑制较小的神经元,使模型更加契合于分类任务。然而AlexNet使用了 11*115*5 的几百个大卷积核进行特征的提取,最后使用全连接层作为模型的分类器,这种大尺寸和数量的卷积核及全连接层大大增加了模型的计算量。

VGGNet继承了AlexNet的卷积-池化-全连接层的思想,并使用了多个 3*3 的卷积核叠加,提高了卷积层的感受野的同时,减少了神经元数量。例如,两个3*3卷积层的串联相当于1个 5*5 的卷积层,3个 3*3 的卷积层串联相当于1个 7*7 的卷积层,即3个 3*3 卷积层的感受野大小相当于1个 7*7 的卷积层。但是3个 3*3 的卷积层参数量只有 7*7 的一半左右。但是VGGNet由于使用了大量的卷积核及全连接层,所以计算量更为巨大。

GoogleNet提出了一种Inception结构,这种结构使用了 1*13*35*5 的卷积核进行特征提取,并使用了 1*1 的卷积核对大卷积核进行降维,减少计算量的同时,丰富了特征空间。值得一提的是,GoogleNet使用了 7*7 的卷积层取代了传统的全连接层,进一步提高了模型的效率。然而无论是VGGNet还是GoogleNet,随着模型层数的增加,分类性能并没有提高,反而收敛速度越来越慢,进而出现梯度消失的问题。

ResNet是何凯明等在2015年提出深度卷积神经网络模型,他们发现深层次模型在训练时,有些层对网络的分类能力并没有正面反馈,反而会降低模型的精度。所以他们提出了Shortcut Connection的结构,上层网络的输出为X,在下一层网络的变换映射下变为F(x),假设目前网络已达到最优,F(x)层为使模型退化的卷积层,我们的目的是将F(x)训练成恒等变换层。传统累加模型在训练时,很少能将F(x)自动训练成恒等变换层,ResNet提出的残差网络解决了这个问题,模型直接使用上层输出X及映射层F(x)的和作为模型的训练目标,何凯明等人通过大量实验发现将G(x)中的F(x)训练为0比将F(x)训练成恒等映射容易得多。从直观上来理解,SC结构中,每一层都能接收到上一层的信息,如此在链式求导时使每一项多出1(即X的求导项)。

目前主流的卷积神经网络,都采用了ResNet的SC结构。在以后的模型中,大多都借鉴了ResNet的思想,深层的卷积都联合了浅层特征,加强了特征的重用,缓解了梯度消失问题。典型的网络如DenseNet所有层之间密集连接,每层卷积层都接受来自前N-1个卷积层的结果,这种结构加大了特征的重用,减少了神经元的数量。简单来说,ResNet在很大程度上解决了上面提出的四个问题:首先,ResNet里面的每个SC结构里吸收了VGGNet的精华,都是 3*3 的卷积核嵌套。其次ResNet解决了深层次网络存在的梯度消失的问题,大大增加了网络的深度,如何凯明等已完成了一千多层的ResNet,并且分类性能并未下降。然后针对模型的体量问题,ResNet参考了GoogleNet的 1*1 卷积核思想,对高维特征进行了降维。最后,SC结构考虑了前一层的特征图,综合了前层的特征,这一思想为以后的模型构建提出了一种新的思路。

近年来,各种模型在体量上已经能够满足绝大多数特征的提取,然而这些特征对分类结果的影响是否相同?如在VGG-19中,最后一层一共有512个特征图,但是并不是每个特征图对最后的分类结果都有正面的贡献,那么如何区分这些特征的的贡献度呢?Google团队在RNN上首先使用了attention机制。Attention机制来源于人在观察事物并不是关注事物的整体,而是事物的某些突出的特征,即赋予突出特征较大权重。在CNN中,这一机制是通过卷积实现的:假设我们在某一层的特征图大小为 W*H*D (W和H代表特征图大小,D为特征图深度),首先使用深度为D,大小为W*H卷积核进行卷积,得到 1*1*D 的贡献度矩阵,并使用sigmoid函数进行归一化,得到的结果与原 W*H*D 直接相乘(不是矩阵乘法),这样每个特征图所占的权重就不一样了。目前,attention机制已经广泛运用到深度学习的各种模型中。

另一方面,卷积神经网络模型也朝着高效率,高精度的方向发展。无论是Google公司提出的轻量级网络MobileNet(2017)、EfficientNet(2019),还是Momenta公司提出的SENet(2017),都将研究方向放在如何在提高精度的前提下,尽量减少模型的体量,去除冗余网络分支。

从以上的模型发展可以看出,一个好的模型不仅能够保证其易于训练,拟合任务的数据集,以较小的体量充分地提取到图像特征,并且能够将多级特征联合,注重各级特征的语义,以便更好地完成分类任务,这些都是是以后我们构建模型所要考虑的问题。

2.2 分割模型

分割任务是将图像上的按预定义好的像素类别精确分割出来。相比于分类模型注重于图像主体特征的联合,分割模型更加注重于图像的细节特征的恢复。

2015年,Long等人首次提出了基于像素的语义分割模型全卷积神经网络(FCN)。FCN继承了CNN前5层卷积-池化操作,并将全连接层替换成了反卷积层。经过前5层卷积池化操作,分别得到原图1/2,1/4,1/8,1/16,1/32大小的特征图。若直接使用1/32特征图进行32倍反卷积,得到的模型为FCN-32;使用1/32的特征图进行2倍反卷积,得到1/16的热度图,再与1/16的特征图进行融合,最后对融合结果进行16倍反卷积,得到的模型为FCN-16。以此类推,文章还训练了FCN-8。由于FCN-8融合了1/8特征图,所以其细节上的效果要好于FCN-16和FCN-32。然而FCN还是存在以下缺点:

1由于经过了几次池化操作,使得图像细节丢失,所以FCN的结果不够平滑与精细;

2FCN是对逐像素进行分类,这导致每个像素被当做独立的个体,割裂了像素间的空间关系,缺乏空间一致性;

3FCN直接使用了8倍、16倍、32倍反卷积,由于反卷积步长太大,难以训练达到原标签的分割效果。

U-Net是FCN的改进模型之一,最开始被用于医学影像的分割。相比于FCN,U-Net使用了最经典的编码-解码结构。编码即为CNN特征提取的过程,在解码时,U-Net不仅使用了反卷积,还融合了每个卷积-池化层的特征图,并在解码时使用了卷积层进行训练,所以严格意义上讲,U-net才是第一个在上采样时经过训练的分割网络模型。其联合底层的特征与分类模型的思想也有异曲同工之妙。然而U-net还是具有传统分割神经网络模型的缺点:最大池化问题。大部分神经网络模型在进行特征提取时都会使用最大池化来减小网络体量,突出主要特征。然而这种方法在分割时忽略了细节,并且丢失了主体特征的空间位置信息,直接对这种特征图进行上采样容易出现特征位置的不对应。

SegNet改进了U-Net的上采样结构。SegNet在编码-解码时使用的是VGG模型,只是在池化的过程中记录了每个最大池化特征的索引,在模型上采样时,通过这些索引将这些特征还原到原来位置。这种方法略去了FCN和U-Net的反卷积操作,直接使用值为0的padding进行上采样,所以模型比上述两种容易训练,体量也更小。然而由于池化层的存在,SegNet在小物体分割方面远不如大物体。

---

为了减少池化层带来的信息损失,Deeplab将VGG最后两层池化的步长减少为1,同时增加了1层padding,如此可以保留细节信息。然而更改了VGG的池化层后,原模型的感受野变小,Deeplab提出了一种带孔卷积增加了模型的感受野,图a中是dilated=1的带孔卷积,就是普通卷积。图b中是dilated=2的带孔卷积,红点表示参与计算的点,未参与计算的带孔点由0补充,如此达到扩大感受野的目的,通过合适的步长,可以让特征图上所有点参与到卷积中。带孔卷积在不增加计算量的前提下,增大了分割模型的感受野,同时减少了池化层,让模型更加聚焦于细节特征。

3. 总结

在卷积神经网络模型中,还有一种用于目标检测和识别的网络如RCNN,该网络主要包括分类和回归两种任务,分类主要是描述任务主体的类别,回归主要是找出任务主体的具体位置,这里不再展开讨论。

从LeNet到AlexNet,是模型体量的增加和训练方法的优化。从AlexNet到VGGNet,是卷积方法的优化和特征图的泛化。而GoogleNet更多的是压缩模型结构,去除冗余。ResNet则是卷积神经网络突破层数限制的重大创新。在以后的模型中,研究者们更加注重特征的含义和模型的效率,Attention机制提出了“不同特征不同权重”的新研究方向,DenseNet给出特征的重复利用的研究路线。SENet和EfficientNet则更注重于网络体量的压缩与优化。所以,解释各层特征的含义,了解模型在训练时具体的过程,优化模型体量,增加分类精度,是卷积神经网络研究的重点和难点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/373966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FreeRTOS优先级翻转

优先级翻转优先级翻转:高优先级的任务反而慢执行,低优先级的任务反而优先执行优先级翻转在抢占式内核中是非常常见的,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破坏任务的预期顺序,可能会导致未…

16- TensorFlow实现线性回归和逻辑回归 (TensorFlow系列) (深度学习)

知识要点 线性回归要点: 生成线性数据: x np.linspace(0, 10, 20) np.random.rand(20)画点图: plt.scatter(x, y)TensorFlow定义变量: w tf.Variable(np.random.randn() * 0.02)tensor 转换为 numpy数组: b.numpy()定义优化器: optimizer tf.optimizers.SGD()定义损失: …

利用Redis一步步实现优惠券的最终秒杀方案

订单ID不能采用自增长的原因: 1、规律变化太明显。两天下单的ID的差值,能够计算出商城的订单量; 2、如果采用自增长,订单数据是会不断产生的,到时候要分表,但是每个表的ID都是从0开始增长的,这…

selenium模块(自动化)

文章目录一、环境配置二、使用selenium解析源码三、基本函数四、子页面(ifFrame)(动作链,拖拽)五、实现无可视化界面,规避被检测的风险(反反爬)六、等待七、异常处理Selenium是自动化…

Vue+python+django+flask共享汽车租赁管理系统

共享汽车管理系统的系统管理员可以管理用户,可以对用户信息修改删除以及查询操作。具体界面的展示如图所示。 3.2投放地区管理 系统管理员可以对投放地区信息进行添加,修改,删除以及查询操作。具体界面如图所示。 3.3汽车信息管理 系统管…

【原创】java+swing+mysql教室管理系统设计与实现

大学生活中,我们很多时候都要用到教室,比如开个班会,开展某次活动,一般情况下为了避免占用教室资源,一般情况下都会提前进行预约教室,所以今天我们讲的就是如何使用javaswingmysql去设计一个教室预约管理系…

13 Sentinel初始化监控

Sentinel初始化工程演示 通过一个案例来让大家了解Sentinel的初始化演示,现在我们需要做几件事: 启动本地Nacos: 8848创建新的Module:cloudalibaba-sentinel-service8401启动Sentinel服务:8080启动sentinel微服务840…

Day901.内部临时表 -MySQL实战

内部临时表 Hi,我是阿昌,今天学习记录的是关于内部临时表的内容。 sort buffer、内存临时表和 join buffer。这三个数据结构都是用来存放语句执行过程中的中间数据,以辅助 SQL 语句的执行的。 其中,在排序的时候用到了 sort bu…

win10环境下安装openCDA(详细解答CARLA+SUMO以及遇到的问题)

目录预备知识CARLA安装安装CMAKE安装MAKE安装Visual Studio 2019安装unreal engine 4.26openCDA安装安装SUMO预备知识 opeCDA结合了carla和sumo,支持协同驾驶开发与测试,最近开源了。 论文链接:https://arxiv.org/abs/2107.06260 官方linux安…

事件驱动设计模式

是一种常见的设计模式,其核心思想是:系统中发生的事件会触发相应的事件处理器或监听器,从而实现特定的业务逻辑或功能 该设计模式通常由以下几个要素组成: 事件源(Event Source):事件源是指发生…

C++数据结构 —— AVL树

目录 1.AVL树介绍 2.AVL树如何进行平衡调整 2.1平衡因子 2.2AVL树的插入 2.3左单旋 2.4右单旋 2.5左右双旋 2.6右左双旋 2.8完整代码 3.测试用例 4.验证是否为AVL树 1.AVL树介绍 AVL树是map/set/multimap/multi/set等容器的一种底层结构,其本质就是一颗…

推荐系统算法总览【持续学习ing】

推荐系统整体知识架构 推荐模型发展 工业 CTR模型的三个改进大点:显性特征交叉, 特征重要度, user历史信息的挖掘 显性特征交叉: 针对的是隐性无脑交叉的DNN的不足, 针对一些重要的关键特征进行显性特征交叉&#xf…

Java中BIO、NIO和AIO的区别和应用场景

IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。 一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信&#…

学习网安需要了解的一些基础知识

P1.基本概念 1.POC/EXP POC(proof of concept)常指一段漏洞验证代码;EXP(exploit)指利用系统漏洞进行攻击的动作 PoC是证明漏洞存在的,而 Exp 是利用这个漏洞进一步进行攻击,先有POC,才有EXP 2.Payload/shellcode payload&#xff0…

【奶奶看了也不会】AI绘画 Mac安装stable-diffusion-webui绘制AI妹子保姆级教程

1.作品图 2.准备工作 目前网上能搜到的stable-diffusion-webui的安装教程都是Window和Mac M1芯片的,而对于因特尔芯片的文章少之又少,这就导致我们还在用老Intel 芯片的Mac本,看着别人生成美女图片只能眼馋。所以小卷这周末折腾了一天&#…

Random(一)高并发问题,ThreadLocalRandom源码解析

目录1.什么是伪随机数?2.Random2.1 使用示例2.2 什么种子重复,随机数会重复?2.3 nextInt() 源码分析2.4 线程安全的实现2.5 高并发问题3.ThreadLocalRandom3.1 使用示例3.2 current() 源码解析3.2.1 Thread中保存的变量:3.2.2 Thr…

2023最新谷粒商城笔记之MQ消息队列篇(全文总共13万字,超详细)

MQ消息队列 其实队列JDK中本身就有,不过这种队列也只能单体服务可能会使用,一旦项目使用的分布式架构,那么一定还是需要用到一个消息中间件的。我们引入消息队列的原因就是对我们的页面相应速度再优化,让用户的体验更好&#xff…

Ae:使用占位符

占位符 Placeholder本质上是一个静止的彩条图像,用来临时代替缺失的素材。自动占位符当 Ae 找不到源素材,比如被移动、删除或重命名,Ae 将自动生成占位符,在项目面板中用斜体显示,使用该素材的任何合成将用一个占位符图…

【R统计】R语言相关性分析及其可视化

💂 个人信息:酷在前行👍 版权: 博文由【酷在前行】原创、需要转载请联系博主👀 如果博文对您有帮助,欢迎点赞、关注、收藏 订阅专栏🔖 本文收录于【R统计】,该专栏主要介绍R语言实现统计分析的…

libxlsxwriter簇状柱形图绘制

libxlsxwriter的功能覆盖面很大,今天一起来看一下如何用这个库来生成带有簇状柱形图的表格。 1 簇形柱状图 首先来看一下Excel的样例表格,簇状柱形图往往是用来对比若干“系列”的数据在某一时间段内,或某一情境下的差异情况。在商务领域还…