Ich frage mich, welche nützlichen Techniken es gibt, um zu überprüfen, ob eine Implementierung eines neuronalen Netzwerks korrekt funktioniert.
Im Folgenden sind einige mir bekannte Schecks aufgeführt. Es würde mich interessieren, mehr davon zu erfahren:
- Zeichnen einiger Metriken (F1-Punktzahl, Genauigkeit, Kosten usw.) im Zug / Test / gültigen Sets gegen die Chargen- oder Epochennummer.
- Betrachtung der Entwicklung der Matrixgewichte über die Epoche hinweg.
- Entfernen Sie bei mehreren Ebenen einige Ebenen und prüfen Sie, ob noch etwas gelernt wird.
- Verwenden des Netzwerks für einige Datensätze, die es lernen sollte (obwohl mir keine gute Liste von Referenzdatensätzen zum Testen neuronaler Netzwerkimplementierungen bekannt ist , die eine wertvolle Ressource darstellen würden, schneller als das Suchen nach Referenzpunkten in der Literatur .)
- Durchführen von Gradienten Prüfung .
- Überprüfen Sie, ob der Farbverlauf nicht explodiert oder verschwindet.
Einige Diagramme, die die vorherigen Überprüfungen veranschaulichen:
- Zeichnungszug / Test / gültiger Satz gegen Epochennummer:
Gut (zwar schnell überpassend, aber zumindest kann das Netzwerk lernen):
Schlecht:
- Betrachtet man die Entwicklung der Matrixgewichte über die Epoche hinweg:
Epoche 0:
Epoche 50:
Schwer zu sagen, ob die Änderungen in der Gewichtsmatrix gut oder schlecht sind (ohne die Kosten zu berücksichtigen), aber zumindest die meisten von ihnen haben sich geändert und sie bleiben nicht bei 0 hängen.
neural-networks
deep-learning
software
Franck Dernoncourt
quelle
quelle
Antworten:
Zunächst möchte ich festhalten, dass die Implementierung im Kontext neuronaler Netze (meiner Meinung nach) ein zweifelhaftes Wort ist. Ich denke, Sie haben die meisten Ansätze aufgelistet, aber so bin ich kürzlich zum Testen gekommen.
Die erste Interpretation ist die tatsächliche Implementierung in einem Quellcode. In diesem Fall sind meiner Meinung nach die wichtigsten Methoden zum Testen dieses Teils:
*
es sich tatsächlich um eine elementweise Multiplikation und nicht um ein Punktprodukt handelt, oder Sie haben nicht übereinstimmende Dimensionen.Die zweite Interpretation für die Implementierung eines neuronalen Netzwerks könnte die Wahl von Hyperparametern sein. Der wichtigste dieser Hyperparameter ist wahrscheinlich die Lernrate. Sie haben einige Techniken erwähnt, die in meinen Augen eher zur Auswahl der richtigen Hyperparameter gehören.
Ich denke nicht, dass das Betrachten der Gewichte so nützlich ist. Bei CNNs ist es hilfreich zu erkennen, welche Art von Kerneln Sie lernen oder ob Sie eine Form des Gewichtsabfalls implementieren, bei dem Sie einige Gewichte wirklich auf Null setzen möchten.
Es trägt wahrscheinlich nicht viel zu dem bei, was Sie bereits wissen, und ich vergesse hier viel, aber dies wäre meine Antwort für das, was es wert ist ...
quelle
Sie können auch die Lernkurve (siehe Abschnitt 3.3 im folgenden Link) darstellen, bei der es sich um den Fehler (sowohl Trainingsfehler als auch Kreuzvalidierungsfehler) gegenüber der Größe des Trainingssatzes handelt. Anhand der Lernkurve können Sie erkennen, ob Ihr Modell unter einer hohen Verzerrung oder einer hohen Varianz leidet.
http://www.astroml.org/sklearn_tutorial/practical.html
quelle