Yolo Vision Shenzhen
Shenzhen
Iscriviti ora
Glossario

Miscela di profondità (MoD)

Scopri come Mixture of Depths (MoD) ottimizza l'efficienza dell'IA instradando dinamicamente i token. Scopri come questa tecnica riduce i FLOP in Ultralytics e LLM.

Nelle architetture di deep learning, l'efficienza computazionale è fondamentale, specialmente quando si elaborano sequenze lunghe o input ad alta risoluzione. Un approccio innovativo alloca dinamicamente le risorse di calcolo consentendo alla rete di decidere quali parti dell'input richiedono un'elaborazione completa e quali possono tranquillamente bypassare determinati livelli. Questa strategia di routing dinamico riduce la complessità computazionale complessiva senza sacrificare la potenza predittiva o l'accuratezza del modello.

Comprendere il concetto

Mixture of Depths (MoD) è una tecnica architettonica applicata principalmente alle architetture Transformer, in cui il modello impara a saltare dinamicamente il calcolo di token specifici in vari livelli. I transformer tradizionali elaborano ogni token attraverso ogni livello, sia che si tratti di un'informazione cruciale o di contenuto di riempimento. Al contrario, un modello MoD utilizza un meccanismo di routing per valutare i token e assegnare loro un punteggio. Solo i token con il punteggio più alto, fino a un limite di capacità predefinito, vengono passati attraverso i blocchi di calcolo pesanti, come i meccanismi di attenzione o i livelli feed-forward densi . I token rimanenti bypassano il blocco tramite connessioni residue, creando efficacemente una "miscela di profondità" in cui token diversi sperimentano livelli variabili di profondità di elaborazione.

Questo metodo, reso popolare dalla recente ricerca DeepMind e documentato ampiamente nel repository arXiv, riduce drasticamente il numero totale di operazioni in virgola mobile (FLOP) richieste sia durante l' addestramento che durante l'inferenza.

Differenziarsi dal metodo Mixture of Experts (MoE)

È facile confondere questo concetto con quello di Mixture of Experts (MoE). Sebbene entrambi utilizzino meccanismi di routing, risolvono problemi diversi:

  • MoE indirizza i token a diverse sottoreti (esperti) all'interno di un livello. La profondità computazionale rimane la stessa per tutti i token, ma il numero di parametri del modello aumenta.
  • Il MoD indirizza i token al blocco di calcolo o a una connessione di salto. Il numero di parametri rimane assolutamente costante, ma la profondità di calcolo diminuisce per i token meno importanti, migliorando direttamente la latenza dell'inferenza.

Applicazioni nel mondo reale

La capacità di calcolare dinamicamente il budget rende questa tecnica molto preziosa in diversi ambiti della visione artificiale e dell'elaborazione del linguaggio naturale.

  1. Ottimizzazione del contesto nei modelli linguistici: i moderni modelli linguistici di grandi dimensioni (LLM) di organizzazioni come OpenAI e Anthropic elaborano finestre contestuali di grandi dimensioni. Utilizzando il routing dinamico in profondità , questi modelli possono saltare parole strutturali o ripetitive di riempimento, riservando il calcolo profondo per passaggi di ragionamento complessi ed estrazione di fatti.
  2. Visione AI ad alta risoluzione: nei sistemi di visione avanzati come il modello Ultralytics , l'elaborazione di immagini di grandi dimensioni per il rilevamento di oggetti e la segmentazione delle immagini richiede una memoria enorme. Il routing di profondità consente alla rete di bypassare l'estrazione delle caratteristiche su sfondi uniformi (come cieli vuoti o pareti bianche ), concentrando la potenza di calcolo su oggetti complessi in primo piano. Ciò è fondamentale per l'implementazione di modelli su hardware AI edge con risorse limitate ottimizzato dalle librerie CUDA .

Esempio di implementazione

Di seguito è riportato uno PyTorch concettuale PyTorch che mostra come un meccanismo di routing di base possa saltare il calcolo per una parte dei token di input, simulando un comportamento di routing in profondità.

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)

Sfruttando framework come PyTorch o TensorFlow, gli sviluppatori possono integrare questi blocchi di ottimizzazione dei modelli personalizzati. Inoltre, strumenti come la Ultralytics aiutano i team a gestire i dati di addestramento necessari per addestrare accuratamente questi router, oltre a integrarsi perfettamente con ecosistemi aziendali come Google AI.

Potenziamento con Ultralytics YOLO

Ottieni una visione AI avanzata per i tuoi progetti. Trova oggi stesso la licenza giusta per i tuoi obiettivi.

Esplora le opzioni di licenza