我的神经网络是一个普通的前馈和反向传播网络。它有10个输出,这些输出应该是一个向量,其中一个输出为1,其余为0。比如像这样[0,0,0,0,1,0,0,0,0]。所以我期望的输出是这样的:
[ 0.21332215,0.13782996,0.13548511,0.09321094,0.16769843,0.20333131, 0.06613014,0.10699013,0.10622562,0.09809167]
理想情况下,训练后应该是这样的:
[ 0.21332215,0.13782996,0.93548511 ,0.09321094 ,**0.9**676984,0.20333131, 0.06613014,0.1069901,0.10622562, 0.09809167]
当我在隐藏层有30个神经元,并且学习率大于0.1但小于1时,我得到了这些结果。然而,当我在隐藏层有100个神经元,并且学习率为0.01时,我得到了这样的结果:
[ 1.75289110e-05,1.16433042e-04 ,2.83848791e-01,4.47291309e-02, 1.63011592e-01,8.12974408e-05 , 1.06284533e-03 , 2.95174797e-02, 7.54112632e-05, 1.33177529e-03]
这是为什么呢?这是过度学习的表现吗?
然后,当我将学习率改为0.0001,隐藏层有100个神经元时,又得到了正常的结果。
所以我的问题是:学习率应该如何影响隐藏层的数量?更大的隐藏层是否意味着更低的学习率?
回答:
可以说,隐藏单元的数量与学习率之间存在一定的关系,通常情况下,当你增加隐藏单元的数量时,你会得到一个参数化程度更高、容量更大的模型,这样的模型在相同的训练集上更容易过拟合。此外,这样的模型在更高维度的空间中运行,并且与较薄的模型相比,具有更复杂的误差表面。当你在这样复杂的误差环境中应用较大的学习率时,SGD过程可能会很容易地偏离到无意义的位置,我认为这就是你在使用较高学习率时得到奇怪结果的真正原因。简而言之,当模型过于复杂时,使用较小的学习率会更合理。