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

22

据我所了解,所有卷积神经网络(CNN)的构建方式都相似,即由卷积层、池化层和ReLU层组成。有些CNN还包含像FlowNet和Segnet之类的专门层次。我想知道如何决定在神经网络中使用多少层以及如何为每一层设置内核大小。我已经搜索过答案,但是没有找到确切的答案。这个问题是通过试错法来设计网络还是有些我不知道的规则?如果您能澄清这一点,我将非常感激。

1个回答

37

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

注意,在计算机领域也有类似的问题。例如,请注意,只有少数基本电子逻辑单元,即驱动您的制造技术的门。所有计算设备都使用相同的布尔逻辑;一些具有专业附加功能,例如光电输入或机械输出。

您如何决定如何设计计算设备?


设计取决于CNN的目的。输入特征、准确性、训练速度、评分速度、适应性、计算资源等都会影响设计。即使对于给定的问题(尚未),也没有通用解决方案。

例如,考虑ImageNet分类问题。请注意至今获胜者和候选者之间的结构差异:AlexNet、GoogleNet、ResNet、VGG等。如果您更改输入(比方说到MNIST),那么这些就是过剩的。如果你改变范例,它们可能是无用的。GoogleNet可能是图像处理中的王子,但对于将口语法语翻译成书面英语来说,它是可怕的。如果你想实时跟踪视频屏幕上的曲棍球,完全忘记这些实现方式。


到目前为止,我们是通过经验方法来进行研究的:很多人尝试很多不同的方法,看看哪种方法有效。我们对于如何提高准确性、训练时间或其他想要调整的因素有一些感觉。我们发现什么在总CPU时间中表现良好,或者我们可以并行处理什么。我们更改算法以利用长度为2的次幂的向量数学。我们稍微改变问题,看看学习如何适应其他地方。我们更改领域(例如从图像处理到书面文本),并重新开始——但是有一个模糊的感觉,一旦我们开始考虑某些类型的层,它可能会调整特定的瓶颈。

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


我也有同样的问题。虽然你的观点在得出经验法是正确的,但我不明白是否至少有一些设计过程来开始制作模型?仅仅将层放在彼此之上并期望它们给出某种准确的结果是太随意了。应该有一些基本指导方针来开始,然后可以使用经验方法来微调模型。 - Qazi
@Qazi,根据你提出的问题,目前还没有这样的指南。看起来你是在寻求“如何制作模型”的实用指南。在你根据模型的一般特征进行分类之前,我们甚至无法说卷积神经网络可能是一个好的解决方案。对于大多数建模情况而言,神经网络只是浪费计算资源。 - Prune
@Qazi 您说得对,简单地开始组合层并不实际。相反,您需要分析输入纹理,考虑所需的建模目的和性能,确定您可以从输入中推导出哪些特征可能会导致您想要的输出,然后尝试采用体现这些特征的网络拓扑结构进行实验。输入纹理的相对较小变化通常会导致模型拓扑的大幅变化。 - Prune
谢谢您的完整回答。不过,现在已经过去了将近两年时间。是否值得提及更新?我有同样的问题,也是关于RNN和LSTM的。 - Luc
是的,绝对值得提及更新!如果您有什么要补充的,请随时添加。您促使我添加了一个我在年末发现的链接。您关于RNN和LSTM的问题非常合理,请单独发布问题,并链接到此问题以供参考。 - Prune
感谢您提供完整的答案,非常有帮助。有人知道其他的URL吗? Kaggle更改了提到的链接。 - C-3PO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接