如何选择 LSTM 中隐藏层的数量和存储单元的数量?

人工智能 神经网络 机器学习 研究 循环神经网络 长短期记忆
2021-11-10 19:24:47

我试图找到一些关于如何选择基于 LSTM 的 RNN 的隐藏层数量和这些大小的现有研究。

是否有一篇文章正在研究这个问题,即一个人应该使用多少个存储单元?我认为这完全取决于应用程序以及模型的使用环境,但研究说明了什么?

4个回答

您的问题非常广泛,但这里有一些提示。

特别是对于 LSTM,请参阅 Reddit 讨论LSTM 网络中的层数是否会影响其记忆长模式的能力?

主要的一点是,对于你应该使用的隐藏节点的数量通常没有规则,这是你必须通过反复试验来确定每种情况的东西。

如果您也对前馈网络感兴趣,请参阅如何在前馈神经网络中选择隐藏层和节点的数量?在 Stats SE。具体来说,这个答案很有帮助。

还有一个额外的经验法则可以帮助解决监督学习问题。如果将神经元数量保持在以下,通常可以防止过度拟合:

Nh=Ns(α(Ni+No))

  • Ni= 输入神经元的数量。
  • No= 输出神经元的数量。
  • Ns= 训练数据集中的样本数。
  • α= 任意比例因子,通常为 2-10。

其他推荐设置alpha到 5 到 10 之间的值,但我发现 2 的值通常不会过拟合。您可以将 alpha 视为每个神经元的有效分支因子或非零权重的数量。Dropout 层会将“有效”分支因子从网络的实际平均分支因子中降低。

正如这篇出色的 NN Design 文本所解释的,您希望将模型中自由参数的数量(即其度数或非零权重的数量)限制为数据中自由度的一小部分。数据中的自由度是每个样本中的样本数 * 自由度(维度)或Ns(Ni+No)(假设它们都是独立的)。所以α是一种表示您希望模型有多通用,或者您希望防止过度拟合的方法。

对于自动化程序,您将从 2 的 alpha 开始(训练数据的自由度是模型的两倍),如果您的训练数据集的误差(损失)明显小于你的测试数据集。

LSTM 中隐藏层数量和存储单元数量的选择可能取决于您要应用此 LSTM 的应用领域和上下文。

隐藏单元的最佳数量可能小于输入的数量。AFAIK,没有像将输入数量乘以N. 如果你有很多训练样本,你可以使用多个隐藏单元,但有时只有 2 个隐藏单元在数据很少的情况下效果最好。

通常,人们使用一个隐藏层来完成简单的任务,但如今对深度神经网络架构的研究表明,许多隐藏层对于困难的物体、手写字符和面部识别问题都非常有效。

一般来说,没有关于如何确定 LSTM 中的层数或存储单元数的指南。

LSTM 所需的层数和单元数可能取决于问题的几个方面:

  1. 数据集的复杂度,如特征数量、数据点数量等。

  2. 数据生成过程。例如,石油价格的预测与 GDP 的预测相比是一个很好理解的经济体。后者比前者容易得多。因此,与 GDP 相比,预测油价可能需要更多的 LSTM 记忆单元来预测,并且具有相同的准确度。

  3. 用例所需的准确性。存储单元的数量将在很大程度上取决于此。如果目标是击败最先进的模型,通常需要更多的 LSTM 单元。将其与提出合理预测的目标进行比较,后者需要更少的 LSTM 单元。

我在使用 LSTM 建模时遵循这些步骤。

  1. 尝试使用 2 或 3 个存储单元的单个隐藏层。看看它在基准测试中的表现如何。如果是时间序列问题,我一般会以经典的时间序列技术作为基准进行预测。

  2. 尝试增加存储单元的数量。如果性能没有增加太多,则继续下一步。

  3. 开始使网络更深,即添加另一个具有少量存储单元的层。

作为旁注,可用于达到损失函数的全局最小值并调整最佳超参数的劳动量没有限制。因此,将重点放在建模的最终目标上应该是策略,而不是试图尽可能地提高准确性。

大多数问题可以使用 2-3 层网络来处理。

查看用于大规模声学建模的长短期记忆循环神经网络架构(2014) 论文,其中比较了不同的 LSTM 架构。在摘要中,作者写了以下内容。

我们展示了一个两层深度 LSTM RNN,其中每个 LSTM 层都有一个线性循环投影层,可以超过最先进的语音识别性能