Curriculum Learning

Eine Trainingsstrategie, bei der Modelle zuerst mit einfachen Beispielen trainiert werden und die Schwierigkeit schrittweise erhöht wird – wie in der Schule.

Experte2 Min Lesezeit

Erklärung starten

Auf einen Blick

3 Punkte

  1. Training beginnt mit einfachen Beispielen, Schwierigkeit steigt
  2. Kann Konvergenz und Qualität verbessern, hängt aber stark vom Task ab
  3. Erfordert Definition von 'Schwierigkeit' für die Daten

Sofortantwort

Curriculum Learning einfach erklärt

Training von einfach zu schwer – wie ein strukturierter Lehrplan.

Kurz gesagt
Training beginnt mit einfachen Beispielen, Schwierigkeit steigt
Typischer Einsatz
NLP-Training, Computer Vision, Reinforcement Learning
Wichtig zu wissen
Erfordert Definition von 'Schwierigkeit' für die Daten

Curriculum Learning im Überblick

Curriculum Learning trainiert Modelle wie Schüler: Erst einfache Aufgaben, dann schrittweise schwierigere. Das kann Lernen stabilisieren oder beschleunigen, funktioniert aber nicht für jeden Task automatisch besser.

Random Training vs. Curriculum:

Random Training:
Epoch 1: [schwer, leicht, mittel, schwer, leicht, schwer, mittel...]
→ Modell kämpft mit schweren Beispielen von Anfang an

Curriculum Learning:
Epoch 1: [leicht, leicht, leicht, leicht...]
Epoch 2: [leicht, mittel, leicht, mittel...]
Epoch 3: [mittel, mittel, schwer, mittel...]
Epoch 4: [schwer, schwer, schwer, schwer...]
→ Modell baut Verständnis schrittweise auf

Warum funktioniert das?

AspektRandomCurriculum
Frühe Gradientenkönnen stark variierenkönnen stabiler sein
Konvergenztaskabhängigkann schneller sein
Lokale Minimataskabhängigkann helfen
Finale Qualitätbaselineabhängigkann besser sein

Technisch betrachtet

Schwierigkeit definieren

Für Text/NLP:

def text_difficulty(text):
    scores = []
    
    # Länge
    scores.append(len(text.split()) / reference_length)
    
    # Vokabular-Komplexität
    rare_words = count_rare_words(text)
    scores.append(rare_words / len(text.split()))
    
    # Syntaktische Komplexität
    scores.append(count_clauses(text) / reference_clause_count)
    
    return sum(scores) / len(scores)

Für Bilder:

def image_difficulty(image):
    # Anzahl Objekte
    num_objects = detect_objects(image)
    
    # Verdeckung
    occlusion_score = estimate_occlusion(image)
    
    # Bildqualität
    noise_level = estimate_noise(image)
    
    return (num_objects * object_weight + 
            occlusion_score * occlusion_weight + 
            noise_level * noise_weight)

Model-basiert (Self-Paced Learning):

def model_based_difficulty(model, example):
    # Schwierigkeit = Loss des aktuellen Modells
    with torch.no_grad():
        loss = model.compute_loss(example)
    return loss.item()

Curriculum Sampler

class CurriculumSampler(torch.utils.data.Sampler):
    def __init__(self, dataset, difficulty_fn, num_epochs, current_epoch):
        self.dataset = dataset
        self.current_epoch = current_epoch
        self.num_epochs = num_epochs
        
        # Schwierigkeit für alle Beispiele berechnen
        self.difficulties = [
            difficulty_fn(dataset[i]) 
            for i in range(len(dataset))
        ]
        
    def __iter__(self):
        # Anteil der Daten basierend auf Epoche
        progress = self.current_epoch / self.num_epochs
        
        # Threshold für Schwierigkeit
        threshold = np.percentile(
            self.difficulties, 
            min(max_percentile, start_percentile + growth_range * progress)
        )
        
        # Nur Beispiele unter Threshold
        indices = [
            i for i, d in enumerate(self.difficulties)
            if d <= threshold
        ]
        
        random.shuffle(indices)
        return iter(indices)

Training Loop

for epoch in range(num_epochs):
    # Sampler mit aktuellem Fortschritt
    sampler = CurriculumSampler(
        dataset, 
        difficulty_fn, 
        num_epochs, 
        epoch
    )
    
    dataloader = DataLoader(dataset, sampler=sampler)
    
    for batch in dataloader:
        loss = model(batch)
        loss.backward()
        optimizer.step()
    
    print(f"Epoch {epoch}: Using {len(sampler)} examples")

Varianten

Anti-Curriculum:

  • Schwere Beispiele zuerst
  • Kann bei manchen Tasks besser sein
  • Modell lernt schwierige Patterns früh

Self-Paced Learning:

  • Modell entscheidet selbst, was es lernen kann
  • Beispiele mit niedrigem Loss werden bevorzugt
  • Dynamisch während Training

Competence-based:

def competence(epoch, total_epochs, c0):
    """
    Wie viel des Curriculums ist 'freigeschaltet'?
    Startet bei c0, endet bei 1.0
    """
    return min(1.0, c0 + (1 - c0) * (epoch / total_epochs) ** 2)

Wann Curriculum Learning?

SzenarioEmpfehlung
Begrenzte Compute-Ressourcenkann Effizienz verbessern
Sehr schwieriger Taskkann Training stabilisieren
Viel Daten, viel ComputeNutzen separat validieren
Schwierigkeit schwer zu definierenAufwand kritisch prüfen

01Einsatzbereiche

Wann ist Curriculum Learning sinnvoll?

Geeignet für

  • NLP-TrainingErst kurze Sätze, dann längere, komplexere Texte
  • Computer VisionErst klare Bilder, dann verrauschte oder verdeckte
  • Reinforcement LearningErst einfache Level, dann schwierigere
  • Code-GenerierungErst einfache Funktionen, dann komplexe Systeme

↑ Inhalt

02Werkzeuge

Womit Curriculum Learning umgesetzt wird

↑ Inhalt

Merksatz

Curriculum Learning ist wie Schulunterricht

Du lernst erst das Einmaleins, dann Bruchrechnung, dann Algebra. Würdest du mit Differentialgleichungen anfangen, wärst du überfordert und würdest nichts lernen.

  1. Training beginnt mit einfachen Beispielen, Schwierigkeit steigt
  2. Kann Konvergenz und Qualität verbessern, hängt aber stark vom Task ab
  3. Erfordert Definition von 'Schwierigkeit' für die Daten

04Redaktion

Herkunft und Stand

Redaktion und Aktualität

Ebenex RedaktionRedaktion

Veröffentlicht
Aktualisiert

Dieses Feld entwickelt sich schnell. Oben stehen Veröffentlichung und letzte Änderung; ein Prüfdatum kommt dazu, sobald die Erklärung nach ihrer letzten Änderung geprüft wurde.

↑ Inhalt

05FAQ

Häufige Fragen zu Curriculum Learning

Wie definiere ich 'Schwierigkeit' für meine Daten?

Abhängig vom Task: Textlänge, Vokabular-Komplexität, Anzahl Objekte im Bild, Loss des Modells auf dem Beispiel. Oft heuristisch oder durch ein separates Modell.

Ist Curriculum Learning immer besser?

Nicht immer. Bei ausreichend Daten, robustem Training und gutem Sampling kann Random Sampling ähnlich gut sein. Curriculum Learning hilft vor allem dann, wenn Schwierigkeit sinnvoll messbar ist und das Training sonst instabil wird.

Wie schnell sollte ich die Schwierigkeit erhöhen?

Experimentell bestimmen. Zu schnelle Erhöhung kann das Modell überfordern, zu langsame Erhöhung kann ineffizient sein. Linear, stufenweise oder adaptive Strategien sollten validiert werden.

Kann ich Curriculum Learning mit Pre-trained Models nutzen?

Ja, besonders beim Fine-Tuning kann ein Curriculum sinnvoll sein. Der Nutzen hängt davon ab, wie stark der neue Task vom Pretraining abweicht und ob einfache Beispiele wirklich hilfreiche Zwischenschritte sind.

↑ Inhalt

06Weiterlernen

Was möchtest du als Nächstes verstehen?

  • Grundlage nachholen

    Trainingsdaten

    Datensätze, die das Lernen und die Leistung von Modellen bestimmen.

  • Technisch vertiefen

    Fine-Tuning

    Nachtrainieren eines Modells für spezifische Aufgaben.

↑ Inhalt