Ich bin neugierig, wie Gradienten mithilfe von ResNet-Modulen / Überspringverbindungen über ein neuronales Netzwerk zurückgewonnen werden. Ich habe ein paar Fragen zu ResNet gesehen (z. B. Neuronales Netzwerk mit Sprungschichtverbindungen ), aber diese Frage bezieht sich speziell auf die Rückübertragung von Verläufen während des Trainings.
Die grundlegende Architektur ist hier:
Ich habe diesen Artikel gelesen, Studie über verbleibende Netzwerke zur Bilderkennung , und in Abschnitt 2 wird erläutert, wie eines der Ziele von ResNet darin besteht, einen kürzeren / klareren Pfad für die Rückübertragung des Gradienten auf die Basisschicht zu ermöglichen.
Kann jemand erklären, wie der Gradient durch diese Art von Netzwerk fließt? Ich verstehe nicht ganz, wie die Additionsoperation und das Fehlen einer parametrisierten Schicht nach der Addition eine bessere Gradientenausbreitung ermöglichen. Hat es etwas damit zu tun, wie sich der Verlauf beim Durchlaufen eines Additionsoperators nicht ändert und irgendwie ohne Multiplikation neu verteilt wird?
Außerdem kann ich nachvollziehen, wie sich das Problem mit dem verschwindenen Gradienten lindert, wenn der Gradient nicht durch die Gewichtsschichten fließen muss. Wenn jedoch kein Gradient durch die Gewichte fließt, wie werden sie nach dem Rückwärtsdurchlauf aktualisiert?
the gradient doesn't need to flow through the weight layers
, können Sie das erklären?Antworten:
Add sendet den Farbverlauf gleichmäßig an beide Eingänge zurück. Sie können sich davon überzeugen, indem Sie im Tensorflow Folgendes ausführen:
Ausgabe:
Der Gradient wird also sein:
Edit: es gibt eine Frage: "Was ist die Operation an dem Punkt, an dem die Autobahnverbindung und der neuronale Netzblock wieder zusammengefügt werden, am unteren Rand von Abbildung 2?"
Die Antwort lautet: Sie werden summiert. Dies können Sie der Formel in Abbildung 2 entnehmen:
Was dies sagt ist, dass:
Bearbeiten 2:
Umschreiben in etwas anderen Worten:
Die verbleibenden Blöcke modifizieren die rückwärts fließenden Gradienten, aber es gibt keine "Quetsch" - oder "Aktivierungs" -Funktionen, durch die die Gradienten fließen. Die Funktionen "Squashing" / "Activation" verursachen das Problem des explodierenden / verschwindenden Gradienten. Indem wir diese aus dem Bus selbst entfernen, verringern wir dieses Problem erheblich.
Edit 3: Persönlich stelle ich mir ein resnet in meinem Kopf wie im folgenden Diagramm vor. Es ist topologisch identisch mit Abbildung 2, zeigt jedoch möglicherweise deutlicher, wie der Bus gerade durch das Netzwerk fließt, während die verbleibenden Blöcke nur auf die Werte tippen und einen kleinen Vektor zum Bus hinzufügen / daraus entfernen:
quelle