Faltung & Feature-Maps Playground

sieh, welche visuellen Muster jede Kernelwahl übersteht

Interaktive Simulation wird geladen...

Ohne Padding schrumpft ein tiefes Netz das Bild weg 🖖

Ein 3×3-Faltungskern ohne Padding verkleinert das Bild bei Stride 1 an jedem Rand um ein Pixel. Aus der 28×28-Eingabe dieses Werkzeugs wird daher eine 26×26-Ausgabe. Bei einer einzelnen Schicht scheint das kaum ins Gewicht zu fallen. Doch nach 10 Schichten bleiben nur noch 8×8 Pixel übrig, nach 14 gar keine mehr. Genau dafür gibt es das "Same"-Padding: Ein zusätzlicher, ein Pixel breiter Rand hält die Ausgabe genauso groß wie die Eingabe. Das Netz kann dadurch beliebig tief werden. Der Stride wirkt anders. Er verkleinert nicht durch Subtraktion, sondern durch Division: Ein Weichzeichner mit Stride 2 macht aus 28×28 schon in einer Schicht 14×14. Die beiden Einstellungen dieses Werkzeugs sind also keineswegs bloße Feinheiten. Sie bestimmen, wie viele Schichten deine Architektur verträgt, bevor vom Bild nichts mehr übrig ist.

Ein kleines Fenster, das gleitet 🖖

Eine Faltung schiebt ein kleines Zahlengitter, den Kernel, über das Bild. An jeder Position werden die überlappenden Werte multipliziert und zu einem einzigen Ausgabepixel addiert. Das Ergebnis ist eine Merkmalskarte, die überall dort heller wird, wo das Muster des Kernels auftaucht. Probiere hier den Kernel zur Kantenerkennung: Flächen werden dunkel, Grenzen leuchten auf, weil der Kernel auf Veränderung reagiert, nicht auf Helligkeit selbst.

Es ist gar keine echte Faltung 🖖

Der Vorgang, den fast jedes CNN "Faltung" nennt, ist eigentlich eine Kreuzkorrelation. Die echte mathematische Faltung spiegelt den Kernel zuerst oben-unten und links-rechts, bevor sie ihn verschiebt; Deep-Learning-Bibliotheken lassen diese Spiegelung weg. Da das Netz die Gewichte ohnehin lernt, würde ein gespiegelter Kernel einfach umgekehrt gelernt und dasselbe Ergebnis liefern, weshalb sich die falsche Bezeichnung gehalten hat. Bei einem symmetrischen Kernel wie Weichzeichnen sind beide nicht zu unterscheiden.

Verbreiteter Irrtum

Eine tiefere Feature-Map ist nicht immer „besser“. Hoher Stride oder harte Kernel können Informationen entfernen, die spätere Schichten benötigt hätten.

Aufgabe vollständig gelöst

  1. Größe der Output-Map bei einer 28×28-Input-Map und einem 3×3-sobel-x-Kernel 6 Schritte

    Die Schicht: eine 28×28-Eingabekarte, ein 3×3-Sobel-X-Kernel, Stride 1, Padding gleich. Bestimmen Sie die Größe der Ausgabekarte und was ein Durchgang an Multiplikations-Additionen kostet – ermitteln Sie dann, wie viele solcher Schichten gestapelt werden müssen, bevor ein einzelnes Ausgabepixel von jedem Pixel des Bildes abhängt.

    1. Das Padding legt die Größe fest, also klären wir dies zuerst. gleich legt einen Ein-Pixel-Rand aus Nullen um die Karte, was genau ausreicht, damit ein 3×3-Fenster zentriert auf einem Eckpixel liegt, anstatt über den Rand zu ragen. Der Rand, den ein Kernel benötigt, ist die Hälfte seiner Größe, ohne das Zentrum zu zählen.

    2. Schieben Sie das Fenster entlang einer Zeile. Seine linke Kante beginnt bei 0 und rückt um den Stride vor, bis seine rechte Kante das Ende der gepaddeten Zeile erreicht. Das Zählen der Ausgabepixel ist somit eine Zaunpfahl-Zählung: die Anzahl der Schritte plus 1 für die Startposition. Bei Stride 1 gibt der Rand genau die 2 Spalten zurück, die der Kernel wegnimmt, weshalb der Modus gleich heißt.

    3. Jedes der 784 Ausgabepixel ist eine gewichtete Summe von 9 Eingabewerten. Addiert man die Sobel-X-Gewichte, heben sie sich zu 0 auf; jedes Fenster, dessen 9 Eingaben alle gleich sind, liefert also genau 0 – wie hell diese Region auch sein mag. Die Karte wird überall dort dunkel, wo das Bild flach ist, und reagiert nur dort, wo sich die linke Spalte des Fensters von der rechten unterscheidet.

    4. Daraus ergeben sich die arithmetischen Kosten: 9 Multiplikations-Akkumulations-Operationen pro Ausgabepixel, ein Ausgabepixel pro Fensterposition. Das Panel gibt diesen Wert aus.

    5. Die Tiefe ist der interessante Teil. Nach einer Schicht sieht ein Ausgabepixel 3 Eingabepixel in der Breite. Fügt man eine zweite hinzu, war jedes dieser 3 selbst ein Fenster von 3 – aber benachbarte Fenster überlappen um 2, sodass die Spanne 5 erreicht, nicht 9. Jede weitere 3×3-Schicht mit Stride 1 erweitert sie um genau 2.

    6. Setzen Sie die Spanne so an, dass sie alle 28 Spalten abdeckt, und lösen Sie nach der Tiefe auf. 13 Schichten erreichen 27 und verfehlen das Ziel um eine Spalte; die 14. ist die erste, deren Ausgabepixel vom gesamten Bild beeinflusst werden können.

    Antwort

    28×28 Ausgabe, 7056 Multiplikations-Additionen pro Schicht und 14 Schichten, bevor ein Pixel das gesamte Bild sieht. Berechnen Sie nun, was diese Reichweite kostet. Die 14 gestapelten Schichten verbrauchen 14 × 9 = 126 Multiplikations-Akkumulations-Operationen pro Ausgabepixel. Eine einzelne Schicht, die genauso weit reicht, benötigt einen 29×29-Kernel mit 841 pro Ausgabepixel – 6,7-mal mehr Arithmetik für genau dasselbe Sichtfeld. Tiefe erkauft Reichweite viel günstiger als Breite, weshalb Vision-Netzwerke lange Stapel von 3×3-Kerneln sind statt kurzer Stapel großer Kernel.

Quellen (1)
  • Insight block 3 — the operation called convolution is cross-correlation: I. Goodfellow, Y. Bengio and A. Courville, Deep Learning, ch. 9. MIT Press, 2016. ISBN 978-0-262-03561-3 — "many machine learning libraries implement cross-correlation but call it convolution".

Beispielaufgaben

  • Ziffer Sobel-X - Die Summe des Sobel-x-Kerns ist null. Gleichmäßige Flächen werden daher schwarz; nur vertikale Änderungen bleiben sichtbar. "Same"-Padding hält die Ausgabe bei Stride 1 auf 28x28.
  • Formkanten - Auch die Summe des Kantenkerns ist null: In der Mitte steht 8, darum liegen 8 Werte von -1. Gleichmäßige Flächen verschwinden, nur ihre Grenzen bleiben sichtbar. Die Ausgabe behält 28x28.
  • Weichzeichnen + Stride 2 - Nur diese Voreinstellung verkleinert durch Division: Stride 2 macht aus 28x28 eine Ausgabe mit 14x14, also einem Viertel der Pixel. Die Summe des Weichzeichners ist 1. Deshalb bleibt die Helligkeit erhalten, auch wenn Details verschwinden.
  • Schärfen valid - Nur diese Voreinstellung verkleinert durch Subtraktion: "Valid"-Padding macht aus 28x28 eine Ausgabe mit 26x26 und entfernt an jedem Rand ein Pixel. Die Summe des Schärfekerns ist 1. Gleichmäßige Flächen behalten daher ihren Wert, während Kanten deutlicher hervortreten.