Neuronale Netze debuggen

10

Ich habe ein künstliches neuronales Netzwerk in Python mit der Optimierungsfunktion scipy.optimize.minimize (Gradient konjugieren) aufgebaut.

Ich habe die Gradientenprüfung implementiert, alles doppelt überprüft usw. und bin mir ziemlich sicher, dass es richtig funktioniert.

Ich habe es einige Male ausgeführt und es erreicht "Optimierung erfolgreich beendet". Wenn ich jedoch die Anzahl der ausgeblendeten Ebenen erhöhe, steigen die Kosten der Hypothese (alles andere bleibt gleich), nachdem sie erfolgreich beendet wurde.

Intuitiv scheint es, als sollten die Kosten sinken, wenn die Anzahl der verborgenen Schichten erhöht wird, da eine komplexere Hypothese generiert werden kann, die besser zu den Daten passt. Dies scheint jedoch nicht der Fall zu sein.

Es würde mich interessieren, was hier vor sich geht oder ob ich das neuronale Netz falsch implementiert habe.

user3726050
quelle

Antworten:

9

Es gibt so viele Möglichkeiten, mit einem neuronalen Netz etwas falsch zu machen, dass es schwierig sein wird, Fehler zu beheben. Um Ihre Intuition anzusprechen, erschwert jede zusätzliche verborgene Ebene das Lernen erheblich. Nach alledem sind hier einige Möglichkeiten:

  1. Sie haben Gewichtsabnahme hinzugefügt. Durch Hinzufügen weiterer Ebenen werden mehr Gewichte hinzugefügt, was Ihre Regularisierungskosten erhöht.
  2. Das Problem ist so einfach, dass ein Modell mit einer einzelnen verborgenen Ebene ausreicht. Das Hinzufügen weiterer versteckter Ebenen erschwert das Lernen für das Netzwerk (schwierigeres Optimierungsproblem).
  3. Die Optimierungsmethode macht keine gute Arbeit (ich bevorzuge climin gegenüber scipy.optimize).
  4. Sie verwenden die Sigmoid / Tanh-Aktivierungsfunktion. Die Sigmoidfunktion verursacht das Problem des verschwindenden Gradienten, das das Lernen mit mehr Schichten erschwert. Versuchen Sie es mit der ReLu-Funktion.

Das Training neuronaler Netze erfordert viel Übung, Glück und Geduld. Viel Glück.

user1133029
quelle
1
Gute Antwort. Beachten Sie jedoch, dass 2, 3, 4 auf komplexe Weise interagieren können. Das Debuggen könnte erfolgen, indem die Aktivierungswerte des ANN, die Größe der Gewichte des ANN, der Fehler innerhalb und außerhalb des Samples sowie die Konvergenz des Optimierers usw. im
Auge behalten werden
3

Das Erhöhen der Anzahl versteckter Schichten für ein neuronales Standardnetzwerk verbessert in den meisten Fällen die Ergebnisse nicht. Durch Ändern der Größe der ausgeblendeten Ebene wird.

Diese Tatsache (dass die Anzahl der verborgenen Schichten sehr wenig bewirkt) wurde tatsächlich historisch festgestellt und ist die Motivation hinter dem Bereich des tiefen Lernens. Deep Learning ist eine effektive clevere Methode zum Trainieren mehrschichtiger neuronaler Netze, indem beispielsweise Teilmengen von Merkmalen beim Training verschiedener Schichten isoliert werden.

Gutes Einführungsvideo zu diesem Thema auf YouTube

Eric Chiang
quelle
2
Beim Deep Learning geht es darum, die Anzahl der verborgenen Ebenen zu erhöhen . Andernfalls würde es Fettlernen genannt werden :)
Emre
@ Emmre meinte das definitiv. Verfluche meine Interpunktion!
Eric Chiang