Yolo Vision Shenzhen
Shenzhen
Junte-se agora
Glossário

Mistura de profundidades (MoD)

Explore como a Mixture of Depths (MoD) otimiza a eficiência da IA ao encaminhar tokens dinamicamente. Saiba como essa técnica reduz FLOPs no Ultralytics e LLMs.

Em arquiteturas de aprendizagem profunda, a eficiência computacional é fundamental, especialmente ao processar sequências longas ou entradas de alta resolução. Uma nova abordagem aloca dinamicamente recursos computacionais, permitindo que a rede decida quais partes da entrada requerem processamento completo e quais podem ignorar determinadas camadas com segurança. Essa estratégia de roteamento dinâmico reduz a complexidade computacional geral sem sacrificar o poder preditivo ou a precisão do modelo.

Compreender o conceito

Mixture of Depths (MoD) é uma técnica arquitetónica aplicada principalmente a arquiteturas Transformer, nas quais o modelo aprende a ignorar dinamicamente o cálculo de tokens específicos em várias camadas. Os transformadores tradicionais processam todos os tokens em todas as camadas, sejam eles informações cruciais ou conteúdo de preenchimento. Em contrapartida, um modelo MoD usa um mecanismo de roteador para avaliar os tokens e atribuir-lhes uma pontuação. Apenas os tokens com pontuação mais alta — até um limite de capacidade predefinido — são passados pelos blocos de computação pesados, como mecanismos de atenção ou camadas densas de feed-forward . Os tokens restantes contornam o bloco por meio de conexões residuais, criando efetivamente uma "mistura de profundidades" em que diferentes tokens experimentam níveis variados de profundidade de processamento.

Este método, popularizado pela recente investigação da DeepMind e documentado extensivamente no repositório arXiv, reduz drasticamente o número total de operações de ponto flutuante (FLOPs) necessárias durante o treinamento e a inferência.

Diferenciando-se da Mistura de Especialistas (MoE)

É fácil confundir este conceito com uma Mistura de Especialistas (MoE). Embora ambos utilizem mecanismos de encaminhamento, resolvem problemas diferentes:

  • O MoE encaminha tokens para diferentes sub-redes (especialistas) dentro de uma camada. A profundidade computacional permanece a mesma para todos os tokens, mas a contagem de parâmetros do modelo aumenta.
  • O MoD encaminha os tokens para o bloco de computação ou para uma conexão de salto. A contagem de parâmetros permanece estritamente constante, mas a profundidade computacional diminui para tokens menos importantes, melhorando diretamente a latência de inferência.

Aplicações no Mundo Real

A capacidade de dimensionar dinamicamente os recursos computacionais torna essa técnica altamente valiosa em vários domínios da visão computacional e do processamento de linguagem natural.

  1. Otimização de contexto em modelos linguísticos: modernos modelos linguísticos de grande porte (LLMs) de organizações como OpenAI e Anthropic processam janelas de contexto massivas. Ao empregar o encaminhamento dinâmico de profundidade , esses modelos podem ignorar palavras de preenchimento estruturais ou repetitivas, reservando a computação profunda para etapas complexas de raciocínio e extração factual.
  2. Visão artificial de alta resolução: em sistemas de visão avançados, como o modelo Ultralytics , o processamento de imagens grandes para deteção de objetos e segmentação de imagens requer uma memória imensa. O roteamento de profundidade permite que a rede ignore a extração de recursos em fundos uniformes (como céus vazios ou paredes em branco ), concentrando o poder computacional em objetos complexos em primeiro plano. Isso é crucial para a implantação de modelos em hardware de IA de ponta com recursos limitados, otimizado por bibliotecas CUDA .

Exemplo de implementação

Abaixo está um PyTorch conceitual PyTorch demonstrando como um mecanismo básico de roteamento pode ignorar o cálculo de uma parte dos tokens de entrada, simulando um comportamento de roteamento em profundidade.

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)

Ao aproveitar estruturas como a PyTorch ou TensorFlow, os programadores podem integrar esses blocos de otimização de modelos personalizados. Além disso, ferramentas como a Ultralytics ajudam as equipas a gerir os dados de treino necessários para treinar com precisão esses roteadores, além de se integrarem perfeitamente a ecossistemas empresariais como o Google AI.

Energize-se com o Ultralytics YOLO

Obtenha visão de IA avançada para seus projetos. Encontre a licença certa para seus objetivos hoje.

Explore as opções de licenciamento