2016-06-16 27 views
0

Ich trainiere einen tiefen Autoencoder (für jetzt 5-Layer-Codierung und 5-Layer-Decodierung, Leaky ReLu verwenden), um die Dimensionalität der Daten von etwa 2000 Dims auf 2 zu reduzieren trainiere mein Modell auf 10k-Daten, und das Ergebnis ist akzeptabel. Das Problem tritt auf, wenn ich größere Daten verwende (50k bis 1M). Die Verwendung des gleichen Modells mit dem gleichen Optimizer und Dropout usw. funktioniert nicht und das Training bleibt nach einigen Epochen stecken. Ich versuche, eine Hyper-Parameter-Suche auf dem Optimierer zu tun (ich benutze Adam), aber ich bin mir nicht sicher, ob dies das Problem lösen wird.tiefes Autoencoder-Training, kleine Daten vs. große Daten

Sollte ich nach etwas anderem suchen, um es zu ändern? Kommt es in diesem Fall auf die Losgröße an? Soll ich das Problem lösen, indem ich den Optimierer optimiere? Soll ich mit der Dropout-Quote spielen? ...

Jeder Rat wird sehr geschätzt.

p.s. Ich benutze Keras. Es ist sehr bequem. Wenn Sie sich nicht über sie wissen, überprüfen Sie es dann aus: http://keras.io/

Antwort

0

Ich würde die folgenden Fragen haben, wenn eine Ursache für das Problem zu finden versuchen:

1) Was ist, wenn Sie die Größe der Mitte ändern geschieht Schicht von 2 bis etwas größer? Verbessert es die Leistung des auf> 50k Trainingssatz trainierten Modells?

2) Sind 10k Trainingsbeispiele und Testbeispiele zufällig aus 1M Datensätzen ausgewählt?

Meine Vermutung ist, dass Ihr Trainingsmodell einfach nicht in der Lage ist, Ihre 50K-1M-Daten mit nur 2 Dimensionen in der mittleren Schicht zu dekomprimieren. So ist es einfacher für das Modell, ihre Parameter für 10k Daten anzupassen, Aktivierungen von der mittleren Schicht sind in diesem Fall sinnvoller, aber für> 50k Datenaktivierungen sind zufälliges Rauschen.

+0

Danke! All diese Tipps sind nützlich. Ich habe verschiedene 10k-Subsamples getestet und sie machen keinen Unterschied, daher nehme ich an, dass die Samples fair gewählt sind. Was die Größe der Codierungsschicht anbelangt, hilft das Vergrößern der Größe nicht. Ich habe versucht, es auf 10 statt 2 zu erhöhen, und in diesem Fall werden weder 10k noch 50k korrekt trainiert. – Mos

0

Nach einigen Untersuchungen habe ich festgestellt, dass die Schichtkonfiguration, die ich verwende, für das Problem irgendwie krank ist, und dies scheint zumindest Teile des Problems zu verursachen.

Ich habe Sequenz von Schichten für die Codierung und Decodierung verwendet. Die Schichtgrößen wurden gewählt, um linear zu verringern, zum Beispiel:

input: 1764 (dims)

hidden1 1176

hidden2: 588

codiert: 2

hidden3: 588

hidden4: 1176

Ausgabe: 1764 (wie Eingabe)

Dies scheint jedoch nur gelegentlich zu funktionieren und es ist empfindlich für die Wahl der Hyperparameter.

Ich versuchte, dies durch eine exponentiell abnehmende Schichtgröße (für die Codierung) und die andere Möglichkeit für die Decodierung zu ersetzen. also: 1764, 128, 16, 2, 16, 128, 1764

Jetzt scheint das Training robuster zu sein. Ich muss immer noch eine Hyperparametersuche durchführen, um zu sehen, ob diese empfindlich ist oder nicht, aber ein paar manuelle Versuche scheinen ihre Robustheit zu zeigen.

Ich werde ein Update veröffentlichen, wenn ich einige andere interessante Punkte treffe.