### 在小型神经网络中选择最佳激活函数

我正在使用PyTorch和autograd构建我的神经网络架构。这是一个具有单一输入和输出的三层小型网络。假设我需要基于某些初始条件预测某个输出函数,并且我在使用自定义损失函数。

我遇到的问题是:

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

  2. 我尝试了sigmoid激活和tanh。tanh在损失收敛方面表现得稍微好一些。

  3. 我尝试使用ReLU,但由于我的神经网络中没有太多权重,权重会变为死权重,无法得到好的结果。

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


回答:

在深度学习领域,ReLU通常比其他激活函数更受欢迎,因为它克服了梯度消失问题,使模型能够更快地学习并表现得更好。但它也可能有一些缺点。

ReLU死亡问题

ReLU死亡问题是指当大量的ReLU神经元只输出0值时的情景。当大多数这些神经元返回0值时,梯度在反向传播过程中无法流动,权重不会得到更新。最终,网络的大部分变得不活跃,无法继续学习。

什么导致ReLU死亡问题?

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

如何解决ReLU死亡问题?

  • 使用较小的学习率:在训练过程中降低学习率可能是一个好主意。

  • ReLU的变体:Leaky ReLU是一种常见的有效方法,可以通过在负值范围内添加一个小的斜率来解决ReLU死亡问题。还有其他变体,如PReLU、ELU、GELU。如果您想深入了解,请查看这个链接

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

来源:

ReLU的实用指南

ReLU变体

ReLU死亡问题

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注