Mein neuronales Netzwerk kann nicht einmal die euklidische Distanz lernen


9

Also versuche ich, mir neuronale Netze beizubringen (für Regressionsanwendungen, ohne Bilder von Katzen zu klassifizieren).

Meine ersten Experimente waren das Trainieren eines Netzwerks zur Implementierung eines FIR-Filters und einer diskreten Fourier-Transformation (Training für "Vorher" - und "Nachher" -Signale), da dies beide lineare Operationen sind, die von einer einzelnen Schicht ohne Aktivierungsfunktion implementiert werden können. Beide haben gut funktioniert.

Also wollte ich sehen, ob ich ein hinzufügen abs()und ein Amplitudenspektrum lernen kann. Zuerst habe ich darüber nachgedacht, wie viele Knoten in der verborgenen Schicht benötigt werden, und festgestellt, dass 3 ReLUs für eine grobe Annäherung von ausreichen. Deshalb abs(x+jy) = sqrt(x² + y²)habe ich diese Operation selbst an einzelnen komplexen Zahlen getestet (2 Eingänge → 3 verborgene ReLU-Knotenschicht → 1) Ausgabe). Gelegentlich funktioniert es:

3 ReLUs, die den euklidischen Abstand als umgekehrte hexagonale Pyramide implementieren

Aber die meiste Zeit, in der ich es versuche, bleibt es in einem lokalen Minimum stecken und findet nicht die richtige Form:

3 ReLUs bilden ein talförmiges Netzwerk

Verlust gegen Epochen

Ich habe alle Optimierer und ReLU-Varianten in Keras ausprobiert, aber sie machen keinen großen Unterschied. Kann ich noch etwas tun, um einfache Netzwerke wie dieses zuverlässig zusammenzuführen? Oder gehe ich das nur mit der falschen Einstellung an und du sollst einfach mehr Knoten als nötig auf das Problem werfen und wenn die Hälfte von ihnen stirbt, wird das nicht als große Sache angesehen?


1
Ihre Handlung zeigt verschiedene Experimente, von denen einige funktionieren und andere nicht. Was erklärt die Unterschiede?
Sycorax sagt Reinstate Monica

@Sycorax Das sind nur wiederholte Versuche derselben Sache. Manchmal findet es eine hexagonale Pyramidenlösung, aber normalerweise nicht.
Endolith

Haben Sie es mit zwei versteckten Ebenen und einem Tanh als Aktivierungsfunktion versucht?
Ketan

@ KetanNein, warum? Ich habe hier eine einfachere Variante gepostet: stats.stackexchange.com/q/379884/11633
Endolith

Vielleicht möchten Sie sich diesen ansehen. stats.stackexchange.com/q/375655/27556 . Aber kannst du erklären, warum du denkst, du brauchst nur 3 Relus? Die 'natürliche' Zerlegung wäre eine verborgene Schicht, um die Quadrationsnäherung mit Relus durchzuführen, und eine andere Schicht, um die Quadratwurzel zu machen - im Grunde genommen macht Relus stückweise lineare Näherungen.
Seanv507

Antworten:


6

Die Ausgabe scheint stark darauf hinzudeuten, dass eines oder mehrere Ihrer Neuronen tot sind (oder dass die Hyperebene der Gewichte für zwei Ihrer Neuronen zusammengeführt wurde). Sie können sehen, dass Sie mit 3 Relus 3 schattige Teilungen in der Mitte erhalten, wenn Sie zu der vernünftigeren Lösung konvergieren. Sie können leicht überprüfen, ob dies zutrifft, indem Sie die Ausgabewerte jedes Neurons überprüfen, um festzustellen, ob es für eine große Mehrheit Ihrer Proben tot bleibt. Alternativ können Sie alle 2x3 = 6 Neuronengewichte, gruppiert nach ihrem jeweiligen Neuron, zeichnen, um festzustellen, ob zwei Neuronen zu demselben Gewichtspaar zusammenfallen.

Ich vermute, dass eine mögliche Ursache dafür darin besteht, dass in Richtung einer Koordinate ist, z. B. . In diesem Fall versuchen Sie, die Identität zu reproduzieren, da dann . Hier können Sie wirklich nicht viel tun, um Abhilfe zu schaffen. Eine Möglichkeit besteht darin, mehr Neuronen hinzuzufügen, als Sie versucht haben. Die zweite Möglichkeit besteht darin, eine kontinuierliche Aktivierung wie ein Sigmoid oder etwas Unbegrenztes wie ein Exponential zu versuchen. Sie können auch einen Ausfall versuchen (mit einer Wahrscheinlichkeit von 10%). Sie können die reguläre Dropout-Implementierung in Keras verwenden, die hoffentlich klug genug ist, um Situationen zu ignorieren, in denen alle drei Neuronen ausfallen.x y a b s ( x + i y ) xx+iyxyabs(x+iy)x


1
+1, mit ziemlicher Sicherheit. Wenn Sie ReLU mit einer so geringen Anzahl von Gewichten verwenden, kommen fast immer tote Neuronen ins Spiel.
Kbrose

1
Dies ist eine plausible Vermutung im Fall von ReLU. Aber OP schreibt, dass sie einige verschiedene ReLU-Varianten ausprobiert haben - kommen tote Neuronen auch in Varianten wie ELU oder Leaky Relu oder PReLU vor?
Sycorax sagt Reinstate Monica

3 shadowy splits in the center when you converge to the more reasonable solution.Ja, das ist die grobe Annäherung, die ich meinte; eine umgekehrte sechseckige Pyramide. or perhaps something unbounded like an exponential Ich habe Elu und Selu ausprobiert, was nicht viel besser funktioniert hat. two neurons collapse to the same pair of weightsAh, daran hatte ich nicht gedacht; Ich habe nur angenommen, dass sie tot sind.
Endolith

Ich habe während der Verwendung von ReLU auf die Ausgabe der verborgenen Ebene zugegriffen und bestätigt, dass normalerweise eines der Neuronen tot ist. Weniger oft überlappen sich zwei und machen dasselbe. Ich frage mich, ob es eine Möglichkeit gibt, die Neuronen dazu zu bringen, sich gegenseitig "abzustoßen", damit sie sich nicht in redundanten Rollen niederlassen.
Endolith

1
@endolith Dropout wurde explizit für den Aufbau unabhängiger Neuronen entwickelt. ELUs "sterben" nie, aber sie haben links ein verschwindendes Gefälle.
Sycorax sagt Reinstate Monica
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.