5 Punkte von GN⁺ 2025-11-03 | 1 Kommentare | Auf WhatsApp teilen
  • Backpropagation ist der Kern des Trainings von neuronalen Netzen, doch ohne Verständnis der internen Funktionsweise treten unerwartete Fehler in einer Struktur auf, die eine „leaky abstraction“ darstellt
  • Aktivierungsfunktionen wie Sigmoid oder tanh können bei falscher Gewichtsinitialisierung zu vanishing gradients führen, wodurch das Training zum Stillstand kommt
  • ReLU kann das Phänomen der dead ReLUs verursachen, bei dem Neuronen dauerhaft deaktiviert werden, wenn der Eingang 0 oder kleiner ist
  • Bei RNNs kommt es durch wiederholte Matrixmultiplikation zu exploding gradients; um das zu verhindern, sind gradient clipping oder der Einsatz von LSTM nötig
  • Wer die Funktionsweise der Backpropagation nicht versteht, verliert selbst dann deutlich an Debugging- und Modellverbesserungsfähigkeit, wenn das Framework alles automatisch verarbeitet

Warum man Backpropagation verstehen muss

  • In Stanfords CS231n-Kurs sind die Aufgaben so aufgebaut, dass Studierende Forward Pass und Backpropagation selbst implementieren
    • Einige Studierende beschwerten sich, das sei unnötig, weil Frameworks wie TensorFlow die Backpropagation automatisch berechnen
  • Backpropagation ist jedoch keine vollständige Abstraktion, sondern eine leaky abstraction; ohne Kenntnis der internen Abläufe ist es schwer, die Ursache für fehlgeschlagenes Training zu finden
  • Die Haltung „Das Framework regelt das schon“ führt letztlich zu schwächerem Modelldesign und schlechteren Debugging-Fähigkeiten

Vanishing Gradients bei Sigmoid

  • Nichtlineare Funktionen wie Sigmoid oder tanh geraten bei großen Eingabewerten in einen Sättigungszustand (saturation), bei dem die Ausgabe nahe 0 oder 1 liegt
    • Dann wird der lokale Gradient z(1-z)* zu 0, sodass bei der Backpropagation die Weitergabe des Gradienten blockiert wird
  • Der maximale Gradient von Sigmoid beträgt 0,25; bei jedem Durchlauf wird das Signal also auf höchstens ein Viertel reduziert
  • Dadurch lernen tiefere Schichten deutlich langsamer als höhere Schichten
  • Wer Sigmoid-Schichten verwendet, muss daher besonders auf Gewichtsinitialisierung und Datenvorverarbeitung achten

Das Problem der dead ReLUs

  • ReLU ist eine Funktion, die die Ausgabe auf 0 setzt, wenn der Eingang 0 oder kleiner ist
    • Ist die Neuronenausgabe im Forward Pass 0, dann ist im Backward Pass auch der Gradient 0, wodurch das Neuron dauerhaft deaktiviert werden kann
  • Während des Trainings kann ein Neuron durch große Gewichtsupdates oder eine hohe Lernrate in diesem „toten Zustand“ feststecken
  • Nach dem Training kann es vorkommen, dass ein erheblicher Teil aller Neuronen nur 0 ausgibt
  • Deshalb sind bei ReLU Lernratenanpassung und Initialisierungsstrategie besonders wichtig

Exploding Gradients in RNNs

  • In einfachen RNNs wird bei jedem Zeitschritt dieselbe Hidden-State-Matrix (Whh) wiederholt multipliziert
    • Bei der Backpropagation konvergiert der Gradient abhängig von der Größe des Eigenwerts (eigenvalue) dieser Matrix gegen 0 oder wächst unbegrenzt an
  • Bei |b| < 1 entstehen vanishing gradients, bei |b| > 1 exploding gradients
  • Um das zu verhindern, verwendet man typischerweise gradient clipping oder eine LSTM-Architektur

Fallbeispiel für falsches Clipping in DQN-Code

  • In einer TensorFlow-basierten DQN-Implementierung wurde Code gefunden, der mit tf.clip_by_value direkt delta (den Q-Fehler) clippt
    • Bei diesem Ansatz wird der Gradient 0, sobald delta den Bereich verlässt, und das Training stoppt
  • Beabsichtigt war jedoch Gradient Clipping; stattdessen sollte Huber loss verwendet werden
    • Im Beispielcode wird der Huber-Verlust bedingt mit einer Kombination aus tf.square und tf.abs implementiert
  • Das Problem wurde als GitHub-Issue gemeldet und sofort behoben

Fazit

  • Backpropagation ist nicht bloß ein Automatisierungswerkzeug, sondern ein System der Credit Assignment, das komplexe Folgen nach sich zieht
  • Ohne Verständnis der inneren Abläufe stößt man auf Modellinstabilität, Trainingsfehlschläge und Debugging-Grenzen
  • Backpropagation ist mathematisch nicht besonders schwer und lässt sich mit CS231n-Kurs und Aufgaben intuitiv erlernen
  • Wer Backpropagation versteht, verbessert seine Fähigkeiten bei Design und Problemlösung für neuronale Netze deutlich
  • Statt sich nur auf die automatische Differenzierung des Frameworks zu verlassen, ist es wichtig, den tatsächlichen Fluss der Backpropagation zu verstehen

1 Kommentare

 
GN⁺ 2025-11-03
Hacker-News-Kommentare
  • Mir scheint, dass Backpropagation hier einen ungerechtfertigt schlechten Ruf bekommt
    Eigentlich geht es in dieser Diskussion weniger um Backpropagation selbst als darum, wie unvollständige Abstraktionen Gradienten und Varianten von Gradient Descent im Optimierungsprozess sind
    Backpropagation ist lediglich ein Algorithmus zur Berechnung der Ableitung zusammengesetzter Funktionen, und Probleme wie verschwindende Gradienten bei mehrfach gestapelten Sigmoid-Funktionen sind kein Problem der Backpropagation, sondern eine Eigenschaft der Funktion selbst
    Der Grund, warum man Leute den Backward Pass direkt implementieren lässt, ist, dass sie durch das eigene Berechnen der Ableitungen ein Gefühl dafür bekommen, wie Exponentialterme wirken

    • Ich verstehe deinen Punkt, aber in diesem Fall halte ich diese „kleine Korrektur“ nicht für besonders nützlich
      Der Kern ist, dass sich die Details der Backpropagation in manchen Situationen nicht abstrahieren lassen, einschließlich der Berechnung des Gradienten
      Besonders bei Gradient Descent ist das so, bei anderen globalen Optimierungsalgorithmen könnte das Problem geringer sein
      Da Backpropagation derzeit praktisch die einzige Methode ist, um in Deep Learning Gradienten zu berechnen, ist diese undichte Abstraktion in der Praxis real
    • Ich denke nicht, dass das eine Kleinigkeit ist, sondern ein berechtigter Einwand gegen einen falschen begrifflichen Rahmen
      Ich respektiere Karpathys Beitrag, aber seine Texte und Vorträge verwischen oft begriffliche Unterscheidungen, was zu Missverständnissen führt
      Auf seinem Niveau erwartet man eine höhere Präzision
  • Karpathys Beitrag zur Deep-Learning-Ausbildung ist wirklich enorm
    Von kurzen Texten bis zu dem hervorragenden Artikel über RNNs, dazu YouTube-Vorlesungen und GitHub-Projekte — alles hervorragend
    Das kürzlich veröffentlichte nanochat ist ebenfalls ein großartiges Beispiel: kleine, klare und vollständige Beispiele helfen Lernenden enorm

    • Ich habe Kolleginnen und Kollegen, die tief in LLMs drinstecken, Karpathys Texte empfohlen, aber überraschenderweise hatten sie kein Interesse
      Später wurde mir klar, dass sie mehr daran interessiert waren, LLMs zu vertrauen und sie zu nutzen, als sie wirklich zu verstehen
      Tatsächlich interessierten sie sich mehr für spekulative Debatten wie „eine Gesellschaft, in der intelligente Maschinen alles erledigen“ als für die Funktionsweise von LLMs
    • Karpathys Arbeitsweise ist interessant
      Statt einfach nur „ChatGPT zu fragen“, recherchiert er selbst, liest Code und findet Bugs
      Diese erkundende Herangehensweise ist echtes Lernen
  • Im Masterstudium hatte ich eine Aufgabe, Backpropagation anhand eines Papers direkt zu implementieren
    Man musste Forward und Backward Pass nur mit mathematischen Operationen schreiben, und es war die beste Lernerfahrung des Jahres
    Solche Aufgaben macht man von sich aus selten, aber wenn man dazu gezwungen wird, helfen sie enorm

    • Der Unterschied im Verständnis zwischen dem bloßen Lesen eines Papers und der direkten Implementierung im Code ist gewaltig
    • Ich habe das in der Schulzeit einmal direkt in Java implementiert, und am schwierigsten war es, die Matrixmultiplikation selbst zu schreiben
      Ich habe sogar eine UI gebaut, um zu visualisieren, wie sich Gewichte und Biases während des Trainings verändern
    • Ich frage mich, ob dieses Paper öffentlich verfügbar ist
  • Ich habe mich über die Beziehung zwischen Backpropagation und dem Optimizer gewundert
    SGD bewegt sich einfach in Richtung des Gradienten, aber fortgeschrittene Optimizer wie Adam verwenden den Gradienten nicht direkt, sondern wenden Normalisierung, Momentum, Clipping usw. an
    Ist eine exakte Gradientenberechnung also wirklich nötig, oder reicht es, die ungefähre Richtung zu kennen?

    • In der Praxis wird der Gradient ohnehin mit einem kleinen Minibatch angenähert, daher ist jeder Schritt verrauscht, aber gerade dieses Rauschen kann die Leistung verbessern
      Dazu gibt es passende Arbeiten wie Papers zu SGD-Rauschen und Visualisierungsforschung
      Die Richtung nur grob zu schätzen ist aber riskant — die Krümmung der Loss-Funktion (Hessian) kann sich stark ändern
    • „Muss man wirklich den exakten Gradienten kennen, reicht nicht die Richtung?“ ist eine alte Frage
      Tatsächlich entstand aus dieser Idee stochastic gradient descent, und darüber hinaus gibt es Ansätze wie Direct Feedback Alignment
      Auch Ben Rechts Zusammenfassung zur Beziehung zwischen Optimierung und Reinforcement Learning ist interessant
    • Backpropagation berechnet Ableitungen mit der Genauigkeit der numerischen Präzision
      Entscheidend ist nicht der Wert der Loss-Funktion, sondern die Form von Gradient und Krümmung
      Optimizer wie Adam schätzen als Näherung erster Ordnung die Skalenempfindlichkeit jedes Parameters und passen den Gradienten entsprechend an
      Optimierung höherer Ordnung ist bei nichtlinearen Funktionen wie ReLU nicht möglich
    • Den Gradienten anzupassen ist kein bloßer „fudge“
      Es ist eine notwendige Maßnahme, um das Vanishing-Gradient-Problem zu lösen
      In hochdimensionalen Räumen können schon kleine Fehler große Auswirkungen haben, deshalb ist eine präzise Gradientenberechnung sehr wichtig
    • Analysis an sich ist nicht schwierig
      Das Problem beginnt schon bei der Frage, wie man überhaupt eine „ungefähre Richtung“ berechnen will
      Auch fortgeschrittene Optimizer wie AdamW basieren weiterhin zentral auf Gradienten
  • Um 2016 herum wurden Tricks wie Gradient Clipping wohl viel häufiger verwendet
    Im Paper von Alex Graves aus dem Jahr 2013, Sequence Generation with RNNs, steht zum Beispiel, dass Clipping eingesetzt wurde, um explodierende Gradienten bei LSTMs zu verhindern
    Ich selbst fand Backpropagation so wichtig, dass ich sogar eine Spezialvorlesung nur zu PyTorch autograd besucht habe

    • Früher gab es solche Tricks wohl häufiger, weil viele verschiedene Netzwerkarchitekturen ausprobiert wurden
      Heute unterstützen Frameworks Clipping direkt, und das Verständnis von Trainingsproblemen ist größer geworden
      Das bedeutet aber nicht, dass das Problem verschwunden ist — ReLU und GELU sind noch immer Standardaktivierungen, und das Training von LLMs kommt immer noch einer „black art“ nahe
      Das Smol Training Playbook von Hugging Face ist ein Beleg dafür
  • Langfristig könnte es vorteilhaft sein, Modelle zu trainieren, die robust gegenüber einer Vielfalt von Aktivierungsfunktionen sind
    Wenn man zum Beispiel beim Training zufällig zwischen ReLU, Swish und GELU wechselt, könnte man ähnlich wie bei Dropout eine Art Regularisierungseffekt erzielen
    Dann könnte man bei der Inferenz sogar auf die rechnerisch günstigste Funktion umstellen

  • Der ursprüngliche Titel „Yes you should understand backprop“ ist viel klarer und besser

    • Gerade weil Backpropagation eine undichte Abstraktion ist, ist es wichtig, Intuition aufzubauen, indem man sie einmal von Hand durchrechnet
      Wenn zu viel vom Code übernommen wird, verfällt man leicht der Illusion, dass es irgendwie magisch funktioniert
      Mir hat im Graduiertenstudium sehr geholfen, Faltungen und Backpropagation einmal direkt per Hand auszurechnen
  • Die Frage „Warum sollte ich den Backward Pass selbst schreiben, wenn das Framework ihn automatisch berechnet?“ ist besorgniserregend, weil sie derselben Logik folgt wie
    „Warum Addition lernen, wenn es Taschenrechner gibt?“

    • Es gibt aber auch Gegenargumente
      So wie es nützlich ist, Compiler, Sortieralgorithmen oder die Funktionsweise von Transistoren zu verstehen, ist es auch wertvoll, Backpropagation zu lernen
      Allerdings ist Lernzeit begrenzt, daher ist die eigentliche Frage, ob das nützlicher ist als andere Themen
      Backpropagation ist deshalb lernenswert, weil man ohne Verständnis der inneren Abläufe verborgene Fehlermodi nur schwer erkennt
      Ich habe sie selbst mehrfach implementiert, und sie hat genau die richtige Komplexität, um eine neue Sprache zu evaluieren
  • Als ich zum ersten Mal Deep Learning lernte, wirkte Backpropagation auf mich fast wie Magie
    Aber als ich sie selbst implementierte, war es nur eine Folge einfacher Berechnungen, und dadurch hatte ich viel mehr Vertrauen beim Debugging oder bei der Suche nach Ursachen für stagnierende Loss-Werte
    Wer Deep Learning lernt, sollte es mindestens einmal selbst von Hand implementieren

  • Es gibt auch eine Gegenposition
    Ich denke nicht, dass Studierende Backpropagation unbedingt in NumPy implementieren müssen
    Die Undichtigkeiten von Backprop lösen Forschende durch neue Optimizer, und Entwickler müssen dann nur noch gute Hyperparameter finden

    • Aber an der Universität ist das Ziel, Studierende zu Forschenden auszubilden
    • „Man muss nur einen guten Optimizer wählen“ ist ein Missverständnis
      Ein Teil des Problems entsteht im Modelldesign oder in der Trainingsschleife
      Gradient Clipping ist zum Beispiel in den meisten Frameworks nicht standardmäßig aktiviert
      Dieser Text richtet sich an Leserinnen und Leser mit Forschungs- oder akademischer Perspektive
    • Das Problem ist nicht der Optimizer, sondern die Ableitungseigenschaften der Aktivierungsfunktion
      Wer das Gradientenverhalten von Funktionen wie Sigmoid oder ReLU nicht versteht, kann Probleme mit explodierenden oder verschwindenden Gradienten nicht lösen
    • Für einen Stanford-CS-Kurs ist es nur folgerichtig, Grundprinzipien direkt zu implementieren
      Wer neue Modellarchitekturen entwerfen will, muss verstehen, wie Backpropagation funktioniert, sonst schlägt das Training fehl oder die Leistung leidet
    • Das Problem ist, nicht zu wissen, was man nicht weiß
      Erst wenn man die Abstraktion durchdringt, entdeckt man die wirklich unbekannten Bereiche (unknown unknowns)