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

深度学习领域近来已经发展出大量的新架构,而如何选择使用这些新架构提升卷积神经网络的性能就显得越发重要了。机器之心之前报道过提交 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,它们是特别有效的。

作者:佚名

来源:51CTO

时间: 2024-11-10 01:09:13

改进卷积神经网络,你需要这14种设计模式的相关文章

想改进你的卷积神经网络?看看这14种设计模式!

更多深度文章,请关注云计算频道: https://yq.aliyun.com/cloud 自2011年以来,深度卷积神经网络(CNN)在图像分类的工作中的表现就明显优于人类,它们已经成为在计算机视觉领域的一种标准,如图像分割,对象检测,场景标记,跟踪,文本检测等. 但,想要熟练掌握训练神经网络的能力并不是那么容易.与先前的机器学习思维一样,细节决定成败.但是,训练神经网络有更多的细节需要处理.你的数据和硬件有什么限制?你应该是从何种网络开始?你应该建立多少与卷积层相对的密集层?你的激励函数怎样去

能帮你更好理解分析深度卷积神经网络,今天要解读的是一款新型可视化工具——CNNVis,看完就能用!

以下为译文: 更好的理解分析深度卷积神经网络   图1 CNNVis,一个能够帮助专家理解,分析与改进深度卷积神经网络的视觉分析工具 摘要:深度卷积神经网络(CNNs)在许多模式识别任务中取得了很大的性能突破, 然而高质量深度模型的发展依赖于大量的尝试,这是由于没有很好的理解深度模型是怎么工作的,在本文中,提出了一个可视化分析系统,CNNVis,帮助机器学习专家更好的理解.分析.设计深度卷积神经网络. 关键词:深度卷积神经网络,矩形填充,矩阵排序,边缘捆绑,双聚类 1 引言 深度卷积神经网络在许

卷积神经网络算法的简单实现

前言 从理解卷积神经到实现它,前后花了一个月时间,现在也还有一些地方没有理解透彻,CNN还是有一定难度的,不是看哪个的博客和一两篇论文就明白了,主要还是靠自己去专研,阅读推荐列表在末尾的参考文献.目前实现的CNN在MINIT数据集上效果还不错,但是还有一些bug,因为最近比较忙,先把之前做的总结一下,以后再继续优化. 卷积神经网络CNN是Deep Learning的一个重要算法,在很多应用上表现出卓越的效果,[1]中对比多重算法在文档字符识别的效果,结论是CNN优于其他所有的算法.CNN在手写体

一步一步学用Tensorflow构建卷积神经网络

0. 简介 在过去,我写的主要都是"传统类"的机器学习文章,如朴素贝叶斯分类.逻辑回归和Perceptron算法.在过去的一年中,我一直在研究深度学习技术,因此,我想和大家分享一下如何使用Tensorflow从头开始构建和训练卷积神经网络.这样,我们以后就可以将这个知识作为一个构建块来创造有趣的深度学习应用程序了. 为此,你需要安装Tensorflow(请参阅安装说明),你还应该对Python编程和卷积神经网络背后的理论有一个基本的了解.安装完Tensorflow之后,你可以在不依赖G

TensorFlow教程之完整教程 2.6 卷积神经网络

本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权. 卷积神经网络 注意: 本教程适用于对Tensorflow有丰富经验的用户,并假定用户有机器学习相关领域的专业知识和经验. 概述 对CIFAR-10 数据集的分类是机器学习中一个公开的基准测试问题,其任务是对一组32x32RGB的图像进行分类,这些图像涵盖了10个类别:飞机, 汽车, 鸟, 猫, 鹿, 狗, 青蛙, 马, 船以及卡车. 目标 本教程的目标是建立一个用于识别图像的相对较小的卷积神经网络,在这一过程中

卷积神经网络CNN总结

从神经网络到卷积神经网络(CNN) 我们知道神经网络的结构是这样的:  那卷积神经网络跟它是什么关系呢? 其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.比如下图中就多了许多传统神经网络没有的层次. 卷积神经网络的层级结构 数据输入层/ Input layer 卷积计算层/ CONV layer ReLU激励层 / ReLU layer 池化层 / Pooling layer 全连接层 / FC layer 1.数据输入层 该层要做的处理主要是对原始图

卷积神经网络(CNN)在无人驾驶中的应用

无人驾驶的感知部分作为计算机视觉的领域范围,也不可避免地成为CNN发挥作用的舞台.本文是无人驾驶技术系列的第八篇,深入介绍CNN(卷积神经网络)在无人驾驶3D感知与物体检测中的应用. CNN简介 卷积神经网络(Convolutional Neural Network,CNN)是一种适合使用在连续值输入信号上的深度神经网络,比如声音.图像和视频.它的历史可以回溯到1968年,Hubel和Wiesel在动物视觉皮层细胞中发现的对输入图案的方向选择性和平移不变性,这个工作为他们赢得了诺贝尔奖.时间推进

手把手教你用 TensorFlow 实现卷积神经网络(附代码)

在知乎上看到一段介绍卷积神经网络的文章,感觉讲的特别直观明了,我整理了一下.首先介绍原理部分. 通过一个图像分类问题介绍卷积神经网络是如何工作的.下面是卷积神经网络判断一个图片是否包含"儿童"的过程,包括四个步骤: ● 图像输入(InputImage) ● 卷积(Convolution) ● 最大池化(MaxPooling) ● 全连接神经网络(Fully-ConnectedNeural Network)计算. 首先将图片分割成如下图的重叠的独立小块:下图中,这张照片被分割成了77张大

图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法

近年来,卷积神经网络(CNN)以其局部权值共享的特殊结构在语音识别和图像处理等方面得到了快速发展,特别是大型图像处理方面,更是表现出色,逐渐成为了行业内一个重要的技术选择. 不过,好用并不代表万能.这里雷锋网从一个卫星图像分析的具体实例出发,介绍了CNN建模和本地拉普拉斯滤波这两种分析技术的效果对比,最终我们发现,本地拉普拉斯滤波的效果反而更好.   卷积神经网络 为了从卫星图像中分析和评估一项自然灾害造成的损失,首先需要得到相关地理区域实时的高分辨率的卫星图像,这是进行后续所有分析的数据基础.