序列数据展现出独特属性,这些属性使其有别于简单机器学习模型中常假定的独立数据点。这些独有特性要求特殊处理,理解它们对于认识到循环神经网络 (RNN) 等架构的必要性和有效性具有主要作用。顺序的重要性也许序列数据最主要的特点是元素顺序有重要影响。不同于描述房屋的特征集合(其中您列出平方英尺、卧室数量和位置的顺序不会改变房屋本身),改变序列中的顺序通常会极大改变其含义或所代表的模式。思考以下两句话:"The cat chased the mouse.""The mouse chased the cat."词语相同,但顺序传达出完全不同的情况。同样,打乱股票每日价格会使数据变得无用,无法预测未来走势,因为时间上的演进关系丢失了。标准前馈神经网络在处理输入时不考虑它们在序列中的位置,因此天生难以处理这一特性。它们缺少理解的机制,即 $t$ 时刻的输入应结合 $t-1$、$t-2$ 等时刻的输入来理解。时间上的关联性与顺序密切相关的一个特点是时间上的关联性。这意味着序列中的元素通常相互关联或依赖于它们之前(有时也包括之后)的元素。这些关联的强度和范围有很大不同。短期关联: 在语言中,相邻词之间的语法一致性(如“the cat sits”)是一种短期关联。当前词强烈依赖于紧接前一个词。长期关联: 思考这句话:“The report on machine learning trends, which was published last month after extensive research across multiple industries, highlights the growing adoption of sequence models.” 动词“highlights”依赖于主语“report”,而主语在句中出现得早得多。捕捉此类长期关联是一个重要的难题。在时刻 $t$ 预测或理解一个元素所需的信息可能在许多步之前就已经出现。简单RNN,如我们稍后将看到,难以在很长的序列上保持信息,这个问题常被称为梯度消失问题。这种学习长期关联的困难促使了LSTM和GRU等更先进架构的发展。这是一个展现时间关联性的时间序列简单示意图。任何给定点的值似乎与其之前的值有关联。{"layout": {"title": "时间序列示意图", "xaxis": {"title": "时间步"}, "yaxis": {"title": "值"}, "showlegend": false, "template": "plotly_white", "margin": {"l": 40, "r": 20, "t": 40, "b": 40}}, "data": [{"x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "y": [10, 11, 10.5, 12, 13, 12.5, 11.5, 11, 12, 13.5, 14, 13, 12, 14, 15, 16, 15.5, 14.5, 15, 16], "mode": "lines+markers", "line": {"color": "#228be6"}, "marker": {"color": "#228be6"}}]}一个序列,其中每个点的值似乎受到前一个点的影响。长度可变不同于每个样本通常具有固定数量特征(例如表格中的列)的结构化数据集,序列通常具有可变长度。句子可长可短,时间序列测量可能覆盖不同时长,音频片段长度不一。这给机器学习模型带来了实际挑战,尤其是在批量处理数据时。标准深度学习框架通常期望批次内的输入张量形状一致。如果您有长度分别为5、10和7的序列,如何有效地将它们组合起来,以便在GPU上进行并行处理?解决此问题常用的方法有:填充: 较短的序列用特殊的“填充”值(通常为零)进行扩充,直到它们达到批次中最长序列的长度。掩码: 模型被告知输入中哪些部分是实际数据,哪些是填充,确保填充值不会不当地影响计算(尤其是在训练期间)。我们将在第8章讨论数据准备时详细介绍这些方法。顺序的重要性、时间关联性和长度可变性这三个特点是理解序列数据的核心所在。它们要求模型能够逐步处理输入,在各个时间步之间保持记忆(状态),并妥善处理不同的序列长度。这为在下一章引入循环神经网络做好了充分准备。