视觉特征提取器-训练范式02-自监督-掩码图像建模01:MAE的Mask Vector【所有遮挡块复制同一个共享可学习向量】【初始化完全相同,预训练后仍为同一个参数向量】【各位置差异仅由位置编码提供】

发布时间:2026/10/4 20:16:08

视觉特征提取器-训练范式02-自监督-掩码图像建模01:MAE的Mask Vector【所有遮挡块复制同一个共享可学习向量】【初始化完全相同,预训练后仍为同一个参数向量】【各位置差异仅由位置编码提供】 MAE 中的 Mask Vector:从形状、初始化到预训练与推理1. Mask Vector 到底是什么?论文《Masked Autoencoders Are Scalable Vision Learners》的核心任务是:随机删除图片中的大量 patch,只让 Encoder 观察剩余 patch,再让 Decoder 重建被删除的 patch。MAE 使用一个特殊的掩码向量(mask vector)来告诉 Decoder:“这个位置原本存在一个 patch,但它的内容现在未知,需要预测。”论文将每个掩码标记(mask token)描述为共享的、通过学习得到的向量。同时,MAE 的 Encoder 只处理真实的可见图像块(visible patches),mask token 只在 Decoder 中出现。因此,首先要建立最重要的概念:maskvector不是缺失patch的内容,而是缺失patch的可学习占位符。\boxed{\text{mask vector 不是缺失 patch 的内容,而是缺失 patch 的可学习占位符。}}maskvector不是缺失patch的内容,而是缺失patch的可学习占位符。​2. Masked Patch、Mask Token 和 Mask Vector 的区别这三个概念不能混淆。被掩码图像块(masked patch)是原始图片中真实存在、后来被随机删除的 patch。例如原始图片有:[P0,P1,P2,P3,P4,P5,P6,P7][P_0,P_1,P_2,P_3,P_4,P_5,P_6,P_7][P0​,P1​,P2​,P3​,P4​,P5​,P6​,P7​]假设只保留P1P_1P1​和P3P_3P3​,那么其他 6 个 patch 都属于 masked patches。但在 Encoder 中,它们不是被替换成某个特殊向量,而是直接被删除。论文明确说明 Encoder 不使用 mask tokens。掩码向量(mask vector)则是模型真正保存的一个可训练参数,记为:m\mathbf mm掩码标记(mask token)可以理解为把这个m\mathbf mm复制到某个缺失位置后得到的 token。因此:一个maskvector→复制出很多masktokens\boxed{\text{一个 mask vector}\rightarrow\text{复制出很多 mask tokens}}一个maskvector→复制出很多masktokens​而不是每个 masked patch 都拥有自己独立的 mask vector。3. Mask Vector 的形状假设 Decoder 的隐藏维度为:DDD_DDD​那么从数学上看:m∈RDD\mathbf m\in\mathbb R^{D_D}m∈RDD​官方 MAE PyTorch 实现将它保存为:self.mask_token=nn.Parameter(torch.zeros(1,1,decoder_embed_dim))所以张量形状是:1×1×DD\boxed{1\times1\times D_D}1×1×DD​​官方 MAE 的 ViT-Base、ViT-Large 和 ViT-Huge 配置都采用 512 维 Decoder,因此这些默认模型中的 mask token 参数形状为:1×1×512\boxed{1\times1\times512}1×1×512​官方代码同时表明,ViT-Large 的 Encoder 维度为 1024,而 Decoder 维度为 512;Encoder 输出首先通过线性层映射到 Decoder 维度,然后才加入 mask tokens。这说明一个重要事实:maskvector属于Decoder表示空间,而不是Encoder表示空间。\boxed{\text{mask vector 属于 Decoder 表示空间,而不是 Encoder 表示空间。}}maskvector属于Decoder表示空间,而不是Encoder表示空间。​4. 为什么形状是[1, 1, 512]?可以把它拆成:[1, 1, 512] │ │ │ │ │ └── 一个 token 含 512 个特征 │ └────── 只有一个 mask token 参数 └───────── batch 维真正需要模型学习的是:m=[m1,m2,…,m512]\mathbf m=[m_1,m_2,\ldots,m_{512}]m=[m1​,m2​,…,m512​]也就是 512 个标量。如果一张图片有 147 个 masked patches,并不意味着模型学习:147×512147\times512147×512套独立参数。它只学习一个:m\mathbf mm然后重复使用。5. “Shared” 到底是什么意思?假设一张224×224224\times224224×224图片使用16×1616\times1616×16patch。patch 总数:L=22416×22416=14×14=196L=\frac{224}{16}\times\frac{224}{16}=14\times14=196L=16224​×16224​=14×14=196MAE 的典型 masking ratio 为 75%,因此:Lvisible=196×0.25=49L_{\text{visible}}=196\times0.25=49Lvisible​=196×0.25=49Lmasked=196−49=147L_{\text{masked}}=196-49=147Lmasked​=196−49=147论文的默认设置就是 75% masking ratio,并使用 512 维 Decoder。对于这 147 个缺失位置,模型不是学习:m1,m2,…,m147\mathbf m_1,\mathbf m_2,\ldots,\mathbf m_{147}m1​,m2​,…,m147​而是使用:m,m,…,m⏟147次\underbrace{\mathbf m,\mathbf m,\ldots,\mathbf m}_{147\text{ 次}}147次m,m,…,m​​所以共享(shared)的准确含义是:同一张图片的所有 masked positions、不同图片的 masked positions,都使用同一个可训练参数m\mathbf mm。6. Mask Vector 如何初始化?这里要区分“论文描述”和“官方代码实现”。论文说明它是可学习向量(learned vector),但方法部分并没有指定它必须按照什么概率分布初始化。官方 PyTorch 实现首先创建全零参数张量:self.mask_token=nn.Parameter(torch.zeros(1,1,decoder_embed_dim))随后在模型初始化函数中执行:torch.nn.init.normal_(self.mask_token,std=.02)因此真正开始训练时,每个维度近似满足:mj∼N(0,0.022)m_j\sim\mathcal N(0,0.02^2)mj​∼N(0,0.022)也就是说:创建时先是零张量,正式训练前再用标准差0.02的正态随机数初始化。\boxed{\text{创建时先是零张量,正式训练前再用标准差 0.02 的正态随机数初始化。}}创建时先是零张量,正式训练前再用标准差0.02的正态随机数初始化。​刚初始化时,这些数字没有“狗”“天空”“汽车”等视觉语义,它只是一个待优化的小随机向量。7. Mask Vector 在 Encoder 中出现吗?不出现。这是 MAE 与很多容易产生的直觉最不一样的地方。假设:[P0,P1,P2,P3,P4,P5,P6,P7][P_0,P_1,P_2,P_3,P_4,P_5,P_6,P_7][P0​,P1​,P2​,P3​,P4​,P5​,P6​,P7​]只保留:P1,P3P_1,P_3P1​,P3​Encoder 实际处理的是:[P1,P3][P_1,P_3][P1​,P3​]而不是:[m,P1,m,P3,m,m,m,m][\mathbf m,P_1,\mathbf m,P_3,\mathbf m,\mathbf m,\mathbf m,\mathbf m][m,P1​,m,P3​,m,m,m,m]论文明确采用非对称编码器—解码器(asymmetric encoder-decoder):Encoder 只处理 visible patches,而完整 token 集合只交给较轻量的 Decoder。这样既减少计算量,也避免 Encoder 在预训练阶段依赖下游完整图片中不存在的 mask tokens。
延伸阅读

更多相关文章

2026/10/4 20:11:57

基于STM32的仓库环境监测与远程控制系统设计

1. 项目概述与需求拆解1.1 这个系统到底是干嘛的先把这个项目说透。仓库环境控制系统,核心任务就是三件事:监测、决策、执行。监测说的是温湿度、粉尘浓度这些环境参数要能实时看到;决策指的是系统要根据这些参数自动判断“现在该不该通风”“…

2026/10/4 20:11:57

《创业之路》-985-既然大部分的随机变异、创新都是失败的,为什么生命体和人类社会不朝着熵增和热寂的方向演进?而是朝着熵增,更复杂的方向演进?

整体大系统永远在走向熵增;生命体、人类社会并不是整体走向熵增,而是局部子系统走向愈加复杂。整个外部环境承担更大的熵增代价。热寂是宇宙整体假说,子系统本身不会走向热寂,热寂是全部宇宙达到最大熵的终态。绝大多数变异、创新…

2026/10/4 20:11:57

FreeRTOS-Plus-CLI实战:让MCU调试像操作Linux终端一样高效

做嵌入式开发的朋友应该都有过这种经历:板子跑起来以后,想知道某个外设寄存器的值、想知道任务堆栈还剩多少,最原始的办法就是加 printf,串口一顿刷,刷完还得在日志里翻。代码里到处都是 DEBUG_PRINTF,发布…

2026/10/4 20:11:57

Python28-29:核心语法-流程控制语句-while循环

while循环:通过条件表达式,来控制是否要进行下一次循环1. while循环的语法格式2. while循环的注意事项条件表达式的结果为布尔类型通过空格缩进表述层级关系规划好循环终止的条件,否则将无限循环(死循环)# 打印10遍“人…

2026/10/4 20:11:57

RK平台MIPI屏休眠唤醒黑屏有背光问题排查与解决

1. 现象定位:先把“黑屏有背光”拆成两个独立故障域做RK平台显示驱动,最难缠的往往不是第一次点屏,而是“休眠唤醒之后黑屏但有背光”这种半死不活的状态。rk3326搭配ST7701S这类MIPI DSI屏时,这个问题尤其典型:系统已…

2026/10/4 20:06:57

无人机电网巡检AI平台落地全解析:架构、模型调参与验收避坑

简介:一份面向电力能源行业巡检人员、无人机技术开发者与电网运维决策者的PPT解决方案,系统阐述AI电网巡检平台的建设路径。内容从传统人工巡检效率低、安全隐患大、数据精度不足等痛点切入,结合5G低时延、多光谱传感融合、RTKIMU高精度定位与…

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑