Die Idee der gruppierten Faltung ist erstaunlich

Hallo zusammen, mein Name ist Dong Dongcan.

In letzter Zeit haben mir gruppierte Windungen einen großen Gefallen getan, und hier ist die Sache.

Ein Problem, auf das ich in den letzten Tagen gestoßen bin, besteht darin, die Anpassung eines neuronalen Netzwerks an einen bestimmten Chip abzuschließen. Dieses neuronale Netzwerk besteht hauptsächlich aus Faltungen, und einige Faltungen verfügen über eine große Anzahl von Kanälen, beispielsweise 2048 Eingangskanäle.

Das Problem besteht darin, dass es sich bei diesem Chip um einen dedizierten Chip handelt und das entsprechende Hardwaremodul einen solchen Faltungsvorgang mit einer großen Anzahl von Kanälen nicht direkt unterstützen kann.

Also begannen wir mit dem Brainstorming, da der Chip über einen guten Vektorbefehlssatz zur Unterstützung von Operationen mit inneren Produkten verfügt. Daher bestand die erste Reaktion darin, Operationen mit inneren Produkten zu verwenden, um die Faltung zusammenzusetzen.

Experimentelle Ergebnisse zeigen jedoch, dass der Faltungseffekt der Verwendung von Anweisungen für innere Produkte nicht zufriedenstellend ist, hauptsächlich weil die Anweisungen für innere Produkte zu oft aufgerufen werden, was zu einer schlechten Gesamtleistung des neuronalen Netzwerks führt.

Gerade als ich ratlos war, ertönte eine Stimme: „Lass uns das Bild ändern.“

Das Ändern des Diagramms bezieht sich auf das Ändern der Struktur des neuronalen Netzwerks. Viele Inferenz-Frameworks verfügen über diese Funktion, z. B. Pytorch, TVM usw.

Diese Argumentationsrahmen können gezielt an bestimmte dedizierte KI-Chip-Beschleuniger angepasst werden. Zu diesem Zweck werden einige neuronale Netzwerkstrukturen geändert und einige Optimierungsknoten (Durchgänge) hinzugefügt, um ursprünglich nicht unterstützte Operationen zu unterstützten Operationen zu machen.

In diesem Faltungsbeispiel kann beispielsweise eine große Faltung (die sich auf eine große Anzahl von Kanälen bezieht) in zwei oder mehr kleine Faltungen umgewandelt, separat berechnet und die Ergebnisse nach Abschluss der Berechnung kombiniert werden.

Hiermit ist der Vorgang der Aufteilung der Faltung in mehrere Faltungsberechnungen in der Kanaldimension zu erwähnen – Gruppenfaltung (Gruppenfaltung).

1. Was ist gruppierte Faltung?

Im Internet gibt es viele Informationen zur gruppierten Faltung. Vereinfacht ausgedrückt wird die gruppierte Faltung durch Gruppieren von Windungen in der Kanaldimension berechnet, um den Zweck der Integration einer großen Faltung in mehrere kleine Faltungen zu erreichen.

Der Übersichtlichkeit halber vereinfachen wir die Faltungsoperation auf die einfachste Multiplikations-Akkumulations-Operation mit nur 2 Daten in der Kanaldimension, wie unten gezeigt.

Bild

Eine normale Faltungsoperation, Multiplikation und Akkumulation von A und B, berechnet 1x3 + 2x4 = 11.

Und wenn wir sie in der Kanaldimension gruppieren (im Beispiel hat die Kanaldimension nur zwei Daten, wir teilen sie in zwei Gruppen auf), dann wird es so sein

Bild

Die erste Gruppe berechnet nur die erste Hälfte der Kanaldimension und die zweite Gruppe berechnet nur die zweite Hälfte der Kanaldimension.

Der Gruppierungsprozess ist nicht leicht zu verstehen.

2. Warum ist eine Gruppenfaltung erforderlich?

Die gruppierte Faltung wurde erstmals von Alex et al. im ImageNet-Bildklassifizierungswettbewerb 2012 vorgeschlagen und verwendet. Die ursprüngliche Absicht bestand darin, das Problem des Rechen- und Speicheraufwands während des Trainings von Faltungs-Neuronalen Netzen zu lösen.

Der GPU-Speicher war im Jahr 2012 nicht so groß wie der aktuelle GPU-Speicher. Zu diesem Zeitpunkt war der GPU-Speicher noch sehr begrenzt. Die direkte Berechnung einer Faltung mit einer großen Anzahl von Kanälen war sehr speicherintensiv, wenn sie im gesamten Netzwerk platziert wurde.

Daher teilen sie die große Faltung in mehrere kleine Faltungen in Kanalrichtung auf und berechnen diese separat. Dadurch können die aufgeteilten kleinen Faltungen jeweils auf mehreren GPU-Karten ausgeführt werden, wodurch eine parallele Berechnung auf mehreren Karten für ein Modell erreicht wird. Der Zweck besteht darin, das Training zu verbessern Leistung.

Es ist zu beachten, dass die gruppierte Faltung im Papier nicht nur die Eingangskanäle, sondern auch die Ausgangskanäle gruppiert.

Die resultierende gruppierte Faltung wird zum ursprünglichen Berechnungsbetrag von 1/G, wobei G die Anzahl der Gruppen ist.

3. Sind gruppierte Faltung und ursprüngliche Faltung mathematisch äquivalent?

Aufmerksame Freunde könnten diese Frage stellen.

Wenn wir nur von einer gruppierten Faltung sprechen, entspricht das Ergebnis definitiv nicht der ursprünglichen großen Faltung, da die Kanaldimension geteilt ist.

Und wenn es nicht verarbeitet wird, wirkt es sich auch auf die endgültige Inferenzgenauigkeit aus. Für dieses Problem gibt es eine gute Lösung.

Wir wissen, dass der Kern des Faltungsalgorithmus die Merkmalsextraktion und -fusion ist: 5 Minuten, um zu verstehen, was Faltungsmerkmalsextraktion ist .

Wenn keine anderen Operationen ausgeführt werden, führt die Gruppenfaltung nur die Merkmalsfusion kleiner Faltungen innerhalb der Gruppe durch, es fehlt jedoch die Merkmalsfusion zwischen Gruppen, was sich auf die endgültigen Ergebnisse der Trainingsinferenz auswirkt.

Um dieses Problem zu lösen, werden vor der Gruppenfaltung häufig Shuffle-Operationen in der Kanaldimension durchgeführt, d. h. Shuffling , damit Merkmale jeder Gruppe zufällig zugewiesen werden können und die Merkmalsfusion zwischen Gruppen besser abgeschlossen werden kann.

4. Die Idee der „Gruppenfaltung“ ist erstaunlich

Zurück zu dem Problem, auf das ich oben gestoßen bin: Wir müssen die Idee der gruppierten Faltung nutzen, um die große Faltungsoperation auf magische Weise entsprechend unseren eigenen Bedürfnissen zu modifizieren.

Wie im folgenden Diagramm dargestellt: Eine Faltung mit einem Eingabekanal von ci wird in der Eingangskanaldimension in zwei Faltungen von ci/2 aufgeteilt, dann für Faltungsoperationen „gruppiert“ und dann durch Addition hinzugefügt.

Bild

Die Ausgabekanäle werden hier nicht gruppiert, da die von uns gelösten Probleme unterschiedlich sind. Der Speicher stellt für uns kein Problem dar. Das Problem besteht lediglich darin, dass der Eingabekanal zu groß ist.

Durch die obige magische Transformation kann das Endergebnis mit der ursprünglichen Faltungsberechnung in Einklang gebracht werden. Durch Ausleihen der Idee der „gruppierten Faltung“ kann das Problem, auf das ich gestoßen bin, sehr gut gelöst werden.

Ich denke du magst

Origin blog.csdn.net/dongtuoc/article/details/134085473
Empfohlen
Rangfolge