张量网络MPS在时间序列分析中的应用:原理、实践与可解释性

张量网络MPS在时间序列分析中的应用:原理、实践与可解释性 1. 项目概述当张量网络遇见时间序列作为一名长期在数据科学和机器学习交叉领域摸爬滚打的从业者我见过太多模型在复杂时序数据面前“折戟沉沙”。时间序列数据无论是来自医疗传感器、金融市场还是天文望远镜其核心魅力与挑战都源于其内在的复杂相关性——一个时刻的值不仅与邻近时刻紧密相连还可能受到遥远过去事件的深远影响。传统方法如ARIMA在处理线性、短程依赖时尚可一战但面对非线性、长程关联时往往力不从心而深度学习方法如LSTM、Transformer虽然强大却常常因其“黑箱”特性让使用者心存疑虑尤其是在医疗诊断、能源预测等对可解释性有严苛要求的领域。近年来一个源于量子物理领域的工具——矩阵乘积状态正悄然改变着这一局面。MPS本质上是一种张量网络它通过一种巧妙的低秩分解方式来高效表示高维概率分布。想象一下你要描述一个由100个相互关联的变量构成的系统其联合分布的空间维度是天文数字。MPS的核心思想是将这个庞大的联合分布近似表示为一系列较小张量的乘积这些张量通过“键”维度相连。只要数据的内在关联不是完全随机的即具有某种“可压缩性”MPS就能以多项式而非指数级的复杂度来捕捉和存储这些关联。这就像用乐高积木搭建复杂结构而不是雕刻一整块巨石前者在表示复杂性和计算可行性之间取得了精妙的平衡。本文要介绍的MPSTime正是将MPS这一强大工具系统性地应用于时间序列分析的首次尝试。它不再将时序分析视为孤立的任务分类归分类填补归填补而是从一个更本质的视角出发学习时间序列背后的完整联合概率分布。一旦我们拥有了这个分布的压缩表示即训练好的MPS模型许多下游任务——如判断一段心电信号属于哪种心律分类、或补全因传感器故障缺失的发电量数据填补——都可以在这个统一的概率框架下优雅地解决。这种方法的价值不仅在于其性能在多个真实数据集上已证明可与前沿方法竞争更在于其内在的可解释性。模型的“知识”被明确地编码在张量的数值和结构如纠缠熵中我们可以像分析物理系统一样去探究模型中哪些时间点之间的关联最强这对于理解数据生成机制至关重要。接下来我将深入拆解MPSTime的整个工作流程从核心思想、数据编码、模型训练到具体的分类与填补算法实现并分享在实际复现和调优过程中的关键技巧与避坑指南。2. 核心原理从量子态到概率分布的桥梁要理解MPSTime首先需要建立两个看似遥远领域之间的概念映射量子多体物理中的波函数与时间序列分析中的联合概率分布。2.1 核心映射时间序列作为“多体系统”在量子物理中一个由T个粒子组成的系统其状态由一个波函数Ψ(s₁, s₂, ..., s_T)描述它给每个可能的粒子构型s分配一个概率幅。根据玻恩定则观测到该构型的概率密度就是波函数模的平方p(s) |Ψ(s)|²。这个波函数编码了系统在所有可能状态上的完整联合概率分布。在MPSTime的框架下我们将一个长度为T的时间序列实例x (x₁, x₂, ..., x_T)类比为这个多体系统的一个特定“构型”。其中每一个时间点上的观测值x_t就相当于一个粒子的“状态”。那么时间序列数据所服从的、未知的生成过程就对应着一个“数据波函数”Ψ(x)它的模平方 |Ψ(x)|² 给出了产生这个时间序列实例的概率密度。这个视角的转变至关重要它将一个统计学问题重新表述为一个我们已有强大工具张量网络去近似和压缩高维函数的问题。2.2 MPS联合概率分布的压缩表示直接存储或操作一个T维的连续函数Ψ(x)是计算上不可行的维度灾难。MPS提供了解决方案。它将这个庞大的波函数近似表示为一系列局部张量{A¹, A², ..., A^T}的乘积求和Ψ(s₁,..., s_T) ≈ Σ_{α} A¹_{α₁} A²_{α₁,α₂} ... A^T_{α_{T-1}}这里的s_t代表第t个时间点被编码后的离散状态索引α是连接相邻张量的“键”索引。键维度χ是这个表示的核心超参数它控制了模型的表达能力和复杂度。χ越大模型能捕捉的相关性越复杂但计算开销也越大。MPS的巧妙之处在于对于具有局部或衰减关联的一维系统许多物理系统和时间序列正是如此一个较小的χ就足以高精度地近似真实波函数。注意这里有一个关键但易混淆的点。在原始量子语境中MPS近似的是波函数Ψ。而在我们的概率建模中我们最终需要的是概率p(x) |Ψ(x)|²。因此在MPSTime的实现中我们通常直接训练一个能给出|Ψ(x)|²的MPS或者等效地训练一个MPS来表示Ψ但在计算概率时显式地平方。这涉及到模型归一化的处理是保证概率解释正确的关键。2.3 数据编码连接连续值与离散张量的纽带时间序列数据x_t是连续值而MPS处理的是离散索引s_t。因此我们需要一个编码映射φ将每个实数值x_t映射到一个d维的向量φ(x_t) [b₁(x_t), b₂(x_t), ..., b_d(x_t)]。这相当于为每个时间点准备了一个d维的“特征向量”。整个时间序列的编码就是所有时间点特征向量的张量积Φ(x) φ(x₁) ⊗ φ(x₂) ⊗ ... ⊗ φ(x_T)。这个巨大的张量维度为d^T生活在指数大的希尔伯特空间中而MPS的目标就是高效地近似与数据分布对应的、在该空间中的某个“方向”。编码函数b_i的选择需要满足正交归一化条件以保证概率解释的完整性。MPSTime默认采用勒让德多项式作为基函数。勒让德多项式在区间[-1, 1]上是正交归一的非常适合将归一化后的数据映射到这个区间。d的选择物理维度是另一个关键超参数d越大对连续值的分辨能力越强但每个局部张量A^t的尺寸也会变大从d×χ×χ变为d×χ×χ。在实践中d通常不需要太大论文中用到20-160因为MPS通过键维度χ来捕捉跨时间的复杂关联而单个时间点内部的精细结构由编码函数本身的分辨率决定。在编码前必须对原始数据进行预处理将其值域映射到[-1, 1]。对于分类任务论文采用了一种稳健的sigmoid变换再接最小-最大归一化以减少异常值的影响。而对于填补任务为了在解码回原始域时最小化失真仅使用简单的线性最小-最大归一化。这是实践中一个非常重要的细节预处理方式需与任务目标匹配。3. MPSTime模型训练从数据中学习概率分布拥有了编码框架和MPS表示下一步就是从数据中“学习”出那个最能解释观测数据的联合概率分布。这个过程就是训练MPS模型的参数即所有张量A^t的条目。3.1 损失函数最小化负对数似然训练的目标是让MPS模型给出的概率分布p(x)尽可能接近真实数据分布q(x)。衡量两个分布差异的常用指标是KL散度。由于真实分布q(x)未知我们转而最小化在训练集{ x_n }共N个样本上的平均负对数似然L_G -1/N Σ_{n1}^N log p(x_n)其中p(x_n) |W · Φ(x_n)|²W代表整个MPS即所有张量收缩后的结果。最小化负对数似然等价于最大化模型分配给观测数据的概率是生成式建模的标准方法。对于多分类任务我们需要为每个类别学习一个分布。一种高效的做法是构建一个“带标签”的MPS即在某个站点通常是最后一个附加一个L维的标签索引l其中L是类别数。此时MPS表示为W^l_{s1,...,sT}。损失函数变为所有类别的对数似然之和L -1/N Σ_{n1}^N Σ_{l1}^L log |W^l · Φ(x_n)|²在训练时对于属于类别c的样本我们期望其与W^c的重叠概率最大而与其他W^{l≠c}的重叠最小。这种统一框架使得生成式建模单类和判别式建模多类可以无缝衔接。3.2 优化算法DMRG启发的扫掠优化直接优化整个MPS的所有参数是困难的。MPSTime采用了源于密度矩阵重整化群DMRG的扫掠优化算法。这是一种局部优化方法其核心思想是每次只优化MPS中相邻的两个张量合并为一个“键张量”B固定其他所有张量。初始化与正则化随机初始化所有张量并将MPS转换为左正则形式。这有助于数值稳定性。合并与更新从最右端开始合并两个相邻张量形成键张量B。计算损失L关于B的梯度对于复数值编码使用Wirtinger导数然后沿梯度反方向更新BB B - η * (∂L/∂B) / |∂L/∂B|其中η是学习率。分解与截断将更新后的B进行奇异值分解SVD并只保留前χ_max个最大的奇异值及其对应的向量。这一步是MPS压缩的关键它控制了模型的有效复杂度。将分解后的左右矩阵乘以奇异值根号重新作为两个张量并确保标签索引随着扫掠在MPS中移动。迭代扫掠重复步骤2-3从左到右、再从右到左地遍历整个MPS链。一次完整的来回称为一次“扫掠”。持续进行直到损失函数收敛。这个过程非常类似于深度学习中的坐标下降法但充分利用了MPS的一维链式结构效率很高。一个实用的技巧是在训练初期使用较小的初始键维度χ_init并在扫掠过程中逐渐增加直到达到预设的χ_max这被称为“热身”阶段有助于找到更好的优化路径。4. 时间序列分类基于概率重叠的判别一旦我们为每个类别训练好了一个MPS模型或者一个集成了标签的MPS分类就变得非常直观。其核心思想是贝叶斯分类给定一个未标记的时间序列x计算它属于每个类别c的后验概率。在MPSTime的框架下这归结为计算该时间序列编码后的状态Φ(x)与每个类别MPSW^c的“重叠”的平方即p(x|c) |W^c · Φ(x)|²。如果假设各类别先验概率相同那么直接将x分配给使其p(x|c)最大的那个类别c即可。从计算图上看这相当于将编码后的输入张量Φ(x)一个巨大的乘积态与训练好的MPS张量网络进行收缩求内积。得益于MPS的有效表示这个看似指数复杂的计算可以通过一系列顺序的矩阵乘法高效完成复杂度与T和χ_max的多项式相关。实操心得在实现分类时直接比较|W^c · Φ(x)|²的数值可能因为量级过小而产生下溢。更稳健的做法是计算对数概率log p(x|c) 2 * log |W^c · Φ(x)|。此外MPS分类器的一个显著优势是它天然地提供了属于每个类别的“概率”而不是一个硬判决这在许多需要不确定性量化的应用如医疗辅助诊断中非常有用。5. 时间序列填补基于条件采样的生成填补即根据已知部分推测缺失部分是MPSTime生成能力的直接体现。其算法基于概率图模型中的条件采样思想流程清晰且优雅。5.1 算法步骤详解假设我们有一个时间序列x*其中索引集O对应的值{x_o}是已知的观测值索引集M对应的值{x_m}是缺失的。目标是推断最可能的{x_m}。条件化首先将训练好的、代表完整联合分布p(x₁,..., x_T)的MPS模型用已知观测值进行“条件化”。在张量网络语言中这相当于将已知时间点对应的物理索引“固定”到其观测值编码后的特定基态上。操作上就是将MPS中对应站点s_o的张量与编码向量φ(x_o)进行缩并。这个过程产生了一个“缩减”的MPS它现在表示的是已知观测值条件下剩余缺失变量的联合条件概率分布p({x_m} | {x_o})。顺序采样与估计接下来我们需要从这个条件分布中采样出缺失值。一个直接的方法是联合采样但计算复杂。MPSTime采用了一种贪婪的、顺序的确定性方法考虑第一个缺失的时间点m₁。我们从条件分布p(x_{m₁} | {x_o})中估计其值。这个分布是通过对条件化后的MPS在除m₁之外的所有其他缺失站点上求迹求和得到的单点约化密度矩阵ρ_{m₁}来描述的。概率密度函数为 pdf(x) φ(x)† ρ_{m₁} φ(x)。我们不是随机采样而是取这个分布的中位数作为x_{m₁}的估计值。论文强调由于有限维编码会引入分布展宽中位数估计比直接采样更稳健能减少误差。投影一旦估计出x_{m₁}我们就像处理观测值一样将MPS进一步条件化到这个估计值上。也就是说我们将m₁站点也固定到φ(x_{m₁})。迭代用更新后的MPS现在条件于{x_o}和已估计的x_{m₁}重复上述过程估计下一个缺失点x_{m₂}如此循环直到所有缺失值都被填补。这个过程如图3所示像剥洋葱一样一层一层地确定缺失值。顺序通常按照时间先后进行这符合“链式法则”的概率分解。5.2 不确定性的量化一个优秀的填补算法不仅能给出点估计还应提供不确定性信息。MPSTime在这方面有天然优势。对于每个待填补点x_m我们得到了其完整的条件概率密度函数pdf(x)。从这个分布中我们可以轻松计算估计值中位数稳健估计。不确定性区间例如计算16%和84%分位数得到一个类似“1-sigma”的置信区间。离散度度量使用加权中位数绝对差WMAD作为标准差的一种稳健估计。这种能力是许多黑箱深度学习模型所不具备的它为决策提供了至关重要的信心度量。6. 实战从合成数据到真实世界挑战理论再优美也需要实战检验。MPSTime论文在合成数据和多个真实数据集上进行了验证。这里我结合自己的理解复现并拓展其中的关键实验环节。6.1 合成数据验证捕捉已知相关性首先用合成数据测试是金标准。我们可以生成来自已知随机过程的时间序列例如自回归过程x_t 0.8*x_{t-1} ε_t检验模型捕捉一阶马尔可夫依赖的能力。正弦波加噪声检验模型对周期性结构的建模能力。具有长程依赖的过程如分数阶高斯噪声检验MPS在较大χ下捕捉长程关联的潜力。在实验中用MPSTime学习这些数据的分布然后进行填补和生成新样本。通过计算填补值与真实值的均方根误差RMSE以及生成样本的统计特性如自相关函数与真实数据的匹配度可以定量评估模型性。通常会发现对于线性依赖较小的χ_max如10-20就足够了而对于更复杂的非线性或长程依赖需要更大的χ_max如50-100。6.2 真实数据集应用论文展示了在三个领域的应用我将其核心发现和实操要点总结如下数据集领域任务数据特点MPSTime关键表现与技巧医学EEG分类癫痫发作检测高维、噪声大、类别不平衡性能与CNN、RNN相当。关键需对信号进行适当的滤波和分段编码维度d不宜过大以免引入噪声。利用MPS的可解释性分析判别性最强的脑电通道和时间段。能源电力负荷填补传感器缺失强周期性日、周、年、存在突变在随机缺失和连续块缺失场景下性能优于线性插值和KNN。关键必须进行周期对齐和去趋势预处理。填补顺序时间顺序对结果有影响对于连续大段缺失可能需要结合前后文进行双向平滑。天文恒星光变曲线分类恒星类型与填补不规则采样、存在观测间隙、信噪比低展示了统一框架的价值先用完整数据训练分类模型同一模型可直接用于填补有间隙的新数据再分类。关键对于不规则采样需先重采样为均匀序列。编码前的归一化区间选择对性能敏感。实操心得在真实数据上应用MPSTime数据预处理和编码方案的选择往往比模型超参数调优更重要。对于具有趋势和季节性的数据先使用STL分解等方法去除趋势和季节性成分再用MPSTime对残差建模效果会好很多。此外χ_max和d之间存在权衡增加d能提高单个时间点的分辨率但会增大计算量增加χ_max能捕捉更复杂的跨时间关联。通常建议先从较小的值如d20, χ_max20开始根据验证集上的对数似然或任务特定指标如分类准确率、填补误差逐步增加。7. 模型可解释性超越黑箱的洞察MPSTime相较于深度学习模型的一大优势是其可解释性。训练好的MPS不仅仅是一个预测函数它本身就是所学联合概率分布的一个显式、结构化的表示。我们可以通过分析MPS的张量来获得洞察。7.1 纠缠熵与互信息在量子物理中纠缠熵是衡量系统两部分之间关联强弱的度量。在MPSTime的语境下我们可以类似地定义“纠缠熵”将时间序列在某个时间点t切开分为过去和未来两部分。计算该切点处MPS键的冯·诺依曼熵这个熵值量化了“过去”与“未来”之间的统计依赖性。高熵意味着该时间点是信息流动的关键枢纽前后关联紧密低熵则意味着该点前后相对独立。通过计算每个可能切点处的纠缠熵我们可以绘制一条“熵曲线”从而识别出时间序列中关联结构发生变化的临界点。例如在心电信号中这可能对应着P波、QRS波群等关键特征波的边界在股票数据中可能对应着重大消息发布或市场结构转变的时刻。与此相关的经典概念是互信息。理论上在MPS表示的分布下两点之间的互信息也可以从约化密度矩阵中计算出来。这为我们提供了一种直接可视化时间序列内部依赖关系图景的工具。7.2 条件采样与分布外检测通过条件采样我们不仅可以做填补还可以进行“反事实推理”或分布外检测。例如我们可以问“如果前10个时间点的值被强制设定为某个异常模式分布外模型对后续值的预测会变得多么不确定” 通过观察条件分布pdf(x)的展宽方差急剧增大模型实际上是在“警告”我们当前的观测与它所学的正常模式不符。这种基于模型置信度的异常检测比许多基于重构误差的方法更具理论依据。8. 常见问题、调优指南与避坑实录在实际复现和应用MPSTime的过程中会遇到一系列典型问题。以下是我总结的排查清单和经验技巧。8.1 训练不收敛或效果差问题损失函数震荡或下降缓慢最终模型性能不佳。排查与解决学习率η这是最常见的元凶。DMRG扫掠优化对学习率敏感。尝试使用衰减学习率策略例如每10个扫掠周期乘以0.9。初始值通常在0.1到0.01之间试探。初始化确保MPS张量初始化是随机的并且经过左正则化。糟糕的初始化可能陷入局部最优。编码与预处理检查数据是否被正确归一化到[-1, 1]。超出此范围的值在勒让德多项式编码下会得到极端的特征向量导致训练不稳定。尝试不同的预处理方法如Z-score标准化后再缩放或更稳健的分位数缩放。键维度χ_maxχ_max太小会导致模型欠拟合无法捕捉数据中的相关性。逐步增加χ_max观察训练损失和验证损失的变化。当验证损失不再显著下降时可能已接近合适容量。物理维度dd太小会导致信息在编码阶段丢失过多尤其是对于波动剧烈的数据。尝试增大d但注意计算量随d线性增长。数据量MPS作为生成模型需要足够的数据来学习可靠的分布。如果数据量很少考虑使用更简单的模型或通过数据增强如加噪、缩放、切片来增加训练样本。8.2 填补结果有系统性偏差问题填补出的序列在整体水平或趋势上与上下文不符。排查与解决填补顺序MPSTime默认按时间顺序填补。对于缺失块位于序列中间的情况这种单向依赖可能不是最优的。可以尝试简单的改进先从左到右填一遍再从右到左填一遍然后取平均。更复杂的方法可以设计双向扫描算法。中位数 vs 均值论文使用中位数作为点估计。对于对称分布中位数和均值相近对于偏态分布中位数更稳健但可能不是最小化均方误差的最优估计。可以根据任务目标和对误差的敏感性进行选择。解码误差从编码域[-1,1]映射回原始数据域时边界处的值可能因为编码/解码的非线性而产生扭曲。确保在归一化时在训练集最大值最小值上留有一定余量如5%避免测试集或填补值触及边界。8.3 计算速度慢或内存占用高问题处理长序列或大χ_max/d时训练或推断耗时过长。排查与解决序列长度TMPS计算复杂度与T呈线性但与χ_max呈三次方关系。χ_max是影响计算的主要因素。首先考虑是否能用更小的χ_max达到可接受的性能。批处理在计算训练损失时可以对多个样本进行批处理利用线性代数库的优化来加速张量收缩。截断误差在SVD分解步骤除了保留前χ_max个奇异值还可以设定一个截断误差阈值ε如1e-10只保留满足条件的奇异值。这可以在不影响精度的情况下动态降低有效键维。使用GPU主要的张量操作矩阵乘法、SVD可以受益于GPU加速。确保你的实现如使用PyTorch、JAX或Julia的GPU后端支持GPU计算。8.4 与深度学习模型的对比思考MPSTime并非要取代深度学习而是提供了一个有竞争力的替代方案尤其适用于以下场景数据量中等深度学习通常需要海量数据而MPS在小到中等规模数据上几百到几千条序列往往就能表现良好。可解释性要求高需要理解模型决策依据或数据内部依赖结构的领域。需要不确定性量化模型能直接提供预测的概率分布。统一框架需求希望用一个模型同时解决生成填补、预测和判别分类任务。然而对于超长序列如数万时间点MPS的链式结构可能成为限制因为远程依赖需要较的χ_max来维持计算成本激增。此时结合局部注意力机制或层次化MPS结构可能是未来的研究方向。最后分享一个在复现时遇到的“坑”最初实现编码函数时我直接使用了numpy.polynomial.legendre.legval来计算勒让德多项式值。后来发现对于接近边界如-0.999的输入高次多项式会导致数值不稳定非常大或非常小的值。解决方案是使用递推关系来稳定计算勒让德多项式值并确保编码向量在数值上保持良好条件数。这个细节对训练的稳定性有显著影响但在很多开源实现中容易被忽略。模型的强大能力始于这些扎实的数值基础每一处细节的打磨都让概率分布的表达更加精确也让从量子物理中借来的智慧在时间序列的土壤里扎得更深。