在前一篇里我们简单地学习用Keras完成了深度学习的项目,基本上理清了深度学习的过程。
在这一篇里我们将就一个问题做些探讨。
即如何在定义模型时设置神经网络的层数和节点数?
人工神经网络有两个主要的超参数来控制网络的结构或拓扑:层数和每个隐含层的节点数。
怎么做呢?
最可靠的方法是通过使用可靠的测试工具进行系统试验。
1 术语
有用于描述神经网络的形状和功能的术语;例如:
大小:模型中的节点数。
宽度:某一层中的节点数。
深度:神经网络中的层数。
容量:网络配置可以学习的功能的类型或结构。有时称为“代表能力”。
拓扑结构:神经网络的拓扑结构,也就是层和节点的排列方式。
2 层数
我们遵循传统的方式,认为输入层并不作为完整的一层来计算,只是将输入作为一种变量考虑。
因此,对于一个简单包含一个输入层、一个隐藏层、一个输出层,就记为2层多层感知器。
3 为何多层
多层感知器可以用来表示凸区域。这意味着,实际上,他们可以学习在一些高维空间中围绕示例绘制形状,这些示例可以对它们进行分离和分类,从而克服线性可分离性的限制。
我们简单地理解,认为多层就意味着能解决更复杂的问题。
4 如何选择层数?
1)试验
通过一系列可靠的测试工具和受控的试验来获得参数。
2) 直觉
3) 尽可能多的隐层
4) 向别人学习
5) 自动搜索
从文献和直觉中获得灵感。
一些流行的搜索策略包括:
随机:尝试对层和每层节点进行随机配置。
网格:尝试对每层的层数和节点数进行系统搜索。
启发式:尝试对配置进行定向搜索,例如遗传算法或贝叶斯优化。
详尽无遗:尝试使用所有层和节点数的组合;对于小型网络和数据集可能是可行的。
对于大型模型,大型数据集以及两者的组合,这可能是具有挑战性的。减少或管理计算负担的一些想法包括:
在训练数据集的较小子集上拟合模型以加快搜索速度。
积极地限制搜索空间的大小。
跨多个服务器实例并行搜索(例如,使用Amazon EC2服务)。
建议在时间和资源允许的情况下保持系统性。
总体上而言:
试验,尽可能多地尝试
可以参考下面的文献:
http://www.faqs.org/faqs/ai-faq/neural-nets/part3/section-9.html
网友评论