我是神经网络的新手,正在从头开始创建 LSTM。我有前向传播工作......但我对在训练模型、反向传播和内存管理的上下文中的前向传播中的移动部分有一些疑问。
所以,现在,当我运行前向传播时,我将新列堆叠f_t, i_t, C_t, h_t, etc
在它们对应的数组上,因为我为 bptt 梯度计算积累了先前的位置。
我的问题是 4 部分:
1)为了保留合理的长期记忆,我需要回溯多长时间?(内存向后延伸 20-40 个时间步可能是我的系统所需要的(尽管我可以从更长的时间段中受益——这只是获得良好性能的最低限度——而且我只是在争取最低限度的权利现在,所以我可以让它工作)
2)一旦我认为我的模型“经过训练”,我是否有任何理由保持超过 2 个时间步长来计算下一个C
和h
值?(C_t
Cell 状态在哪里,h_t
是 LSTM 网络的最终输出) 在这种情况下,我需要多个版本的前向传播函数
3)如果我要训练的时间序列数据有限,并且我想训练我的模型,那么当我在训练数据上一遍又一遍地训练它时,我的模型的性能是否会收敛(而不是在一些最大平均性能附近振荡) ? 如果我实施 dropout,它会收敛吗?
4)我需要考虑多少渐变分量?当我计算各种矩阵的梯度时,我在时间步 t 得到主要贡献,从时间步 t-1 得到次要贡献(并且计算一直递归到 t=0)?(换句话说:主要贡献是否在梯度计算中占主导地位——由于次要分量引起的斜率变化是否足以保证在我反向传播时间步长时实现递归......)