# 在序列预测问题上充分利用LSTM

> 原文： [https://machinelearningmastery.com/get-the-most-out-of-lstms/](https://machinelearningmastery.com/get-the-most-out-of-lstms/)

长短期记忆（LSTM）循环神经网络是一种强大的深度学习类型，适用于序列预测问题。

使用LSTM时可能存在的一个问题是，模型增加的复杂性是否会提高模型的技能，或者实际上导致技能低于简单模型。

在这篇文章中，您将发现可以运行的简单实验，以确保您在序列预测问题上充分利用LSTM。

阅读这篇文章后，你会知道：

*   如何测试模型是否在输入数据中利用顺序依赖性。
*   如何测试您的模型是否在LSTM模型中利用内存。
*   如何在拟合模型时测试模型是否正在利用BPTT。

让我们潜入。

![Get the Most out of LSTMs on Your Sequence Prediction Problem](img/50e9ced216375d2605f191db0c0d19b5.jpg)

在你的序列预测问题上充分利用LSTM
[DoD News](https://www.flickr.com/photos/dodnewsfeatures/25683075330/) 的照片，保留一些权利。

## 3 LSTMS的能力

LSTM循环神经网络具有一些关键功能，使该方法在广泛的序列预测问题上具有令人印象深刻的能力。

在不深入研究LSTM理论的情况下，我们可以总结一下我们可以在模型中配置的LSTM的一些离散行为：

*   **顺序依赖**。序列预测问题需要观察之间的排序，而较简单的监督学习问题则不需要，并且该顺序可以在训练和预测之前随机化。通过随机化观察的顺序，可以将序列预测问题转换为更简单的形式。
*   **记忆**。 LSTM在输入序列中具有跨观察的内部存储器，而诸如多层感知机之类的简单神经网络则没有。通过在每次输入观察后重置内部状态，LSTM可能会丢失此内存。
*   **BPTT** 。循环神经网络使用训练算法来估计输入序列的所有时间步长上的权重更新的方向，而其他类型的网络仅限于单个样本（在两种情况下不包括跨批次输入的平均）。 LSTM可以通过处理一个长度的观察序列来忽略梯度估计中先前时间步的误差贡献。

这三种功能及其对更简单形式的可配置性为您可以执行的3个实验提供了基础，可以准确了解LSTM的哪些属性，并且可以利用序列预测问题。

## 你在利用秩序依赖吗？

序列预测问题的一个关键特征是观察之间存在顺序依赖性。

也就是说，观察的顺序很重要。

**假设**：预计观察顺序对于预测序列预测问题很重要。

您可以通过使用仅将先前观察作为输入并对训练和测试数据集进行混洗的模型来开发表现基线来检查该假设是否成立。

这可以通过多种方式实现。两个示例实现包括：

*   具有改组训练和测试装置的多层感知机（MLP）。
*   LSTM具有改组训练和测试集，每个样本后更新和状态重置（批量大小为1）。

**测试**：如果顺序依赖对预测问题很重要，那么利用每个输入序列中的观察与输入序列之间的顺序的模型应该比没有预测问题的模型实现更好的表现。

## 你在利用LSTM内存吗？

LSTM的一个关键功能是它们可以记住长输入序列。

也就是说，每个存储器单元保持内部状态，该内部状态可以被认为是在做出预测时使用的局部变量。

**假设**：模型的内部状态预计对模型技能很重要。

您可以通过使用从一个样本到下一个样本没有内存的模型开发表现基线来检查这种假设是否成立。

这可以通过在每次观察之后重置LSTM的内部状态来实现。

**测试**：如果内部存储器对预测问题很重要，那么在输入序列中具有跨越观察结果的存储器的模型应该比不存在的模型具有更好的表现。

## 你是否正在利用反向传播？

训练循环神经网络的关键是反向传播时间（BPTT）算法。

该算法允许从序列中的所有观察（或截断的BPTT的情况下的子集）估计权重更新的梯度。

**假设**：预计BPTT权重更新算法对于序列预测问题的模型技能很重要。

您可以通过开发表现基线来检查此假设是否成立，其中梯度估计基于单个时间步长。

这可以通过分割输入序列来实现，使得每个观察表示单个输入序列。这与调度重量更新和重置内部状态的时间无关。

**测试**：如果BPTT对预测问题很重要，那么估算多个时间步长的权重更新梯度的模型应该比使用单个时间步长的模型获得更好的表现。

## 摘要

在这篇文章中，您发现了LSTM的三个关键功能，这些功能为该技术提供了强大的功能，以及如何根据您自己的序列预测问题测试这些属性。

特别：

*   如何测试模型是否在输入数据中利用顺序依赖性。
*   如何测试您的模型是否在LSTM模型中利用内存。
*   如何在拟合模型时测试模型是否正在利用BPTT。

你有任何问题吗？
将您的问题发布到下面的评论中，我会尽力回答。