如何设计深度卷积神经网络?

How to design deep convolutional neural networks?

据我了解,所有 CNN 都非常相似。它们都有一个卷积层,然后是池化层和 relu 层。有些具有专门的层,如 FlowNet 和 Segnet。我的疑问是我们应该如何决定使用多少层以及如何为网络中的每一层设置内核大小。我一直在寻找这个问题的答案,但找不到具体的答案。网络是通过反复试验设计的还是一些我不知道的特定规则?如果您能澄清这一点,我将不胜感激。

简短回答:如果有设计规则,我们还没有发现它们。

请注意,计算中有类似的问题。例如,请注意只有少数基本电子逻辑单元,驱动您的制造技术的门。所有计算设备都使用相同的布尔逻辑;有的有专门的加法,比如光电输入或者机械输出。

你如何决定如何设计你的计算设备?


设计取决于 CNN 的用途。输入特征、准确率、训练速度、评分速度、适配、计算资源……所有这些都会影响设计。没有通用的解决方案,即使对于给定的问题(还)。

例如,考虑 ImageNet 分类问题。请注意目前获胜者和竞争者之间的结构差异:AlexNet、GoogleNet、ResNet、VGG 等。如果您更改输入(例如,更改为 MNIST),那么这些就太过分了。如果你改变范式,它们可能就没用了。 GoogleNet 可能是图像处理的王子,但将法语口语翻译成书面英语却很糟糕。如果您想在视频屏幕上实时跟踪冰球,请完全忘记这些实现。


到目前为止,我们正在以经验的方式进行此操作:许多人尝试了很多不同的方法以查看哪些方法有效。我们得到 感觉 什么会提高准确性、训练时间或我们想要调整的任何因素。我们发现什么对总 CPU 时间有效,或者我们可以并行做什么。我们更改算法以利用长度为 2 的幂的矢量数学。我们稍微更改问题并查看学习如何适应其他地方。我们改变领域(例如,图像处理到书面文本),并从头开始——但是一旦我们开始考虑某些类型的层,我们就会对可能调整特定瓶颈的内容有一种模糊的感觉。

请记住,CNN 真正流行的时间并不长,只有 6 年。在大多数情况下,我们仍在努力了解重要的问题可能是什么。欢迎加入研究团队。