深度学习领域在近几年已经呈现井喷的状态,因此出现了大量的深度学习新架构,而如何选择使用这些新架构提升卷积神经网络的性能就显得越发重要了,所以今天和大家分享一下想要构建和训练卷积神经网络的10种设计模式。
关于图像分类的卷积神经网络设计模式
10种原创设计模式可以帮助没有经验的研究者去尝试将深度学习与各种新应用相结合」。尽管高级人工智能研究员可以依靠直觉、经验以及针对性的实验,但这些建议对于剩下的没有机器学习博士学位的人来说是一个很好的起点。
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 都在第一层使用了输入变换以让输入数据能够以多种方式被检查。