在小型神经网络的情况下,激活函数的最佳选择是什么

what is the best choice for an activation function in case of small sized neural networks

我正在使用 pytorch 和 autograd 来构建我的神经网络架构。它是一个具有单一输入和输出的小型 3 层网络。假设我必须根据一些初始条件预测一些输出函数并且我正在使用自定义损失函数。

我面临的问题是:

  1. 我的损失最初收敛,但梯度最终消失。

  2. 我已经尝试过 sigmoid 激活和 tanh。 tanh 在损失收敛方面给出了更好的结果。

  3. 我尝试使用 ReLU,但由于我的神经网络中没有太多的权重,权重变得无效并且没有给出好的结果。

除了 sigmoid 和 tanh 之外,是否还有其他激活函数可以很好地处理小型神经网络的梯度消失问题? 关于我还能尝试什么的任何建议

在深度学习领域,ReLU 通常优于其他激活函数,因为它克服了梯度消失问题,让模型学习得更快,表现更好。但它可能有缺点。

Dying ReLU 问题

The dying ReLU problem指的是当大量ReLU神经元只输出0值时的场景。当这些神经元中的大部分return输出0时,梯度在反向传播过程中无法流动,而权重会得不到更新。最终,网络的很大一部分变得不活跃,无法进一步学习。

是什么导致了 Dying ReLU 问题?

  • 高学习率:如果学习率设置得太高,新权重很有可能处于负值范围。
  • 大的负偏差:大的负偏差项确实会导致 ReLU 激活的输入变为负数。

如何解决Dying ReLU问题?

  • 使用较小的学习率:在训练期间降低学习率是个好主意。

  • ReLU 的变体:Leaky ReLU 是解决垂死的 ReLU 问题的一种常见有效方法,它通过在负向中添加一个轻微的斜率来实现范围。还有其他变体,如 PReLU、ELU、GELU。如果您想更深入地了解这个 link.

  • 初始化过程的修改:已经证明使用随机非对称初始化可以帮助防止死亡的ReLU问题。请查看 arXiv paper 了解数学细节

来源:

Practical guide for ReLU

ReLU variants

Dying ReLU problem