对 CNN 模块的分析,该论文(Systematic evaluation of CNN advances on the ImageNet)已经做过了,里面的发现是非常有帮助的:
使用没有 batchnorm 的 ELU 非线性或者有 batchnorm 的 ReLU。
使用一个学习到的 RGB 的彩色空间转换。
使用线性学习率衰退策略。
使用平均和最大池化层的和。
使用大约 128 到 256 的 mini-batch 大小。如果这对你的 GPU 而言太大,将学习率按比例降到这个大小就行。
使用完全连接层作为卷积,并为做最后预测平均所有预测。
当研究增加训练集大小的时候,检测有一个 plateau 是否没有达到
数据的整洁要比数据大小更重要。
如果你不能增加输入图像的大小,在随后的层上减少步幅(stride),这样做有同样的效果。
如果你的网络有复杂和高度优化的架构,像是 GoogLeNet,那修改一定要谨慎。
我们相信制作神经网络架构是深度学习领域发展的头等大事。我们团队高度推荐仔细阅读并理解文中提到的论文。
但有人可能会想为什么我们要投入如此多的时间制作架构?为什么不是用数据告诉我们使用什么?如何结合模块?这些问题很好,但仍在研究中,有一篇论文可以参考:Neural networks with differentiable structure。
要注意到,我们在本文中谈到的大部分架构都是关于计算机视觉的。类似神经网络架构在其他领域内也有开发,学习其他所有任务中的架构变革也是非常有趣的。
如果你对神经网络架构和计算性能的比较有兴趣,可参见论文:An Analysis of Deep Neural Network Models for Practical Applications。