Ich habe Yoshua Bengios Buch über tiefes Lernen gelesen und auf Seite 224 steht:
Faltungsnetzwerke sind einfach neuronale Netzwerke, die Faltung anstelle der allgemeinen Matrixmultiplikation in mindestens einer ihrer Schichten verwenden.
Ich war mir jedoch nicht hundertprozentig sicher, wie man "Matrixmultiplikation durch Faltung ersetzen" kann.
Was mich wirklich interessiert, ist, dies für Eingabevektoren in 1D zu definieren (wie in ), damit ich keine Eingaben als Bilder habe und versuche, die Faltung in 2D zu vermeiden.
So können zum Beispiel in "normalen" neuronalen Netzen die Operationen und das Feed-Ward-Muster genau wie in Andrew Ngs Notizen ausgedrückt werden:
Dabei ist der Vektor, der berechnet wurde, bevor er die Nichtlinearität durchlaufen hat . Die Nichtlinearität wirkt pero entry auf den Vektor und ist die Ausgabe / Aktivierung von versteckten Einheiten für die betreffende Ebene.
Diese Berechnung ist für mich klar, da die Matrixmultiplikation für mich klar definiert ist. Es erscheint mir jedoch unklar, nur die Matrixmultiplikation durch Faltung zu ersetzen. dh
f ( z ( l + 1 ) ) = a ( l + 1 )
Ich möchte sicherstellen, dass ich die obige Gleichung mathematisch genau verstehe.
Das erste Problem, das ich habe, wenn ich nur die Matrixmultiplikation durch Faltung ersetze, ist, dass man normalerweise eine Zeile von mit einem Skalarprodukt identifiziert . Man weiß also genau, wie sich das ganze auf die Gewichte bezieht, und das entspricht einem Vektor der durch angegebenen Dimension . Wenn man es jedoch durch Faltungen ersetzt, ist mir nicht klar, welche Zeile oder Gewichtung welchen Einträgen in . Es ist mir nicht einmal klar, dass es Sinn macht, die Gewichte tatsächlich als Matrix darzustellen (ich werde später ein Beispiel geben, um diesen Punkt zu erläutern). a ( l ) , z ( l + 1 ) , W ( l ) a ( l )
Wenn die Ein- und Ausgänge alle in 1D sind, berechnet man dann einfach die Faltung gemäß ihrer Definition und leitet sie dann durch eine Singularität?
Wenn wir zum Beispiel den folgenden Vektor als Eingabe hätten:
und wir hatten die folgenden Gewichte (vielleicht haben wir es mit Backprop gelernt):
dann ist die Faltung:
Wäre es richtig, nur die Nichtlinearität durchzuleiten und das Ergebnis als verborgene Ebene / Darstellung zu behandeln ( für den Moment kein Pooling annehmen )? dh wie folgt:
(Das Stanford UDLF Tutorial, ich denke, schneidet die Kanten, wo die Faltung mit Nullen konvoviert, aus irgendeinem Grund, müssen wir das schneiden?)
Sollte es so funktionieren? Zumindest für einen Eingabevektor in 1D? Ist das kein Vektor mehr?
Ich habe sogar ein neuronales Netzwerk gezeichnet, wie das aussehen soll, denke ich:
quelle
xcorr(x, y) = conv(x, fliplr(y))
. Die NN-Community neigt dazu, Faltung zu sagen, wenn sie tatsächlich eine Kreuzkorrelation durchführt, aber es ist ziemlich ähnlich.