深圳Yolo 视觉
深圳
立即加入
词汇表

深度混合 (MoD)

探索深度混合 (MoD) 如何通过动态路由 token 来优化 AI 效率。了解该技术如何在 Ultralytics YOLO26 和 LLM 中减少 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. 高分辨率 Vision AI:Ultralytics YOLO26 模型等先进视觉系统中,处理大型图像以进行目标 detect图像 segmentation需要巨大的内存。深度路由允许网络跳过对均匀背景(如空旷的天空或空白墙壁)的特征提取,将计算能力集中在复杂的前景对象上。这对于将模型部署到由 CUDA optimization 库优化的资源受限的边缘 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 等企业生态系统无缝集成。

让我们一起共建AI的未来!

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