0

我已经实现了一个神经网络,它有 3 层输入到隐藏层,有 30 个神经元(Relu 激活)到 Softmax 输出层。我正在使用交叉熵成本函数。没有使用外部库。这是在 NMIST 数据集上工作,因此有 784 个输入神经元和 10 个输出神经元。使用双曲正切作为隐藏层激活的准确率约为 96%。当我尝试切换到 relu 激活时,我的激活增长非常快,这导致我的权重也无限增长,直到它爆炸!

这是使用 relu 激活时的常见问题吗?

我尝试过 L2 正则化,但收效甚微。与 tanh 激活相比,我最终不得不将学习率设置为低 10 倍,并且我尝试相应地调整权重衰减率,但我得到的最佳准确度仍然约为 90%。最终,权重衰减的速度仍然超过网络中某些权重的更新,从而导致爆炸。似乎每个人都只是用 relu 替换了他们的激活函数,他们体验到了更好的结果,所以我一直在寻找错误并验证我的实现。使用 relu 作为激活函数还有更多内容吗?也许我的实现有问题,有人可以用相同的神经网络结构验证准确性吗?

4

1 回答 1

0

如您所见,Relu 函数在正值上是无限的,因此创建了权重以增长

在此处输入图像描述

事实上,这就是为什么在这些情况下使用双曲正切和类似函数来将输出值限制在某个范围之间(大多数情况下为 -1 到 1 或 0 到 1)

还有另一种处理这种现象的方法称为权重衰减 基本动机是获得更通用的模型(避免过度拟合)并确保权重不会爆炸您在更新它们时使用取决于权重本身的调节值含义更大的权重得到更大的惩罚

你可以在这里进一步阅读

于 2018-04-22T15:33:04.850 回答