关于复现EMA

从零复现:用Python高效实现通达信/同花顺核心指标(SMA/EMA/MACD/RSI) 本文详细介绍了如何使用Python高效复现通达信/同花顺的核心技术指标(SMA/EMA/MACD/RSI),包括指标计算原理、Python实现代码及性能优化技巧。通过自主实现这些指标,开发者可以避免第三方软件的黑盒问题,提升策略开发的灵活性和准确性。文章特别强调了Pandas和NumPy在向量化计算中的高效应用,帮助量化交易爱好者快速掌握关键技术。 阅读详情

❗ 只要方法中含有 EMA / Momentum Update / Moving Average,就无法做到 严格的 bit-level 完全复现

但 可以做到“功能性复现”(曲线趋势一致、指标差不多)。

我们需要区分“复现”的两个层级:


✅ 一、学术界认可的复现:Functional Reproducibility

✔ 指标差不多

✔ 曲线趋势一致

✔ 模型行为相似

✔ 多次训练结果波动在正常范围

这样的复现对于带 EMA 的论文完全能做到。

例如:

  • MoCo v1/v2/v3

  • BYOL

  • SimCLR (动量 encoder 的版本)

  • MaskFeat

  • MAE momentum teacher

  • KD 的 EMA teacher

  • EMA-based optimizer(AdamW + EMA)

  • Deformable-DETR 的 EMA 更新

  • YOLO 的 ModelEMA

  • Diffusion Model 的 EMA Model

这类论文都可以被复现(functional reproduction)。


❌ 二、完全逐位复现(bitwise reproducibility)

这意味着:

  • 每次训练 loss 一模一样

  • 每个 epoch 的权重完全一样

  • EMA 的状态每一步都一样

  • 训练 N 次得到完全相同的 .pth 文件

❌ 对于带 EMA 的训练:几乎不可能

无论论文还是你的代码。

原因如下(所有 EMA 方法通用情况):


🔥 为什么带 EMA 就无法做到 bit-level 完全复现?

原因不是 EMA 本身,而是:

1. EMA 对累积误差极度敏感(放大器)

EMA 更新:

ema = m * ema + (1-m) * value

其中 m 接近 1(0.99~0.9999)

这意味着:

  • 第一步小误差 → 第二步被乘以 0.99 → 差异开始积累

  • 到1000步后,差异被指数放大

  • 10000步后差异巨大

哪怕 1e-10 浮点误差,最终也会变 1e-3、1e-2。


2. batch 顺序只要有一点不同,EMA 会完全偏离

导致 batch 顺序不可重复的常见因素:

因素说明
DataLoader 多线程(num_workers>0)100% 损坏复现
shuffle=True多线程情况下无论种子固定仍不确定
随机增强(crop、flip)worker 间执行顺序不同
GPU 并行机制kernel 执行顺序不保证 bit-level deterministic
CuDNN 非完全确定性算子某些算子仍有不可控噪声
AMP 混合精度万分之一的误差在 EMA 中会被放大到明显差异

因此 EMA 不是不可复现的根源,而是误差放大器。


3. GPU 上的浮点加法不满足结合律

(a+b)+c ≠ a+(b+c)

多线程 → 累积顺序不同 → 浮点误差不同 → EMA 累积不同 → 最终模型完全不同。

这不是你能控制的,是 IEEE754 浮点数本质决定的。


🔍 那为什么很多论文使用 EMA,但依然可以复现?

因为他们要求的是:

“结果指标可复现(functional reproducibility)”

而不是:

“每个 epoch loss 完全一样(bitwise reproducibility)”

两者差别非常大。

在实际科研里,前者是完全可以做到的。


🧪 实际例子(你肯定知道):

论文是否使用 EMA是否可复现是否 bit-level 可复现
MoCo✔✔❌
BYOL✔✔❌
SimCLR-v2✔✔❌
DINO / iBOT✔✔❌
MAE✔✔❌
YOLOv5/7/8 EMA✔✔❌
Stable Diffusion(UNet)✔✔❌
DDPM/DDIM✔✔❌

所有主流论文都能复现指标,但没有任何一个号称 bitwise reproducible。


🟩 最终答案

✔ 任何带 EMA 的论文都“可以复现结果”

❌ 但只要使用 EMA,就“不可能达到完全逐位复现”

无论你设置多少 random seed,都完全做不到 bit-level 相同。

这不是你代码的问题,是浮点数与并行执行的物理事实造成的。


如果你需要:

✔“结果可复现”

我能帮你做:

  • 固定随机数

  • DataLoader 单线程

  • 关闭所有随机增强

  • 强制 deterministic 模式

  • 固定模型初始化

  • 固定 batch 顺序

  • 得到指标一致的版本

❌“bit-level 完全复现”

只要你用了 EMA → 不可能。


为什么 EMA 不能复现?

EMA 是:


ema = m * ema + (1 - m) * new_value

是一个 “记忆型积累函数”。

只要:

  • batch 顺序稍微变一点

  • 每个 batch 的浮点误差不同

  • transforms 的随机性没有逐 bit 一致

  • 多线程 worker 调度顺序不同

EMA 就会累计误差:

“一点点误差 ➜ 累积 1 万步后 ➜ 完全不一样”

EMA 是误差放大器
CE/KL 不是。

这就是你能复现 CE/KL 却复现不了 EMA 的根本原因。


🔍 更详细解释:CE/KL 为什么能复现?

原因是 CE/KL loss 的计算 没有历史依赖:

  • 第 2 epoch 的 loss 不依赖第 1 epoch 的 loss

  • 第 10 epoch 的结果不受前面误差放大影响

模型权重会有些微差异,但“逐 epoch 均值指标”可能非常接近。


🔥 但是 EMA 是依赖历史误差的指数累积系统

哪怕只有:

  • 1e-7 的浮点差异

  • 一个 batch 顺序的微妙不同

  • 一个 worker先返回还是后返回

在 EMA 更新 1000 次后:

➡ 误差会被放大到模型行为差异
➡ epoch 2 开始就完全不一样

这就是 EMA 方法不能在多线程 + shuffle 情况下复现的原因。

别再死记硬背公式了!用Python手把手带你复现EMA计算全过程(附代码) 本文详细解析了指数移动平均线(EMA)的数学原理与Python实现方法,从基础公式到量化交易应用。通过循环和向量化两种方式手把手教您计算EMA,并对比性能差异,最后以股票数据分析案例展示EMA交叉策略的实际应用。附完整代码,帮助您深入理解这一重要技术指标。 阅读详情

相关推荐

PyTorch炼丹必备:EMA指数滑动平均的5个实战技巧(附代码)

本文详细介绍了PyTorch中EMA(指数滑动平均)技术的5个实战技巧,包括基础实现、β值选择策略、偏差修正、验证阶段应用以及分布式训练中的实现。通过代码示例和性能对比,帮助开发者有效提升模型训练稳定性和表现,特别适合深度学习炼丹过程中的参数优化。

weixin_30872157的博客 366

deepseek-v3 论文阅读

合集 - 分布式训练(8)1.LLM并行训练1-流水线并行2024-06-262.LLM并行训练2-张量并行2024-06-273.LLM并行训练3-数据并行2024-06-284.LLM并行训练4-megascale论文学习2024-06-295.LLM并行训练5-MoE并行2024-07-206.LLM并行训练6-激活优化2024-07-207.LLM并行训练7-混合并行总结2024-07-2...

weixin_36525006的博客 156

VQ-VAE实战:用EMA更新码本解决码本坍塌问题(附PyTorch代码)

本文深入探讨了VQ-VAE训练中常见的码本坍塌问题,并提供了使用指数移动平均(EMA)更新机制的有效解决方案。通过详细的原理分析和完整的PyTorch代码实现,展示了EMA如何通过平滑稳定的更新策略,显著提升码本利用率与模型训练稳定性,从而解决输出单一、表达能力受限的难题。

weixin_29194693的博客 316

保姆级教程:手把手教你用PyTorch复现ICASSP 2023的EMA注意力模块(附完整代码)

本文提供了一份详细的PyTorch教程,手把手教你复现ICASSP 2023提出的EMA(Efficient Multi-Scale Attention)多尺度注意力模块。从环境配置、核心代码实现到模块集成应用,全面解析这个即插即用注意力机制的设计原理和优化技巧,帮助开发者快速掌握前沿计算机视觉技术。

weixin_42527464的博客 310

拆解“波段之王”指标:这串代码背后到底在计算什么?(附Python复现思路)

本文深入解析了量化交易中备受关注的'波段之王'指标,详细拆解其源码背后的计算逻辑与市场假设。通过Python复现实例,展示了如何构建多层嵌套的价格标准化、平滑处理和复合信号生成系统,帮助交易者理解这一复杂指标的设计原理与实战应用价值。

weixin_30615767的博客 241

改进YOLOv5/YOLOv8:复现结合即插即用 | 高效多尺度注意力(EMA),模块成为YOLOv5改进的小帮手

通道或空间的显著有效性 注意机制对产生更多可辨识的 特征表示的显著效果,在各种计算机视觉任务中得到说明。视觉任务。然而,用通道降维对跨通道关系进行建模 关系,可能会给提取深层视觉表征带来副作用。在提取深层视觉表征方面带来了副作用。提出了一种新的高效的多尺度注意(EMA)模块。着重于保留每个通道的信息 在每个通道上保留信息并减少计算 开销,我们将部分通道重塑为批量的 层面,并将通道层面分为 多个子特征,使空间语义特征很好地分布在每个特征中。使得空间语义特征在每个特征组中都有良好的分布。

qq_44224801的博客 3797

如何保存与加载ema-pytorch的EMA模型?state_dict与ema_model存取完全指南

ema-pytorch 是一个轻量的 PyTorch 开源工具,用几行代码就能为你的模型维护一份指数移动平均(EMA)"影子权重"。本文面向新手,讲透 EMA 模型保存与加载的 3 种方式:整包 state_dict、单独的 ema_model 权重、以及训练中自动保存 checkpoint,帮你不再弄丢辛苦训练出来的 EMA 权重。 ## 先搞懂:ema-pytorch 里的"两个模型" 用

gitblog_01082的博客 862

186、8 种训练技巧的组合实验:Warmup+Cosine+EMA+SWA+Freeze 的叠加效果评估

本文探讨了8种深度学习训练技巧(Warmup、Cosine Annealing、EMA、SWA、Freeze Backbone、Label Smoothing、Gradient Clipping、MixUp)的组合效果。通过YOLOv11n在COCO子集上的实验发现:技巧盲目叠加可能导致"负优化",如实验9(全部默认参数)的mAP(0.689)反而低于基础组合(0.712)。关键优化点包括:调整EMA decay(SWA模式下0.9995→0.9995*0.5)、解冻后学习率降为原值0.1、MixUp概率从

sundong_81的博客 23

【算法实战】DEIMv2训练全流程复现,官方仓库避坑!

详细记录了目标检测新SOTA模型DEIMv2的复现过程。首先使用micromamba创建Python 3.11.9环境,安装PyTorch 2.1.0+cu118和TorchVision 0.16.0+cu118等依赖库。随后配置COCO数据集路径,通过多卡训练命令启动模型训练。文章提供了完整的配置修改说明、训练命令和预训练模型下载建议,并附有各步骤的截图说明。整个过程涵盖了从环境搭建到模型训练的全流程,为研究者复现该模型提供了实用参考。

ZhouDevin的博客 518

YOLOV7改进:CVPR 2023 | 在C5模块不同位置添加EMA注意力机制,有效涨点

显著的渠道或空间有效性注意力产生机制更加可辨特征表示用各种计算机进行了说明视觉任务。然而,跨通道建模关系与通道降维可能在提取深度视觉表征时带来副作用。本文提出了一种新的高效多尺度注意力(EMA)方法。模块提出。专注于保留信息每个通道上,并减少计算在上方,我们将部分通道重塑为批处理尺寸并将通道尺寸分组为多个子特征构成空间语义特性在每个特性组中分布良好。具体来说,除了将全局信息编码到重新校准每个平行通道的权重支路,两个并联支路的输出特征为的跨维度交互进一步聚合捕获像素级成对关系。

AIcurator的博客 2458

利用ArcGIS创建渔网计算渔网内土地利用占比划分中国北方农牧交错带

依据土地利用数据,根据参考文献划分要求,利用ArcGIS创建渔网对地物进行重分类,划分农业带、牧业带以及农牧交错带。

m0_60672527的博客 3059

Mean teachers 论文学习+代码复现

记录了在看mean teacher过程中的疑问以及简单的梳理

qq_51659249的博客 3790

深入解析反射式DLL注入:从原理到实战优化

本文深入解析反射式DLL注入技术,从原理到实战优化全面剖析。通过PE文件内存重构、反射加载器实现及免杀增强方案,展示如何绕过安全检测并提升性能。适用于红队行动、内网渗透等场景,是高级攻防对抗中的关键技术。

weixin_28339967的博客 404

ConvNeXt V2训练避坑指南:EMA、数据增强与随机种子那些‘玄学’问题的实战解析

本文深入解析ConvNeXt V2在图像分类任务中的训练难点,包括EMA参数设置、数据增强策略与随机种子选择等关键问题。通过实战案例和代码示例,提供针对性的解决方案,帮助开发者有效提升模型精度和训练稳定性,规避常见陷阱。

weixin_30627341的博客 455

Cadence 17.2配置CIS数据库报错?手把手解决ODBC驱动位数不匹配问题

本文详细解析了Cadence 17.2配置CIS数据库时常见的ODBC驱动位数不匹配问题,提供了从系统环境检查到分步解决方案的完整指南。重点解决32位应用程序与64位ODBC驱动之间的架构冲突,包含驱动安装、DSN配置及高级排查技巧,帮助电子工程师快速恢复设计环境。

play7的博客 970

深入解析ST MC SDK(WorkBench)工程结构:从零搭建FOC电机控制项目

本文深入解析了ST MC SDK(WorkBench)工程结构,详细介绍了如何从零搭建FOC电机控制项目。通过ST MC SDK和WorkBench工具链,开发者可以快速配置电机类型、控制策略等参数,生成完整的FOC控制工程。文章还拆解了工程结构中的核心控制模块、HAL硬件抽象层、芯片系统初始化和电机控制算法库,并提供了无传感器FOC实战技巧和常见问题排查指南,帮助开发者高效掌握STM32F407ZGT6开发板上的FOC电机控制技术。

weixin_29173777的博客 411

别再只会用SENet了!手把手教你用PyTorch复现CBAM、ECA、EMA等5种主流注意力模块(附完整代码)

本文详细介绍了5种主流注意力模块(包括CBAM、ECA、EMA等)的PyTorch实现与性能对比,帮助开发者超越SENet的应用局限。通过完整代码示例和实战分析,展示了不同注意力机制在计算机视觉任务中的优化效果,特别适合希望提升模型性能的深度学习工程师。

weixin_28684497的博客 175

AI市场风起云涌,ai浏览器是最佳的落地项目,现在ai市场的ai浏览器竞争加剧,得ai浏览器者得天下!

从场景覆盖度来看,AI 浏览器已突破 “网页浏览” 的传统边界,成为连接个人生活、工作、消费的 “超级入口”,这是其他 AI 应用难以比拟的落地优势。在个人生活场景,AI 浏览器可基于用户行为数据主动提供服务 —— 当用户浏览马拉松赛事信息时,浏览器能自动生成 “训练计划 + 装备推荐 + 能量补给方案”,并关联预订链接;在工作场景,Opera Neon 浏览器已实现 “网页内容提取 - 代码生成 - 报告撰写” 的全流程辅助,开发者可直接在浏览器内完成网站开发初稿;

zhang9880000的博客 1086

YOLOv9模型融合技术:EMA权重更新与效果提升实测

本文介绍了如何在星图GPU平台上自动化部署YOLOv9 官方版训练与推理镜像,快速构建目标检测开发环境。该镜像预置PyTorch 1.10、CUDA 12.1及EMA集成脚本,支持一键启用指数移动平均权重更新,显著提升小目标检测精度与定位稳定性,适用于工业质检、安防监控等实际场景。

weixin_35879493的博客 374

lisp方格网法计算土方量_分享:两期土方工程量计算(方格网法)实例例题

最近遇到一个飞时达土方软件试用版客户,咨询怎么根据平整前的原始地形图和平整后的现状地形图来计算产生的土方工程量,也就是两期土方量,且需要用方格网法来计算,作为一个老道的工程设计人员,博主对这类的项目实例例题简直太熟悉了,用飞时达土方计算软件V13.0可以很方便的计算出来。 方格网法计算两期土方量流程 一、软件安装及注册 专业的飞时达土方计算软件FastTFT,请到飞时达软件官方网站去下载,注册完...

weixin_35131425的博客 1698

Ambari 安装部署教程(手把手教学)【超级详细】

本文为读者提供了一套超详细的 Apache Ambari 安装部署教程,采用手把手教学方式,适合初学者及大数据运维人员。内容涵盖前期准备、环境配置、Ambari Server 与 Agent 安装、集群初始化配置、常见问题排查等全流程操作,确保用户能够顺利搭建稳定的 Hadoop 大数据平台管理系统。

Five的博客 1万+

PyTorch自定义Optimizer在Miniconda中的封装方法

结合PyTorch自定义优化器与Miniconda环境管理,实现可复现、易迁移的深度学习研发流程。通过构建独立环境、封装带EMA的SGD优化器,并导出YAML配置,确保团队协作和跨平台部署的一致性,提升算法工程化能力。

weixin_34413326的博客 353

k8s中pod使用详解

k8s中Pod使用

congge 1万+

JPMorgan Python 培训完全指南:10 个 Notebook 带你从零搞定金融数据与可视化

如果你是一名业务分析师、交易员,或者只是对金融数据分析感兴趣的新手,JPMorgan(摩根大通)开源的 python-training 项目值得收藏。这是一套面向商业分析师和交易员的 Python 数值计算与数据可视化培训,全部课程以 Jupyter Notebook 形式组织,边写代码边看结果。项目采用 Apache-2.0 协议开源,累计获得约 6.8k Star,由 7 位贡献者共同维护。下

gitblog_00873的博客 403

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Temporal Server 贡献者实战指南:从环境搭建、构建测试到本地运行与 API 变更协作

> 本文以 [CONTRIBUTING.md](https://link.gitcode.com/i/0f54ad0b9229a1c9d68646f70187abde) 为骨架,面向希望为 Temporal Server(开源分布式工作流引擎的服务端)提交代码的开发者,完整梳理贡献前的环境准备、仓库获取、构建流程、三级测试体系、多数据库本地运行方式、IDE 调试、gRPC/protobuf API

gitblog_00507的博客 379

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ConvNeXt V2图像分类避坑指南:EMA、Cutout/Mixup与随机种子的那些‘玄学’问题

本文深入探讨ConvNeXt V2在图像分类任务中的关键调参技巧,揭示EMA启用时机、数据增强组合及随机种子设置对模型性能的显著影响。通过实验数据与实战配置方案,帮助开发者规避常见陷阱,提升分类准确率与训练稳定性。特别针对植物幼苗分类等场景,提供优化EMA与数据增强参数的具体建议。

weixin_30855099的博客 357

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 记录本地安装anaconda pytorch python
下一篇: hugging face的镜像源
pythonSuperman
博客等级 码龄6年 7763粉丝 499原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值