专栏首页机器之心改进卷积神经网络,你需要这14种设计模式

改进卷积神经网络,你需要这14种设计模式

选自Topbots

作者:Mariya Yao

机器之心编译

参与:马亚雄、吴攀

深度学习领域近来已经发展出大量的新架构,而如何选择使用这些新架构提升卷积神经网络的性能就显得越发重要了。机器之心之前报道过提交 ICLR 2017 的论文:解析深度卷积神经网络的14种设计模式也正是关注于此。而本文在描述14种设计模式之余更加注重于阐述构建和训练卷积网络的小技巧。

自从 2011 年深度卷积神经网络(CNN)在图像分类任务中优于人类开始,它们就成为了计算机视觉任务中的行业标准,这些任务包括图像分割、目标检测、场景标记、跟踪以及文本检测等等。

然而,训练神经网络的技巧并不容易掌握。与之前的机器学习方法一样,细节是最恐怖的地方,然而在卷积神经网络中有更多的细节需要去管理:你所用的数据和硬件的限制是什么?你应该以哪种网络作为开始呢?AlexNet、VGG、GoogLeNet 还是 ResNet 呢?甚至 ResNet 里面还有 ResNet 分支选项。你应当建立多少与卷积层相对应的密集层?你使用哪种激活函数?即使你选择了广为流行的 ReLU,你也还要选择是不是使用普通的 ReLU、Very Leaky ReLU、RReLU、PReLU 或通用版本的 ELU。

最难优化的参数之一就是学习率(learning rate),它是调节神经网络训练的最重要的超参数。学习率太小,可能导致你永远不会收敛到一个解决方案,学习率太大,可能导致你刚好跳过了最优解。即便是适应性学习率的方法,也可能在计算上过于昂贵,这取决于你的硬件资源。

设计的选择和超参数的设定会严重地影响 CNN 的训练和表现,然而对于刚进入深度学习领域的人而言,建立一种设计架构的直觉所需要的资源是稀缺的,而且是分散的。

每个人都知道 VGG 是缓慢而庞大的,但是,倘若你正确地调节它,你仍然可以生成最先进的结果以及高性能的商用应用。图片来源:Canziani, et al

着重于实际调节的主要书籍是《神经网络:权衡技巧(Neural Networks: Tricks Of The Trade)》,作者:Orr & Muller,最初出版于 2003 年,再版于 2012 年。关于深度学习的热潮始于 2012 年《纽约时报》报导的 Geoffrey Hinton 的团队在 Merck Drug Discovery Challenge 上的惊人成功,所以最近几年先进的研究是缺失的。

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

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

根据 Smith 的观点,这「14 种原创设计模式可以帮助没有经验的研究者去尝试将深度学习与各种新应用相结合」。尽管高级人工智能研究员可以依靠直觉、经验以及针对性的实验,但这些建议对于剩下的没有机器学习博士学位的人来说是一个很好的起点。

1)架构要遵循应用

你也许会被 Google Brain 或者 DeepMind 这些奇特的实验室所发明的那些耀眼的新模型所吸引,但是其中许多在你的用例或者业务环境中要么是不可能实现,要么是实现起来非常不现实。你应该使用对你的特定应用最有意义的模型,这种模型或许比较简单,但是仍然很强大,例如 VGG。

较新的架构可能在学术性的基准测试上会更加准确,但是你应该选择你自己理解的并且最适合你的应用的架构。图片来源:Canziani 等。

2)网络路径的激增

每年的 ImageNet Challenge 的冠军都会使用比上一届冠军更加深层的网络。从 AlexNet 到 Inception,再到 ResNet,Smith 注意到了「网络中路径数量倍增」的趋势,并且「ResNet 可以是不同长度的网络的指数集合」。

3)争取简单

然而,更大的并不一定是更好的。在名为「Bigger is not necessarily better」的论文中,Springenberg 等人演示了如何用更少的单元实现最先进的结果。参考:https://arxiv.org/pdf/1412.6806.pdf

4)增加对称性

无论是在建筑上,还是在生物上,对称性被认为是质量和工艺的标志。Smith 将 FractalNet 的优雅归功于网络的对称性。

5)金字塔式的形状

你也许经常在表征能力和减少冗余或者无用信息之间权衡。卷积神经网络通常会降低激活函数的采样,并会增加从输入层到最终层之间的连接通道。

6)过度训练

另一个权衡是训练准确度和泛化能力。用类似 drop-out 或者 drop-path 的方法进行正则化可以提高泛化能力,这是神经网络的重要优势。请在比你的实际用例更加苛刻的问题下训练你的网络,以提高泛化性能。

7)全面覆盖问题空间

为了扩展你的训练数据和提升泛化能力,请使用噪声和数据增强,例如随机旋转、裁剪和一些图像操作。

8)递增的特征构造

随着网络结构越来越成功,它们进一部简化了每一层的「工作」。在非常深层的神经网络中,每一层仅仅会递增的修改输入。在 ResNets 中,每一层的输出和它的输入时很相似的,这意味着将两层加起来就是递增。实践中,请在 ResNet 中使用较短的跳变长度。

9)标准化层的输入

标准化是另一个可以使计算层的工作变得更加容易的方法,在实践中被证明可以提升训练和准确率。批量标准化(batch normalization)的发明者认为原因在于处理内部的协变量,但是 Smith 认为,「标准化把所有层的输入样本放在了一个平等的基础上(类似于一种单位转换),这允许反向传播可以更有效地训练」。

10)输入变换

研究表明,在 Wide ResNets 中,性能会随着连接通道的增加而增强,但是你需要权衡训练代价与准确度。AlexNet、VGG、Inception 和 ResNets 都在第一层使用了输入变换以让输入数据能够以多种方式被检查。

11)可用的资源决指引着层的宽度

然而,可供选择的输出数量并不是显而易见的,这依赖于你的硬件能力以及期望的准确度。

12)Summation Joining

Summation 是一种常用的合并分支的方式。在 ResNets 中,使用总和作为连接的机制可以让每一个分支都能计算残差和整体近似。如果输入跳跃连接一直存在,那么 summation 会让每一层学到正确地东西(例如与输入的差别)。在任何分支都可以被丢弃的网络(例如 FractalNet)中,你应该使用这种方式类保持输出的平滑。

13)下采样变换

在池化的时候,利用级联连接(concatenation joining)来增加输出的数量。当使用大于 1 的步长时,这会同时处理连接并增加连接通道的数量。

14)用于竞争的 Maxout

Maxout 被用在你只需要选择一个激活函数的局部竞争网络中。使用求和以及平均值会包含所有的激活函数,所以不同之处在于 maxout 只选择一个「胜出者」。Maxout 的一个明显的用例是每个分支具有不同大小的内核,而 Maxout 可以包含尺度不变性。

提示与技巧

除了这些设计模式之外,还出现了几个最新的技巧和诀窍,以减少架构的复杂性和训练时间,并且可以使用有噪声的标签。

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

「如果你的视觉数据和 ImageNet 相似,那么使用预训练网络会帮助你学习得更快」,机器学习公司 Diffbot 的 CEO Mike Tung 解释说。低水平的卷积神经网络通常可以被重复使用,因为它们大多能够检测到像线条以及边缘这些模式。将分类层用你自己的层替换,并且用你特定的数据去训练最后的几个层。

2)使用 freeze-drop-path

Drop-path 会在训练的迭代过程中随机地删除一些分支。Smith 测试了一种相反的方法,它被称为 freeze-path,就是一些路径的权重是固定的、不可训练的,而不是整体删除。因为下一个分支比以前的分支包含更多的层,并且正确的内容更加容易近似得到,所以网络应该会得到更好的准确度。

3)使用循环的学习率

关于学习率的实验会消耗大量的时间,并且会让你遇到错误。自适应学习率在计算上可能是非常昂贵的,但是循环学习率不会这样。使用循环学习率(CLR)时,你可以设置一组最大最小边界,在边界范围内改变学习率。Smith 甚至还在论文《Cyclical Learning Rates for Training Neural Networks》中提供了计算学习率的最大值和最小值的方法。参考:https://arxiv.org/pdf/1506.01186.pdf

4)在有噪声的标签中使用 bootstrapping

在现实中,很多数据都是混乱的,标签都是主观性的或者是缺失的,而且预测的对象可能是训练的时候未曾遇到过的。Reed 等人在文章《TRAINING DEEP NEURAL NETWORKS ON NOISY LABELS WITH BOOTSTRAPPING》中描述了一种给网络预测目标注入一致性的方法。直观地讲,这可以奏效,通过使网络利用对环境的已知表示(隐含在参数中)来过滤可能具有不一致的训练标签的输入数据,并在训练时清理该数据。参考:https://arxiv.org/pdf/1412.6596

5)采用有 Maxout 的 ELU,而不是 ReLU

ELU 是 ReLU 的一个相对平滑的版本,它能加速收敛并提高准确度。与 ReLU 不同,ELU 拥有负值,允许它们以更低的计算复杂度将平均单位激活推向更加接近 0 的值,就像批量标准化一样参考论文《FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS)》,https://arxiv.org/pdf/1511.07289.pdf。如果您使用具有全连接层的 Maxout,它们是特别有效的。

原文链接:http://www.topbots.com/14-design-patterns-improve-convolutional-neural-network-cnn-architecture/

本文为机器之心编译,转载请联系本公众号获得授权。

本文分享自微信公众号 - 机器之心(almosthuman2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-04-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 现场 | 上海纽约大学青年学者论坛:五大单元探究AI前沿

    机器之心
  • 如何入手卷积神经网络

    从 Alex Krizhevsky 及其朋友通过 ImageNet 公布这项技术至今,不过才七年。ImageNet 是一个大规模图像识别竞赛,每年都会举办,识别...

    机器之心
  • 构建深度神经网络,我有20条「不成熟」的小建议

    在我们的机器学习实验室中,我们已经在许多高性能的机器上进行了成千上万个小时的训练,积累了丰富的经验。在这个过程中,并不只有电脑学习到了很多的知识,事实上我们研究...

    机器之心
  • Yann LeCun:CNN已解决CIFAR-10,目标 ImageNet

    用户1737318
  • 给初学者的深度学习简介

    深度学习是计算机领域中目前非常火的话题,不仅在学术界有很多论文,在业界也有很多实际运用。本篇博客主要介绍了三种基本的深度学习的架构,并对深度学习的原理作了简单的...

    华章科技
  • Google研究员Ilya Sutskever:成功训练LDNN的13点建议

    用户1737318
  • Get不到AI的点?一定要看《程序员的AI书:从代码开始》!

    当老姑大伯们渐渐把AI和程序员画上等号时,我大腿一拍大事不妙!生怕疫情后的家庭聚会上,让我表演才艺:做个什么狗陪他们下棋、做个什么精灵跟他们唠嗑……

    博文视点Broadview
  • 从 Spring Cloud 看一个微服务框架的「五脏六腑」

    Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件。

    java思维导图
  • Spring Cloud 微服务架构的五脏六腑!

    Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件。

    Java技术栈
  • 将markdown编译为html

    IT人写技术文档,例如我自己写博客,用的最多的就是 markdown. 但是在浏览器中看到的这些博客都是以 html 的格式展示在人们的面前的. 所以一个自然...

    ACM算法日常

扫码关注云+社区

领取腾讯云代金券