Was bedeutet 1x1-Faltung in einem neuronalen Netzwerk?

106

Ich mache gerade das Udacity Deep Learning Tutorial. In Lektion 3 sprechen sie über eine 1x1-Faltung. Diese 1x1-Faltung wird im Google Inception-Modul verwendet. Ich habe Probleme zu verstehen, was eine 1x1-Faltung ist.

Ich habe auch diesen Beitrag von Yann Lecun gesehen.

Könnte mir das bitte jemand erklären?

jkschin
quelle
Siehe auch eine verwandte Frage
gkcn
1
Hier ist ein Blog-Beitrag zu diesen Modulen, der die 1x1-Windungen ausführlich behandelt: hackathonprojects.wordpress.com/2016/09/25/…
Tommy,
1
Einfach ausgedrückt, besteht die ganze Idee darin, die Anzahl der Kanäle im 3D-Volumen zu reduzieren und so die Berechnung zu beschleunigen.
onerhao

Antworten:

113

Angenommen, ich habe eine Konvektionsschicht, die einen -förmigen Tensor ausgibt wobei:(N,F,H,W)

  • N ist die Chargengröße
  • F ist die Anzahl der Faltungsfilter
  • H,W sind die räumlichen Dimensionen

Angenommen, diese Ausgabe wird in eine Conv-Ebene mit 1x1-Filtern, Null-Polsterung und Schritt 1 eingespeist . Dann hat die Ausgabe dieser 1x1-Conv-Ebene die Form .F1(N,F1,H,W)

So können 1x1-Conv-Filter verwendet werden, um die Dimensionalität im Filterraum zu ändern. Wenn erhöhen wir die Dimensionalität, wenn , verringern wir die Dimensionalität in der Filterdimension.F1>FF1<F

In der Tat heißt es in dem Google Inception-Artikel " Going Deeper with Convolutions" (fett gedruckt, nicht von Originalautoren):

Ein großes Problem bei den obigen Modulen besteht zumindest in dieser naiven Form darin, dass sogar eine bescheidene Anzahl von 5 × 5-Windungen auf einer Faltungsschicht mit einer großen Anzahl von Filtern unerschwinglich teuer sein kann.

Dies führt zu der zweiten Idee der vorgeschlagenen Architektur: Maßreduzierungen und Projektionen sinnvoll dort anzuwenden, wo die Rechenanforderungen ansonsten zu stark ansteigen würden. Dies basiert auf dem Erfolg von Einbettungen: Selbst niedrig dimensionierte Einbettungen können viele Informationen über einen relativ großen Bildausschnitt enthalten. 1x1-Faltungen werden verwendet, um Verkleinerungen vor den teuren 3x3- und 5x5-Faltungen zu berechnen. Sie werden nicht nur als Reduktionen verwendet, sondern umfassen auch die Verwendung einer gleichgerichteten linearen Aktivierung, wodurch sie einen doppelten Zweck erfüllen.

In der Inception-Architektur verwenden wir daher die 1x1-Faltungsfilter, um die Dimensionalität in der Filterdimension zu reduzieren. Wie ich oben erklärt habe, können diese 1x1-Conv-Layer im Allgemeinen verwendet werden, um die Filterraumdimensionalität zu ändern (entweder zu erhöhen oder zu verringern). In der Inception-Architektur sehen wir, wie effektiv diese 1x1-Filter für die Dimensionsreduzierung sein können, explizit im Filterdimensionsraum nicht die räumliche Dimension Raum.

Vielleicht gibt es andere Interpretationen von 1x1-Conv-Filtern, aber ich bevorzuge diese Erklärung, insbesondere im Zusammenhang mit der Google Inception-Architektur.

Indie AI
quelle
3
Komprimiert die 1x1-Conv die vorherige Filterdimension auf 1, bevor die 5x5-Conv implementiert wird?
Leonard Loo
1
@LeonardLoo Jeder 1x1-Kernel reduziert die Filterdimension auf 1, aber Sie können mehrere Kernel in einer 1x1-Faltung haben, sodass die Anzahl der "Filter" beliebig sein kann.
Fazzolini
43

Eine 1x1-Faltung ordnet einfach ein Eingabepixel mit allen Kanälen einem Ausgabepixel zu und betrachtet nichts um sich herum. Es wird oft verwendet, um die Anzahl der Tiefenkanäle zu reduzieren, da es oft sehr langsam ist, Volumes mit extrem großen Tiefen zu multiplizieren.

input (256 depth) -> 1x1 convolution (64 depth) -> 4x4 convolution (256 depth)

input (256 depth) -> 4x4 convolution (256 depth)

Die unterste ist ca. 3,7x langsamer.

Theoretisch kann das neuronale Netzwerk mit dieser Option auswählen, welche Eingangsfarben angezeigt werden sollen, anstatt alles mit brachialer Gewalt zu multiplizieren.

Kostenlose Debreuil
quelle
19
Ich würde sagen, dass 1x1 nicht nur ein Pixel auf ein Ausgabepixel abbildet, sondern alle Eingabepixelkanäle auf ein Pixel reduziert. In Ihrem Beispiel in der ersten Zeile gibt es 256 Kanäle für die Eingabe, und jeder der 64 1x1-Kernel reduziert alle 256 Eingabekanäle auf nur ein "Pixel" (reelle Zahl). Das Ergebnis ist, dass Sie jetzt 64 Kanäle anstelle von 256 mit der gleichen räumlichen Dimension haben, was die 4x4-Faltung rechenmäßig billiger macht als in Ihrem Beispiel für die zweite Zeile.
Fazzolini
Guter Punkt, wird den Beitrag aktualisieren :)
Free Debreuil
3
Woher hast du 3.7x langsamer bekommen?
CMCDragonkai
@CMCDragonkai Angenommen, die Berechnungskosten sind proportional zur Anzahl der Gewichte. Im späteren Fall die num_weights = in_depth x out_depth x kernel_size = 256x256x4x4. Im ersten Fall num_weights = 256x64x1x1+64x265x4x4=256x64x17. Nimm das Verhältnis und das ergibt 256/17 ~ 3.7. Auf diesem Papier auf Seite 9 finden Sie eine Visualisierung, wie sich die Anzahl der Gewichte auf die Ein- und Ausgabetiefe bezieht. arxiv.org/pdf/1603.07285.pdf
Nelson Dinh
11

Der Hauptgrund , warum ich nicht 1x1 Faltungen verstehen ist , weil ich nicht verstehen , wie Faltungen wirklich arbeitete der Schlüsselfaktor ist , wie eine Faltung von mehreren Kanälen Rechen / Filter funktioniert. Um dies zu verstehen, fand ich diese Antwort auch nützlich:any

https://datascience.stackexchange.com/questions/9175/how-do-subsequent-convolution-layers-work

Insbesondere ist Typ 2.2 die korrekte Beschreibung einer dortigen Faltung.

Eine weitere hilfreiche Antwort:

https://ai.stackexchange.com/questions/5769/in-a-cnn-does-each-new-filter-have-different-weights-for-each-input-channel-or

In dieser Antwort wird erläutert, wie Sie für jede In / Out-Kanalkombination einen eigenen Filter haben . Nach jeder Berechnung werden die Ergebnisse über die Eingangskanalachse summiert, wobei die Anzahl der Werte des Ausgangskanals übrig bleibt.

Hier ist ein Video, das mir geholfen hat zu verstehen, wie eine 1x1-Faltung funktioniert.

https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x

Hier sind die wichtigsten Dinge, die ich daraus gemacht habe:

  • Die Eingabe für eine 1x1-Faltung ist normalerweise eine vorherige Faltung mit der Größe x . Wenn sich jedoch in der letzten Ebene der Windungen Filter befanden , erhalten Sie eine -förmige Matrix. Ein 1x1 Faltung ist eigentlich ein Vektor der Größe , die sich über das gesamte Bild faltet, ein Erstellen x Ausgangsfilter. Wenn Sie 1x1-Faltungen haben, ist die Ausgabe aller 1x1-Faltungen die Größe .mnf1(m,n,f1)f1mnf2(m,n,f2)
  • Eine 1x1-Faltung unter der Annahme von kann also als Repräsentation von Filtern über Filter angesehen werden. Auf diese Weise kann das Netzwerk trainieren, wie die Dimension am effizientesten reduziert wird.f2<f1f1f2
Simon Alford
quelle
(m,n,f1)
3

Ich werde versuchen, es mit Abbildungen intuitiver und kurzer zu erklären!

Eine 1 * 1 Conv (aka Netzwerk im Netzwerk )?

Nehmen wir an, Sie geben Folgendes ein: (n_H, n_W, n_c_prev). Sie können denken , von (1 * 1 * n_c_prev) als ein einzelnes Neuron (ein vollständig verbundenes Netzwerk -ie warum N / w in N / w ) , die in der Eingabe in (n_c_prev) Zahlen ist unter ihnen mit (1 * 1 * n_c_prev Multiplikation ) und dann addieren und dann nehmen ReLu & Ausgabe (n_H, n_W) und wenn Sie mehrere Filter (n_c) haben, dann würde Ausgabe (n_H, n_W, n_C) sein.

Sie können also Pooling Layer verwenden, um räumliche Dimensionen (n_H, n_W) zu reduzieren, und 1 * 1 Conv verwenden, um n_c_prev (dh die Anzahl der Kanäle) zu reduzieren, wodurch eine Menge Berechnungen eingespart werden. Zum Beispiel

Bildbeschreibung hier eingeben

Daher ein Mitnehmen

  • Sie können eine 1x1-Faltungsschicht verwenden, um n_C zu reduzieren, aber nicht n_H, n_W.

  • Sie können eine Poolebene verwenden, um n_H, n_W und n_C zu reduzieren.

Mit anderen Worten, Bildbeschreibung hier eingeben

  • Was machst du mit 1 * 1 CONV Filter? Sie nehmen im Grunde genommen "1 * 1 * num_input_channel_of_featureMap" Größe und falten (elementweise * gefolgt von +) dieses Volumen über image / featureMap der Größe "W H num_input_channel_of_featureMap" und was Sie erhalten, ist eine Ausgabe der Größe "W * H".

  • Jetzt können Sie eine solche "#filter" -Nummer "1 * 1 * num_input_channel_of_featureMap" verwenden und das Volume "W H #filter" als endgültige Ausgabe erhalten!

  • Genauer gesagt multiplizieren Sie "1 * 1", also 32 verschiedene Gewichte (1 * 1 Volumen), mit einem Slice an derselben Position in der Eingabe-Feature-Map, gefolgt von "ReLu", und lassen eine einzelne entsprechende Zahl generieren, die als grünes Farbpixel angezeigt wird !

  • 1 * 1 CONV hilft, die Anzahl der Kanäle zu verringern und Berechnungen in einigen Netzwerken einzusparen (INCEPTIONS).!

  • Aber natürlich, wenn Sie die Anzahl der Kanäle auf dem Wert der Eingabe-Feature-Map halten möchten, ist dies auch in Ordnung. 1 * 1 CONV führt einfach die ReLU-Nichtlinearität aus, wodurch komplexe Funktionen erlernt werden können NN .

anu
quelle
1

Noch eine Idee zur Dimensionsreduzierung im Kontext von 1x1-Filtern:

Nehmen Sie zum Beispiel eine 4096x8x8 fc7-Ebene von FCN. Was passiert, wenn die nächste Ebene (nenne sie fc8) 2048x8x8 mit Filtergröße 1 ist? fc7 befindet sich sehr tief im Netzwerk, jede seiner 4096 Funktionen ist semantisch reichhaltig, aber jedes Neuron (z. B. Eingangsbild ist 250x250x3) hat ein großes Empfangsfeld. Mit anderen Worten, wenn ein Neuron sehr aktiv ist, wissen wir, dass irgendwo in seinem semantischen Feld ein entsprechendes Merkmal vorhanden ist.

Nehmen Sie zum Beispiel ein Neuron links oben in fc8 mit einem 1x1-Filter. Es verbindet sich mit allen 4096 Neuronen / Merkmalen nur in demselben Empfangsfeld (linke obere Ecke des Bildes), von denen jedes durch ein einzelnes Merkmal aktiviert wird. Einige (lasst uns 500 sein) von ihnen sind sehr aktiv. Wenn das resultierende Neuron auch sehr aktiv ist, bedeutet dies, dass es wahrscheinlich gelernt hat, ein oder mehrere Merkmale in diesem Rezeptorfeld zu identifizieren. Nachdem Sie dies 2048 Mal für die obersten linken Neuronen in fc8 getan haben, sind einige von ihnen (z. B. 250) sehr aktiv, was bedeutet, dass sie Merkmale aus demselben Empfangsfeld über fc7 'gesammelt' haben, und viele sehr wahrscheinlich mehr als einer.

Wenn Sie die Dimensionalität weiter verringern, lernt eine abnehmende Anzahl von Neuronen eine zunehmende Anzahl von Merkmalen aus demselben Empfangsfeld. Und da die räumlichen Parameter 8x8 gleich bleiben, ändern wir nicht die "Ansicht" jedes Neurons, verringern also nicht die räumliche Grobheit.

Vielleicht möchten Sie einen Blick auf 'Fully Convolutional Networks' von Long, Shelhamer und Darrel werfen.

Alex
quelle
1
Ich denke, dass dies eine weitere gute Intuition des Mechanismus ist, aber ich werde darauf zurückkommen müssen, weil ich die Notation für die Dimensionen verwirrend finde und insbesondere "Nachdem Sie dies 2048-mal für ganz links getan haben" Neuronen in fc8 ".
WillC
Ich habe nicht sehr gut verstanden, was Sie sagen wollen. Könnten Sie es bitte klarer machen?
Michael Heidelberg
0

Die mathematische Operation der Faltung bedeutet, das Produkt zweier (kontinuierlicher oder diskreter) Funktionen über alle möglichen Schaltpositionen zu berechnen.

v×v

Bildverarbeitungsanwendungen neuronaler Netze - einschließlich faltungsbedingter neuronaler Netze - wurden in [M. Egmont-Petersen, D. de Ridder, H. Handels. Bildverarbeitung mit neuronalen Netzen - ein Rückblick , Pattern Recognition , Vol. 35, Nr. 10, S. 2279-2301, 2002].

Match Maker EE
quelle