LLM自学基础:时间序列数据与序列建模
在讨论序列模型之前,简要概述人工智能模型训练和推理的基础方法是有益的,特别是关于时间序列数据的处理。
人工智能训练和推理方法的简要概述
为解决复杂的现实问题,人工智能通常会将输入数据转化为数学表征形式。例如,将数据映射到特定维度坐标系中的数字、向量或矩阵。如图1所示,这些经过转换的数据表征能帮助建立决策边界,从而根据可识别的模式将输入数据划分到不同类别。训练过程实质是AI模型在参数空间中探索,通过优化决策边界来提升其清晰度与有效性;而推理则指根据既定决策边界判定新输入数据的类别,其准确性通过模型预测结果与实际结果的相似度来衡量。
在人工智能模型训练过程中,确定决策边界涉及通过一种称为损失函数
的指标来衡量预测结果与真实值的差异。最佳的决策边界会最小化这种损失,从而实现高推理精度并有效解决现实世界的问题。然而,随着现实世界的问题变得越来越复杂,在低维空间中清晰地分离数据组变得具有挑战性。
在人工智能模型训练过程中确定决策边界,需要通过衡量预测结果与真实值之间的差异来实现,这一衡量标准称为损失函数
。最优的决策边界能使损失值最小化,从而获得较高的推理准确率,最终有效解决现实问题。然而随着现实问题复杂度的提升,在低维度空间内清晰划分数据组别变得愈发困难。如图1a所示,二维平面(2D)在理想情况下可以用简单的线性边界区分两个组别,但实际场景中如此简单的情况非常罕见。为解决这个问题,AI模型会将参数空间拓展到更高维度,如图1b和1c所示的3D和4D,从而更清晰精确地表征复杂数据。虽然示意图仅展示了有限维度,但现代大规模AI模型使用的参数空间可达数十亿至数万亿维度。这种超大规模的参数空间虽然极大增强了模型解决以往棘手问题的能力,但也显著提升了内存与通信需求。
定义有效的决策边界还需要对损失函数
的特性和作用有所了解。如前所述,常用的”损失函数”包括均方误差损失
和交叉熵损失
。如图2所示,AI模型训练的目标是调整模型参数,使损失函数达到其最小值。然而,即使数据表示的维度可以被最佳确定,AI模型中大量的参数常常使得通过解析方法找到精确的最小值变得不切实际。因此,诸如梯度下降
等近似算法被广泛采用。梯度下降从任意初始参数值开始,根据梯度信息迭代更新这些参数,向较低的损失值方向移动。当梯度为零时,算法终止,这表明达到了损失函数的最小值。
梯度下降是一种优化算法,用于最小化深度学习模型的
损失函数
。它通过迭代调整模型参数(如权重和偏置),沿着损失函数梯度的反方向移动,使损失逐步减小,从而优化模型性能。梯度下降是神经网络(包括LLM)训练的核心,广泛用于前馈网络、RNN、Transformer等。
尽管梯度下降法效果显著,但仍存在一些局限性。其中关键在于步长(即参数调整幅度)的设定:步长过大会越过极值点,步长过小则会延缓收敛速度。此外,从随机初始点开始搜索可能导致算法收敛于局部最小值而非全局最小值。为克服这些缺陷,研究者开发了随机梯度下降(SGD)
和自适应矩估计(Adam)
等多种优化技术,通过动态调整步长和搜索方向来提升性能。需要注意的是,这些优化方法虽然形式各异,但根本目标都是通过调整模型参数使损失函数达到最小值,这与人工智能训练的整体目标完全一致。
早期实现及其局限性:循环神经网络。
在实际的人工智能应用中,输入数据涵盖图像、音频、视频和文本等多种模态。尽管存在这些差异,许多现实世界的数据集都具有时间或序列特征,这使得它们能够被泛化并作为时间序列数据进行分析。如图3a所示,将不同类型的输入数据转化为结构化数值序列,可使AI模型捕获对精准预测和复杂决策至关重要的时序依赖关系。序列建模技术正是为处理这类结构化序列而发展起来的专门方法。
一种旨在满足这一需求的有影响力的模型是序列到序列(Seq2Seq)框架。该框架于2014年推出,至今仍然是许多高级序列建模方法的基础,具有根本性的重要意义。具体而言,编码(Encoding)、排序(Ordering)和解码(Decoding)的概念——这些对于理解 Seq2Seq 至关重要——在图3b中示意,并在以下进行解释说明:
- 编码:编码器(“投影压缩”)将输入序列压缩成简明的数值表示,称为潜在向量。这些向量能够捕捉数据中的重要上下文和时间关系,从而促进高效的序列分析。
- 排序:在内部处理过程中保持顺序(即“顺序处理”)确保每个步骤都包含前序元素的上下文。这种排序方式保证了生成结果的连贯性和准确性
- 解码:解码器(”向上投影”)将这些内部表示重构为可理解的输出序列。它利用包含丰富上下文的潜在向量来生成连贯的输出,例如翻译、摘要或预测性预报
标准Transformer架构的阶段(以seq2seq模型为例,如机器翻译或LLM的encoder-decoder结构):
- 编码(Encoding)阶段:处理输入序列(如prompt或源文本),将其转换为高维表示(embeddings)和上下文向量。通常使用自注意力(self-attention)机制计算所有token间的关系。这阶段是并行的,可以获取全局上下文
- 计算阶段:在Transformer中,“排序”是指注意力机制中的键-值查询(Key-Value-Query)计算,或序列排序/对齐的过程。这个过程不是一个独立阶段,而是编码/解码的一部分:注意力层通过softmax对查询与键的点积进行“排序”(加权求和),获取上下文权重
- 解码(Decoding)阶段:基于编码器的输出和先前生成的token,自回归地(autoregressively)产生输出序列。这阶段是串行的,每个新token依赖前一个。
Seq2Seq模型中的编码器-解码器框架能够处理不同长度和复杂度的序列。编码器通过将整个输入序列压缩为简洁的内部表示,确保上下文信息和时序特征得以保留;解码器则利用这些表征生成准确连贯的输出序列,在复杂数据模式与人类可解释性之间架起桥梁。得益于这种结构化方法,Seq2Seq模型已成为语言翻译、文本摘要、语音识别、异常检测和预测分析等多种实际任务的高效工具。
Seq2Seq模型的初始实现依赖于循环神经网络(RNN),因为RNN天然适合处理序列数据。如图4a所示,在基于RNN的Seq2Seq架构中,编码器的主要作用是读取和理解输入序列,正如前面所解释的。编码器通过依次处理每个数据点并维持一个称为隐藏状态的内部记忆来实现这一点,隐藏状态概括了之前所见数据点的基本上下文。在每一步,编码器通过涉及非线性函数(如tanh和ReLU)的数学运算将当前数据点与之前的隐藏状态结合。这些非线性函数使网络能够捕捉数据中复杂和非线性的关系。如果没有这些非线性变换,网络在建模序列数据中的复杂模式和时间依赖性方面的能力将受到限制。这种顺序更新使编码器能够保留来自所有先前数据点的基本上下文和信息,逐步将整个输入序列总结为一个压缩的、有意义的内部表示。
如图4b所示,一旦编码器完成压缩序列的任务,解码器会将概括的表示重构为可理解且结构化的输出序列。解码器通过按顺序生成输出数据点来实现这一功能,不仅使用压缩后的隐藏状态表示,还将之前生成的输出作为每个后续步骤的输入。为了进行这种重构,解码器采用了全连接(FC)层。这些FC层是专门设计的神经网络层,用于将抽象和压缩的内部表示映射回可理解的现实世界输出。每一层都将内部信息转换为更清晰、更具体的形式,使解码器能够生成准确且连贯的序列,例如翻译、摘要或预测。
尽管RNN基础的Seq2Seq模型最初取得了成功,但不幸的是,它们面临着严重的局限性,图4c展示了这些局限性。一个突出的挑战是“梯度消失问题”,即在训练过程中,早期序列元素的信息逐渐减弱,削弱了模型捕捉长距离依赖关系的能力。简单来说,这类似于人类遗忘旧记忆或健忘的现象。此外,由于RNN本身具有的序列性质,它们无法充分利用并行计算技术,限制了其可扩展性和计算效率。这些限制促使了更先进架构的开发,这些架构旨在通过增强长距离上下文保留能力和支持并行计算来克服RNN的不足。
梯度消失(Vanishing Gradient Problem)发生在训练阶段的反向传播(backpropagation)过程中,而不是模型的编码/解码运行时。简单说:梯度是损失函数对权重的偏导,用于更新权重。如果梯度太小(接近0),权重无法有效调整,模型学不到东西
- 前向传播是神经网络在推理(inference)或训练时,从输入到输出的计算过程。它将输入数据(input)通过网络的各层(layers),经过权重、偏置、激活函数等操作,生成输出(prediction)。这是神经网络的核心执行流程,无论是前馈网络(Feedforward Neural Network)、RNN、还是Transformer(如LLM)。直观理解:想象输入数据像水流,从网络的输入层流到输出层,逐层“加工”(矩阵运算、激活函数),最终得到预测结果
- 反向传播是神经网络训练过程中,用于计算梯度并更新权重的算法。它基于链式法则(Chain Rule),从输出层的损失开始,逆向计算每一层权重对损失的偏导数(梯度),然后用优化器(如SGD、Adam)更新权重以最小化损失。直观理解:如果前向传播是“从输入到输出”,反向传播是“从损失到输入”,把误差信号反向传递,告诉每一层“如何调整”权重
注意力机制的整合
为了克服传统RNN架构的局限性,特别是梯度消失问题和较差的可扩展性,研究人员引入了注意力机制,这标志着序列建模的一次重大演进。注意力的基本思想是允许模型在生成输出序列的每个元素时,专注于输入序列中最相关的部分。与将整个输入序列压缩成一个固定大小的隐藏状态不同(如传统RNN中所做的那样),注意力机制保持对编码器产生的所有隐藏状态的访问,并根据它们与当前解码步骤的相关性有选择地分配权重。
如图5a所示,在每个解码时间步,注意力机制计算解码器当前隐藏状态与每个编码器隐藏状态之间的相似度分数。这些分数随后被归一化以产生注意力权重,通常使用softmax函数。解码器使用这些权重计算编码器隐藏状态的加权和,生成一个上下文向量,该向量捕获输入序列中最相关的信息。然后,这个向量与解码器之前的输出一起用于生成输出序列中的下一个token
。在这里,token
指的是基本的数据单元,例如单词、子词或字符。
这个过程提供了两个主要优势。首先,注意力机制允许模型保留并访问“输入序列中任何部分”的信息,无论其长度如何。通过消除将所有信息压缩成固定大小向量的需求,这种方法解决了梯度消失问题,并为模型提供了基于内容的强大记忆能力,使得在生成输出时能够高效地引用相关的序列元素。其次,注意力机制增强了模型的可解释性。注意力权重指示了模型在生成输出时关注的输入部分,为复杂模型的推理和决策过程提供了直观的见解。
不幸的是,尽管有了这些改进,在RNN中使用注意力机制的模型仍然继承了其底层架构的顺序性计算特性(即:排序)。每个时间步都必须按顺序计算,这限制了利用现代并行处理硬件的能力,也促使了完全基于注意力机制的架构的发展,最终产生了Transformer模型,这一模型重塑了序列建模的格局。