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:
Aber die meiste Zeit, in der ich es versuche, bleibt es in einem lokalen Minimum stecken und findet nicht die richtige Form:
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?
Antworten:
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+iy x≫y abs(x+iy)≈x
quelle
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 weights
Ah, daran hatte ich nicht gedacht; Ich habe nur angenommen, dass sie tot sind.