Krautmaster schrieb:
Intertessant finde ich bei dem von mir verlinkten Video dieses Dropout. Das killt einzelne Neuronen in dem Netzwerk und verbessert so sogar das Ergebnis. Nach dem Motto "zuviel Gehirnzellen machen dich doof".
Dropout (proposed von Srivastava, Hinton, Krizhevsky et. al. (Pioniere im Bereich machine learning) in
Dropout: A simple way to prevent neural networks from overfitting) wird genutzt um co-adapting, also das gegenseitige Anpassen von Neuronen auf spezifischen input pro Trainingseinheit zu reduzieren.
Das passiert übrigens auch bei wenigen Neuronen, stützt also nicht eine These wie "zu viele Gehirnzellen machen doof". Mit steigender Anzahl von Neuronen wird nur die Wahrscheinlichkeit, dass das überhaupt passiert, größer (weil es mehr Möglichkeiten für Neuronen gibt, sich gegenseitig anzupassen).
Vereinfacht ausgedrückt unterbindet dropout das co-adapting bis zu einem gewissen Grad, da droput willkürlich einen gewissen Prozentsatz aller Neurone pro Layer für einen Trainingsschritt abschaltet. In jeder Iteration wohlbemerkt, d.h. bei t=1 werden andere Neuronen ausgeschaltet als bei t=2.
Dadurch kann sich ein einzelnes Neuron, für einen spezifischen input, nicht darauf verlassen, dass bestimmte andere Neurone auch tatsächlich feuern. Es kann sich also weniger stark auf wenige Neurone anpassen, die nur für den Trainingsdatensatz spezifische Muster in ihrer Anregung bilden. Es muss sich, verallgemeinert gesprochen, mehr auf "das Gesamtbild" konzentrieren.
Dadurch möchte man das fördern, was man unter Generalisierung verbucht: also die Anpassung von AI's an spezifische Muster im Trainingsdatensatz (overfitting) reduzieren. Geringes Overfitting ist dann natürlich gleichbedeutend mit einer besseren Generalisierung, also damit, dass die AI etwas gelernt hat, was auch außerhalb des Trainingsdatensatzes sinnvoll ist.
Krautmaster schrieb:
Problematisch wirds wenn das Neuronale Netzwerk zu groß ist und quasi einfach jedes mögliche Ergebnis anhand des Training Sets 1:1 abspeichern kann. Also sich das Ergebnis merkt - weniger die Logik es zu erkennen.
Das ist Overfitting und wird mit verschiedenen Techniken unterbunden. Unter anderem natürlich auch damit, ein neuronales Netz nicht zu überdimensionieren. Allerdings tut man das eh nicht, da die benötigte Rechenkapazität i.d.R. exponentiell zur Parameteranzahl im Netz wächst.
D.h. ein doppelt so großes Netz benötigt i.d.R. nicht doppelt so viel Zeit zum Trainieren (also Rechenoperationen pro Iteration), sondern noch deutlich mehr.
Unabhängig davon funktionieren noise, dropout, regularization layer, normalization layer usw. schon recht gut. Sprich Overfitting ist zwar immer ein Problem, aber kein so eminentes, dass es einen wesentlich beim dimensionieren von neuronalen Netzen stören würde.
Krautmaster schrieb:
nicht unbedingt. Ein gutes neuronales Netzwerk zu designen ist das eine. Wie gut sich dieses trainieren lässt das andere. Ich denke kaum dass der Programmierer des Google Translator so gut selbst übersetzen würde. Der muss aber das Netzwerk mit guten Daten füttern und es fortlaufend erweitern / optimieren.
In der Tat. Wobei du ein Netz nicht mal besonders gut designen musst oder besonders gute Daten zum Trainieren brauchst. Wenn man mal informationstheoretisch da herangeht und von unendlichen Ressourcen ausgeht.
Ein kleines Beispiel dazu: wenn die Komplexität eines Problems nicht komplett außerhalb der Domäne lösbarer Probleme für eine bestimmte Entität liegt, dann kann die Entität das Problem, gegen unendlich Zeit & Beispiele, immer lösen.
Oder einfacher sehr stark verallgemeinert: wenn die geistigen Kapazitäten eines minderintelligenten Hauptschülers nicht overall zu niedrig sind, dann braucht man nur genügend Zeit / Geduld und genügend Beispiele, um ihm ein bestimmtes Schulfach beizubringen.
Das gleiche gilt für künstliche neuronale Netze: wenn du unbegrenzt Zeit aufwendest und unbegrenzt Trainingsdaten hast (Beispiele), dann kannst du auch ein sehr schlechtes Netz trainieren, die Aufgaben adäquat zu lösen.
Die Kunst liegt darin, dass Ressourcen stark endlich sind: man muss mit wenig Trainingsdaten auskommen und das Netz muss dabei so effizient wie möglich sein.
Was bringt einem beispielsweise eine AI, die Spracherkennung hinbekommt, aber erst nachdem man ihr den kompletten, erweiterten Duden vorgelesen hat und an Rechenressourcen dafür einen kompletten Supercomputer benötigt?