ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

无源域适配遇上多变量时间序列:TERSE如何同时建模时空依赖?

2026/10/7 21:16:24 拓冰建站 浏览量
无源域适配遇上多变量时间序列:TERSE如何同时建模时空依赖? 做时间序列项目的朋友应该都有过这种经历模型在训练集上效果漂亮一换到新设备、新工况、新场景准确率就像坐滑梯一样往下掉。更头疼的是以前做域适配还能把源域数据拉过来一起对齐现在出于数据隐私、合规或者传输成本的原因原始数据根本带不出来手头只有一个训练好的源模型。这就是无源域适配Source-Free Domain Adaptation要解决的问题而多变量时间序列在这个设定下难度还要再翻一翻。KDD 2025 上有一篇名为 TERSE 的工作专门针对这个场景做文章核心思路是同时建模时间依赖和空间变量间依赖。这篇博文我就从问题本身出发把无源域适配为什么难、TERSE 怎么拆解时空依赖、以及这类方法落地时要注意哪些坑一次说清楚。这篇内容适合三类读者正在做故障诊断、行为识别、交通预测等时序任务并且被数据漂移困扰的工程师想快速跟踪 KDD 2025 投稿趋势的研究生还有那些已经试过 TENT、SHOT 等无源适配方法、但发现直接套到自己数据上效果不佳的实践者。看完你至少能回答一个问题TERSE 这类时空双分支 无源适配的设计到底比把图像上的适配方法硬搬到时间序列强在哪里。1. 无源域适配到底在解决什么一场只有模型、没有数据的迁移先把这个场景描述清楚因为它和大部分人熟悉的迁移学习还不完全一样。传统迁移学习或者说传统域适配默认源域数据是可用的做特征对齐的时候可以同时看源域和目标域的分布然后找到共享的特征空间。但无源域适配把源域数据这条通路直接切断——你手里只有源域训练好的模型目标域数据是拿到了可没有任何标签。1.1 传统域适配的源数据依赖痛点我在实际项目里遇到最多的典型情况是这样的给某风场的机组做故障预警历史数据全部来自 A 风场模型训练得非常漂亮误报率很低。现在要部署到 B 风场B 风场的机型略有不同、传感器安装位置不同、环境温度湿度范围也不一样模型直接过去第一天就开始误报。按老思路最稳妥的做法是把 A 和 B 的数据放在一起做域适配重新对齐分布。但问题来了A 风场的数据可能属于另一个业务部门甚至另一家公司合规上根本不允许拷出来。这时候传统域适配就卡住了。更普遍的场景在医疗和物联网设备上。医院 A 的心电数据训练出的疾病筛查模型要部署到医院 B但医院 A 的数据涉及患者隐私只能把训练好的模型参数或者推理服务封装好带过来。类似的情况在工业界也越来越多。这就让一个很实际的需求浮出水面我能不能只用目标域的无标签数据 一个冻结的源域模型完成模型的自我纠偏1.2 为什么只给模型不给数据是更真实的部署场景可能有人会问既然模型都能带过去为什么数据不能带这就要说到现实约束了不是技术上的约束而是业务和合规上的。数据中包含的敏感信息、数据所有权归属、甚至单纯的数据体量都会让物理搬运数据变得不现实。一个中等规模的风场数据集原始传感波形动辄几个 TB传输和存储成本都不低。而模型经过压缩之后可能只有几百 MB分发起来非常方便。从模型分发的角度看无源域适配的设定天然贴合模型即产品的趋势你可以在私有数据上训练模型只发布模型不发布数据。目标域设备的厂商拿到模型之后用自己采集的无标签数据做适配既保护了源域数据方的商业利益也提升了模型在本地的表现。TERSE 这类工作瞄准的就是这个缝隙在源模型可用、源数据不可用的约束下把模型的性能重新拉回来。1.3 无源域适配的完整问题定义这里我把术语收敛一下方便后面展开。给定一个在源域数据上预训练好的模型 F_s它通常包含特征提取器 G 和分类器 H。无源域适配的目标是在无法访问源域数据 X_s 的情况下仅仅利用目标域的无标签数据 X_t通过某种自适应策略更新模型参数使模型在目标域上的预测性能尽量接近理想情况下用目标域标签微调的水平。这个设定下最常见的三条技术路线是熵最小化、伪标签自训练、一致性正则。熵最小化是让模型对目标域样本的预测越来越自信伪标签自训练是用模型自己的预测当监督信号一致性正则是对输入做扰动后要求输出保持稳定。TERSE 本质上也是在这个大框架下做文章只不过它重点处理了多变量时间序列这种特殊结构带来的额外困难。2. 多变量时间序列为什么让无源适配格外棘手如果你之前接触过无源域适配大概率见到的实验都是图像分类Office-Home、VisDA、DomainNet输入是一张张独立的图片。这些任务里模型可以把每个样本当作独立同分布的个体来处理适配算法也基本都是围绕单样本预测设计的。但多变量时间序列完全不是这么回事。2.1 图像上顺手的SFDA套路为什么搬到时序就失灵图像领域的无源域适配方法比如 TENT 通过更新 BatchNorm 统计量来适配目标域SHOT 通过信息熵最小化和伪标签来对齐特征空间它们在图像上很有效。但把 TENT 直接搬到多变量时间序列上我见过不少翻车案例。原因也很直接时间序列的分布漂移并不主要体现在单个时间点上而是体现在时间维度的动态模式和变量之间的联动关系上。举一个我调试过的问题。一段人体活动识别的三轴加速度数据源域是腰部佩戴传感器采集的目标域是手腕佩戴采集的。单纯看某个时间点的加速度数值两个域的分布差异并不大但加速度信号的周期性、幅值波动模式、以及三轴之间的相关结构完全不同。TENT 这类方法只调整归一化统计量本质上是在修特征分布的均值方差根本没有能力修动态模式的偏移。这就是为什么图像上的无源适配方法在时序上表现平平不是它们不优秀而是它们的假设不匹配数据的结构。2.2 时间依赖漂移藏在动态里不在静态特征上多变量时间序列的每个变量本身是一条随时间变化的轨迹它的特征往往要放在时间上下文里才有意义。同样是传感器读数的波形它的趋势、周期、突变频率才是故障识别的关键。无源适配如果只考虑样本点就会丢掉这些信息。具体来说时间依赖可以从几个层次去理解。首先是短期依赖当前时刻的值和前几个时刻的值高度相关比如工业过程中的温度惯性其次是长期依赖比如交通流量每天呈现出早晚高峰的周期性规律这种周期结构可能在目标域里发生了相位偏移或者幅度缩放。域漂移可以发生在任意一个层次上。TERSE 这类工作的价值在于适配的时候不是拿孤立的时间步去对齐而是拿一段时序的完整动态模式去对齐同时再用空间维度补充变量间的交互信息。2.3 空间依赖变量间的联动关系同样会说变就变多变量时间序列的多变量三个字有时候会被低估。很多实践者会把 P 个变量当成 P 条独立的时间序列分开处理每一条单独提取特征最后拼起来。但这个处理方式忽略了一个关键点变量之间往往存在依赖关系而且这个依赖关系本身就可能发生域偏移。我用一个工业场景来说明。监测一个压缩机系统传感器同时记录温度、压力、振动、电流。正常情况下压力升高时温度也会跟着升高振动频率和电流负载之间有强相关。当设备老化或者更换了某个部件之后变量与变量之间的这种联动强度、滞后时间、甚至方向都可能变化。换句话说源域里学到的变量 A 与变量 B 强相关这个知识在目标域里可能不再成立。如果模型不能动态地重新建模变量间依赖适配就无从谈起。这就是标题里说的空间依赖在多变量时间序列语境下的含义。这里的空间并不一定指物理空间位置更多是指变量维度上的依赖结构你可以把它理解成一张以变量为节点、以相关性为边的图。TERSE 在这张图上做适配本质上就是希望在无源场景下把这种变量间关系也重新对齐到目标域的分布上。3. TERSE 怎么同时建模时间和空间依赖理解了问题再看 TERSE 的方法设计就比较清晰了。从 KDD 2025 公开的信息和标题传递的核心来看TERSE 想解决的问题一目了然已有的无源域适配方法没有充分挖掘多变量时间序列的时空结构模型既要知道过去的趋势如何延续时间依赖也要知道变量之间如何相互影响空间依赖并且这两者需要在一个统一的框架里被同时优化。3.1 从标题拆解方法的最小出发点TERSE 这个名字本身就很讲究terse 有简洁、精炼的含义。但放在这里我更愿意把它理解成Temporal-Spatial的组合词暗示这套方法的时间与空间双分支设计。标题里同时建模这四个字是关键它意味着 TERSE 并不是简单地把时间编码器和图编码器串联起来也不是把空间特征作为时间特征的辅助输入而是让两种依赖在模型内部相互支撑。时间依赖的建模很好理解需要捕捉长期周期、短期趋势、以及局部突变。空间依赖的建模则要回答一个问题在目标域没有标签的情况下怎么知道变量之间应该建立什么样的连接如果直接源域里变量之间的固定关联结构肯定不行因为域漂移恰恰可能发生在关联结构上。3.2 时间分支与空间分支是怎么分工的按照这类时空建模工作的通用设计TERSE 大概率会把模型拆成一个时间分支和一个空间分支相当于一个双通道编码器。时间分支处理的是每个变量的时间切片也就是从 T 个时间步、P 个变量构成的时间窗口里沿着时间轴提取动态特征。它要回答的问题是这个序列在过去一段窗口内的变化规律是什么样的是上升趋势、周期性波动、还是突发脉冲空间分支则沿着变量维度做特征提取把 P 个变量在当前窗口内的表征集中起来通过变量之间的注意力机制或者图卷积更新每个变量被其他变量影响后的特征。它要回答的问题是当压力上升的时候温度、振动、电流各自应该发生什么变化它们之间的这种联动关系在当前目标域里是否还成立举个具体例子帮助理解。假设输入是一个 32 时间步、8 个变量的窗口。时间分支会对每个变量独立处理比如对第 1 个变量的 32 个时间步做自注意力得到它的时序特征空间分支会把这 8 个变量在某个时间位置的特征放在一起通过注意力机制计算变量之间的互相影响更新每个变量的表征。两个分支最后输出的特征会被融合进入分类器。3.3 融合设计时间与空间不是两条平行线这个部分是我最感兴趣的地方。如果时间分支和空间分支只是各自提取特征然后拼接那这件事的价值就大打折扣了。因为时序数据的特性决定了变量之间的依赖关系可能随着时间变化而变化——某些工况下 A 和 B 强相关另一些工况下又变弱了。如果空间分支用的是窗口级的静态变量关系就捕捉不到这种演化。TERSE 的同时建模应该体现在时空交互上。一种常见的设计是交叉注意力时间分支的输出作为 query空间分支的输出作为 key 和 value让时间信息去动态选择当前时刻哪些变量更重要反过来空间分支的输出也可以去调制时间分支的编码让模型知道当前这种变量关系下时序演化应该是什么样的。两个分支通过这种交互机制互相校准而不是各干各的。这个交互过程相当于给模型加了一条规则你在目标域上适配的时候不仅要让每个变量的动态模式对齐还要让变量之间的联动模式也对齐两条约束互相验证。另外一个容易忽略的细节是窗口长度。适配阶段和训练阶段的窗口长度要保持一致而且如果源模型是在固定长度窗口上训练出来的适配时最好也用相同长度切窗否则时间分支的归一化和位置编码都会出问题。这个问题我后面讲工程坑的时候还会提。3.4 适配阶段怎么把时空依赖变成可优化的损失无源域适配的最终落脚点还是损失函数。TERSE 的优化目标从高层面看依然遵循无源适配的经典思路但在损失设计上会额外引入时空一致的约束。具体拆开大致是三块第一块是熵最小化损失。模型对目标域样本的预测分布的熵要被压低让预测结果变得斩钉截铁。这个约束是很多无源适配方法都在用的相当于告诉模型目标域样本总该属于某个类别不要含糊。第二块是伪标签自训练损失。用源模型在目标域上跑一遍预测挑出置信度高的样本把它们的预测当作伪标签然后用这些伪标签去监督模型更新。这块会被设计成分类交叉熵让新模型沿着源模型已经学会的判别方向继续收敛。第三块是时空一致性损失。这是 TERSE 这种时空结构方法比较有特色的地方。具体做法可以这样理解对同一个时间窗口做两种不同的扰动比如对时间分支做时间切片、对空间分支做变量掩蔽然后要求两次扰动后得到的特征表示尽量一致。这个策略用在无源适配里很妙它并不需要任何外部标签本质上是在告诉模型时空依赖结构不应该因为这种局部扰动而发生剧烈变化你学到的表示要足够鲁棒。这个损失能在没有监督信息的情况下把时间依赖和空间依赖的联合结构钉在目标域上。我补充一句分布式对齐这类策略在无源设定下并不好做因为缺少源域数据来估计源分布。TERSE 走的路子很务实不强行去拟合源域的完整分布而是通过伪标签和一致性约束让目标域自身的结构被充分挖掘。从这个意义上说它更像是一个自适应学习框架而不是传统意义上的分布对齐框架。4. 无源适配的训练闭环伪标签、一致性、熵最小化有了模型结构之后整个训练流程也需要仔细设计。无源域适配最危险的陷阱就是越训越糟早期伪标签错误多错误被模型当成正确信号学进去然后形成恶性循环。TERSE 这类方法能稳住效果很大程度上靠的是流程上的纪律性。4.1 第一步用冻结的源模型生成目标域伪标签整个适配过程的第一步不是马上更新模型而是先用源域的冻结模型在目标域上做一次完整的推理拿到每个样本的预测概率。这一步的关键是先不要动任何参数只做前向传播。这样可以得到一个相对稳定的初始状态后续的适配效果都是从这个状态出发的。伪标签的生成方式直接决定后续训练质量。常见的做法是保留概率最大值和对应的类别当最大概率超过某个阈值比如 0.7 或者 0.9时这个样本才有资格进入自训练集合。阈值太低会把大量噪声样本放进来阈值太高又会剩下太少样本导致模型可学习的信息不足。TERSE 的处理思路通常还会结合时序特点相邻时间窗口的伪标签应该平滑如果一个样本被预测成 A 类、它前后几个窗口都被预测成 B 类那这个样本的伪标签可信度就要打问号。这种时序平滑约束是纯图像方法不太具备的。4.2 第二步时空增强与多视图一致性伪标签提供了粗粒度的监督信号但模型还需要一个更细的约束来学习目标域的结构。这就是一致性正则发挥作用的环节。对目标域窗口做增强生成两个或者多个视角分别输入模型要求它们的输出分布彼此接近。我来说说增强策略的选择。时间维度上可以做窗口内的随机裁剪或缩放要求模型对这种时间尺度变化不敏感可以做时间反转或时间片段洗牌但这种增强要小心如果任务本身对时间顺序敏感反转就相当于制造了错误样本。空间维度上可以做变量掩蔽随机把部分变量的值替换成零或者噪声要求模型在缺少若干传感器信息的情况下依然保持一致的判断。这些策略在图像里对应的就是随机裁剪、翻转、颜色抖动在时序里需要重新设计。TERSE 对时空增强还有一个细化的考量时间增强和空间增强应该尽量解耦。时间增强主要考验动态建模能力空间增强主要考验变量依赖建模能力。如果两者混在一起做模型出了问题你根本不知道是哪个分支没学好。把两种增强分开构造多视图在做消融实验的时候也能更清晰地定位每个分支的贡献。4.3 第三步置信度筛选与逐步更新的节奏整个训练过程的另一个重点是更新节奏。无源适配最好不要一开始就把所有目标域样本全部丢进去做自训练因为初始阶段模型对目标域的犯错率很高这时候强行使模型去拟合错误的伪标签后面很难纠正回来。比较好的做法是分阶段推进先用高置信度样本做预热让模型在目标域上站稳脚跟然后逐步降低伪标签筛选的阈值把更多样本纳入训练。这个由易到难的策略其实很像课程学习。我在实际调参时发现预热阶段的迭代次数不需要太多但如果跳过预热直接进入全量伪标签训练模型的性能衰减是非常明显的。另外一个很容易被忽略的细节是学习率适配阶段的学习率应该比预训练阶段小一个到两个数量级因为源模型已经具备不错的表征能力微调幅度太大反而会破坏原有知识这在无源场景下尤其致命毕竟没有源数据可以让你补课。4.4 为什么这三步缺一不可把熵最小化、伪标签、一致性正则放在一起它们其实是互补的。熵最小化让预测变得自信但如果自信的方向是错的反而有害伪标签自训练提供了一个来自源模型的初始方向感但单靠它容易固化错误一致性正则不关心预测的具体类别只关心表示是否稳定它能从根本上缓解错误累积。TERSE 的做法是把这三股力量绑在时空框架里让它们在相同的特征空间里互相约束。有一个要点容易被忽视就是时空一致性损失和伪标签损失之间的权重平衡。如果一致性约束过强模型会让所有目标域样本的表示趋同造成特征坍缩导致分类性能大幅下降。这种情况我在调试类似方法时踩过特征分布可视化之后发现所有类别都挤在一个点上非常恐怖。正确的做法是让一致性约束保持在语义保持层面同时用伪标签分类损失来保证类别可分。5. 读懂KDD文章里的实验数据集、对比方法和指标看学术论文不能只盯着方法的名字实验设计才是判断方法是不是真有用的试金石。TERSE 作为一篇 KDD 2025 入榜的论文实验设计大概率会覆盖多个多变量时间序列基准数据集并和现有的无源域适配方法做对比。这个环节我就从论文读者的角度聊聊怎么看这类实验避免你把论文效果好误当成我也能复现同样效果。5.1 多变量时序SFDA的常用基准数据集多变量时间序列领域有几个公开数据集是这类论文的常客。人体活动识别数据集如 UCI-HAR、HHAR、WISDM经常被用来做跨用户、跨设备、跨位置的域迁移传感器是加速度计和陀螺仪变量维度不高但时间结构很清楚。工业传感器的数据集如轴承故障、电机电流可以构造跨工况的适配任务比如源域是正常负载目标域是不同转速。还有一些公开的电力负荷和交通流量数据集适合做回归类任务的域适配这些状态空间平滑变量间相关性强非常适合验证空间依赖建模能力。对这类实验我的一个观察是数据集的选择本身就在给方法出定向考题。如果论文声称空间依赖建模有帮助那么实验里多少应该有一个任务它的域漂移主要发生在变量相关结构上比如跨传感器的迁移源域用一个传感器布点目标域用另一个位置的传感器。如果所有数据集都是同一个传感器在同一个位置上切换用户那空间依赖的贡献就不容易体现出来。5.2 对比方法和消融实验怎么看无源域适配领域的基线方法其实不算多常见的包括直接使用源模型不做任何适配Source-Only这是性能下界TENT 这类调整归一化层的方法SHOT 这类基于信息熵和伪标签的方法以及几个新的针对时间序列设计的无源适配方法。一篇好论文的对比表通常会出现这三类方法而且应该报告多次运行的平均值和标准差因为无源适配本身带有随机性单次结果说明不了问题。消融实验是判断各组件贡献的关键。对 TERSE 来说我期待的消融至少有这四组去掉时间分支退化成纯空间建模去掉空间分支退化成纯时间建模把两个分支的融合方式改成简单拼接验证交叉注意力是否真的有增益把时空一致性损失去掉验证这个损失是否真的在无源适配中起效。如果一个组件被删掉后性能没有明显下降那它存在的必要性就存疑。看论文的时候不妨带着这个态度去审查。5.3 比数字更重要的是适配效率曲线这里我想多说一句。表格里的最终准确率当然重要但无源适配场景还有一个更关键的指标目标域适配步数-性能曲线。也就是说模型在目标域上每迭代一定数量的步数性能提升到多少。这个问题在真实工程里非常现实因为目标域的适配预算往往有限你不能让模型跑几百轮迭代才收敛部署环境的算力资源是有限的。TERSE 如果在论文里展示了这个曲线而且显示出只需少量迭代步数就能越过 Source-Only 并接近源模型在上限微调的效果那它的实际价值就比单纯的高分还要大。读者在看这篇论文时建议特别留意实验部分的图表有没有这类分析它比一个孤立的精度数字更有说服力。6. 把TERSE这类方法搬进自己项目前我建议先想清楚几件事最后聊点落地视角的东西。我不主张看到一个 KDD 论文就盲目往自己项目里套那样大概率会碰一鼻子灰。先把前提条件和工作习惯理清楚再决定要不要用 TERSE 这种路线。6.1 适配值得做的前提源模型要够好域间差异要有规律第一个前提是你的源模型真的够好。如果源模型在源域测试集上的准确率就只有 70%在目标域上直接掉到 50%那无论用什么无源适配方法都很难把它救回 70% 以上。算法能做到的适配是在已有知识的基础上校准而不是凭空创造知识。我见过一个团队拿着效果极差的基座模型强行做无源适配折腾了一个月最后结论居然是方法没用——其实是基座模型本身就积累了大量错误先验。第二个前提是域间差异要有结构化的规律。无源适配能够奏效的理论基础是存在一个共享的表征空间源域和目标域在这个空间里是有交集的。如果目标域和源域的数据根本是不同的东西比如源域是心电图目标域是股票价格那就算了神仙来了也白搭。换句话说适配不是万能药它解决的是同一类数据、但分布有所偏移的问题不是完全不同的数据的问题。6.2 工程落地的三个隐蔽坑第一个坑是伪标签置信度阈值调不好。阈值设太高参与训练的样本太少模型几乎没有更新阈值设太低模型被大量错误标签带偏。我建议的做法是先在验证集如果有少量标注上扫一遍阈值如果没有标注就观察每个阈值下伪标签类别的分布如果某一类占据了异常高的比例大概率是阈值太宽松把其他类别的样本都错误标记成了这一类。第二个坑是增强策略的强度。时间增强里的随机缩放和裁剪如果尺度变化太剧烈模型会把时间拉伸后依然属于原类别当成重要规则但实际上这种不变性不一定是任务需要的。比如在故障诊断中故障脉冲的持续时间本身就是判别的关键特征如果增强把时间轴随意拉伸模型学到的东西就会失真。增强策略必须和你的任务语义对齐不能直接抄论文里的超参。第三个坑是空间建模的计算开销。P 个变量做两两注意力复杂度是 O(P^2)当变量数量达到几百个时这个开销在训练阶段还可以忍受适配阶段如果设备资源紧张就会非常吃力。如果遇到高维变量场景建议先把变量分组或者用聚类的方式将相关变量聚合降低计算压力而不是直接套完整空间分支。6.3 小规模验证的建议流程如果你想在自己的数据集上试一试 TERSE 的思路我建议按下面这个流程走。先用你的数据直接跑一遍 Source-Only记录一个基线数字这是所有对比的基础。接着用一个已经开源的图像域无源适配方法比如 TENT作为第二组基线看看简单归一化调整在你的时序数据上是什么效果。然后再实现一个只有时间分支 伪标签 一致性的简化版本做一个中等复杂度的基线。最后再在完整模型上加入空间分支和时空一致性损失对比前几步的结果。这个流程最有价值的地方在于你能清楚地定位每个组件在自己任务上的增益到底有多大。我见过不少项目做完之后发现空间分支的收益其实微乎其微时间分支和伪标签才是主力。这不是说空间建模没用而是具体数据的具体特性决定的。用这样的方式验证才能真正把 TERSE 的思想吸收到自己的工程里而不是停留在复现了论文结果的层面。我自己的体会是无源域适配这个方向正在变得非常务实因为它解决的问题太贴近真实部署了。TERSE 把时间依赖 空间依赖这两个在时序任务里永远绕不开的因素放到无源适配的约束下统一建模方向上是对的。最后再分享一个小经验无论你最终用的是完整方法还是一个简化版适配之后一定要用少量人工标注的样本做一次盲测不是为了微调而是为了确认适配后的模型没有在目标域上形成一种自信但系统性地错误的状态。这一步在无源场景下相当于你的安全网千万别省。