深度卷积模型:案例研究

1  为什么要进行案例研究?

        过去,计算机视觉中的大量研究都集中在如何将卷积层、池化层以及全连接层这些基本组件组合起来,形成有效的卷积神经网络。

        找感觉的最好方法之一就是去看一些示例,就像很多人通过看别人的代码来学习编程一样。我认为一个很好的方法去了解关于如何构建卷积神经网络,就是去看别人构建的高效卷积神经网络。事实证明,一个神经网络结构,如果在一个计算机视觉问题中表现的很好,通常也会在别的问题中表现很好。

        在接下来,我们将会,学习一些计算机视觉领域的研究论文。

2  经典网络

         LeNet-5的网络架构是:

        从一幅32×32×1的图像开始,而LeNet-5的任务是识别手写数字,LeNet-5是针对灰度图像训练的,这就是为什么他是32×32×1。

        LeNet-5的第一层使用六个5×5的过滤器,步长为1,padding为0,输出结果是28×28×6,图像尺寸从32×32缩小到28×28,然后进行池化操作。在这篇论文发表的那个年代,人们更喜欢用平均池化;而现在,我们可能用最大池化更多一点。但是在这个例子中,我们进行平均池化,过滤器的宽度为二,步长为二,图像的高度和宽度都缩小两倍,输出结果是一个14×14×6的图像。

         在LeNet-5论文发表的年代,当时人们并不使用padding或者valid卷积,这就是为什么每进行一次卷积,图像的高度和宽度都会缩小一半。

        接下来继续用16个5×5,步长为1的过滤器进行卷积,新的输出结果是10×10×16,再进行平池化,输出5×5×16。

        把5×5×16展平成400个神经单元,建立全连接层,120个神经元每个都全连接这400个单元;再建立一层全连接层,用84维特征生成一个最终结果\hat{y}\hat{y}可能有10个可能值,对应识别的0-9这10个数字。现在,用Softmax函数输出十种分类结果

         尽管LeNet-5原先是用别的分类器做输出层,而这个分类器现在已经不用了。用现在的标准来看,这是个小型神经网络,大概有6万个参数;而如今你经常会见到千万到亿量级参数的神经网络。不管怎样,如果我们从左往右看这个神经网络,会发现随着网络越来越深,图像的高度和宽度都在缩小,从最初的32×32缩小到28×28,再到14×14,10×10,最后只有5×5;与此同时,随着网络层次的加深,通道数量一直在增加,从1个增加到6个,再到16个。这个神经网络中还有一个模式,至今仍然经常用到,那就是先使用一个或者多个卷积层,后面跟着一个池化层,然后又是若干个卷积层,再接一个池化层,然后是全连接层,最后是输出,这种排列方式很常见。

        AlexNet的网络架构是:

        AlexNet首先用一张227×227×3的图片作为输入,如果你读了这篇论文,论文提及的是224×224×3的图像,但如果你检查数字,你会发现227×227才合理。

        第一层使用96个11×11,步长为4的过滤器,图像尺寸缩小到55×55×96,随后的最大池化层用了3×3的过滤器,尺寸缩小为27×27×96,然后用256个5×5的过滤器进行Same卷积,得到27×27×256,再来一次做最大池化,尺寸缩小到13×13×256。

         使用384个3×3的过滤器进行两次Same卷积,得到13×13×384;用256个3×3的过滤器进行卷积,得到13×13×256,进行最大池化,尺寸缩小到6×6×256,把他展平成9216个单元,然后进行一些全连接层,使用Softmax函数输出,看他是1000个可能对象中的哪一个?

        Alexnet神经网络结构与LeNet有很多相似之处,不过Alexnet要大很多,AlexNet包含约6000万个参数,AlexNet采用与LeNet相似的构造版块,拥有更多隐藏神经元、在更多数据上训练。Alexnet在ImageNet数据库上训练,使它有优秀的性能。

         Alexnet神经网络比LeNet更好地原因是:Relu函数的使用。

        VGG-16的网络架构是:

        按作者所说,关于VGG-16非常值得注意的一点是:VGG-16没有那么多超参数,结构更简单,更能关注卷积层,使用3×3、步长为1的Same过滤器;最大池化的过滤器都是2×2、步长为2。

        假设你要识别224×224×3的图像,在最开始的两层,用64个3×3的过滤器对输入的图像进行Same卷积,得到224×224×64的结果,使用最大池化缩小到112×12×64;接着又是使用2层Same卷积层,结果是112×112×128,经过池化层后,维度是56×56×128;再使用三层Same卷积层,使得维度变成56×56×256,接着使用池化层后维度变成28×28×256;再经过三层Same卷积层变成28×28×512,经过最大池化变成14×14×512。再经过卷积、池化,直到最后维度变成7×7×512,把得到的神经单元展平拉直,通过全连接层,经过Softmax函数输出1000类结果。

        VGG-16中的16指该网络有16层带权重的层,这是一个相当大的网络,它总共有一亿三千八百万个参数。即使以现在的衡量标准,也是很大的 。VGG-16结构的简洁性也非常吸引人,看得出这个结构相当统一,先是几层卷积层,再是池化层。另一方面,如果你看卷积层中过滤器数,从64到128到256再到512,每次粗略的双倍增加过滤器的方式是设计神经网络时用的另一个简单原则。

3  ResNets

        太深的神经网络训练起来很难,因为有梯度消失和梯度爆炸问题,我们将学习跳跃连接,它可以允许从某一网络层得到激活值,并迅速传递给下一层甚至是更深的神经网络层,利用它你就可以训练网络层很深的残差网络。残差网络是使用了残差结构的网络。

        这里有两层神经网络,a^{[L]}代表第L层的激活函数,然后是a^{[L+1]},两层后得到a^{[L+2]}

        在这个例子的激活函数a^{[L]},作为输入,计算出z^{[L+1]}=w^{[L+1]}a^{[L]}+b^{[L]},之后应用非线性激活函数Relu得到a^{[L+1]};然后在下一层经过线性计算z^{[L+2]}=w^{[L+2]}a^{[L+1]}+b^{[L+2]},再使用一次Relu函数得到a^{[L+2]}。换句话说,从a^{[L]}流向a^{[L+2]}的信息需要经过上面的所有步骤,我把这称做这组层的主路径。

        在残差网络中,我们需要做个改变,把a^{[L]}直接向后连接到深层神经网络的位置。

        这条路径是在进行Relu非线性激活函数之前加上的。也就是z^{[L+2]}=w^{[L+2]}a^{[L+1]}+b^{[L+2]}a^{[L+2]}=g(z^{[L+2]}+a^{[L]})

        我们来看看下面这个网络,它并不是一个残差网络,而是一个普通网络:

        把它变成ResNet的方法是加上所有的跳跃连接,就像这样: 

        事实证明,如果你使用标准的优化算法(如梯度下降法)来训练普通网络,从经验上来说,你会发现当你增加层数时,训练误差会在下降一段时间后回升;

        而理论上,随着网络深度的加深,应该训练的越来越好。如果没有残差网络,对于一个普通网络来说,网络越深意味着用优化算法越难训练,训练错误会越来越多;但是有了ResNet就不一样了,即使网络再深,训练表现也不错,训练错误会减少。

4  ResNets 为何有效?

        为什么ResNets这么好用呐?

        一个网络深度越深,它会使得你用训练集训练神经网络的能力下降,这也是有时候我们不希望加深网络的原因,但当你训练ResNet的时候就不一样了,我们来看一个例子。

        如果你有一个大型神经网络,它的输入是x,输出激活值a^{[L]}

         如果你想调整神经网络,使其深度更深一点:

        把这两层看作是具有跳跃连接的残差块。为了方便说明,假设我们在整个网络中使用Relu激活函数,所有激活值都大于等于零。

        我们看一下a^{[L+2]}的值,也就是a^{[L+2]}=g(z^{[L+2]}+a^{[L]}),展开这个表达式,也就是:a^{[L+2]}=g(w^{[L+2]}a^{[L+1]}+b^{[L+2]}+a^{[L]})。注意一点,如果使用L2正则化或者权重衰减,它会压缩w^{[L+2]}的值,如果对b使用权重衰减也会达到同样的效果。这里的w是关键项,假设b^{[L+2]}=0,如果w^{[L+2]}=0,那么w^{[L+2]}a^{[L+1]}+b^{[L+2]}=0a^{[L+2]}=g(a^{[L]})=a^{[L]}。因为我们假设使用Relu激活函数,并且所有激活值都是非负的,g(a^{[L]})是非负的,所以结果是a^{[L]},这意味着残差块比较容易学习恒等函数,由于这个跳跃连接也很容易得到a^{[L+2]}=a^{[L]},将这两层加入到你的神经网络,与上面这个没有这两层的网络相比,并不会非常影响神经网络的能力,因为对于它来说学习恒等函数非常容易。所以这就是为什么添加两层,不论是把残差块添加到神经网络的中间还是尾部都不会影响神经网络的表现。

        当然,我们的目标并不只是维持原有的表现,而是帮助获得更好的表现。你可以想象,如果这些隐藏单元学习到一些有用信息,那么它可能比学习恒等函数表现的更好;而这些不含残差块或跳跃连接的普通神经网络,情况就不一样了。当网络不断加深时,就算是选择用来学习恒等函数的参数也很困难,所以很多层最后的表现,不但没有更好,反而更糟。

        我认为残差网络起作用的主要原因是:这些额外层学习恒等函数非常容易,几乎总能保证它不会影响总体的表现,很多时候甚至可以提高效率,或者说至少不会降低网络效率。

        除此之外,关于残差网络另一个值得讨论的细节是:对于a^{[L+2]}=g(z^{[L+2]}+a^{[L]}),我们是假定z^{[L+2]}a^{[L]}具有相同的维度。所以你会看到在ResNet中许多Same卷积的使用。如果输入和输出有不同的维度,假如a^{[L]}是128维,而z^{[L+2]}a^{[L+2]}的结果是256维的,我们可以让a^{[L]}与一个256×128维的w_{s}矩阵相乘,也就是a^{[L+2]}=g(z^{[L+2]}+w_{s}*a^{[L]})

        

        

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

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

相关文章

RabbitMQ Linux 安装教程详解

RabbitMQ Linux 安装教程详解 在 Linux 系统上安装 RabbitMQ 并确保其稳定运行,对于构建可靠的分布式消息系统至关重要。本文将详细介绍如何在 Linux 系统上安装 RabbitMQ,并提供关键的注意事项,帮助您避免常见的坑点,确保安装过…

Godot笔记:入门索引

文章目录 前言游戏引擎软件界面关键概念GDScript导出成品创建非游戏应用后记 前言 最近对游戏引擎这块感兴趣,特别是因为游戏引擎自带的很多工具,作为图形化软件的开发应该也不错。 Godot 是一款这几年比较流行的开源游戏引擎。这里记录下入门学习使用 …

[C语言]猜数字游戏

文章目录 一、游戏思路揭秘二、随机数生成大法1、初探随机数:rand函数的魔力2、随机数种子:时间的魔法3、抓住时间的精髓:time函数 三、完善程序四、游戏成果1、游戏效果2、源代码 一、游戏思路揭秘 猜数字游戏,这个听起来就让人…

LeetCode392_判断子序列

LeetCode392_判断子序列 标签:#双指针 #字符串 #动态规划Ⅰ. 题目Ⅱ. 示例 0. 个人方法官方题解一:双指针官方题解二:动态规划 标签:#双指针 #字符串 #动态规划 Ⅰ. 题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序…

Python匿名函数与内置函数较难与较冷门知识点考前速记

5 lambda匿名函数与Python内置函数 lambda 函数通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用,例如在 map()、filter()、sorted()、list.sort() 等函数与方法中。 lambda语法格式: lambda arguments: expression lambda是 Python 的关键字,用…

DeepSeek谈《凤凰项目 一个IT运维的传奇故事》

《凤凰项目:一个IT运维的传奇故事》(The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win)是Gene Kim、Kevin Behr和George Spafford合著的一部小说,通过虚构的故事生动展现了IT运维中的核心挑战和Dev…

【上海大学数据库原理实验报告】MySQL基础操作

实验目的 熟悉MySQL基础操作。 实验内容 创建四张工程项目的关系表。 图 1 四张工程项目关系表的结构 检索供应零件编号为J1的工程的供应商编号SNO。检索供应零件给工程J1,且零件编号为P1的供应商编号SNO。查询没有正余额的工程编号、名称及城市,结果…

winget使用

Get-Command winget winget search qq winget install Tencent.QQ.NT

逻辑回归在信用卡欺诈检测中的实战应用

在大数据和机器学习蓬勃发展的时代,信用卡欺诈检测成为了保障金融安全的重要环节。逻辑回归作为一种经典的机器学习算法,在这一领域发挥着关键作用。本文将通过一段完整的Python代码,详细解析逻辑回归在信用卡欺诈检测中的具体应用过程&#…

矫平机:金属板材精密加工的“整形专家”

一、矫平机的定义与核心功能 矫平机(Leveling Machine)是金属加工领域的关键设备,主要用于消除金属板材或带材在轧制、运输过程中产生的内应力,矫正其弯曲、扭曲、波浪边等形变缺陷,使材料达到毫米级甚至微米级的平整…

百度「心响」:通用超级智能体,重新定义AI任务执行新范式

在AI技术从“对话交互”迈向“任务执行”的转折点,百度于2025年4月正式推出移动端超级智能体应用——心响。这款以“AI任务完成引擎”为核心的创新产品,被誉为“AI指挥官”,通过自然语言交互实现复杂任务的全流程托管,覆盖知识解析…

游戏性能测试

1. 分阶段,看目的,确定高中低三档测试机,最低档机的确定需要和客户端主程和制作人等共同确定 确定三档机的方式: 1. 要上线地区的top100,根据用户占比,划分出三档 2. 根据用研部门提供的数据,确…

react-10样式模块化(./index.module.css, <div className={welcome.title}>Welcome</div>)

1.react样式模块化 避免各个组件类名相同 相关样式冲突所以需要样式模块化。比如在组件Hello中的样式引入,将样式文件名更改为index.module.css如下图。 2. 文件中引入模块以及使用 文件中import引入模块样式 import welcome from "./index.module.css"…

4月30日星期三今日早报简报微语报早读

4月30日星期三,农历四月初三,早报#微语早读。 1、神舟十九号载人飞船因东风着陆场气象原因推迟返回; 2、林毅夫:到2049年中国经济体量有望达到美国的两倍; 3、市场监管总局:2024年查办商标、专利等领域违…

小刚说C语言刷题—1462小明的游泳时间

1.题目描述 伦敦奥运会要到了,小明在拼命练习游泳准备参加游泳比赛。 这一天,小明给自己的游泳时间做了精确的计时(本题中的计时都按 24 小时制计算),它发现自己从 a 时 b 分一直游泳到当天的 c 时 d 分。 请你帮小…

SpringBoot+EasyExcel+Mybatis+H2实现导入

文章目录 SpringBootEasyExcelMybatisH2实现导入1.准备工作1.1 依赖管理1.2 配置信息properties1.3 H2数据库1.4 Spring Boot 基础概念1.5 Mybatis核心概念 1.6 EasyExcel核心概念 2.生成Excel数据工具类-随机字符串编写生成Excel的java文件 3.导入功能并且存入数据库3.1 返回结…

嵌入式开发高频面试题全解析:从基础编程到内存操作核心知识点实战

一、数组操作:3x3 数组的对角和、偶数和、奇数和 题目 求 3x3 数组的对角元素和、偶数元素和、奇数元素和。 知识点 数组遍历:通过双重循环访问数组的每个元素,外层循环控制行,内层循环控制列。对角元素判断: 主对…

分布式优化与一致性算法python实现

目录 摘要一、分布式优化问题描述二、一致性算法基础2.1 平均一致性(Average Consensus)2.2 Gossip 协议三、分布式梯度下降(DGD)四、分布式 ADMM 与共识优化五、收敛性与参数选择六、典型案例6.1 传感器网络参数估计6.1.1 问题描述6.1.2 算法设计6.1.3 实验结果6.2 分布式…

突破SQL注入字符转义的实战指南:绕过技巧与防御策略

在渗透测试中,SQL注入始终是Web安全的重点攻击手段。然而,当开发者对用户输入的特殊字符(如单引号、反斜杠)进行转义时,传统的注入方式往往会失效。本文将深入探讨如何绕过字符转义限制,并给出防御建议。 目…

算法导论第6章思考题

6.3-2 func(A) 1 A.heap-sizeA.len 2 \quad for i ⌊ A . l e n 2 ⌋ \lfloor {A.len\over2}\rfloor ⌊2A.len​⌋ downto 1 3 \qquad MAX-HEAPIFY(A,i) 对于第2行的循环控制变量i来说,为啥要求它是从 ⌊ A . l e n 2 ⌋ \lfloor {A.len\over2}\rfloor ⌊2A.len​⌋…