当前位置: 首页 > news >正文

浅谈指数移动平均(ema)

经常在各种代码中看到指数移动平均(比如我专注的网络传输领域),但却不曾想到它就是诠释世界的方法,我们每个人都在被这种方式 “平均”…

今天说说指数移动平均(或移动指数平均,Exponential Moving Average)。

能查到的资料都侧重于其数学形式和实现,比如卷积和 python,这一点不再赘述,所以要写点内涵,物理意义和哲学。

指数移动平均在我们遇到的很多时间序采样中应用甚广,比如 tcp 的 srtt,它在形式上如下:

V n = ( 1 − β ) ∗ V n − 1 + β ∗ C V_n=(1-\beta)*V_{n-1}+\beta*C Vn=(1β)Vn1+βC

其中 C 为当前采样值,而 Vn 就是该采样序列的指数移动平均。

ema 的形式极端简洁,它只需要拿当前采用进行增量计算,不需要保存任何历史采样,其形式中,beta 为当下值权重,1 - beta 则留给过往,这非常符合我们的思维习惯。

我们认识的每一件事物,其本质都在采样,我们将当前采用叠加在对该采用的历史记忆之上,一杯敬当下,一杯敬过往,形成对世界的理解,形成我们的观点,我们的整个世界每时每刻对每件事物都在做指数移动平均。

将形式展开,我们将发现我们理解世界的过程:
V n = β ∗ C + ( 1 − β ) ∗ V n − 1 V_n=\beta*C+(1-\beta)*V_{n-1} Vn=βC+(1β)Vn1
V n = β ∗ C n + ( 1 − β ) ∗ ( β ∗ C n − 1 + ( 1 − β ) ∗ V n − 2 ) V_n=\beta*C_n+(1-\beta)*(\beta*C_{n-1}+(1-\beta)*V_{n-2}) Vn=βCn+(1β)(βCn1+(1β)Vn2)

V n = β ∗ ( 1 − β ) 0 ∗ C n + β ∗ ( 1 − β ) 1 ∗ C n − 1 + β ∗ ( 1 − β ) 2 ∗ C n − 2 + β ∗ ( 1 − β ) 3 ∗ C n − 3 + . . . β ∗ ( 1 − β ) n ∗ C 0 = Σ m = 0 n ( 1 − β ) m ∗ β C n − m V_n=\beta*(1-\beta)^0*C_n+\beta*(1-\beta)^1*C_{n-1}+\beta*(1-\beta)^2*C_{n-2}+\beta*(1-\beta)^3*C_{n-3}+...\beta*(1-\beta)^n*C_0=\Sigma_{m=0}^{n}{(1-\beta)^m*\beta C_{n-m}} Vn=β(1β)0Cn+β(1β)1Cn1+β(1β)2Cn2+β(1β)3Cn3+...β(1β)nC0=Σm=0n(1β)mβCnm

这里不讲卷积的形式,只从物理意义上理解 Vn 的每一项都是一个采样值 Cx 和一个 1 - beta 次幂的乘积的原因。下面开始。

假设我们的大脑能无差别均匀等价记忆所有采样值,我们的记忆是:

M = { C n , C n − 1 , C n − 2 , C n − 3 , . . . } M=\{C_{n},C_{n-1},C_{n-2},C_{n-3},...\} M={Cn,Cn1,Cn2,Cn3,...}

然而我们不可能无差别记住所有采样,我们记忆容量有限,我们倾向于逐渐忘掉过往。由于历史记忆存在,当前采样仅能占据一部分记忆空间,这就是 β ∗ C \beta*C βC,那么 1 − β 1-\beta 1β 的份额将留给过往,所有的过往将共享这 1 − β 1-\beta 1β 的份额,这意味着随着新采样的不断进入,每一个历史采样必须衰减,历史越久的样本衰减越厉害,即 “逐渐忘掉过往” 。

M 集合按照历史时间序排序采样值 C,由于它进入记忆时均以 beta 份额压缩,事实上的 M 为:

M = { β ∗ C n , β ∗ C n − 1 , β ∗ C n − 2 , β ∗ C n − 3 , . . . } M=\{\beta*C_{n},\beta*C_{n-1},\beta*C_{n-2},\beta*C_{n-3},...\} M={βCn,βCn1,βCn2,βCn3,...}

它的每一项被一个同样的按历史时间序加速衰减的集合过滤:

F = { ( 1 − β ) 0 , ( 1 − β ) 1 , ( 1 − β ) 2 , ( 1 − β ) 3 , . . . } F=\{(1-\beta)^0,(1-\beta)^1,(1-\beta)^2,(1-\beta)^3,...\} F={(1β)0,(1β)1,(1β)2,(1β)3,...}

把集合 M 往下漏被集合 F 阻隔过滤,就形成了新的集合 V:

V = { β ∗ C n ∗ ( 1 − β ) 0 , β ∗ C n − 1 ∗ ( 1 − β ) 1 , β ∗ C n − 2 ∗ ( 1 − β ) 2 , β ∗ C n − 3 ∗ ( 1 − β ) 3 , . . . } V=\{\beta*C_n*(1-\beta)^0,\beta*C_{n-1}*(1-\beta)^1,\beta*C_{n-2}*(1-\beta)^2,\beta*C_{n-3}*(1-\beta)^3,...\} V={βCn(1β)0,βCn1(1β)1,βCn2(1β)2,βCn3(1β)3,...}

这就是指数移动平均的各项,看这相乘的形式当然可以把它理解成某种加权,但名称不重要。而它恰好可以被规整为一种简洁的递推式:

V n = ( 1 − β ) ∗ V n − 1 + β ∗ C V_n=(1-\beta)*V_{n-1}+\beta*C Vn=(1β)Vn1+βC

这就是历史记忆的运转方式。指数移动平均的本质在于一个样本的影响力以何种程度衰减到微不足道的地步,毕竟我们没人在乎自己 1 万年前的祖先是吃肉还是喝粥。

每个时代都认为自己的时代最特殊,最重要,但很快就被下个时代取而代之,淹没在历史长河。谁都逃不过指数移动被平均,过不了 100 年,人人乐道的改变世界的信息时代也将不过是一场平凡的技术革新罢了。

beta 如何选择取决于你想保存多久的记忆,或者说你容忍多久以前的采样可以忽略不计。

如果你希望的记忆周期为 100,在上述集合 V 中,数到第 100 个元素,它的衰减系数是集合 F 的第 100 项 (1 - beta)^99,只要它足够小,它后面的就相当于被彻底遗忘忽略不计了。

多小算足够小呢?取决于你自己。比如你认为 0.2 就足够小了,那就求解 (1 - beta)^99 > 0.2,选择一个 beta 即可。

前几天我论述的 dctcp,alpha 的系数 g 如何算呢:

α = ( 1 − g ) ∗ α + g ∗ F \alpha=(1-g)*\alpha+g*F α=(1g)α+gF

一个 F 需要延展到整个拥塞周期,在该周期内它均需要表现出影响力,设一个拥塞周期为 T,选定一个足够小到不被在乎的数 Q,只要在满足 ( 1 − g ) T > Q (1-g)^T>Q (1g)T>Q的 g 调得一手好参数即可。

如果既不知道什么是足够小,也不知道采样值的影响力周期,那就选择 1 / e 好了,因为 ( 1 − r ) 1 r (1-r)^{\frac{1}{r}} (1r)r1 的极限就是 1 / e,此时就求 ( 1 − β ) 1 β = 1 e (1-\beta)^{\frac{1}{\beta}}=\dfrac{1}{e} (1β)β1=e1 β 1 1 − β = 1 e \beta^{\frac{1}{1-\beta}}=\dfrac{1}{e} β1β1=e1就好,取决于你偏好当前还是偏好过往。

浙江温州皮鞋湿,下雨进水不会胖。

相关文章:

浅谈指数移动平均(ema)

经常在各种代码中看到指数移动平均(比如我专注的网络传输领域),但却不曾想到它就是诠释世界的方法,我们每个人都在被这种方式 “平均”… 今天说说指数移动平均(或移动指数平均,Exponential Moving Average)。 能查到的资料都侧重于其数学形…...

1-并发编程线程基础

什么是线程 在讨论什么是线程前有必要先说下什么是进程,因为线程是进程中的一个实体,线程本身是不会独立存在的。 进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径&#…...

vue中动态出来返回的时间秒数,在多少范围显示多少秒,多少范围显示分,小时等等

在Vue中&#xff0c;你可以使用计算属性&#xff08;computed property&#xff09;或过滤器&#xff08;filter&#xff09;来根据动态返回的时间秒数来显示不同的时间单位&#xff0c;比如秒、分、小时等等。 下面是一个使用计算属性的示例&#xff1a; <template>&l…...

English: go through customs

文章目录 常见单词机场指示登机和中转降落以及公共服务签证篇出/入境卡篇入境英语会话篇 常见单词 customs: 海关 (kʌstəmz)cash: 现金 (kʃ)passport: 护照 (pspɔːt)luggage/baggage: 行李 (lʌɡɪdʒ/ˈbɡɪdʒ)Exchange: 换钱 (ɪks’tʃeɪndʒ)airport: 飞机场 (ɛ…...

Nginx 多端口部署多站点

目录 1.进行nginx.conf 2.复制粘贴 3.修改端口及站点根目录 4. 网站上传 1.进行nginx.conf 在 nginx 主要配置文件 nginx.conf 中&#xff0c;server 是负责一个网站配置的&#xff0c;我们想要多个端口访问的话&#xff0c;可以复制多个 server 先进入到 nginx.conf 中 …...

从零开始配置kali2023环境:配置jupyter的多内核环境

在kali2023上面尝试用anaconda3&#xff0c;anaconda2安装实现配置jupyter的多内核环境时出现各种问题&#xff0c;现在可以通过镜像方式解决 1. 搜索镜像 ┌──(holyeyes㉿kali2023)-[~] └─$ sudo docker search anaconda ┌──(holyeyes㉿kali2023)-[~] └─$ sudo …...

Dart调用JS对10000条定位数据滤波

使用Dart调用JS&#xff0c;还是为了练习跨语言调用&#xff1b; 一、编写对应的JS代码 平时在开发时不推荐将算法放在JS里&#xff0c;我这里是简单的做一下数据过滤&#xff1b; 首先生成一些随机定位数据&#xff0c;在实际开发中可以使用真实数据&#xff1b; // 随机定…...

大模型应用实践:AIGC探索之旅

随着OpenAI推出ChatGPT&#xff0c;AIGC迎来了前所未有的发展机遇。大模型技术已经不仅仅是技术趋势&#xff0c;而是深刻地塑造着我们交流、工作和思考的方式。 本文介绍了笔者理解的大模型和AIGC的密切联系&#xff0c;从历史沿革到实际应用案例&#xff0c;再到面临的技术挑…...

【.NET Core】异步编程模式

【.NET Core】异步编程模式 文章目录 【.NET Core】异步编程模式一、概述二、基于任务的异步模式&#xff08;TAP&#xff09;2.1 TAP模式命名、参数和返回类型2.2 TAP初始化异步操2.3 TAP如何编译2.4 手动生成TAP方法2.5 混合方法实现TAP2.6 TAP中Await挂起执行2.7 TAP中使用Y…...

macOS通过外置驱动器备份数据

通过外置驱动器备份数据&#xff08;谨慎操作&#xff09; 1.将外置驱动器连接到您的 Mac。驱动器容量应等于或大于您当前的启动磁盘。驱动器还应该是您可以抹掉的。 2.使用 macOS 恢复功能 抹掉外置驱动器&#xff0c;然后将 macOS 安装 到外置驱动器上。确保您选择的外置驱动…...

rtsp解析视频流

这里先说一下 播放rtsp 视频流&#xff0c;尽量让后端转换一下其他格式的流进行播放。因为rtsp的流需要flash支持&#xff0c;现在很多浏览器不支持flash。 先说一下这里我没有用video-player插件&#xff0c;因为它需要用flash ,在一个是我下载flash后&#xff0c;还是无法播放…...

【物联网】手把手完整实现STM32+ESP8266+MQTT+阿里云+APP应用——第3节-云产品流转配置

&#x1f31f;博主领域&#xff1a;嵌入式领域&人工智能&软件开发 本节目标&#xff1a;本节目标是进行云产品流转配置为后面实际的手机APP的接入做铺垫。云产品流转配置的目的是为了后面能够让后面实际做出来的手机APP可以控制STM32/MCU&#xff0c;STM32/MCU可以将数…...

Spring Cloud Config相关问题及答案(2024)

1、什么是 Spring Cloud Config&#xff0c;它解决了哪些问题&#xff1f; Spring Cloud Config 是一个为微服务架构提供集中化外部配置支持的项目。它是构建在 Spring Cloud 生态系统之上&#xff0c;利用 Spring Boot 的开发便利性&#xff0c;简化了分布式系统中的配置管理…...

【Azure 架构师学习笔记】- Azure Databricks (4) - 使用Azure Key Vault 管理ADB Secret

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (3) - 再次认识DataBricks 前言 Azure Databricks有access token&#xff0c;是具有ADB内部最高权限的token。在云环境中这些高级别权限的sec…...

[每周一更]-(第50期):Go的垃圾回收GC

参考文章&#xff1a; https://juejin.cn/post/7111515970669117447https://draveness.me/golang/docs/part3-runtime/ch07-memory/golang-garbage-collector/https://colobu.com/2022/07/16/A-Guide-to-the-Go-Garbage-Collector/https://liangyaopei.github.io/2021/01/02/g…...

【嵌入式学习笔记-01】什么是UC,操作系统历史介绍,计算机系统分层,环境变量(PATH),错误

【嵌入式学习笔记】什么是UC&#xff0c;操作系统历史介绍&#xff0c;计算机系统分层&#xff0c;环境变量&#xff08;PATH&#xff09;&#xff0c;错误 文章目录 什么是UC?计算机系统分层什么是操作系统&#xff1f; 环境变量什么是环境变量&#xff1f;环境变量的添加&am…...

【动态规划】LeetCode-10. 正则表达式匹配

10. 正则表达式匹配。 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 s的&#xff0c;而不是部分字符串。 …...

lenovo联想拯救者8.8英寸掌上游戏机Legion Go 8APU1(83E1)原装出厂Windows11预装系统

链接&#xff1a;https://pan.baidu.com/s/1d586XWXcAWVxlLyV2Oku7Q?pwdd74t 提取码&#xff1a;d74t 系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件大小&#xff1a;…...

经典目标检测YOLO系列(一)复现YOLOV1(4)VOC2007数据集的读取及预处理

经典目标检测YOLO系列(一)复现YOLOV1(4)VOC2007数据集的读取及预处理 之前&#xff0c;我们依据《YOLO目标检测》(ISBN:9787115627094)一书&#xff0c;提出了新的YOLOV1架构&#xff0c;并解决前向推理过程中的两个问题&#xff0c;继续按照此书进行YOLOV1的复现。 经典目标检…...

Android Studio xml布局代码补全功能失效问题

这里写目录标题 前言&#xff1a;问题描述原因分析&#xff1a;解决方案&#xff1a;1.更新 Android Studio 版本2.原版本解决XML补全失效 小结 前言&#xff1a; 在开发过程中&#xff0c;你可能遇到很多奇奇怪怪的问题。Android Studio 编译器出现问题也是常有的事情&#x…...

Spratt Skills:基于LLM规划与代码执行的OpenClaw家庭自动化架构实践

1. 项目概述&#xff1a;Spratt Skills&#xff0c;一个为OpenClaw打造的家庭自动化基础设施套件 如果你正在使用OpenClaw&#xff0c;并且已经厌倦了让LLM&#xff08;大语言模型&#xff09;去处理那些它天生就不擅长的事情——比如定时发送消息、轮询航班状态、或者可靠地写…...

实验记录-农药种衣剂

1.显色度取决于种子颗粒大小&#xff0c;种子越大&#xff0c;则显色越差&#xff1b;2.需加入增稠剂...

Atlas机器人:人形设计、液压驱动与救灾场景下的技术权衡

1. 项目概述&#xff1a;Atlas&#xff0c;一个充满争议的工程里程碑2013年&#xff0c;当波士顿动力公司为DARPA&#xff08;美国国防高级研究计划局&#xff09;打造的Atlas机器人首次公开亮相时&#xff0c;它在工程技术社区引发的震动&#xff0c;远不止于其令人惊叹的行走…...

2026年医疗卫生/护理求职AI工具横评:白衣天使的求职神器大比拼

导语 2026年&#xff0c;医疗卫生行业依然是最具社会价值和就业稳定性的行业之一。随着中国老龄化加速&#xff0c;医护人员需求持续扩大&#xff0c;仅公立医院护士岗位需求量就突破200万。然而&#xff0c;医护求职并不轻松&#xff1a;编制紧张、规培政策复杂、职称考试压力…...

GLIGEN图像空间控制:用边界框实现像素级精准生成

1. GLIGEN&#xff1a;不是又一个“AI画图玩具”&#xff0c;而是图像生成控制权的真正移交你有没有试过对着 Stable Diffusion 的提示词框反复修改半小时&#xff0c;就为了把一只猫准确地放在沙发左边、让咖啡杯稳稳立在桌面上、让窗外的梧桐树只出现在画面右上角——结果生成…...

长期使用taotoken token plan套餐的成本节约感受

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用 Taotoken Token Plan 套餐的成本节约感受 对于需要稳定调用大模型 API 的个人开发者或团队而言&#xff0c;成本控制是一…...

AI赋能医院物流:基于PDCA循环的智能供应链韧性提升实践

1. 项目概述&#xff1a;当医院物流遇上AI与PDCA医院物流&#xff0c;听起来可能有点“幕后”&#xff0c;但它绝对是现代医疗体系顺畅运转的“大动脉”。从高值耗材、药品、检验试剂&#xff0c;到被服布草、医疗废物&#xff0c;甚至是一日三餐&#xff0c;这条链条上任何一个…...

三步搞定:iPaaS系统集成自动化配置实战

2025年&#xff0c;全球集成平台即服务&#xff08;iPaaS&#xff09;市场规模达到156.3亿美元&#xff0c;预计到2034年将增长至1087.6亿美元&#xff0c;年复合增长率高达24.20%。&#xff08;数据来源&#xff1a;Fortune Business Insights&#xff0c;2026年2月&#xff0…...

手把手教你用云GPU(极链AI云)零成本复现SlowFast视频动作识别,附完整配置文件与避坑指南

零成本云端复现SlowFast视频动作识别全攻略&#xff1a;极链AI云实战与参数精解 在计算机视觉领域&#xff0c;视频理解一直是个充满挑战的方向。不同于静态图像&#xff0c;视频数据包含丰富的时序信息&#xff0c;这对模型架构设计提出了更高要求。SlowFast作为Facebook AI R…...

Muse:现代化多仓库管理工具,提升开发效率与协作体验

1. 项目概述&#xff1a;一个面向开发者的现代化代码库管理工具最近在和一些团队交流时&#xff0c;发现一个挺普遍的现象&#xff1a;大家手头的项目代码库越来越多&#xff0c;有的是自己维护的开源项目&#xff0c;有的是公司内部的核心业务模块&#xff0c;还有一堆实验性的…...