我开始通过在线课程学习机器学习,并且觉得这非常有趣。
这些例子很容易理解(用Python编写),结果也令人惊叹,但所有的例子都很简单,并没有解释如何决定隐藏层和隐藏层中需要多少神经元,所以我在谷歌上搜索了相关信息。
大多数结果都说这是艺术和经验的问题,我找到了一篇文章,展示了初学者如何询问在人工神经网络中使用多少隐藏层和神经元,但对于具有大量参数的大数据集,我无法轻易划定界限,有没有一种编程的方式或者更好的方法来知道我需要多少隐藏层和神经元?
回答:
不,这需要通过实验来找到解决你问题的方案。正如你的参考资料所示,层的复杂性是由你的数据的固有复杂性和你试图进行的分类决定的。
作为一般原则,请注意隐藏层是一种最小的便利:线性组合的线性组合不会产生任何额外的学习能力:它仍然是一个线性组合。因此,你只需要一个隐藏层——尽管对于某些问题,使用两个或三个隐藏层会稍微减少训练所需的神经元数量。
当我需要进行这样的设计时,我会简单地处理:从一个隐藏层开始,我的最佳猜测是需要多少神经元。训练模型;如果它无法收敛,查看损失函数以了解它失败的程度。根据这一点,增加神经元(翻倍,10倍,…)然后再试一次。
一旦成功,然后我会逐渐减少神经元数量,直到找到准确性与训练时间之间的“最佳点”。
有些问题无法通过简单的NN(神经网络)轻易解决。根据应用的不同,你可能需要来自深度学习领域的东西,比如一个简单的CNN(卷积神经网络)。
如果你的数据集足够复杂,你可能还想应用PCA(主成分分析)来找出重要的输入参数。你可以然后减少输入数据,大大减少NN的规模和达到收敛所需的训练时间。