Entdecken Sie, wie Mixture of Depths (MoD) die KI-Effizienz durch dynamisches Routing von Tokens optimiert. Erfahren Sie, wie diese Technik FLOPs in Ultralytics und LLMs reduziert.
In Deep-Learning-Architekturen ist die Recheneffizienz von größter Bedeutung, insbesondere bei der Verarbeitung langer Sequenzen oder hochauflösender Eingaben. Ein neuartiger Ansatz weist die Rechenressourcen dynamisch zu, indem das Netzwerk entscheiden kann, welche Teile der Eingabe vollständig verarbeitet werden müssen und welche bestimmte Schichten sicher umgehen können. Diese dynamische Routing-Strategie reduziert die gesamte Rechenkomplexität, ohne die Vorhersagekraft oder Genauigkeit des Modells zu beeinträchtigen.
Mixture of Depths (MoD) ist eine Architekturtechnik, die in erster Linie bei Transformer-Architekturen angewendet wird, bei denen das Modell lernt, Berechnungen für bestimmte Token in verschiedenen Schichten dynamisch zu überspringen. Herkömmliche Transformer verarbeiten jedes Token in jeder Schicht, unabhängig davon, ob es sich um eine wichtige Information oder um Füllinhalt handelt. Im Gegensatz dazu verwendet ein MoD-Modell einen Router-Mechanismus, um Token zu bewerten und ihnen eine Punktzahl zuzuweisen. Nur die Tokens mit der höchsten Punktzahl – bis zu einer vordefinierten Kapazitätsgrenze – werden durch die rechenintensiven Blöcke geleitet, wie z. B. Aufmerksamkeitsmechanismen oder dichte Feedforward-Schichten . Die übrigen Tokens umgehen den Block über Restverbindungen, wodurch effektiv eine „Mischung aus Tiefen” entsteht, bei der verschiedene Tokens unterschiedliche Verarbeitungsintensitäten durchlaufen.
Diese Methode, die durch die jüngsten Forschungen von DeepMind bekannt wurde und ausführlich im arXiv-Repository dokumentiert ist, reduziert die Gesamtzahl der Fließkommaoperationen (FLOPs), die sowohl während des Trainings als auch der Inferenz erforderlich sind, drastisch.
Dieses Konzept kann leicht mit einem Mixture of Experts (MoE) verwechselt werden. Beide verwenden zwar Routing-Mechanismen, lösen jedoch unterschiedliche Probleme:
Die Möglichkeit, Rechenleistung dynamisch zu budgetieren, macht diese Technik in mehreren Bereichen der Computervision und der Verarbeitung natürlicher Sprache äußerst wertvoll.
Nachfolgend finden Sie einen konzeptionellen PyTorch , der veranschaulicht, wie ein grundlegender Routing-Mechanismus die Berechnung für einen Teil der Eingabetoken überspringen und so ein Deep-Routing-Verhalten simulieren könnte.
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)
Durch die Nutzung von Frameworks wie dem PyTorch oder TensorFlowkönnen Entwickler diese benutzerdefinierten Modelloptimierungsblöcke integrieren. Darüber hinaus helfen Tools wie die Ultralytics Teams bei der Verwaltung der Trainingsdaten, die für das genaue Training dieser Router erforderlich sind, und lassen sich nahtlos in Unternehmensökosysteme wie Google AI integrieren.