您的位置  > 互联网

14种设计模式之余更加注重于阐述构建和训练卷积网络的小技巧

参演:马亚雄、吴攀

深度学习领域最近开发了大量新架构,如何选择使用这些新架构来提高卷积神经网络的性能变得越来越重要。 Heart of the 此前曾报道过ICLR 2017提交的论文:正是这个焦点。 除了描述 14 种设计模式之外,本文更侧重于阐述构建和训练卷积网络的技巧。

自 2011 年深度卷积神经网络 (CNN) 在图像分类任务中超越人类以来,它们已成为计算机视觉任务的行业标准,包括图像分割、对象检测、场景标记、跟踪和文本检测。 等待。

然而,训练神经网络的技术并不容易掌握。 与以前的机器学习方法一样,细节决定成败,但在卷积神经网络中,需要管理更多细节:您使用的数据和硬件有哪些限制? 您应该从哪个网络开始? ,VGG,还是什么? 那里甚至还有一个分支选项。 相对于卷积层,您应该构建多少个密集层? 你使用什么激活函数? 即使你选择了流行的ReLU,你仍然要选择是使用普通ReLU、Very Leaky ReLU、RReLU、PReLU还是通用版本的ELU。

最难优化的参数之一是学习率(rate),它是调节神经网络训练最重要的超参数。 学习率太小可能会导致您永远无法收敛到解决方案,而学习率太大可能会导致您跳过最佳解决方案。 即使是自适应学习率方法,计算成本也可能非常昂贵,具体取决于您的硬件资源。

设计的选择和超参数的设置将严重影响CNN的训练和性能。 然而,对于刚刚进入深度学习领域的人来说,建立设计架构直觉所需的资源是稀缺且分散的。 。

每个人都知道 VGG 缓慢且庞大,但如果正确调整它,您仍然可以产生最先进的结果和高性能商业应用程序。 图片来源: 等人。

专注于实际调整的主要书籍是 Orr & 的 : Of The Trade,最初出版于 2003 年,并于 2012 年重新出版。深度学习的热潮始于 2012 年,《纽约时报》报道了该团队在 Merck Drug 上取得的惊人成功,因此近年来缺乏先进的研究。

幸运的是,美国海军研究办公室的研究员 Smit 等人发表了关于卷积神经网络架构和技术改进的系统研究。 以下是他强调的一些最重要的设计模式。

用于图像分类的卷积神经网络设计模式

Smith 表示,这“14 种原创设计模式可以帮助缺乏经验的研究人员尝试将深度学习与各种新应用结合起来。” 虽然高级人工智能研究人员可以依靠直觉、经验和有针对性的实验,但这些建议对于我们其他没有机器学习博士学位的人来说是一个很好的起点。

1)架构必须遵循应用

您可能会被 Brain 或这些奇特实验室发明的令人眼花缭乱的新模型所吸引,但其中许多模型在您的用例或业务环境中实现要么是不可能的,要么是非常不切实际的。 您应该使用对您的特定应用程序最有意义的模型,该模型可能更简单但仍然强大,例如 VGG。

较新的架构在学术基准上可能更准确,但您应该选择您理解且最适合您的应用程序的架构。 图片来源:等人。

2)网络路径的激增

每年的获胜者都使用比上届获胜者更深的网络。 从 到 到 ,史密斯注意到“网络中的路径数量加倍”和“成为不同长度网络的指数集合”的趋势。

3)力求简单

然而,越大并不一定越好。 在一篇题为“不是”的论文中,等人。 演示如何用更少的单元实现最先进的结果。 参考:

4)添加对称性

无论是在建筑学还是生物学中,对称性都被认为是质量和工艺的标志。 史密斯将其优雅归因于网络的对称性。

5) 金字塔形状

您可能经常会在代表性权力与减少冗余或无用信息之间进行权衡。 卷积神经网络通常会对激活函数进行下采样,并增加从输入层到最终层的连接数量。

6)过度训练

另一个权衡是训练准确性和泛化能力。 使用 drop-out 或 drop-path 等方法进行正则化可以提高泛化能力,这是神经网络的一个重要优势。 请针对比实际用例更苛刻的问题来训练您的网络,以提高泛化性能。

7)问题空间全面覆盖

要扩展训练数据并提高泛化能力,请使用噪声和数据增强,例如随机旋转、裁剪和一些图像处理。

8)增量特征构建

随着网络结构变得越来越成功,它们进一步简化了每一层的“工作”。 在非常深的神经网络中,每一层仅增量地修改输入。 在 中,每一层的输出与其输入非常相似,这意味着将两层相加是增量的。 实际上,在 中使用较短的跳跃长度。

9) 归一化层的输入

归一化是另一种可以使计算层的工作变得更容易的方法,并且已被证明可以在实践中提高训练和准确性。 批量归一化(batch)的发明者认为,原因是为了处理内部协变量,但史密斯认为“归一化将所有层的输入样本置于平等的基础上(类似于单位转换),这使得反向通信可以得到更有效的培训”。

10) 输入变换

研究表明,在 Wide 中,性能随着连接通道数量的增加而提高,但您需要权衡训练成本和准确性。 、VGG 和 VGG 都在第一层使用输入转换,以允许以多种方式检查输入数据。

11)可用资源决定引导层的宽度

然而,可供选择的输出数量并不是立即显而易见的,而是取决于您的硬件功能和所需的精度。

12)

这是合并分支的常用方法。 在 中,使用求和作为连接机制允许每个分支计算残差和全局近似值。 如果输入跳过连接始终存在,则每一层都会学习正确的东西(例如与输入的差异)。 例如,在可以删除任何分支的网络中,您应该使用此类来保持输出平滑。

13)下采样变换

在池化过程中,级联连接( )用于增加输出数量。 当使用大于 1 的步长时,会同时处理连接并增加连接通道的数量。

14)为了竞争

用于本地竞争网络,您只需要选择一个激活函数。 使用总和和平均值将包括所有激活函数,因此不同之处在于仅选择一个“获胜者”。 一个明显的用例是每个分支具有不同大小的内核,这可以包含尺度不变性。

技巧和窍门

除了这些设计模式之外,最近还出现了一些技巧和窍门,可以降低架构复杂性和训练时间,并使使用噪声标签成为可能。

1)使用经过调整的预训练网络

“如果您的视觉数据相似,那么使用预先训练的网络将帮助您更快地学习,”机器学习首席执行官 Mike Tung 解释道。 低级卷积神经网络通常可以重复使用,因为它们大多能够检测线条和边缘等模式。 将分类层替换为您自己的层,并使用您的特定数据训练最后几层。

2)使用-drop-path

Drop-path 在训练迭代期间随机删除一些分支。 史密斯测试了一种相反的方法,称为 -path,其中某些路径的权重是固定且不可训练的,而不是全部删除。 由于下一个分支比前一个分支包含更多层,并且更容易近似正确的内容,因此网络应该获得更好的精度。

3)使用循环的学习率

尝试学习率会消耗大量时间,并且可能会导致错误。 自适应学习率的计算成本可能很高,但循环学习率则不然。 使用循环学习率 (CLR) 时,您可以设置一组最大和最小界限,并在界限内更改学习率。 Smith甚至在论文《Rates for》中提供了计算学习率最大值和最小值的方法。 参考:

4)在嘈杂的标签中使用

事实上,很多数据是杂乱的,标签是主观的或缺失的,并且预测的对象在训练过程中可能没有遇到过。 在文章“DEEP ON NOISY WITH”中,Reed 等人。 描述一种将一致性注入网络预测目标的方法。 直观地说,这是通过让网络利用已知的环境表示(隐含在参数中)来过滤可能具有不一致的训练标签的输入数据并在训练期间清理该数据来实现的。 参考:

5)使用现有的ELU代替ReLU

ELU是ReLU的一个相对平滑的版本,它加快了收敛速度并提高了准确性。 与 ReLU 不同,ELU 具有负值,这使得它们能够以较低的计算复杂度将平均单元激活推近 0,就像批量归一化一样。 请参阅论文“FAST AND DEEP BY UNITS (ELUS)”。 如果您使用具有完全连接层的层,它们会特别有效。

原文链接: