1

我是神经网络的新手,正在从头开始创建 LSTM。我有前向传播工作......但我对在训练模型、反向传播和内存管理的上下文中的前向传播中的移动部分有一些疑问。

所以,现在,当我运行前向传播时,我将新列堆叠f_t, i_t, C_t, h_t, etc在它们对应的数组上,因为我为 bptt 梯度计算积累了先前的位置。

我的问题是 4 部分:

1)为了保留合理的长期记忆,我需要回溯多长时间?(内存向后延伸 20-40 个时间步可能是我的系统所需要的(尽管我可以从更长的时间段中受益——这只是获得良好性能的最低限度——而且我只是在争取最低限度的权利现在,所以我可以让它工作

2)一旦我认为我的模型“经过训练”,我是否有任何理由保持超过 2 个时间步长来计算下一个Ch值?C_tCell 状态在哪里,h_t是 LSTM 网络的最终输出) 在这种情况下,我需要多个版本的前向传播函数

3)如果我要训练的时间序列数据有限,并且我想训练我的模型,那么当我在训练数据上一遍又一遍地训练它时,我的模型的性能是否会收敛(而不是在一些最大平均性能附近振荡) ? 如果我实施 dropout,它会收敛吗?

4)我需要考虑多少渐变分量?当我计算各种矩阵的梯度时,我在时间步 t 得到主要贡献,从时间步 t-1 得到次要贡献(并且计算一直递归到 t=0)?(换句话说:主要贡献是否在梯度计算中占主导地位——由于次要分量引起的斜率变化是否足以保证在我反向传播时间步长时实现递归......)

4

1 回答 1

1
  1. 正如您所观察到的,它取决于数据中的依赖关系。但是如果我们不重置单元和隐藏状态,即使我们只反向传播几个时间步长,LSTM 也可以学习学习更长期的依赖关系。

  2. 不。给定 c_t 和 h_t,您可以确定下一个时间步的 c 和 h。由于您不需要反向传播,因此您可以丢弃 c_t(如果您只对最终 LSTM 输出感兴趣,甚至可以丢弃 h_t)

  3. 如果您重新开始拟合,您可能会收敛。使用 Dropout 肯定会有助于避免这种情况,尤其是在提早停止的情况下。

  4. h_t 将有 2 个梯度分量 - 一个用于当前输出,一个用于下一个时间步长。添加两者后,您不必担心任何其他组件

于 2016-07-28T14:05:28.210 回答