在给定连续数据的x,y坐标的情况下,如何使用RNN/LSTMs来处理学习速度变化?(我必须使用循环层,因为这是一个更大的端到端模型的子问题,也可以做其他事情(
训练数据示例:
x,y,speed_changed
0,0,0
0,0.1,0
0,0.2,0
0,0.3,0
0,0.5,1
0,0.6,0
0,0.7,0
...
到目前为止,我构建了有状态的 LSTM,并在每批一个项目上训练它。之后,每次速度发生变化时,我都会重置 LSTM 的状态,因此我了解到一段具有相同的速度(段可以有不同的长度(。
那么,由于段的长度不同,我如何在生产中使用这种模型呢?
或者有没有更好的方法来训练这些数据的循环网络?也许是异常检测?(我想避免有固定的批量大小(例如 3 帧的窗口((
RNN 和 LSTM 的结构不会让你直接做,这就是原因 - RNN 的激活函数为: h(t( = Tanh(W * h(t-1( + U * x(t( + 偏差( 请注意,W,U和偏差都是一样的 - 无论你为RNN使用多少时间框架。因此,给定一些 X 向量,输出将是 p1*X1+p2*X2 的函数,依此类推,其中 X1 在您的示例中是 X,X2 是 Y。
但是 - 要检测速度的变化 - 您需要不同的计算。速度变化表示时间范围 1 和 2 之间以及时间范围 2 和 3 之间的行进距离不同。 行进距离为 SQRT((X1(t(-X1(t-1((^2 + (X2(t(-X2(t-1((^2(。 这意味着你需要一个以某种方式考虑 X1*X1 的激活函数——这在 RNN 或 LSTM 中是不可能的。
但是,您可以通过使用自定义激活函数来计算在最新时间范围内经过的距离,间接实现所需的目标。看看这个链接。通过使用自定义激活函数,您可以插入 X1(t(、X2(t(、X1(t-1(、X2(t-1( 的向量并计算距离 D。在 t=1 时,您可以使用 0 作为 X1(t=0( 和 X2(t=0(。
您的自定义激活函数应类似于 D = (X1(t( - X1(t-1((^2 + (X2(t(-X2(t-1((^2。这样 - 如果时间框架之间的速度相同,您将向 RNN 提供恒定的 D 值,因此您希望 RNN 达到模拟 D(t( - D(t-1( 函数的权重。