如何快速高效的训练ResNet,各种奇技淫巧(四):网络结构

2024-06-21 09:18

本文主要是介绍如何快速高效的训练ResNet,各种奇技淫巧(四):网络结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Ayoosh Kathuria

编译:ronghuaiyang

导读

这个系列介绍了如何在CIFAR10上高效的训练ResNet,到第4篇文章为止,我们使用单个V100的GPU,可以在79s内训练得到94%的准确率。里面有各种各样的trick和相关的解释,非常好。

我们寻找更有效的网络架构,并找到一个9层网络,训练时间为79秒。

我们尝试了一些不同的网络,发现我们一直在努力工作

到目前为止,我们一直在训练一个固定的网络架构,从CIFAR10上最快的单GPU DAWNBench开始。通过一些简单的修改,我们将达到测试精度94%的时间从341s降低到了154s。今天我们将研究替代的体系结构。

让我们回顾一下我们目前的网络:

640?wx_fmt=png

粉色残差模块包含一个恒等跳跃连接,保留输入的空间分辨率和通道尺寸:

640?wx_fmt=png

浅绿色下采样块将空间分辨率降低两倍,输出通道数量增加一倍:

640?wx_fmt=png

使用残差块的动机是为了在网络中创建跳跃连接来简化优化的过程。我们希望较短的路径代表较浅的子网络,相对容易训练,而较长的路径增加容量和计算深度。研究网络中的最短路径是如何隔离训练的,并在添加较长的分支之前采取措施改进这一点,似乎是合理的。

去掉长分支后,得到以下骨干网络,除初始分支外,所有卷积的步长为2:

640?wx_fmt=png

在接下来的实验中,我们将使用之前的学习率策略的加速版本进行20个epochs的训练,因为网络较小,因此收敛速度更快。主要的代码都可以在这里找到:https://github.com/davidcpage/cifar10-fast/blob/master/ents.ipynb。

640?wx_fmt=png

训练20个epochs的最短路径网络,在36秒内的测试精度仅为55.9%。去除重复的batch-norm-ReLU组,将训练时间减少到32秒,但测试精度基本保持不变。

这种主干网的一个严重缺点是,下采样卷积有1×1个核,步长为2,因此它们并没有扩大感受野,而是简单地丢弃了信息。如果我们用3×3个卷积来代替这些,情况会有很大的改善,20个epochs后的测试精度在36秒内达到85.6%。

我们可以进一步改进下采样阶段,使用3×3的卷积,stride为1,然后是池化层,而不是使用strided卷积。我们选择窗口大小为2×2的最大池化,43秒后最终测试准确率为89.7%。使用平均池可以得到类似的结果,但是需要稍微长一点的时间。

640?wx_fmt=png

分类器之前的最后一个池化层是全局平均池化层和最大池化层的连接,它们继承自原始网络。我们将其替换为更标准的全局最大池化层,并将最终卷积的输出维数加倍,以补偿分类器输入维数的减少,最终的测试精度在47s内达到90.7%。注意,此阶段的平均池化性能明显低于最大池化。

在PyTorch(0.4)中,默认从区间[0,1]中随机均匀地选择初始batch norm尺度。接近于零的初始化通道可能会被浪费,因此我们用常量1的初始化来替换它。这导致了一个更大的信号通过网络和补偿,我们对最终的分类器引入了一个常数,用来整体相乘。对这个额外超参数的粗略手工优化表明0.125是一个合理的值。(较低的数值使得预测不那么确定,而且似乎有利于优化。)随着这些变化,20个epochs的训练在47秒内达到91.1%的测试精度。

以下是我们迄今为止所采取的步骤:

NetworkTest accTrain time
Original backbone55.9%36s
去掉重复的BN-ReLU56.0%32s
使用3×3卷积85.6%36s
使用Max pool下采样89.7%43s
全局最大池化90.7%47s
更好的BN尺度初始化91.1%47s

骨干网现在似乎处于合理的状态,我们的回报正在递减。是时候添加一些层了。网络只有5层深(4个卷积,一个全连接),所以我们不清楚是否需要残差分支,或者主干上的额外层是否能使我们达到94%的目标。

一种看起来不太可能的方法就是给5层网络增加宽度。如果我们将通道尺寸加倍,训练60个周期,我们可以达到93.5%的测试精度,但训练需要全部321秒。

在扩展网络深度时,我们面临着过多的选择,比如不同的残差分支类型、深度和宽度,以及新的超参数,比如初始规模和残差分支的偏差。为了取得进展,我们将搜索空间限制在可管理的范围内,并且不调优任何新的超参数。

具体来说,我们考虑两类网络。第一个是可选地在每个最大池化层之后添加一个卷积层(使用batch-norm-ReLU)。第二类构造方法是在相同的最大池化层之后,选择性地添加一个由两个具有跳跃连接的串行3×3卷积组成的残差块。

我们在最后一个卷积块之后和全局最大池化之前插入一个额外的2×2 max pooling层,这样就有3个位置可以添加新的layer。在每种情况下,包含或不包含新层的选择都是独立做出的,导致每个类中有7个新网络。我们还考虑了这两个类的混合,但这些并没有导致进一步的改进,所以我们不在这里描述它们。

下面是第一类网络的一个例子,我们在第二个最大池层之后添加了一个额外的卷积:

640?wx_fmt=png

下面是第二类网络的一个例子,我们在第1层和第3层之后添加了残差分支:

640?wx_fmt=png

现在是时候进行一些蛮力架构搜索了!我们对15个网络中的每个网络(改进的主干+每个类中的7个变种)进行20个epochs的训练,同时也做了22个epochs的训练,以了解更长时间的训练与使用更深层次的体系结构相比的好处。如果我们每个实验运行一次,这相当于整整30分钟的计算。遗憾的是,每个最终测试精度的标准差都在0.15%左右,为了能够得出准确的结论,我们将每个实验运行10次,导致每个数据点的标准差在0.05%左右。即便如此,从20个epochs到22个epochs,架构之间的改进率的变化可能主要是噪音。

结果如下,点表示20个epochs的次数和精度,而直线是延伸到相应的22个epochs的结果:

640?wx_fmt=png

与使用更深层次的体系结构实现的改进相比,较长时间的训练带来的改进速度似乎比较慢。在测试的架构中,可能最有希望的是残差:L1+L3,我们在上面碰巧选择了它来说明。该网络运行20个epoch,在66秒内达到93.8%的测试精度。如果我们将训练时间延长到24个周期,10次跑中有7次达到94%,平均准确率为94.08%,训练时间为79秒!

今天就到这里吧。我们发现了一个9层深度残差网络,在79秒内训练准确率达到94%,训练时间几乎减少了一半。剩下的一个问题是,我们真的需要残差分支来达到94%的测试精度吗?答案显然是否定的。例如,单分支网络Extra:L1+L2+L3在180秒内达到95%的准确率,其中包括60个epoch训练和额外的正则化(12×12 cutout),更宽的版本更高。但至少目前最快的网络达到94%是残差网络(考虑到本系列文章的标题,这是幸运的)。

在今天结束之前,我想简要地回顾一下这项工作的动机。有一种合理的观点认为,在CIFAR10上训练一个模型到94%的测试准确度是毫无意义的,因为最先进的水平是98%以上。(还有一种不太合理的观点认为,ImageNet是唯一真实的数据集,其他任何东西都是浪费时间,但我不会讨论这个问题,只是说,从CIFAR10中学到的一些经验教训也应该可以转移到这个数据集上。)

我们使用一个9层网络,在24个epochs可以达到94%的准确率这个事实,增加我的一些观点的可信度,我们的目标阈值太低。另一方面,人类在CIFAR10上的表现估计约为94%(基于一个人对400幅图像进行分类!)因此,这个问题还没有研究的很清楚。

最先进的精度是一个病态的目标,因为在这个问题上投入更大的模型、更多的超参数调优、更多的数据扩充或更长的训练时间通常会导致精度的提高,使结果之间的公平比较成为一项微妙的任务。在训练或架构设计方面的创新可能会引入额外的超参数维度,而对这些维度进行调优可能会对训练的其他方面进行更好的隐式优化,而这些方面与正在研究的扩展无关。消融研究通常被认为是最佳实践,但如果基础模型具有更低的显式超参数空间来优化,则无法解决这一问题。这种情况的结果是,最先进的模型看起来就像一个由孤立的结果组成的动物展览,这些结果很难比较,容易复制,也很难建立。

鉴于这些问题,我们提出,任何能使实验作品内部和之间的比较变得更容易的东西都是一件好事。我们认为,为资源有限的训练制定有竞争力的基准是减轻其中一些困难的一种方法。

资源限制的引入鼓励工作之间进行更公平的比较,从而减少了对训练工作进行调整的必要性。额外的模型复杂性,允许隐式参数的高维优化,通常会受到资源约束基准的惩罚。明确控制相关参数的方法往往会胜出。

资源限制基准允许最先进前沿研究,而不是局限于一个点上,允许在一个合适的制度下对目标进行研究,可以更清楚的认识到不同的组件的作用,也许可以通过一系列转换变得更加复杂,并获得成功的架构。

一个简单的技术可以被证明是针对较低的阈值,而不需要包含所有的技巧,以提高一个无约束的问题,获得最好的表现。较短的训练时间和较低的模型复杂度应该使较低的资源基准测试更容易研究,并且比它们的无约束同类测试能更好地优化。更好的优化基线反过来使接受或拒绝提议的变更变得更容易。

近年来,根据推理时间或模型大小,最先进模型的发布曲线呈现出积极的趋势。这些都是优化的重要实际目标,它们解决了上面的一些问题,但我们相信,随着训练时间的增加,正则化会带来更多的好处。另一方面,优化训练时间不考虑推理时间并不是最优的,这就是为什么我们的训练时间结果总是包括每个epoch评估测试集的时间,我们避免那些增加测试时间,减小训练时间的技术。

第5部分中,我们从加速训练中休息一下,并开发了一些超参数调优的启发式方法。

640?wx_fmt=png

—END—

英文原文:https://myrtle.ai/how-to-train-your-resnet-4-architecture/

640?wx_fmt=jpeg

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧640?wx_fmt=gif

这篇关于如何快速高效的训练ResNet,各种奇技淫巧(四):网络结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080812

相关文章

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX