许多机器学习任务处理的数据中,特征的顺序不一定具有主要意义。例如,在图像分类任务中,虽然像素的空间排列是卷积神经网络(CNN)等模型的核心要素,但输入处理的时间顺序通常不是主要考虑因素。与此不同的是,序列数据代表了一种不同但普遍存在的数据类型,其中时间顺序是基础。在序列数据中,顺序不仅仅是偶然的;它对所传达的信息是根本性的。序列中的每个元素都与之前的元素相关,并且通常会影响其后的元素。试想一下对语言的理解:句子“狗咬人”与“人咬狗”的含义截然不同,尽管它们包含完全相同的词。序列非常重要。序列数据有何特点?序列数据由其有序性决定。我们可以将序列表示为 $X = (x_1, x_2, ..., x_T)$,其中 $x_t$ 是时间步或位置 $t$ 的元素,$T$ 是序列的长度。这种结构以多种形式出现:文本数据: 书面或口语本质上是序列化的。词构成句子,句子构成段落,顺序决定了语法和意义。例子包括预测句子中的下一个词、对评论的情感进行分类,或在语言之间翻译文本。时间序列数据: 随时间采集的测量值构成序列。例子包括每日记录的股票价格、每小时的气象读数(温度、湿度)、机器的传感器数据,或患者心率监测(心电图信号)。时间关系是其决定性特征。音频数据: 声音被数字化表示为随时间变化的振幅值序列。语音识别、音乐生成和声音事件检测都对序列音频信号进行操作。视频数据: 尽管单个帧是图像,但视频是这些帧的序列。理解视频中的动作需要处理这种时间序列。生物序列: DNA和蛋白质序列是核苷酸或氨基酸的序列,其中顺序决定了生物功能。{"layout": {"title": "时间序列数据示例", "xaxis": {"title": "时间步"}, "yaxis": {"title": "数值"}, "template": "plotly_white", "height": 350, "width": 600}, "data": [{"type": "scatter", "mode": "lines", "x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "y": [0.0, 0.59, 0.95, 0.95, 0.59, 0.0, -0.59, -0.95, -0.95, -0.59, 0.0, 0.59, 0.95, 0.95, 0.59, 0.0, -0.59, -0.95, -0.95, -0.59, 0.0], "line": {"color": "#228be6"}}]}一个简单的时间序列,其中每个点的值通常遵循由先前点确定的模式。序列数据带来的挑战与静态、固定大小的输入相比,有效处理序列数据带来了独特的挑战:长度可变: 序列的长度通常不同。句子可长可短,时间序列可覆盖不同时长。标准前馈网络通常期望固定大小的输入向量。模型如何优雅地处理这些变化的长度?顺序依赖性: 模型必须理解顺序很重要。简单地打乱序列元素可能会完全改变其含义或使数据失效。模型需要机制来按给定顺序处理元素。长距离依赖: 有时,序列中相距较远的元素之间存在关联。例如,在句子“那只追逐偷奶酪老鼠的猫,正在睡觉”中,动词“正在”依赖于主语“猫”,而“猫”出现得早得多。同样,天气数据中的季节性模式代表了长距离时间依赖。捕获这些关系需要一个具有某种形式记忆的模型。为什么标准网络表现不足到目前为止,我们构建的前馈神经网络,包括全连接网络,甚至将标准CNN简单应用于序列时,并非天生就擅长处理这些挑战。全连接网络: 全连接网络同时处理其整个输入向量。如果我们展平一个序列并将其输入,网络会或多或少独立地处理每个时间步的特征,从而丢失重要的顺序信息。此外,它需要固定输入大小,使得可变长度序列的处理成为问题。卷积网络 (CNNs): 尽管一维CNN可以用于序列,并且在捕获局部模式(如特定词组合或时间序列中的短期趋势)方面有效,但其固定的核大小使得在序列中捕获任意长距离的依赖变得困难,除非使用非常深的网络架构或大的膨胀率。为了应对顺序依赖、可变长度以及可能的长距离依赖的特定需求,我们需要一种不同类型的神经网络架构。这就是循环神经网络(RNNs)发挥作用的地方。它们被明确设计用于处理序列,维护一个内部状态,使得来自先前步骤的信息能够影响当前步骤的处理,从而提供一种对于理解序列模式不可或缺的记忆形式。在接下来的章节中,我们将研究RNN如何实现这一点。