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

Back to the Features:附录A

AImplementation and training

A.1Architecture

视频编码器

在主要实验中,我们使用带有寄存器(registers)[23]的 DINOv2 ViT-B/14 作为帧编码器。该模型有 12 个 Transformer 模块,嵌入维度为 768,12 个注意力头,以及 14×14 的块大小。我们使用官方代码库中发布的代码和权重。我们分别处理每一帧,并将最后一个 Transformer 模块在最终层归一化(LAYERNORM)之后的输出作为帧表示。具体而言,对于大小为 224×224 的输入帧,我们获得 256 个维度为 768 的块标记(patch tokens)。分类标记(CLS token)和寄存器被丢弃。

在用于对比实验(以探索不同组件或参数设置对模型性能影响)的替代图像编码器研究中,我们使用以下模型:

  • 从 Hugging Face Hub 下载的 SigLIP 2 SO400M 模型[51]。该模型使用的块大小与 DINOv2 相同,为 14×14,并且具有更大的嵌入维度 1152。
  • 从 Hugging Face Hub 下载的 Stable Diffusion 3.5 中等规模的变分自编码器(VAE)标记器(tokenizer)[67]。该模型使用更小的 8×8 块大小和更小的 16 维嵌入。为了更好地近似其他模型的嵌入维度和序列长度,我们将四个相邻块的块标记连接起来,得到 64 维的嵌入和 16×16 的有效块大小。
整体架构介绍

这部分内容主要围绕视频编码器展开,介绍了在主要实验以及对比实验中所使用的不同图像编码器模型。在计算机视觉和深度学习领域,图像编码器用于将输入的图像(在视频处理中即每一帧图像)转换为具有特定特征表示的向量,这些特征表示后续可用于各种任务,如视频预测、分类等。

主要实验使用的编码器
  • DINOv2 ViT-B/14
    • 模型结构:它包含 12 个 Transformer 模块,Transformer 是一种强大的深度学习架构,通过自注意力机制能够捕捉数据中的长距离依赖关系。嵌入维度为 768,意味着每个输入元素(这里是图像块)会被映射到一个 768 维的空间中。12 个注意力头允许模型在不同的子空间中并行学习不同的注意力模式。块大小为 14×14,即将输入图像分割成 14×14 像素的小块进行处理。
    • 数据处理方式:使用官方发布的代码和权重,对每一帧图像单独处理。取最后一个 Transformer 模块在最终层归一化之后的输出作为帧表示。输入 224×224 大小的图像,会得到 256 个 768 维的块标记,同时丢弃分类标记和寄存器。分类标记通常用于图像分类任务中聚合整个图像的信息,而这里可能不需要它来进行帧表示;寄存器的作用未在文中详细说明,但也被丢弃。
对比实验使用的编码器
  • SigLIP 2 SO400M 模型
    • 来源和块大小:从 Hugging Face Hub 下载,块大小与 DINOv2 相同为 14×14,这使得在块级别的处理上具有一定的可比性。
    • 嵌入维度:具有更大的嵌入维度 1152,更大的嵌入维度可能能够捕捉更丰富的图像特征,但也会增加计算量和模型复杂度。
  • Stable Diffusion 3.5 中等规模的 VAE 标记器
    • 初始块大小和嵌入维度:使用更小的 8×8 块大小和 16 维嵌入,较小的块大小和嵌入维度会使模型对图像的表示更加局部和紧凑。
    • 调整方式:为了与其他模型在嵌入维度和序列长度上进行更好的比较,将四个相邻块的块标记连接起来,得到 64 维的嵌入和 16×16 的有效块大小。这样可以在一定程度上平衡模型的局部表示能力和与其他模型的兼容性。

Unconditional predictor

预测器由一系列预归一化(pre-norm)的交叉注意力 Transformer 模块堆叠而成,这些模块允许查询标记(query token(s))关注由视频编码器生成的上文标记(context tokens)。一开始,视频编码器的特征会通过一个线性层,以匹配 Transformer 的嵌入维度。同样,在最后,最后一个 Transformer 模块的输出会经过一层归一化(LAYERNORM)和一个线性层,以生成与视频编码器处于同一空间的最终预测结果。表 5 总结了我们在实验中使用的 Transformer 模型的配置。

每个标记,无论是用作上文的来自视频编码器的块标记(patch token),还是用于未来预测的查询标记,都与位置信息相关联。位置信息是一个元组 (τ, i, j),其中 τ 表示以秒为单位的呈现时间戳,(i, j) 表示原始视频中块的空间坐标。在每个 Transformer 模块中,我们按照 RoPE [55] 中描述的旋转操作对标记进行处理,从而将位置信息注入到注意力操作中。具体而言,由于我们需要沿三个轴编码位置信息,我们将每个注意力头的 60 维分成三个 20 维的部分,对每个部分应用由 10 个角周期推导出的 RoPE 旋转。对于每个注意力头,嵌入的后 4 维保持不变,即不进行旋转。

时间位置的一般取值范围在 0 到 5 秒之间,归一化空间位置的取值范围在 0 到 1 之间。因此,我们选择将 RoPE 的十个角周期均匀分布在 10^(-2) 到 10^2 之间,以覆盖时间和空间上大范围的相对距离:
ω=10linspace(−2,2,steps=10)(5) ω = 10^linspace(-2, 2, steps=10) (5) ω=10linspace(2,2,steps=10)(5)

预测器整体结构
  • 预归一化交叉注意力 Transformer 模块堆叠:预测器是由多个预归一化的交叉注意力 Transformer 模块堆叠构建而成。预归一化是指在每个子层(如注意力层、前馈神经网络层)之前进行归一化操作,这种结构有助于提高训练的稳定性和收敛速度。交叉注意力机制使得查询标记能够关注上文标记,这对于从视频编码器生成的特征中提取有用信息以进行预测至关重要。
  • 输入输出维度匹配
    • 输入处理:视频编码器生成的特征维度可能与 Transformer 模块期望的嵌入维度不一致。因此,在将视频编码器特征输入到预测器之前,需要将其通过一个线性层进行维度变换,使其匹配 Transformer 的嵌入维度,确保数据能够在模型中顺利流动。
    • 输出处理:最后一个 Transformer 模块的输出同样需要经过处理,以生成与视频编码器处于同一空间的最终预测结果。先经过层归一化(LAYERNORM)对输出进行标准化处理,稳定训练过程,再通过一个线性层将输出映射到合适的维度和空间,以便与后续任务(如评估预测准确性)进行对接。
标记的位置信息处理
  • 位置信息表示:每个标记都携带位置信息,这对于视频预测任务非常重要,因为时间和空间位置信息能够帮助模型理解视频中物体的运动和变化。位置信息以元组 (τ, i, j) 的形式表示,其中 τ 是时间戳,记录了标记在视频中出现的时间; (i, j) 是空间坐标,表示标记在原始视频帧中的位置。
  • RoPE 旋转操作
    • 维度划分与旋转:为了将位置信息注入到注意力操作中,采用 RoPE(Rotary Position Embedding)方法。由于需要沿时间、水平空间和垂直空间三个轴编码位置信息,将每个注意力头的 60 维特征分成三个 20 维的部分。然后,根据由 10 个角周期推导出的旋转矩阵,对每个 20 维部分进行旋转操作。这种旋转操作能够将位置信息巧妙地融入到标记的表示中,使得注意力机制能够感知到标记之间的相对位置关系。
    • 保留部分维度不变:对于每个注意力头,嵌入的后 4 维保持不变,不进行旋转。这可能是为了保留一些与位置无关的特征信息,或者出于模型设计和计算效率的考虑。
  • 角周期选择:时间位置的取值范围通常在 0 到 5 秒之间,归一化空间位置的取值范围在 0 到 1 之间。为了能够覆盖时间和空间上大范围的相对距离,选择将 RoPE 的十个角周期均匀分布在 10^(-2) 到 10^2 之间。这样可以使模型在处理不同距离的位置关系时具有更好的泛化能力,无论是近距离还是远距离的位置变化,都能够被有效地编码和利用。

Action blocks

当将无条件预测器适配到基于动作(action-conditioned)的设定中时,我们向模型添加动作模块(action blocks),在每个 Transformer 模块之后添加一个。在模型的起始处,一个线性层将低维的动作表示投影到与 Transformer 相同的嵌入维度。然后,动作模块将查询标记(query token)和动作嵌入(action embedding)作为输入,将它们拼接起来,并使其通过常规残差多层感知机(MLP)模块的相同操作,该模块输出的 D 维结果仅添加到查询标记上。在初始化时,动作模块的层缩放参数(layer scale parameters)设置为零,因此它们的作用相当于恒等映射。向“基础”预测器添加 12 个动作模块,会使参数数量增加约 2200 万。

适配背景与目的

在深度学习模型中,无条件预测器是指在进行预测时不依赖额外的外部条件信息。而基于动作的设定意味着预测过程需要考虑特定的动作信息,例如在视频预测任务中,不同的动作可能会导致视频后续帧发生不同的变化。因此,将无条件预测器适配到基于动作的设定,是为了让模型能够根据给定的动作信息做出更准确、符合实际情况的预测。

具体适配方法
  1. 动作模块的添加位置
    在每个 Transformer 模块之后添加一个动作模块。这样做的原因是 Transformer 模块在处理输入数据时已经提取了一定层次的特征,在每个 Transformer 模块后添加动作模块可以逐步将动作信息融入到不同层次的特征表示中,使模型能够更好地结合动作信息和原始数据特征进行预测。
  2. 动作表示的维度调整
    在模型起始处,使用一个线性层将低维的动作表示投影到与 Transformer 相同的嵌入维度。这是因为后续的动作模块和 Transformer 模块需要在相同维度的特征空间中进行操作和计算,通过线性层的投影可以将动作表示转换到合适的维度,以便与模型中的其他部分进行兼容和交互。
  3. 动作模块的内部操作
    • 输入拼接:动作模块将查询标记和动作嵌入作为输入,并将它们拼接起来。查询标记通常是在注意力机制中用于查询相关信息的关键元素,将动作嵌入与之拼接,使得动作信息能够参与到后续的计算过程中,影响查询标记的更新和特征的提取。
    • 残差 MLP 操作:拼接后的输入通过常规残差多层感知机(MLP)模块的相同操作。残差连接是深度学习中常用的一种技术,它允许梯度更直接地反向传播,缓解了深层网络训练中的梯度消失问题,有助于训练更深层次的模型。MLP 模块可以对拼接后的输入进行非线性变换,提取更复杂的特征。该模块输出的 D 维结果仅添加到查询标记上,这意味着动作信息主要通过影响查询标记来间接影响整个模型的预测过程,而不是直接改变所有特征。
  4. 初始化设置
    在初始化时,将动作模块的层缩放参数设置为零。层缩放参数通常用于调整每一层的输出幅度,将其初始化为零使得动作模块在初始阶段的作用相当于恒等映射。也就是说,在训练开始时,动作模块不会对模型的输出产生额外的影响,模型主要基于原始的无条件预测逻辑进行学习。随着训练的进行,模型逐渐调整动作模块的参数,使其能够根据动作信息对预测结果进行合理的修正。
  5. 参数数量变化
    向“基础”预测器添加 12 个动作模块,会使参数数量增加约 2200 万。这表明动作模块的引入增加了模型的复杂度,因为每个动作模块都包含一定数量的可学习参数,如线性层的权重和偏置等。更多的参数意味着模型具有更强的表达能力,但同时也增加了训练的难度和过拟合的风险,因此需要合理设计模型结构和调整训练策略。

A.2 Optimization

训练目标

预测器的输出会直接与视频编码器对应帧的输出进行比较。作为训练目标,我们旨在最小化预测的块特征与目标特征之间的逐元素平滑L1损失,对于(∀i′,j′,t∈{1,…,T−1}(\forall i', j', t \in \{1, \ldots, T - 1\}(i,j,t{1,,T1}):
L(xt+1,i′,j′,x^t+1,i′,j′)={12β(x−x^)2,if ∣x−x^∣<β∣x−x^∣−β2,otherwisewith β=0.1.(6) \mathcal{L}(x_{t + 1, i', j'}, \hat{x}_{t + 1, i', j'}) = \begin{cases} \frac{1}{2\beta}(x - \hat{x})^2, & \text{if } |x - \hat{x}| < \beta \\ |x - \hat{x}| - \frac{\beta}{2}, & \text{otherwise} \end{cases} \quad \text{with } \beta = 0.1. \quad (6) L(xt+1,i,j,x^t+1,i,j)={2β1(xx^)2,xx^2β,if xx^<βotherwisewith β=0.1.(6)

超参数

我们使用AdamW优化器[57]对预测器进行30万次迭代训练,批量大小为1024。学习率在5000次迭代中从0线性增加到(10−4(10^{-4}(104),然后保持不变。权重衰减设置为常数0.4。我们发现,当使用余弦衰减学习率调度和/或逐渐增加权重衰减时,性能没有显著差异。

计算资源

我们在多节点设置中训练所有模型,每个节点包含八个NVIDIA H100 GPU,内存为80GB。基础、大型和超大型预测器的训练时间和计算资源总结在表5中。

表5:模型大小和计算资源。对于每个模型大小,我们报告嵌入维度、Transformer模块数量、注意力头数量、MLP比例和参数总数。我们还报告了用于训练模型的GPU节点数量和训练小时数。

嵌入维度模块数头数MLP比例参数数量节点数训练小时数
基础76812124.086M445.3
大型102424164.0304M870.2
超大型153640244.01.1B1695.6
训练目标部分

在视频预测任务中,预测器的输出需要与视频编码器对应帧的输出进行对比。这里采用了平滑L1损失函数来衡量预测的块特征与目标特征之间的差异。平滑L1损失函数在预测值与目标值差异较小时(小于(\beta = 0.1)),采用平方损失,使得损失函数在接近目标值时更加平滑;当差异较大时,采用线性损失,避免平方损失可能导致的梯度爆炸问题。这种损失函数的设计有助于模型在训练过程中更稳定地收敛。

超参数部分
  • 优化器和迭代次数:使用AdamW优化器对预测器进行训练,总共进行30万次迭代。AdamW是一种带有权重衰减的Adam优化器,能够有效防止模型过拟合。
  • 批量大小:设置为1024,较大的批量大小可以提高训练效率,但也会增加内存需求。
  • 学习率调度:学习率在训练初期从0线性增加到(10^{-4}),然后保持不变。这种学习率调度策略有助于模型在训练初期快速收敛,后期稳定优化。
  • 权重衰减:设置为0.4,用于防止模型过拟合,通过在损失函数中添加权重衰减项,限制模型参数的大小。
  • 性能对比:尝试了余弦衰减学习率调度和逐渐增加权重衰减的方法,但发现对模型性能没有显著影响。
计算资源部分
  • 多节点训练:采用多节点设置,每个节点配备八个NVIDIA H100 GPU,内存为80GB,这种硬件配置能够提供强大的计算能力,加速模型训练过程。
  • 模型资源总结:表5详细列出了不同规模模型(基础、大型、超大型)的参数信息,包括嵌入维度、Transformer模块数量、注意力头数量、MLP比例和参数总数,以及训练所需的GPU节点数量和训练时间。这些信息有助于评估不同规模模型的计算成本和资源需求。
http://www.dtcms.com/a/312599.html

相关文章:

  • [创业之路-532]:知识、技能、技术、科学各自解决什么问题?
  • 手机(电脑)与音响的蓝牙通信
  • 15_01_opencv_形态学滤波
  • 动态置信度调优实战:YOLOv11多目标追踪精度跃迁方案(附完整代码)
  • C++引用:高效安全的别名机制详解
  • 用于 UBI 的 Elasticsearch 插件:从搜索查询中分析用户行为
  • centos9 安装docker engine
  • Parcel 使用详解:零配置的前端打包工具
  • RPG增容3:尝试使用MVC结构搭建玩家升级UI(一)
  • Spring MVC 九大组件源码深度剖析(一):MultipartResolver - 文件上传的幕后指挥官
  • 服务端⾼并发分布式结构演进之路
  • mysql管理
  • Kafka 是什么?
  • C语言--结构体
  • Abaqus显示组怎么使用
  • 动态规划精讲:01背包问题的理论、优化与三大经典变种应用
  • kafka与其他消息队列(如 RabbitMQ, ActiveMQ)相比,有什么优缺点?
  • 渗透作业4
  • 华为云云服务高级顾问叶正晖:华为对多模态大模型的思考与实践
  • 在AI时代,如何制定有效的职业规划?AI时代职业规划与产品经理角色
  • ThinkPHP8.x控制器和模型的使用方法
  • MySQL学习之MVCC多版本并发控制
  • React中的Hooks
  • 量子态演化算符性质与形成原因总结
  • 决策树分类实战:从数据到模型优化
  • 代驾管理系统:智慧出行的重要支撑
  • 8.3 滑窗 |栈|阶乘判断
  • vector<int> adjList[MAX] 和 vector<int> adjList(MAX)的区别【C++】
  • 记录NVIDIA Orin启动流程,镜像文件,AB双分区,ota升级
  • STM32复位电路解析