YOLO Vision 2026:
返回 Ultralytics 术语表

Mixture of Depths (MoD)

探索深度混合(MoD)如何通过动态路由 token 优化 AI 效率。了解该技术如何减少 Ultralytics YOLO26 和 LLMs 中的 FLOPs。

在深度学习架构中,计算效率至关重要,尤其是在处理长序列或高分辨率输入时。一种新颖的方法是动态分配计算资源,让网络决定输入的哪些部分需要完整处理,哪些部分可以安全地跳过某些层。这种动态路由策略在不牺牲模型预测能力或准确性的情况下,降低了整体计算复杂度

理解这一概念#

深度混合(MoD)是一种架构技术,主要应用于Transformer 架构,模型会学习在不同层动态跳过对特定 token 的计算。传统 Transformer 会让每个 token 经过每一层,无论它是关键信息还是填充内容。相比之下,MoD 模型使用路由器机制评估 token 并为其分配分数。只有得分最高的 token(最多达到预先设定的容量上限)才会通过计算量较大的计算模块,例如注意力机制或稠密前馈层。其余 token 则通过残差连接绕过该模块,从而有效形成一种“深度混合”,让不同 token 经历不同程度的处理深度。

这种方法因近期的DeepMind 研究而广为人知,并在arXiv 论文库中得到广泛记录,大幅减少了训练和推理期间所需的浮点运算(FLOPs)总数。

与专家混合(MoE)的区别#

这个概念很容易与专家混合(MoE)混淆。虽然两者都使用路由机制,但它们解决的是不同的问题:

  • MoE 将 token 路由到某一层中的不同子网络(专家)。所有 token 的计算深度保持不变,但模型的参数量会增加。
  • MoD 将 token 路由到计算模块或跳过连接。参数量严格保持不变,但不太重要的 token 的计算深度会降低,从而直接改善推理延迟

实际应用#

动态分配计算预算的能力,使这项技术在计算机视觉和自然语言处理等多个领域都极具价值。

  1. **语言模型中的上下文优化:**来自OpenAIAnthropic等组织的现代大语言模型(LLMs)会处理超大上下文窗口。通过采用动态深度路由,这些模型可以跳过结构性或重复性的填充词,将深度计算留给复杂的推理步骤和事实提取。

  2. **高分辨率视觉 AI:**在Ultralytics YOLO26等先进视觉系统中,为目标检测图像分割处理大图像需要大量内存。深度路由使网络能够跳过对均匀背景(如空旷的天空或空白墙壁)的特征提取,将计算能力集中于复杂的前景目标。这对于将模型部署到由CUDA 优化库优化的资源受限边缘 AI硬件上至关重要。

实现示例#

下面是一段概念性的 PyTorch 代码片段,用于演示基本路由机制如何跳过部分输入 token 的计算,以模拟深度路由行为。

import torch
import torch.nn as nn


class MixtureOfDepthsBlock(nn.Module):
    def __init__(self, d_model, capacity_factor=0.5):
        super().__init__()
        self.capacity_factor = capacity_factor
        self.router = nn.Linear(d_model, 1)
        self.heavy_compute = nn.Sequential(nn.Linear(d_model, d_model * 4), nn.GELU(), nn.Linear(d_model * 4, d_model))

    def forward(self, x):
        # x shape: (batch_size, seq_len, d_model)
        seq_len = x.size(1)
        capacity = int(seq_len * self.capacity_factor)

        # 1. Compute routing scores
        scores = self.router(x).squeeze(-1)  # Shape: (batch_size, seq_len)

        # 2. Identify top-k tokens to process
        topk_indices = torch.topk(scores, capacity, dim=1).indices

        # 3. Create an output tensor mirroring the input (residual baseline)
        output = x.clone()

        # 4. Apply heavy computation only to the selected tokens
        for b in range(x.size(0)):
            selected_tokens = x[b, topk_indices[b]]
            processed_tokens = self.heavy_compute(selected_tokens)
            output[b, topk_indices[b]] += processed_tokens

        return output


# Example usage
dummy_input = torch.randn(2, 64, 128)  # Batch=2, Seq=64, Dim=128
mod_block = MixtureOfDepthsBlock(d_model=128, capacity_factor=0.5)
output = mod_block(dummy_input)
print(f"Output shape: {output.shape}")  # Expect (2, 64, 128)

借助PyTorch 框架TensorFlow等框架,开发者可以集成这些自定义的模型优化模块。此外,Ultralytics Platform等工具可以帮助团队管理准确训练这些路由器所需的训练数据,并与Google Cloud AI等企业生态系统实现无缝集成。

Explore solutions

让我们共同构建 AI 的未来!

开启你的机器学习未来之旅