Frage

Ich habe anderen KI-Leuten diese Frage gestellt, aber ich habe keine Antwort erhalten, die mich wirklich zufriedenstellte.

Für alle anderen, die schon einmal ein künstliches neuronales Netzwerk programmiert haben: Wie kann man dessen Richtigkeit testen?

Ich denke, anders ausgedrückt: Wie debuggt man den Code hinter einem neuronalen Netzwerk?

War es hilfreich?

Lösung

Correctness ist ein lustiges Konzept in den meisten "Soft Computing." Das Beste, was ich Ihnen sagen kann ist: „ein neuronales Netzwerk korrekt ist, wenn es erfüllt konsequent die Parameter es Design ist.“ Sie tun dies, indem sie sie mit Daten trainiert, und dann mit anderen Daten zu überprüfen, und eine Rückkopplungsschleife in der Mitte, die Sie wissen läßt, wenn das neuronale Netz in geeigneter Weise funktioniert.

Das ist der Gang nur der Fall für neuronale Netze, die groß genug sind, wo ein direkter Beweis für die Richtigkeit nicht möglich ist. Es ist möglich, beweisen , dass ein neuronales Netzwerk korrekt durch die Analyse ist, wenn man ein neuronales Netzwerk aufzubauen versuchen, die XOR oder etwas ähnliches lernt, aber für diese Klasse von Problem eines ANN ist selten notwendig.

Andere Tipps

Mit neuronalen Netzen, in der Regel, was passiert ist, dass Sie ein ungeschultes neuronale Netz nehmen, und Sie trainieren es einen bestimmten Satz an Daten verwenden, so dass es in der Art und Weise reagiert, die Sie erwarten. Das ist der Deal; in der Regel sind Sie es bis zu einem bestimmten Konfidenzniveau für Ihre Eingaben zu trainieren. Im allgemeinen (und auch dies ist nur im Allgemeinen, die Leistung kann variieren), nicht neuronale Netze erhalten können, um immer die richtige Antwort zu geben; vielmehr erhalten Sie die Schätzung der richtigen Antwort, um innerhalb eines Vertrauensbereiches. Sie wissen, dass Vertrauensbereich durch, wie Sie das Netzwerk trainiert haben.

Die Frage stellt sich, warum Sie wollen würde, neuronale Netze verwenden, wenn Sie nicht sicher sein kann, dass der Abschluss kommen sie zu ist nachprüfbar korrekt; die Antwort ist, dass neuronale Netze mit hohem Vertrauen Antworten für bestimmte Klassen von Problemen kommen können (insbesondere NP-vollständige Probleme) in linearer Zeit, während nachprüfbar richtige Lösungen von NP-vollständigen Problemen nur bei in Polynomzeit können angekommen werden. In juristischer Hinsicht können neuronale Netze „lösen“ Probleme, die normale Berechnung kann nicht; Sie können jedoch nur ein bestimmter Prozentsatz sicher sein, dass Sie die richtige Antwort. Sie können, dass das Vertrauen durch das Trainingsprogramm bestimmen, und können in der Regel sicher, dass Sie mindestens 99,9% Vertrauen haben.

Sie öffnen eine größere Dose Würmer hier oben als man erwarten könnte.

NN sind vielleicht am besten als universelle Funktionsapproximatoren, nebenbei bemerkt, die Sie in das Denken über diese Dinge helfen können.

Wie auch immer, es ist nichts Besonderes NN in Bezug auf Ihre Frage, gilt das Problem auf jede Art von Algorithmus zu lernen.

Das Vertrauen, das Sie in den Ergebnissen haben es geht, ist, geben beide verlassen sich auf die Menge und die Qualität (oft schwieriger zu bestimmen) der Trainingsdaten, die Sie haben.

Wenn Sie sich für dieses Zeug wirklich interessiert sind, können Sie ein wenig über die Probleme von Übertraining lesen möchten, und Ensemble Methoden (Absacken, Steigerung, usw.).

Das eigentliche Problem ist, dass Sie in der Regel in der „Richtigkeit“ (cf Qualität) einer Antwort auf eine Eingabe nicht wirklich interessiert sind, die Sie bereits gesehen haben, sondern kümmern uns um die Qualität der Antwort der Vorhersage auf einer Eingangs Sie haben noch nicht gesehen. Dies ist ein viel schwierigeres Problem. Typische Ansätze dann, beinhalten „zurückhalten“ einige Ihrer Trainingsdaten (das heißt das Material, das Sie kennen die „richtige“ Antwort) und Testen der trainierten System dagegen. Es wird zwar subtil, wenn Sie anfangen, man bedenkt, dass Sie nicht genügend Daten haben kann, oder es kann voreingenommen sein, etc. So gibt es viele Forscher sind, die im Grunde alle ihre Zeit, um über diese Art von Problemen zu denken verbringen!

Ich habe an Projekten gearbeitet, wo es Testdaten sowie Trainingsdaten, so dass Sie die erwarteten Ergebnisse für eine Reihe von Eingaben die NN gesehen hat, nicht kennen.

Ein üblicher Weg, das Ergebnis jeder Klassifizierer der Analyse ist die Verwendung einer ROC-Kurve; eine Einführung in die Statistik der Klassifizierer und ROC-Kurven können noreferrer"> Deuten von Diagnose-Tests unter

Ich bin ein kompletter Amateur in diesem Bereich, aber Sie nicht über einen vorher festgelegten Satz von Daten verwenden Sie wissen, ist richtig?

Mein Lehrer sagte immer seine Daumenregel ist die NN mit 80% Ihrer Daten und bestätigen Sie mit dem restlichen 20% zu trainieren. Und natürlich, stellen Sie sicher, dass Datensatz so umfassend ist, wie Sie benötigen.

Wenn Sie herausfinden möchten, ob die Backpropagation des Netzwerks korrekt ist, gibt es einen einfachen Weg.

Da Sie die Ableitung der Fehlerlandschaft berechnen, können Sie überprüfen, ob Ihre Implementierung numerisch korrekt ist.Sie berechnen die Ableitung des Fehlers in Bezug auf ein bestimmtes Gewicht, ∂E/∂w.Das können Sie zeigen

∂E/∂w = (E(w + e) ​​- E(w - e)) / (2 * e) + O(e^2).

(Bishop, Maschinelles Lernen und Mustererkennung, S.246)

Im Wesentlichen bewerten Sie den Fehler links vom Gewicht, bewerten ihn rechts vom Gewicht und prüfen, ob der numerische Gradient mit Ihrem analytischen Gradienten übereinstimmt.

(Hier ist eine Implementierung: http://github.com/bayerj/arac/raw/9f5b225d6293974f8adfc5f20dfc6439cc1bed35/src/cpp/utilities/utilities.cpp)

Für mich wahrscheinlich gibt es nur einen Wert (e) hat zusätzliche Anstrengungen, um zu überprüfen, die Steigung der Backpropagation. Ich denke, dass Bayer die Antwort ist eigentlich häufig verwendet und vorgeschlagen. Sie müssen zusätzlichen Code dies schreiben, aber alle sind Vorwärtspropagation Matrix-Multiplikationen, die schreiben ist einfach und zu überprüfen.

Es gibt einige andere Fragen, die Sie davon ab, die beste Antwort zu verhindern, zum Beispiel:

  • Die Kostenfunktion von NN ist nicht konkav, so dass Ihre Gradientenabfallsaktualisierung ist nicht garantiert das globale Optimum zu finden.
  • über / unter Beschlag
  • Nicht die "richtige" Features / Modell
  • Auswahl
  • etc

Aber ich denke, sie über den Rahmen der Programmfehler sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top