减少损失函数的人工神经网络的正常行为取决于隐藏层中神经元的数量吗?

时间:2018-12-10 21:50:25

标签: python neural-network deep-learning

出于学习目的,我正在用python编写自己的ANN。我已经为GD和激活函数实现了最常见的优化,并计算了数值梯度,以确保由ANN计算出的梯度是正确的。

我尝试了非常简单的示例,它们的效果很好,但是最近我尝试使用MNIST数据集训练ANN。我从数据集中的前100或1000张图像开始,以了解每层要使用多少个隐藏层和神经元。例如,我以16个神经元的单个隐藏层开始,对于提到的样本效果很好,损失函数逐渐减小,但是如果我使用几乎其他数量的神经元,则损失函数几乎不会改变甚至根本不变在训练期间,无论我使用多少个纪元。我正在尝试对整个数据集都具有相似结果的建议拓扑。

我的理由是,也许没有足够的神经元来使网络正常工作,但是我感到惊讶的是,在多种情况下,损失函数甚至都没有改变,这是正常现象,还是我更有可能出现一些错误在我的代码中?

对于我所描述的,我使用Adam优化,leakyReLU作为隐藏层的激活函数,并使用softmax作为输出层。

1 个答案:

答案 0 :(得分:1)

损失的减少不一定与隐藏层中神经元的数目有关,至少在达到一定数目后并没有线​​性关系,并且数目是逐案的。要了解神经元(以及隐藏层)与丢失之间的关系,您需要了解为什么我们“做”深或浅LINK。它更像是参数化的近似值(例如最小二乘法),您只需要很少的必要参数即可近似函数。因此,在您的情况下,16个神经元是解决问题的“一些必要参数”的定义,更多的数字可能只会限制准确性的进步。 总而言之,人工神经网络或DL所做的事情都是近似的,因此神经大小,网络结构或您选择的优化器很大程度上取决于数据本身,因此在大多数情况下没有正确的答案。