Wir arbeiten mit neuronalen Netzwerken: Checkliste zur Fehlersuche

Wir arbeiten mit neuronalen Netzwerken: Checkliste zur Fehlersuche

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 Neuronalen Netze mit direkter Verbindung 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 Python-Entwickler von Grund auf.

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 Andrei Karpatys Arbeit wird Folgendes vorgeschlagen: „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) 1-e3 betragen.

Es gibt ein PhĂ€nomen, das als „Dying ReLU“ bekannt ist oder „das Problem des verschwindenden Gradienten“, 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 hier und hier, sowie das Tutorial von Andrew Ng zu diesem Thema.

Faizan Shaikh 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 ConX und Tensorboard.

Wir arbeiten mit neuronalen Netzwerken: Checkliste zur Fehlersuche

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 hier.

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 Es gibt einen umfangreichen Abschnitt, der sich mit diesem Problem beschĂ€ftigt.

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, lesen Sie diesen Artikel.

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 (Details hier).

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 Informationen – hier.

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 auf Stackoverflow und Arxiv.

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.

Wir arbeiten mit neuronalen Netzwerken: Checkliste zur Fehlersuche

Ich hoffe, dass dieser Post ein Ausgangspunkt sein kann, von dem aus Sie das Debugging Ihres neuronalen Netzwerks beginnen.

Skillbox empfiehlt:

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster