我已经实现了一个神经网络,它有 3 层输入到隐藏层,有 30 个神经元(Relu 激活)到 Softmax 输出层。我正在使用交叉熵成本函数。没有使用外部库。这是在 NMIST 数据集上工作,因此有 784 个输入神经元和 10 个输出神经元。使用双曲正切作为隐藏层激活的准确率约为 96%。当我尝试切换到 relu 激活时,我的激活增长非常快,这导致我的权重也无限增长,直到它爆炸!
这是使用 relu 激活时的常见问题吗?
我尝试过 L2 正则化,但收效甚微。与 tanh 激活相比,我最终不得不将学习率设置为低 10 倍,并且我尝试相应地调整权重衰减率,但我得到的最佳准确度仍然约为 90%。最终,权重衰减的速度仍然超过网络中某些权重的更新,从而导致爆炸。似乎每个人都只是用 relu 替换了他们的激活函数,他们体验到了更好的结果,所以我一直在寻找错误并验证我的实现。使用 relu 作为激活函数还有更多内容吗?也许我的实现有问题,有人可以用相同的神经网络结构验证准确性吗?