
Der Code von Softwareprodukten fĂŒr maschinelles Lernen ist oft komplex und verwirrend. Das Entdecken und Beheben von Bugs in ihm ist eine ressourcenintensive Aufgabe. Selbst die einfachsten erfordern einen ernsthaften Ansatz zur Netzwerkarchitektur, zur Initialisierung von Gewichten und zur Optimierung des Netzwerks. Ein kleiner Fehler kann zu unangenehmen Problemen fĂŒhren.
Dieser Artikel befasst sich mit dem Debugging-Algorithmus fĂŒr Ihre neuronalen Netzwerke.
Skillbox empfiehlt: Praktischer Kurs .
Wir erinnern daran: alle Leser von âHabrâ erhalten einen Rabatt von 10.000 Rubel bei der Anmeldung zu einem beliebigen Kurs von Skillbox mit dem Aktionscode âHabrâ.
Der Algorithmus besteht aus fĂŒnf Phasen:
- ein einfacher Start;
- ĂberprĂŒfung der Verluste;
- ĂberprĂŒfung der Zwischenresultate und Verbindungen;
- Diagnose der Parameter;
- Ăberwachung der Leistung.
Wenn Ihnen etwas interessanter erscheint als das andere, können Sie sofort zu diesen Abschnitten wechseln.
Ein einfacher Start
Eine neuronale Netzwerk mit komplexer Architektur, Regularisierung und Lernratenplaner zu debuggen, ist schwieriger als eine normale. Hier schummeln wir etwas, da dieser Punkt nur indirekt mit dem Debugging zu tun hat, aber es ist dennoch eine wichtige Empfehlung.
Ein einfacher Start besteht darin, ein vereinfachtes Modell zu erstellen und es mit einem Datensatz (Punkt) zu trainieren.
Zuerst erstellen wir ein vereinfachtes Modell
FĂŒr einen schnellen Start erstellen wir ein kleines Netzwerk mit einer einzigen versteckten Schicht und ĂŒberprĂŒfen, ob alles korrekt funktioniert. Dann machen wir das Modell schrittweise komplizierter, indem wir jeden neuen Aspekt seiner Struktur (eine zusĂ€tzliche Schicht, Parameter usw.) ĂŒberprĂŒfen und weiterarbeiten.
Trainieren Sie das Modell mit einem einzigen Datensatz (Punkt) von Daten
Zur schnellen ĂberprĂŒfung der FunktionsfĂ€higkeit Ihres Projekts können Sie ein oder zwei Datenpunkte zum Trainieren verwenden, um zu bestĂ€tigen, dass das System korrekt funktioniert. Das neuronale Netzwerk sollte eine Genauigkeit von 100 % im Training und in der ĂberprĂŒfung zeigen. Wenn nicht, dann ist entweder das Modell zu klein oder Sie haben bereits einen Bug.
Selbst wenn alles gut aussieht, bereiten Sie das Modell darauf vor, eine oder mehrere Epochen zu durchlaufen, bevor Sie fortfahren.
Bewertung der Verluste
Die Bewertung der Verluste ist der Hauptweg, um die Leistung des Modells zu verfeinern. Sie mĂŒssen sicherstellen, dass der Verlust mit der Aufgabe ĂŒbereinstimmt und die Verlustfunktionen auf der richtigen Skala bewertet werden. Wenn Sie mehr als einen Verlusttyp verwenden, stellen Sie sicher, dass alle von gleicher Ordnung sind und richtig skaliert werden.
Es ist wichtig, auf die anfĂ€nglichen Verluste zu achten. ĂberprĂŒfen Sie, wie nah das tatsĂ€chliche Ergebnis der Erwartung ist, wenn das Modell mit einer zufĂ€lligen Annahme gestartet wurde. In : âStellen Sie sicher, dass Sie das erwartete Ergebnis erzielen, wenn Sie mit einer kleinen Anzahl von Parametern arbeiten. Es ist besser, sofort den Verlust zu ĂŒberprĂŒfen (indem der Regularisierungsgrad auf Null gesetzt wird). Zum Beispiel erwarten wir fĂŒr CIFAR-10 mit dem Softmax-Klassifikator, dass die anfĂ€nglichen Verluste 2.302 betragen, weil die erwartete diffuse Wahrscheinlichkeit 0.1 fĂŒr jede Klasse betrĂ€gt (da es 10 Klassen gibt) und der Softmax-Verlust die negative logarithmische Wahrscheinlichkeit der richtigen Klasse ist, also âln (0.1) = 2.302.â
FĂŒr ein binĂ€res Beispiel wird eine Ă€hnliche Berechnung fĂŒr jede der Klassen durchgefĂŒhrt. Hier sind zum Beispiel die Daten: 20 % 0's und 80 % 1's. Der erwartete anfĂ€ngliche Verlust betrĂ€gt bis zu â0,2ln (0,5) â0,8ln (0,5) = 0,693147. Wenn das Ergebnis gröĂer als 1 ist, kann das darauf hindeuten, dass die Gewichte des Neuralnetz nicht angemessen ausbalanciert sind oder die Daten nicht normalisiert sind.
Wir ĂŒberprĂŒfen die Zwischenergebnisse und Verbindungen
FĂŒr das Debugging des Neuralnetzwerks ist es notwendig, die Dynamik der Prozesse innerhalb des Netzwerks und die Rolle der einzelnen Zwischenschichten zu verstehen, da sie miteinander verbunden sind. Hier sind typische Fehler, mit denen Sie möglicherweise konfrontiert werden:
- falsche AusdrĂŒcke fĂŒr die Gradientenaktualisierungen;
- Gewichtsaktualisierungen werden nicht angewendet;
- verschwindende oder explodierende Gradienten (exploding gradients).
Wenn die Gradientenwerte null sind, bedeutet das, dass die Lernrate im Optimierer zu niedrig ist oder dass Sie mit einem falschen Ausdruck fĂŒr die Gradientenaktualisierung konfrontiert sind.
DarĂŒber hinaus sollten die Werte der Aktivierungsfunktionen, Gewichte und Aktualisierungen jeder Schicht ĂŒberwacht werden. Zum Beispiel sollte die GröĂe der Parameteraktualisierungen (Gewichte und Bias) .
Es gibt ein PhĂ€nomen, das als âDying ReLUâ bekannt ist oder , bei dem ReLU-Neuronen null ausgeben, nachdem sie einen groĂen negativen Bias-Wert fĂŒr ihre Gewichte gelernt haben. Diese Neuronen werden an keinem Punkt der Daten jemals wieder aktiviert.
Sie können die GradientenĂŒberprĂŒfung verwenden, um diese Fehler zu identifizieren, indem Sie den Gradienten mit einem numerischen Ansatz approximieren. Wenn er den berechneten Gradienten nahe kommt, wurde das Backpropagation korrekt implementiert. Um eine GradientenĂŒberprĂŒfung zu erstellen, konsultieren Sie diese wunderbaren Ressourcen aus CS231 und , sowie das von Andrew Ng zu diesem Thema.
weist auf drei Hauptmethoden zur Visualisierung von neuronalen Netzwerken hin:
- Vorab-Methoden â einfache Methoden, die uns die allgemeine Struktur des trainierten Modells zeigen. Dazu gehört die Ausgabe von Formen oder Filtern einzelner Schichten des neuronalen Netzwerks und der Parameter in jeder Schicht.
- Aktivierungsbasierte Methoden. Hier entschlĂŒsseln wir die Aktivierungen einzelner Neuronen oder Gruppen von Neuronen, um ihre Funktionen zu verstehen.
- Gradientenbasierte Methoden. Diese Methoden tendieren dazu, mit Gradienten zu arbeiten, die aus dem VorwĂ€rts- und RĂŒckwĂ€rts-Durchlauf beim Training des Modells generiert werden (einschlieĂlich Bedeutungskarten und Aktivierungskarten der Klasse).
Es gibt mehrere nĂŒtzliche Tools zur Visualisierung von Aktivierungen und Verbindungen einzelner Schichten, wie zum Beispiel und .

Parameterdiagnose
Neuronale Netzwerke haben eine Vielzahl von Parametern, die miteinander interagieren, was die Optimierung erschwert. TatsÀchlich ist dieser Abschnitt Gegenstand aktiver Forschung von Fachleuten, daher sollten die folgenden VorschlÀge nur als RatschlÀge und Ausgangspunkte betrachtet werden.
Batch-GröĂe â die Batch-GröĂe sollte groĂ genug sein, um genaue SchĂ€tzungen des Fehlergradienten zu erhalten, aber klein genug, damit der stochastische Gradientenabstieg (SGD) Ihr Netzwerk ordnen kann. Kleine Batch-GröĂen fĂŒhren zu schnellerer Konvergenz aufgrund von Rauschen wĂ€hrend des Trainings und damit zu Optimierungsschwierigkeiten. Dies wird ausfĂŒhrlicher beschrieben .
Lernrate â eine zu niedrige Lernrate fĂŒhrt zu langsamer Konvergenz oder dem Risiko, in lokalen Minima stecken zu bleiben. Gleichzeitig kann eine hohe Lernrate zu Divergenz der Optimierung fĂŒhren, da Sie riskieren, ĂŒber einen steilen, aber schmalen Teil der Verlustfunktion 'hinwegzuspringen'. Versuchen Sie, die Lernrate wĂ€hrend des Trainings des neuronalen Netzwerks zu planen. Im Kurs CS231n .
Gradientenbeschneidungâ â Beschneidung der Gradientenparameter wĂ€hrend der RĂŒckwĂ€rtsausbreitung basierend auf dem maximalen Wert oder der Grenznorm. NĂŒtzlich zur Lösung von Problemen mit explosiven Gradienten, die Sie im dritten Punkt antreffen können.
Batch-Normalisierung â wird verwendet, um die Eingabedaten jeder Schicht zu normalisieren, was hilft, das Problem der internen Kovariatenverschiebung zu lösen. Wenn Sie Dropout und Batch Normalization zusammen verwenden, .
Stochastischer Gradientenabstieg (SGD) â es gibt mehrere Varianten von SGD, die Momentum, adaptive Lernraten und die Nesterov-Methode nutzen. Dabei hat keine von ihnen einen klaren Vorteil hinsichtlich der Effizienz des Lernens oder der Verallgemeinerung ().
Regulierung â ist entscheidend fĂŒr den Aufbau eines generalisierbaren Modells, da sie eine Strafe fĂŒr die KomplexitĂ€t des Modells oder extreme Parameterwerte hinzufĂŒgt. Dies ist ein Weg, die Varianz des Modells zu reduzieren, ohne signifikant dessen Verzerrung zu erhöhen. Mehr .
Um alles selbst zu bewerten, ist es notwendig, die Regularisierung auszuschalten und den Verlustgradienten selbst zu ĂŒberprĂŒfen.
Dropout â ist eine weitere Methode, um Ihr Netzwerk zu strukturieren, um Ăberanpassung zu verhindern. WĂ€hrend des Trainings wird das Dropout nur durch die Beibehaltung der AktivitĂ€t eines Neurons mit einer gewissen Wahrscheinlichkeit p (Hyperparameter) oder durch Setzen auf null im anderen Fall durchgefĂŒhrt. Dadurch muss das Netzwerk ein anderes Teilset von Parametern fĂŒr jede Trainingsbatch verwenden, was die VerĂ€nderungen bestimmter Parameter reduziert, die dominant werden.
Wichtig: Wenn Sie sowohl Dropout als auch Batch-Normalisierung verwenden, seien Sie vorsichtig mit der Reihenfolge dieser VorgÀnge oder sogar mit deren gleichzeitiger Verwendung. All dies wird noch aktiv diskutiert und ergÀnzt. Hier sind zwei wichtige Diskussionen zu diesem Thema und .
Arbeitskontrolle
Es geht um die Dokumentation von Arbeitsprozessen und Experimenten. Wenn man nichts dokumentiert, kann man vergessen, welche Lernrate oder Gewichtung der Klassen verwendet wird. Durch die Ăberwachung ist es problemlos möglich, frĂŒhere Experimente einzusehen und nachzuvollziehen. Dadurch kann die Anzahl der sich wiederholenden Experimente verringert werden.
Allerdings kann die manuelle Dokumentation bei einem groĂen Arbeitsaufwand zu einer Herausforderung werden. Hier kommen Werkzeuge wie Comet.ml ins Spiel, die dabei helfen, DatensĂ€tze, CodeĂ€nderungen, die Historie von Experimenten und Produktionsmodelle automatisch zu protokollieren, einschlieĂlich wichtiger Informationen ĂŒber Ihr Modell (Hyperparameter, Leistungskennzahlen und Umgebungsinformationen).
Neurale Netzwerke können sehr empfindlich auf kleine Ănderungen reagieren, was zu einem RĂŒckgang der Modellleistung fĂŒhren kann. Das Tracking und die Dokumentation der Arbeit sind der erste Schritt, den Sie unternehmen sollten, um die Umgebung und Modellierung zu standardisieren.

Ich hoffe, dass dieser Post ein Ausgangspunkt sein kann, von dem aus Sie das Debugging Ihres neuronalen Netzwerks beginnen.
Skillbox empfiehlt:
- ZweijÀhriger praktischer Kurs .
- Online-Kurs .
- Praktischer Jahreskurs .
Quelle: habr.com
