Ich habe kürzlich den Kommentar von Yan LeCuns zu 1x1-Windungen gelesen :
In Convolutional Nets gibt es keine "vollständig verbundenen Schichten". Es gibt nur Faltungsschichten mit 1x1-Faltungskernen und einer vollständigen Verbindungstabelle.
Es ist eine zu selten verstandene Tatsache, dass ConvNets keine Eingabe mit fester Größe benötigen. Sie können sie auf Eingaben trainieren, die zufällig einen einzelnen Ausgabevektor (ohne räumliche Ausdehnung) erzeugen, und sie dann auf größere Bilder anwenden. Anstelle eines einzelnen Ausgabevektors erhalten Sie dann eine räumliche Karte der Ausgabevektoren. Jeder Vektor sieht Eingabefenster an verschiedenen Stellen der Eingabe. In diesem Szenario wirken die "vollständig verbundenen Schichten" tatsächlich als 1x1-Faltungen.
Ich würde gerne ein einfaches Beispiel dafür sehen.
Beispiel
Angenommen, Sie haben ein vollständig verbundenes Netzwerk. Es hat nur eine Eingabeebene und eine Ausgabeebene. Die Eingabeebene hat 3 Knoten, die Ausgabeebene hat 2 Knoten. Dieses Netzwerk hat Parameter. Nehmen wir an, Sie haben eine ReLU-Aktivierungsfunktion in der Ausgabeebene und in der Gewichtsmatrix, um sie noch konkreter zu machen
Das Netzwerk ist also mit .
Wie müsste die Faltungsschicht aussehen, um gleich zu sein? Was bedeutet LeCun mit "vollständiger Verbindungstabelle"?
Ich denke, um eine äquivalente CNN zu erhalten, müsste es genau die gleiche Anzahl von Parametern haben. Der MLP von oben hat Parameter.
quelle
kernel = filter
zu? >> „So ist 1x1 Faltung nur über den Ausgang, nicht über den Kernel? Gar nicht. Eine3x3
Faltung eine beliebige Ausgabeform haben kann.“ In der Tat, wenn Polsterung verwendet wird , undstride=1
dann dasoutput shape = input shape
. >> "Ich dachte, wenn ein Faltungskern die Form [1, 1, 3] hat, würde man sagen, es ist eine 1x1x3-Faltung?" Nein, ich habe noch nie jemanden über3x3x512
Windungen sprechen hören . Alle Faltungsfilter, die ich gesehen habe, haben jedoch eine dritte räumliche Dimension, die der Anzahl der Merkmalskarten der Eingabeebene entspricht.Convolution Demo
Kurs von Karpathies CS321n an: cs231n.github.io/convolutional-networks/#conv . Oder an der tensorflow API: tensorflow.org/versions/r0.9/api_docs/python/nn.html#conv2d Filter sollen eine Form haben[filter_height, filter_width, in_channels, out_channels]
.( Quelle )
quelle
Der äquivalente Kernel hat einfach die Form der Eingabe und berechnet ein Tensor-Skalarprodukt. (Ich verwende das Wort "Form", da es bei "Größe" Verwirrung zu geben scheint, wobei die Dimension "Kanal / Tiefe" häufig ignoriert wird.) Es ist kein "Verschieben des Kernels über die Eingabe" beteiligt, da der Kernel so groß ist, wie er sein kann. Zitieren von Stanford CS 231n Kursnotizen :
Ich glaube, "F = 7, P = 0, S = 1, K = 4096, F = 7, P = 0, S = 1, K = 4096" bedeutet hier, dass jeder Konvektionskern die Form 7x7x512 hat, und es gibt 4096 solcher Filter.
In der vorherigen Antwort wurde erwähnt, dass die letzte fc von AlexNet (die Eingaben mit der Form 1x1x4096 empfängt und 1000 Klassenwerte berechnet) als "1x1-Faltung" implementiert ist. Um vollständig zu sein, hat jeder solche Conv-Kernel die Form 1x1x4096, und es gibt 1000 davon.
Le Cunn erklärt dies auch in der CNN-Veröffentlichung , Seite 8, Beschreibung von LeNet5:
quelle
Für jeden Neuling PyTorch Benutzer wie ich - nicht zu verwechseln „vollständig verbundene Schicht“ mit einer „linearen Schicht“.
Eine lineare Ebene und 1x1-Windungen sind dasselbe. Ich habe eine Weile gebraucht, um zu verstehen, dass es keine "vollständig verbundene Schicht" gibt - es ist einfach eine Abflachung der räumlichen Dimensionen zu einem 1D-Riesentensor. Durch das Reduzieren wird jedes Element an allen räumlichen Standorten als separate Feature-Map / Kanal / Dimension dargestellt (wie auch immer Sie es nennen möchten). Wenn wir also eine lineare Schicht auf einen abgeflachten Tensor aufbringen , erhalten wir eine vollständig verbundene Operation, die offensichtlich nicht mit einer 1x1-Faltung identisch ist.
1x1
Andere Antworten, die behaupten, eine vollständig verbundene Ebene sei einfach eine gültige
nxn
Faltungsebene für eine Größeneingabe,nxn
sind verwirrend (wenn auch richtig).quelle