通过不断迭代更新模型参数来减少神经网络的训练误差,使得神经网络的输出与预期输出一致,这在理论上是可行的。但在实践中,难免出现设计出来的神经网络经过长时间训练,准确率依然很低,甚至不收敛的情况。为了提高神经网络的训练准确率,常用方法包括调整网络的拓扑结构、选择合适的激活函数、选择合适的损失函数。
神经网络的结构包括输入、隐层和输出层。给定训练样本后,神经网络的输入和输出层的节点数就确定了,但隐层神经元的个数及隐层的层数(属于超参数)是可以调整的。以最简单的只有1个隐层的MLP为例,该隐层应该包含多少神经元是可以根据需要调节的。
神经网络中的隐层是用来提取输入特征中的隐藏规律的,因此隐层的节点数非常关键。如果隐层的节点数太少,神经网络从样本中提取信息的能力很差,则反映不出数据的规律;如果隐层的节点数太多,网络的拟合能力过强,则可能会把数据中的噪声部分拟合出来,导致模型泛化能力变差。泛化是指,机器学习不仅要求模型在训练集上的误差较小,在测试集上也要表现良好,因为模型最终要部署到没有见过训练数据的真实场景中。
理论上,隐层的数量、神经元节点的数量应该和真正隐藏的规律的数量相当,但隐藏的规律是很难描述清楚的。在实践中,工程师常常是通过反复尝试来寻找隐层神经元的个数及隐层的层数。为了尽量不人为地设定隐层的层数及神经元的个数(也就是所谓的超参数),现在有很多研究者在探索自动机器学习(Automated Machine Learning,AutoML),即直接用机器自动化调节神经网络的超参数,比如用演化算法或其他机器学习方法来对超参数进行建模和预测。