MOMENT掩码补丁预训练原理揭秘模型如何学会时间序列的语言趋势、频率与相位【免费下载链接】momentMOMENT: A Family of Open Time-series Foundation Models, ICML24项目地址: https://gitcode.com/gh_mirrors/mome/momentMOMENT 是一款开源的时间序列基础模型Time-series Foundation ModelICML 2024 论文项目它通过掩码补丁预训练Masked Patch Pre-training一次性学会预测、分类、异常检测、插补等五大任务。本文将用通俗的语言揭秘它的核心原理为什么把时间序列切成补丁再随机遮住一部分模型就能像 GPT 学会自然语言一样学会时间序列的语言——趋势、频率、幅度与相位。为什么需要掩码预训练你可能听过 BERT 的完形填空训练遮住句子中的词让模型根据上下文猜出来。MOMENT 把这个思路搬到了时间序列上输入一段长度为 512 的时间序列来自电力、气象、生理信号等任意领域遮挡随机遮住约 30% 的内容目标让模型把被遮住的部分原样重建出来。看似简单的看图填空恰恰迫使模型理解序列内部的统计规律——哪里是趋势、哪里是周期、频率是快是慢、波形处于哪个相位。这正是时间序列的语言。时间序列如何被切词Patching 与 Patch Embedding在自然语言中模型不直接处理字符而是处理 Token。MOMENT 的对应操作叫Patching切块切块把 512 个时间步的时间序列按固定长度 8 切成 64 个互不重叠的小片段每个片段就是一个补丁Patch相当于时间序列里的 Token嵌入每个补丁通过一个线性投影Value Embedding映射为 768 维的向量再叠加位置编码告诉模型它处在序列的哪个位置掩码嵌入被遮住的补丁不再使用真实数值而是替换成一个可学习的[MASK]向量——模型只能看到这里缺了一块必须靠上下文去推断。这套逻辑对应源码中的两个模块切块与补丁嵌入实现momentfm/models/layers/embed.py其中Patching负责切块、PatchEmbedding负责数值嵌入 掩码替换 位置编码随机遮块策略momentfm/utils/masking.py 中的Masking类按mask_ratio对补丁做均匀随机掩码且保证被遮掉的总是完整的补丁不会把半个补丁切掉。 为什么用块而不是单点单个时间点信息太稀疏而 8 个点的短片段自带局部形态一个小峰、一段上升沿是时间序列最有意义的词。谁来填空T5 编码器 轻量重建头切好块、遮住块之后核心计算发生在两部分① Transformer 编码器BackboneMOMENT 直接复用 T5 的预训练编码器Transformer Encoder。每个补丁向量先经过 Norm → Multi-Head Attention → MLP 的层层变换让所有可见补丁充分交流形成富含上下文信息的表示。② 轻量重建头Pretrain Head编码器输出后一个仅一层线性投影的重建头把每个补丁的 768 维表示还原回 8 维原始数值再经反归一化恢复量纲。训练目标是只对被遮住的补丁计算重建误差模型猜得越准损失越小。实现见 momentfm/models/moment.pyPretrainHead定义了重建头reconstruction()方法完整走了一遍归一化 → 切块 → 掩码 → 编码 → 重建 → 反归一化的流程。③ 一个容易被忽略的细节RevIN 实例归一化不同数据集的量纲天差地别体温 36 度 vs 电网负荷 10 万 kW。MOMENT 在编码前用RevIN可逆实例归一化把每条序列减均值、除标准差且只用可见点的统计量——这样填空难度不会因量纲不同而失真。重建完成后再逆运算还原。实现位于 momentfm/models/layers/revin.py。三步合起来MOMENT 的预训练配方就是RevIN 归一化 → 切块成 Patch → 随机掩码 → T5 Encoder → 轻量 Head 重建被遮部分模型真的学会了时间序列语言吗如果模型只学会了把曲线画回来那它的价值有限。MOMENT 的作者设计了一组优雅的探针实验来验证用代码合成大量正弦波每次只改变一个因素频率、幅度、趋势强度、相位然后提取 MOMENT 的序列级嵌入用 PCA 降到 2 维可视化。结果显示每个因素在嵌入空间里都形成了清晰的独立分布簇——因素含义模型表现频率波形振荡快慢嵌入沿独立方向平滑变化相位波形起始位置能区分同一个波、起点不同趋势长期上升/下降强度嵌入随趋势强度有序排布幅度/基线波动大小与整体水平同样可被清晰区分也就是说MOMENT 的嵌入不是像素级的记忆而是抽象出了时间序列的语义特征。合成数据的生成器就在 momentfm/data/synthetic_data.pySyntheticDataset类含频率/相位/幅度/趋势等多种正弦波生成函数方便你复现这组实验。预训练的红利一个模型五大任务学会了语言之后MOMENT 只需换一个小头就能做不同任务预测Forecasting遮住尾部若干补丁让模型续写插补Imputation直接复用重建能力填补缺失值异常检测Anomaly Detection正常数据重建误差小异常处误差大误差即异常分数分类Classification对嵌入做平均池化后接线性层表示学习Embedding直接输出嵌入供下游使用。如上图所示在零样本不做任何参数更新设置下MOMENT 已在插补、长程预测、分类等维度达到甚至超过 GPT4TS、TimesNet 等专用模型的水平——这正是掩码补丁预训练换来的通用性。源码导读5 个文件读懂核心文件作用momentfm/models/moment.py模型总装配MOMENT主类与各类任务头momentfm/models/layers/embed.pyPatching切块与PatchEmbedding补丁嵌入momentfm/models/layers/revin.pyRevIN实例归一化/反归一化momentfm/utils/masking.pyMasking随机掩码生成策略momentfm/data/synthetic_data.py合成正弦波数据集用于语言探针实验想动手验证的话教程覆盖预测、分类、异常检测等完整流程tutorials/forecasting.ipynb、tutorials/anomaly_detection.ipynb、tutorials/classification.ipynb。如何快速上手 MOMENT安装只需一行推荐 Python 3.11推荐pip install momentfm或克隆源码仓库https://gitcode.com/gh_mirrors/mome/moment后本地安装然后加载预训练权重并指定任务预测 / 分类 / 重建 / 嵌入即可开始推理与微调。所有实验在单张 48GB 显存的 A6000 上即可复现依赖见 pyproject.toml。小结MOMENT 的核心洞察值得每个时间序列从业者记住补丁是时间序列的 Token8 点一小块保留了局部形态是语义的最小单元掩码重建是万能预训练目标一个目标同时训练出趋势、频率、相位等抽象感知能力归一化决定多数据集训练的成败RevIN 让不同量纲的数据可以同台竞技。理解了这条链路你不仅读懂了 MOMENT也拿到了理解所有时间序列基础模型MoE 式架构、多粒度掩码等演进方向的钥匙。【免费下载链接】momentMOMENT: A Family of Open Time-series Foundation Models, ICML24项目地址: https://gitcode.com/gh_mirrors/mome/moment创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考