Warum tiefe Netzwerke nutzen?
Versuchen wir zunächst, eine sehr einfache Klassifikationsaufgabe zu lösen. Angenommen, Sie moderieren ein Webforum, das manchmal mit Spam-Nachrichten überflutet ist. Diese Nachrichten sind leicht zu identifizieren - meistens enthalten sie bestimmte Wörter wie "buy", "porn" usw. und eine URL zu externen Ressourcen. Sie möchten einen Filter erstellen, der Sie auf solche verdächtigen Nachrichten hinweist. Es wird ziemlich einfach - Sie erhalten eine Liste von Funktionen (z. B. Liste verdächtiger Wörter und Vorhandensein einer URL) und trainieren eine einfache logistische Regression (auch bekannt als Perzeptron), dh Modell wie:
g(w0 + w1*x1 + w2*x2 + ... + wnxn)
Wo x1..xn
sind Ihre Merkmale (entweder Vorhandensein eines bestimmten Wortes oder einer URL)? w0..wn
- Gelernte Koeffizienten und g()
eine logistische Funktion , um ein Ergebnis zwischen 0 und 1 zu erhalten lineare Entscheidungsgrenze. Angenommen, Sie haben nur zwei Features verwendet, sieht diese Grenze möglicherweise folgendermaßen aus:
Hier stellen 2 Achsen Merkmale dar (z. B. Anzahl der Vorkommen eines bestimmten Wortes in einer Nachricht, normalisiert um Null), rote Punkte bleiben für Spam und blaue Punkte - für normale Nachrichten, während die schwarze Linie die Trennlinie darstellt.
Aber bald merkt man, dass einige gute Nachrichten viele Vorkommen des Wortes "buy" enthalten, aber keine URLs oder ausführliche Diskussionen über die Erkennung von Pornos , die sich nicht wirklich auf Pornofilme beziehen. Eine lineare Entscheidungsgrenze kann mit solchen Situationen einfach nicht umgehen. Stattdessen brauchst du so etwas:
Diese neue nichtlineare Entscheidungsgrenze ist viel flexibler , dh sie kann die Daten viel genauer anpassen. Es gibt viele Möglichkeiten, diese Nichtlinearität zu erreichen - Sie können Polynommerkmale (z. B. x1^2
) oder deren Kombination (z. B. x1*x2
) verwenden oder wie bei Kernel-Methoden auf eine höhere Dimension projizieren . In neuronalen Netzen ist es jedoch üblich, sie durch Kombinieren von Perzeptronen oder mit anderen Worten durch Bilden von mehrschichtigen Perzeptronen zu lösen. Die Nichtlinearität ergibt sich hier aus der logistischen Funktion zwischen den Schichten. Je mehr Schichten, desto ausgefeiltere Muster können von MLP abgedeckt werden. Eine einzelne Schicht (Perceptron) kann einfache Spam-Erkennung durchführen, ein Netzwerk mit 2 bis 3 Schichten kann schwierige Kombinationen von Funktionen erkennen, und Netzwerke mit 5 bis 9 Schichten, die von großen Forschungslabors und Unternehmen wie Google verwendet werden, können die gesamte Sprache modellieren oder Katzen erkennen auf Bildern.
Dies ist ein wesentlicher Grund für tiefe Architekturen - sie können komplexere Muster modellieren .
Warum sind tiefe Netzwerke schwer zu trainieren?
Mit nur einem Merkmal und einer linearen Entscheidungsgrenze ist es in der Tat ausreichend, nur zwei Trainingsbeispiele zu haben - ein positives und ein negatives. Mit mehreren Funktionen und / oder nichtlineare Entscheidungsgrenze müssen Sie mehrere Aufträge mehr Beispiele , alle möglichen Fälle abzudecken (zB braucht man nicht nur Beispiele finden mit word1
, word2
und word3
, aber auch mit allen möglichen deren Kombinationen). Und im wirklichen Leben müssen Sie sich mit Hunderten und Tausenden von Merkmalen (z. B. Wörtern in einer Sprache oder Pixeln in einem Bild) und mindestens mehreren Ebenen befassen, um eine ausreichende Nichtlinearität zu erreichen. Die Größe eines Datensatzes, der zum vollständigen Trainieren solcher Netzwerke benötigt wird, übersteigt leicht 10 ^ 30 Beispiele, sodass es absolut unmöglich ist, genügend Daten abzurufen. Mit anderen Worten, mit vielen Funktionen und vielen Ebenen wird unsere Entscheidungsfunktion zu flexibelum es genau lernen zu können .
Es gibt jedoch Möglichkeiten, dies ungefähr zu lernen . Wenn wir zum Beispiel in probabilistischen Umgebungen arbeiten, könnten wir anstelle des Lernens von Frequenzen aller Kombinationen aller Merkmale davon ausgehen, dass sie unabhängig sind und nur einzelne Frequenzen lernen, was den vollständigen und nicht eingeschränkten Bayes-Klassifikator auf einen naiven Bayes reduziert und somit viel erfordert. viel weniger Daten zu lernen.
In neuronalen Netzen gab es mehrere Versuche, die Komplexität (Flexibilität) der Entscheidungsfunktion (sinnvoll) zu reduzieren. Beispielsweise setzen Faltungsnetzwerke, die häufig in der Bildklassifizierung verwendet werden, nur lokale Verbindungen zwischen nahegelegenen Pixeln voraus und versuchen daher, nur Kombinationen von Pixeln in kleinen "Fenstern" (z. B. 16 × 16 Pixel = 256 Eingangsneuronen) zu lernen, im Gegensatz zu Vollbildern (z. B. 100 x 100 Pixel = 10000 Eingangsneuronen). Andere Ansätze umfassen Feature-Engineering, dh die Suche nach bestimmten, von Menschen entdeckten Deskriptoren von Eingabedaten.
Manuell entdeckte Features sind tatsächlich sehr vielversprechend. In der Verarbeitung natürlicher Sprachen ist es beispielsweise manchmal hilfreich, spezielle Wörterbücher (z. B. mit spamspezifischen Wörtern) zu verwenden oder die Verneinung abzufangen (z. B. " nicht gut"). Und in der Bildverarbeitung sind Dinge wie SURF-Deskriptoren oder Haar-ähnliche Merkmale fast unersetzlich.
Das Problem beim manuellen Feature-Engineering ist jedoch, dass es buchstäblich Jahre dauert, bis gute Deskriptoren vorliegen. Darüber hinaus sind diese Merkmale häufig spezifisch
Unbeaufsichtigtes Pretraining
Es stellt sich jedoch heraus, dass wir mithilfe von Algorithmen wie Autoencodern und eingeschränkten Boltzmann-Maschinen automatisch gute Funktionen direkt aus den Daten erhalten können . Ich habe sie in meiner anderen Antwort ausführlich beschrieben , aber kurz gesagt, sie ermöglichen es , wiederholte Muster in den Eingabedaten zu finden und sie in übergeordnete Features umzuwandeln. Wenn diese Algorithmen beispielsweise nur Zeilenpixelwerte als Eingabe verwenden, können sie höhere ganze Kanten identifizieren und durchlaufen und dann aus diesen Kanten Zahlen usw. konstruieren, bis Sie wirklich übergeordnete Deskriptoren wie Variationen in Gesichtern erhalten.
Nach einer solchen (unbeaufsichtigten) Vorschulung wird das Netzwerk in der Regel in MLP umgewandelt und für ein normales beaufsichtigtes Training verwendet. Beachten Sie, dass das Vorlernen schichtweise erfolgt. Dies reduziert den Lösungsraum für den Lernalgorithmus erheblich (und damit die Anzahl der benötigten Trainingsbeispiele), da nur die Parameter in jeder Ebene ohne Berücksichtigung anderer Ebenen gelernt werden müssen.
Und darüber hinaus...
Unbeaufsichtigtes Pretraining gibt es schon seit einiger Zeit. In letzter Zeit wurde jedoch festgestellt, dass andere Algorithmen das Lernen sowohl zusammen mit als auch ohne Pretraining verbessern. Ein bemerkenswertes Beispiel für solche Algorithmen ist die Dropout- einfache Technik, bei der einige Neuronen während des Trainings zufällig "herausfallen", eine gewisse Verzerrung erzeugt und Netzwerke daran gehindert werden, Daten zu genau zu folgen. Dies ist immer noch ein heißes Forschungsthema, daher überlasse ich dies einem Leser.