Kleines, einfaches Testproblem für neuronale Netze?
Ich fange an, etwas über neuronale Netze zu lernen und sie zu trainieren. Ich habe über die Verwendung des Gefälles für das Training gelesen. Die meisten Bücher gehen direkt zum Backpropogation-Algorithmus für die Berechnung über$\nabla C$, wo $C$ ist die Kostenfunktion.
Ich wollte es mit Computer versuchen $\nabla C$ durch Verwendung endlicher Differenzen: $$\frac{\partial C}{\partial w_i}=\frac{1}{h}\left[C({w_i+h})-C({w_i})\right]$$ wo $w_i$ist etwas Gewicht im Netzwerk. (Bitte vergib mir meine schlampige Notation.)
Ich habe diesen Algorithmus codiert, aber wenn ich versuche, mein Netzwerk mit den MNIST-Daten zu trainieren, dauert die Berechnung der Gradienten ewig. Dies ist natürlich der Grund, warum jeder eine Rückübertragung empfiehlt.
Trotzdem würde ich gerne sehen, ob mein Trainingsalgorithmus für den Gradientenabstieg mit endlichen Differenzen funktioniert. Ich möchte mit der Scikit-Learns-Lösung ein einfaches Problem vergleichen.
Kann jemand ein kleines Problem empfehlen, das mit einem einfachen neuronalen Netzwerk gelöst werden kann? Vorzugsweise könnte ich eine kleine Datenmenge mit einem relativ kleinen Funktionsraum trainieren.
Antworten
Der einfachste Weg vorwärts besteht darin, die Größe der MNIST-Daten um 99% oder mehr zu reduzieren, indem die meisten Beispiele verworfen werden. Sie könnten sogar etwas so Extremes tun, als nur 20 Bilder zu behalten, eines von jeder Klasse als Trainingsdaten und eines von jeder Klasse als Testdaten. Dies ist die kleinste, die Sie möglicherweise für die MNIST-Daten benötigen, ohne etwas Besonderes wie Destillation zu tun.
Eine andere einfache Lösung besteht darin, ein Modell für das XOR-Problem zu trainieren. Auf dem Tensorflow-Spielplatz gibt es eine Reihe von Problemen mit Spielzeug im Browser.https://playground.tensorflow.org/