Meta Learning
Beim Meta-Learning wird ein Modell anhand vieler Aufgaben trainiert, damit es sich mit wenigen Beispielen an eine neue Aufgabe anpassen kann. Erfahre, wie Episoden, MAML und Prototypennetzwerke funktionieren.
Meta-Learning, oft auch als „Lernen zu lernen“ bezeichnet, ist ein Ansatz des maschinellen Lernens (ML), bei dem ein Modell anhand vieler verwandter Aufgaben trainiert wird, damit es sich schnell an eine neue Aufgabe anpassen kann – meist anhand einer Handvoll annotierter Beispiele. Während überwachtes Lernen auf einen Datensatz zugeschnitten wird, optimiert Meta-Learning den Lernprozess selbst: die Ausgangsgewichte, den Einbettungs raum für den Vergleich von Beispielen oder ein Netzwerk, das in einem einzigen Vorwärtsdurchlauf aus Beispielen lernt. Der wichtigste Anwendungsbereich ist das Few-Shot-Learning: neue Klassen anhand von ein bis wenigen Beispielen zu erkennen. Weitere Anwendungen sind Roboter und andere Agenten, die sich spontan an neue Bedingungen anpassen müssen.
So funktioniert Meta-Learning#
Meta-Learning wird in Episoden trainiert, die die Situation nachbilden, der das Modell beim Testen begegnet. Jede Episode umfasst eine Aufgabe, zum Beispiel ein 5-Way-1-Shot-Klassifizierungsproblem mit fünf Klassen und je einem annotierten Bild. Die annotierten Beispiele bilden die Support-Menge, und zurückgehaltene Beispiele derselben Klassen bilden die Query-Menge. In einer inneren Schleife passt sich das Modell an die Support-Menge an. In einer äußeren Schleife werden die Meta-Parameter entsprechend der Leistung des angepassten Modells auf der Query-Menge aktualisiert. So wird das Modell dafür belohnt, sich gut anzupassen, statt sich eine einzelne Aufgabe einzuprägen. Klassen, die für Meta-Tests verwendet werden, tauchen beim Meta-Training nie auf.
Zentrale Ansätze#
- Optimierungsbasiert: Model-Agnostic Meta-Learning (MAML) lernt eine Initialisierung, von der aus ein oder wenige Schritte des Gradientenabstiegs auf der Support-Menge einer neuen Aufgabe zu guter Leistung führen. Die äußere Schleife differenziert durch die Aktualisierung der inneren Schleife hindurch und benötigt dafür Gradienten zweiter Ordnung. Varianten erster Ordnung wie OpenAIs Reptile vermeiden diesen Aufwand, indem sie die Initialisierung in Richtung der für jede Aufgabe angepassten Gewichte verschieben.
- Metrikbasiert: Diese Methoden lernen einen Einbettungsraum, in dem Beispiele anhand ihrer Entfernung klassifiziert werden können. Prototypische Netzwerke mitteln die Einbettungen der Support-Beispiele jeder Klasse zu einem Prototyp und ordnen jede Query dem nächstgelegenen Prototyp zu. So muss eine neue Klasse beim Testen überhaupt nicht trainiert werden.
- Modellbasiert: Ein Netzwerk wie ein rekurrentes neuronales Netzwerk (RNN) mit externem Speicher liest die Support-Menge ein und sagt Labels für Queries direkt voraus. Dabei lernt es den Anpassungsprozess in seinen Aktivierungen. Das GPT-3-Paper beschrieb In-Context-Learning in großen Sprachmodellen (LLMs), bei dem eine Aufgabe anhand von Beispielen im Prompt gelöst wird, als innere Schleife dieser Art von Meta-Learning. Das Vortraining bildet dabei die äußere Schleife.
MAMLes Regressionsbenchmark fordert ein kleines Netzwerk auf, Sinuswellen mit zufälliger Amplitude und Phase anhand von jeweils 10 Punkten anzupassen. Das folgende PyTorch-Beispiel trainiert die Initialisierung mit beiden Schleifen im Meta-Verfahren und testet anschließend einen Anpassungsschritt an neuen Sinuswellen:
import torch
import torch.nn.functional as F
from torch import nn
from torch.func import functional_call
torch.manual_seed(0)
net = nn.Sequential(nn.Linear(1, 40), nn.ReLU(), nn.Linear(40, 40), nn.ReLU(), nn.Linear(40, 1))
meta_optimizer = torch.optim.Adam(net.parameters(), lr=0.001)
def sine_task_losses():
"""Sample a sine-wave task, adapt on 10 points with one gradient step, and return query losses before and after."""
amplitude, phase = torch.empty(1).uniform_(0.1, 5), torch.empty(1).uniform_(0, 3.14)
x = torch.empty(20, 1).uniform_(-5, 5)
y = amplitude * torch.sin(x + phase)
params = dict(net.named_parameters())
support_loss = F.mse_loss(functional_call(net, params, x[:10]), y[:10])
grads = torch.autograd.grad(support_loss, list(params.values()), create_graph=True) # inner loop
adapted = {name: p - 0.01 * g for (name, p), g in zip(params.items(), grads)}
before = F.mse_loss(functional_call(net, params, x[10:]), y[10:])
after = F.mse_loss(functional_call(net, adapted, x[10:]), y[10:])
return before, after
# Outer loop: update the shared initialization so that one inner step fits each new task
for step in range(10000):
meta_loss = sum(sine_task_losses()[1] for _ in range(4))
meta_optimizer.zero_grad()
meta_loss.backward()
meta_optimizer.step()
# On 500 unseen sine waves, compare query error before and after the one-step adaptation
losses = torch.tensor([[loss.item() for loss in sine_task_losses()] for _ in range(500)])
print(f"query MSE before adaptation: {losses[:, 0].mean():.2f}, after one step: {losses[:, 1].mean():.2f}")Es gibt query MSE before adaptation: 3.10, after one step: 0.70 aus. Die durch Meta-Learning gelernte Initialisierung passt zu keiner bestimmten Sinuswelle. Dennoch verringert ein einziger Gradientenschritt anhand von 10 Punkten den Fehler bei neuen Punkten einer unbekannten Welle um mehr als das Vierfache.
Meta-Learning im Vergleich zu verwandten Begriffen#
- Transferlernen: Verwendet erneut Gewichte, die auf einer großen Aufgabe trainiert wurden, als Ausgangspunkt für eine andere Aufgabe, ohne sie auf Anpassungsfähigkeit zu optimieren. Das Fine-Tuning eines mit COCO vortrainierten Ultralytics-YOLO26-Detektors mit einem eigenen Datensatz ist Transferlernen: Die Ausgangsgewichte stammen aus gewöhnlichem Training mit COCO. Für die Anpassung werden ein annotierter Datensatz und viele Trainingsepochen benötigt, statt weniger Beispiele und weniger Gradientenschritte.
- Few-Shot-Learning: Das Problem, anhand sehr weniger Beispiele zu lernen. Meta-Learning ist eine Gruppe von Lösungsansätzen; vortrainierte Einbettungen mit einem einfachen Klassifikator sind eine weitere.
- Automatisiertes maschinelles Lernen (AutoML): Durchsucht Architekturen und Hyperparameter, üblicherweise jeweils für einen Datensatz. In manchen Übersichtsarbeiten gilt das Lernen von Hyperparametern über mehrere Aufgaben hinweg als Meta-Learning.
- Kontinuierliches Lernen: Lernt eine Folge von Aufgaben, ohne frühere zu vergessen. Meta-Learning bereitet ein Modell dagegen darauf vor, neue Aufgaben schnell zu lernen.
Benchmarks und Erkenntnisse#
Benchmarks für wenige Bildbeispiele prägten den Großteil der Meta-Learning-Forschung: Omniglot enthält 1.623 handgeschriebene Zeichen aus 50 Alphabeten. miniImageNet verwendet 100 ImageNet-Klassen mit jeweils 600 Bildern, aufgeteilt in separate Klassen für Meta-Training, Validierung und Test. Zwei spätere Studien stellten infrage, welchen Beitrag das Meta-Learning selbst leistet. „Rapid Learning or Feature Reuse?“ zeigte, dass MAML seinen Erfolg hauptsächlich dem Wiederverwenden von Merkmalen verdankt, die in der äußeren Schleife gelernt wurden. Die vereinfachte ANIL-Variante, die in der inneren Schleife nur die letzte Schicht anpasst, erzielte ebenso gute Ergebnisse wie MAML. „Rethinking Few-Shot Image Classification“ kam anschließend zu dem Ergebnis, dass ein linearer Klassifikator auf einer guten Einbettung, die mit gewöhnlichem überwachtem oder selbstüberwachtem Training auf den Meta-Trainingsklassen erlernt wurde, die damals führenden Meta-Learning-Methoden für wenige Beispiele übertraf.










