我是神经网络的新手,我正在从零开始创建一个LSTM。我有前向传播工作......但是在训练模型,反向传播和内存管理的背景下,我对前向传播中的移动部分有一些疑问。
所以,现在,当我向前传播时,我将新列f_t, i_t, C_t, h_t, etc
堆叠在它们相应的数组上,因为我累积了bptt梯度计算的先前位置。
我的问题是4部分:
1)为了保留合理的长期记忆,我需要多长时间才能回传?(记忆延伸20-40个时间步长可能就是我的系统所需要的(虽然我可以从更长的时间段中受益 - 这只是体面表现的最低限度 - 而我现在只拍摄最低限度,所以我可以让它正常工作 )
2)一旦我考虑了我的模特和#34;经过培训,"是否任何原因让我保留超过计算下一个C
和h
值所需的两个时间步长?(其中{{1}是单元状态,C_t
是LSTM网络的最终输出)在这种情况下我需要多个版本的前向传播函数
3)如果我要训练的时间序列数据有限,并且我想训练我的模型,那么当我在训练数据上训练时,我的模型的表现会收敛一遍又一遍(相对于一些最大平均性能的振荡)?如果我实施辍学,它会收敛吗?
4)我需要考虑多少个渐变组件?当我计算各种矩阵的梯度时,我在时间步t获得主要贡献,并且从时间步t-1获得次要贡献(并且计算一直返回到t = 0)?(in换句话说:主要贡献是否主导梯度计算 - 由于次要分量导致斜率变化足以保证在我反向传播时间步长时实现递归...)
答案 0 :(得分:1)
正如您所观察到的,它取决于数据中的依赖关系。但是,如果我们不重置单元格和隐藏状态,LSTM可以学习学习长期依赖性,即使我们只传回几个时间步。
没有。给定c_t和h_t,您可以确定下一个时间步的c和h。由于你不需要反向传播,你可以扔掉c_t(如果你只对最终的LSTM输出感兴趣,甚至可以扔掉h_t)
如果你开始过度拟合,你可能会收敛。使用Dropout肯定有助于避免这种情况,特别是在提前停止的情况下。
h_t将有2个渐变分量 - 一个用于当前输出,另一个用于下一个时间步。一旦添加了两者,您就不必担心任何其他组件