Konvergenz der Gewichte neuronaler Netze


10

Ich kam zu einer Situation, in der die Gewichte meines neuronalen Netzwerks auch nach 500 Iterationen nicht konvergieren. Mein neuronales Netzwerk enthält 1 Eingangsschicht, 1 versteckte Schicht und 1 Ausgangsschicht. Sie sind ungefähr 230 Knoten in der Eingabeebene, 9 Knoten in der verborgenen Ebene und 1 Ausgabeknoten in der Ausgabeschicht. Ich wollte wissen, ob ich vorzeitig stoppe (z. B. mein neuronales Netzwerktraining nach 100 Iterationen abbrechen). Welche Auswirkung hat dies auf das Modell?

Wollten Sie auch wissen, wie der Industriestandard umgeht, wenn die Gewichte im neuronalen Netzwerk nicht konvergieren?


Sind Ihre Daten richtig normalisiert? Dies ist normalerweise der Grund für ein solches Verhalten.
Sashkello

Normalerweise sollte die Anzahl der Neuronen in der verborgenen Schicht dieselbe Größe haben wie in Ihrer Eingabeebene. Ich denke, dass 9 Neuronen viel zu klein sind. Haben Sie versucht, auf 200-300 Neuronen zu steigen?
ThiS

@sashkello Ja, Daten werden ordnungsgemäß normalisiert.
Lerner

1
@juampa Es gibt keinen Grund, 9 Knoten in der verborgenen Ebene zu haben. Wir hatten das Gefühl, dass mehr Knoten in der verborgenen Schicht die Komplexität des Netzwerks erhöhen und die Daten überanpassen.
Lerner

3
Sie müssen etwas mehr Erklärungen geben. Was ist das Problem, das Sie lösen? Wie viele Trainingsdatenpunkte haben Sie? Was meinst du damit, nicht zu konvergieren? - Meinst du nur, dass die Leistung (am Trainingssatz) schlecht ist oder dass deine Gewichte nicht konvergieren? Wenn die Gewichtskonvergenz stimmt, musst du eine niedrigere Lernrate oder eine sich verjüngende Lernrate verwenden. Möglicherweise möchten Sie auch die logistische / lineare Regression als Basislinie verwenden. Wie korrelieren Ihre Eingaben? Wenn sie sehr korreliert sind, reicht eine Normalisierung nicht aus, und Sie sollten eine Diagonalisierung (auch bekannt als PCA) in Betracht ziehen.
Seanv507

Antworten:


13

Es gibt eine Reihe von Fragen zu stellen:

  • Haben Sie die entsprechende Anzahl von Neuronen in jeder Schicht?
  • Verwenden Sie die entsprechenden Übertragungsfunktionen?
  • Verwenden Sie den geeigneten Lernalgorithmus?
  • Haben Sie eine ausreichend große Stichprobe?
  • Können Sie bestätigen, dass Ihre Proben die richtige Beziehung zueinander haben, um informativ zu sein? (nicht redundant, von relevanter Dimension usw.)

Was können Sie der Ephemeride geben? Können Sie uns etwas über die Art der Daten erzählen?

Sie könnten einen gradientenverstärkten Baum neuronaler Netze erstellen.

Sie haben gefragt, was passiert, wenn Sie früh aufhören.

Sie können es selbst versuchen. Führen Sie 300x aus, wobei Sie mit zufällig initialisierten Gewichten beginnen und dann bei einer bestimmten Anzahl von Iterationen anhalten, z. B. 100. Berechnen Sie an diesem Punkt Ihren Ensemble-Fehler, Ihren Trainings-Teilmengen-Fehler und Ihren Test-Set-Fehler. Wiederholen. Nachdem Sie 300 Werte haben, die Ihnen den Fehler mitteilen, können Sie sich anhand von 100 Lerniterationen ein Bild von Ihrer Fehlerverteilung machen. Wenn Sie möchten, können Sie diese Verteilung bei mehreren anderen Lernwerten testen. Ich schlage 200, 500 und 1000 Iterationen vor. Dies gibt Ihnen eine Vorstellung davon, wie sich Ihr SNR im Laufe der Zeit ändert. Eine Darstellung des SNR gegen die Iterationszahl kann Ihnen eine Vorstellung von "Klippen" oder "gut genug" geben. Manchmal gibt es Klippen, auf denen Fehler zusammenbrechen. Manchmal ist der Fehler an diesem Punkt akzeptabel.

Es braucht "relativ einfache" Daten oder "ziemlich viel" Glück, bis Ihr System in weniger als 100 Iterationen konsistent konvergiert. Bei beiden geht es weder um Wiederholbarkeit noch um Verallgemeinerbarkeit.

Warum denken Sie an konvergierende Gewichte und nicht an Fehler, die unter einem bestimmten Schwellenwert liegen? Haben Sie jemals von einem Abstimmungsparadoxon gehört? ( Link ) Wenn Sie zyklische Interaktionen in Ihrem System haben (wie Feedback in neuronalen Netzen), können Sie Abstimmungsparadoxien haben - gekoppelte Änderungen. Ich weiß nicht, ob Gewichte allein ein ausreichender Indikator für die Konvergenz des Netzwerks sind.

Sie können sich die Gewichte als Leerzeichen vorstellen. Es hat mehr als 3 Dimensionen, aber es ist immer noch ein Raum. Im "Schwerpunkt" dieses Bereichs befindet sich Ihre "am besten passende" Region. Weit entfernt vom Schwerpunkt ist eine weniger gute Passform. Sie können sich die aktuelle Einstellung Ihrer Gewichte als einen einzelnen Punkt in diesem Bereich vorstellen.

Jetzt wissen Sie nicht, wo das "Gute" tatsächlich ist. Was Sie haben, ist ein lokaler "Hang". Sie können einen Gradientenabstieg in Richtung lokal "besser" durchführen, wenn Ihr Punkt gerade ist. Es sagt dir nicht das "Universelle" besser, aber lokal ist besser als nichts.

Also fängst du an zu iterieren und gehst bergab in Richtung des Tals der Betterness. Sie iterieren, bis Sie denken, dass Sie fertig sind. Vielleicht ist der Wert Ihrer Gewichte groß. Vielleicht hüpfen sie überall herum. Vielleicht dauert die Berechnung "zu lange". Du willst fertig sein.

Woher wissen Sie also, ob Ihr Standort "gut genug" ist?

Hier ist ein kurzer Test, den Sie durchführen können:

Nehmen Sie 30 einheitliche zufällige Teilmengen der Daten (wie jeweils einige Prozent der Daten) und trainieren Sie das Netzwerk darauf neu. Es sollte viel schneller sein. Beobachten Sie, wie lange sie brauchen, um zu konvergieren, und vergleichen Sie es mit der Konvergenzhistorie der großen Menge. Testen Sie den Fehler des Netzwerks für die gesamten Daten in diesen Teilmengen und sehen Sie, wie diese Fehlerverteilung mit Ihrem großen Fehler verglichen wird. Erhöhen Sie nun die Teilmengengröße auf bis zu 5% Ihrer Daten und wiederholen Sie den Vorgang. Sehen Sie, was Sie das lehrt.

Dies ist eine Variation der Partikelschwarmoptimierung (siehe Referenz), die darauf basiert, wie Honigbienen Entscheidungen auf der Grundlage von Scouting treffen.

Sie haben gefragt, was passiert, wenn die Gewichte nicht konvergieren.

Neuronale Netze sind ein Werkzeug. Sie sind nicht das einzige Werkzeug. Da sind andere. Ich würde versuchen, einen von ihnen zu verwenden.

Ich arbeite in Bezug auf Informationskriterien, also betrachte ich sowohl die Gewichte (Parameteranzahl) als auch den Fehler. Sie könnten eines davon versuchen.

Es gibt einige Arten der Vorverarbeitung, die nützlich sein können. Zentrum und Maßstab. Mit Hauptkomponenten drehen. Wenn Sie sich die Eigenwerte in Ihren Hauptkomponenten ansehen, können Sie mithilfe von Skree-Plot-Regeln die Dimension Ihrer Daten schätzen. Das Reduzieren der Dimension kann die Konvergenz verbessern. Wenn Sie etwas über die "zugrunde liegende Physik" wissen, können Sie die Daten glätten oder filtern, um Rauschen zu entfernen. Manchmal geht es bei der Konvergenz um Rauschen im System.

Ich finde die Idee der komprimierten Wahrnehmung interessant. Es kann eine radikale Unterabtastung einiger Systeme ohne Verlust der Verallgemeinerung ermöglichen. Ich würde mir einige neu abgetastete Bootstrap-Statistiken und Verteilungen Ihrer Daten ansehen, um festzustellen, ob und auf welcher Ebene der Unterabtastung der Trainingssatz repräsentativ wird. Dies gibt Ihnen ein gewisses Maß für den "Zustand" Ihrer Daten.

Manchmal ist es gut, dass sie nicht zusammenlaufen

Haben Sie jemals von einem Abstimmungsparadoxon gehört? Sie können es sich als einen Cousin mit höherer Anzahl in einer Zwei-Wege-Sackgasse vorstellen. Es ist eine Schleife. In einem 2-Personen-Abstimmungsparadoxon möchte die erste Person den Kandidaten "A", während die zweite den Kandidaten "B" (oder nicht-A oder so) möchte. Der wichtige Teil ist, dass Sie es als eine Schleife betrachten können.

Schleifen sind in neuronalen Netzen wichtig. Feedback. Rekursion. Dadurch konnte das Perzeptron XOR-ähnliche Probleme lösen. Es werden Schleifen erstellt, und manchmal können sich die Schleifen wie das Abstimmungsparadox verhalten, bei dem sich die Gewichte ständig ändern, wenn Sie unendlich viele Iterationen hatten. Sie sollen nicht konvergieren, weil es nicht auf das individuelle Gewicht ankommt, sondern auf das Zusammenspiel der Gewichte in der Schleife.

Hinweis:

Die Verwendung von nur 500 Iterationen kann ein Problem sein. Ich hatte NNs, bei denen 10.000 Iterationen kaum genug waren. Die Anzahl der Iterationen, um "genug" zu sein, hängt, wie bereits erwähnt, von Daten, NN-Topologie, Knotenübertragungsfunktionen, Lern- / Trainingsfunktion und sogar Computerhardware ab. Sie müssen ein gutes Verständnis dafür haben, wie sie alle mit Ihrer Iterationszahl interagieren, bevor Sie sagen, dass "genug" oder "zu viele" Iterationen vorhanden sind. Andere Überlegungen wie Zeit, Budget und was Sie mit dem NN tun möchten, wenn Sie mit dem Training fertig sind, sollten ebenfalls berücksichtigt werden.

Chen, RB, Chang, SP, Wang, W. & Wong, WK (2011, September). Optimale experimentelle Designs über Methoden zur Partikelschwarmoptimierung (Preprint), abgerufen am 25. März 2012 von http://www.math.ntu.edu.tw/~mathlib/preprint/2011-03.pdf


2

Für mich ist es schwer zu sagen, was Ihr Problem sein könnte. Ein zu berücksichtigender Punkt ist die konkrete Implementierung, die Sie verwenden. Konkret, welcher Optimierungsalgorithmus. Wenn die Konvergenz Ihres Netzwerks sehr lange dauert und Sie eine Form des stochastischen Gradientenabfalls (oder Mini-Batch) verwenden, befindet sich Ihr Netzwerk möglicherweise auf einem Plateau (einer Region, in der die Energie- / Fehlerfunktion sehr flach ist so dass Gradienten sehr gering sind und somit Konvergenz).

Wenn ja, überprüfen Sie bitte die Größe der Farbverläufe, um festzustellen, ob dies der Fall ist. Es gibt eine Reihe verschiedener Techniken, um dieses Problem zu lösen, beispielsweise das Hinzufügen eines Impulses zum Gradienten.

Einen detaillierten Überblick über Techniken und Tricks des Handels finden Sie in diesem (unbedingt zu lesenden) Artikel von Yann LeCun .


1

Stellen Sie sicher, dass Ihre Farbverläufe nicht über die Grenzen hinausgehen, oder dass die Farbverläufe möglicherweise Null werden. Dies ist im Volksmund als explodierende Gradienten und verschwindende Gradientenprobleme bekannt.

Eine mögliche Lösung ist die Verwendung eines adaptiven Optimierers wie AdaGrad oder Adam.

Ich hatte ein ähnliches Problem beim Training eines einfachen neuronalen Netzwerks, als ich mit neuronalen Netzwerken anfing.

Einige Referenzen: https://en.wikipedia.org/wiki/Vanishing_gradient_problem https://www.youtube.com/watch?v=VuamhbEWEWA


0

Ich hatte viele Datensätze, die langsam konvergierten - wahrscheinlich, weil die Eingaben stark korrelierten.

Ich habe meinen eigenen C ++ NN-Analysator geschrieben und kann damit die Lernrate für jedes Gewicht variieren. Für jedes Gewicht an jeder Kante mache ich zwei Dinge, die einigen helfen.

Zuerst multipliziere ich jede Lernrate mit einer gleichmäßig verteilten Zufallszahl aus [0,1]. Ich vermute, dass das beim Korrelationsproblem hilft.

Der andere Trick ist, dass ich den aktuellen Gradienten mit dem vorherigen Gradienten an jeder Kante vergleiche. Wenn sich der Gradient prozentual kaum verringert, multipliziere ich die Lernrate für diese Kante mit bis zu 5.

Ich habe keine besondere Rechtfertigung für einen dieser Tricks, aber sie scheinen ziemlich gut zu funktionieren.

Hoffe das hilft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.