我见过的大多数网络在最终的 softmax 层之前都有一两个密集层。
- 是否有任何原则性的方法来选择密集层的数量和大小?
- 对于相同数量的参数,两个密集层是否比一层更具代表性?
- 应该在每个密集层之前应用 dropout,还是只应用一次?
我见过的大多数网络在最终的 softmax 层之前都有一两个密集层。
首先:
仅从输入和输出的数量无法确定良好的网络拓扑。这主要取决于训练示例的数量和您尝试学习的分类的复杂性。 [1]
Yoshua Bengio 提出了一个非常简单的规则:
只需继续添加层,直到测试错误不再改善。 [2]
而且:
ConvNet 的早期特征包含更通用的特征(例如边缘检测器或颜色斑点检测器),这些特征应该对许多任务有用,但 ConvNet 的后面层逐渐变得更加具体到原始数据集中包含的类的细节。 3]
例如,在学习特征检测器的方法中:
第一层学习边缘检测器,后续层学习更复杂的特征,更高级别的层编码更多抽象特征。[4]
因此,使用两个密集层比一层更建议。
最后:
关于 Dropout 的原始论文提供了在实践中使用 dropout 时需要考虑的许多有用的启发式方法。其中之一是: 对传入(可见)和隐藏单元使用 dropout。在网络的每一层应用dropout都显示出很好的效果。[5]
在 CNN 中,通常会在每个池化层之后应用一个 Dropout 层,并且在 Dense 层之后也是如此。一个很好的教程在这里 [6]
参考:
[1] https://www.cs.cmu.edu/Groups/AI/util/html/faqs/ai/neural/faq.html
[2] 本吉奥,约书亚。“基于梯度的深度架构训练的实用建议。” 神经网络:交易技巧。施普林格柏林海德堡,2012. 437-478。
[3] http://cs231n.github.io/transfer-learning/
[4] http://learning.eng.cam.ac.uk/pub/Public/Turner/Teaching/ml-lecture-3-slides.pdf
[5] https://machinelearningmastery.com/dropout-regularization-deep-learning-models-keras/
[6] https://cambridgespark.com/content/tutorials/convolutional-neural-networks-with-keras/index.html