LSTM:将以前的输出值作为特征

数据挖掘 lstm
2022-03-02 08:29:59

据我所知,LSTM 的输入特征的维数几乎没有限制。它显然可以学习数据的顺序。

我的问题是 LSTM 本质上是否也将除特征向量之外的先前输出值作为下一个输出值的新特征元素?即如果我们有:

[t] -> [x1, ..., xn] [y_t] [t+1] -> [x1, ..., xn] [y_(t+1)]

是否有必要像这样操作数据

[t] -> [x1, ..., xn, y_(t-1)] [y_t] [t+1] -> [x1, ..., xn, y_t] [y_(t+1)]

或者 LSTM 已经在为我们处理这个问题了?

2个回答

我的问题是 LSTM 本质上是否也将除特征向量之外的先前输出值作为下一个输出值的新特征元素?

您没有指定您使用的是哪个框架,所以我将解释自定义(c++ 等)实现。

在每个时间步长 LSTM 将:

  1. 从您那里获取新输入(例如,作为one-hot 编码向量
  2. 在内部获取一个单独的向量,它是来自 Timestep [t-1] 的 LSTM 的输出
  3. 这两个向量就像一个“燃料”,将用于在 [t] 处塑造一个 Cell
  4. 为该时间步生成结果 [t]

反向传播为 LSTM 中的权重创建梯度,也为这两个向量创建梯度。

因为有多个时间步长,所以您在每个时间步长期间都会获得一个渐变,必须在使用之前添加(以组件方式)。

请注意,最后一个 url 链接在屏幕右下角有一个蓝色箭头,因此您可以单击查看下一张幻灯片。

LSTM 会为您处理这个问题。

你可以搜索一些关于 LSTM 的教程,解释它们是如何工作的。我喜欢的一个是这个