Residual Neural Networks (kurz: ResNet) sind besondere Arten von Neuronalen Netzwerken, die in der Bildverarbeitung genutzt werden. Sie zeichnen sich durch ihre tiefe Architekturen aus, die trotzdem noch geringe Fehlerraten hervorrufen kann.
Welche Architektur wurde bisher bei der Bilderkennung genutzt?
Nach dem großen Erfolg eines Convolutional Neural Network (CNN) bei dem ImageNet Wettbewerb im Jahr 2012, waren CNNs die vorherrschende Architektur in der maschinellen Bildverarbeitung. Die Vorgehensweise ist dabei der Funktionsweise unseres Auges nachempfunden. Wenn wir ein Bild sehen, dann teilen wir es automatisch in viele kleine Unterbereiche auf und analysieren diese einzeln. Durch die Zusammensetzung dieser Teilbilder verarbeiten und interpretieren wir das Bild. Wie lässt sich dieses Prinzip in einem Convolutional Neural Network umsetzen?
Die Arbeit passiert in der sogenannten Convolution Layer. Dazu definieren wir einen Filter, der bestimmt wie groß die Teilbilder sein sollen, die wir betrachten, und eine Schrittlänge, die entscheidet wie viele Pixel wir zwischen den Berechnungen weiterfahren, also wie nahe die Teilbilder aneinander liegen. Durch diesen Schritt haben wir die Dimensionalität des Bildes stark reduziert.
Als nächstes folgt die Pooling Layer. Rein rechnerisch passiert hier dasselbe erstmal wie in der Convolution Layer mit dem Unterschied, dass wir vom Ergebnis je nach Anwendung entweder nur den Durchschnitts- oder Maximalwert übernehmen. Dadurch bleiben kleine Features in wenigen Pixeln erhalten, die für die Aufgabenlösung entscheidend sind.
Zum Abschluss kommt eine Fully-Connected Layer im Convolutional Neural Network, wie wir sie bereits von den normalen Neural Networks kennen. Nachdem wir nun die Dimensionen des Bildes stark reduziert haben, können wir nun die eng-vermaschten Schichten nutzen. Hier werden die einzelnen Teilbilder wieder miteinander verknüpft, um die Zusammenhänge zu erkennen und die Klassifizierung vorzunehmen.
Was ist das Problem bei tiefen Neuronalen Netzwerken?
Um bessere Ergebnisse erzielen zu können, wurden die genutzten Architekturen immer tiefer und tiefer. Es wurden also einfach mehrere CNN-Blöcke aufeinandergestapelt in der Hoffnung, dadurch bessere Ergebnisse erzielen zu können. Jedoch ergibt sich bei tiefen Neuronalen Netzwerken die Problematik des sogenannten Vanishing Gradients.

Das Training eines Netzwerkes passiert während der sogenannten Backpropagation. Dabei durchwandert, kurz gesagt, der Fehler das Netzwerk von hinten nach vorne. In jeder Schicht wird berechnet, wie stark das jeweilige Neuron zum Fehler beigetragen hat, indem der Gradient berechnet wird. Umso mehr sich dieser Prozess jedoch den anfänglichen Schichten nähert, umso kleiner kann auch der Gradient werden, sodass es in den vorderen Schichten zu keiner oder nur sehr leichten Anpassung von Neuronengewichtungen kommt. Dadurch haben tiefe Netzwerkstrukturen häufig einen vergleichsweise hohen Fehler.
In der Praxis können wir es uns jedoch nicht so einfach machen und die abnehmende Performance lediglich auf das Vanishing Gradient Problem schieben. Tatsächlich lässt es sich sogar mit sogenannten Batch Normalization Layern relativ gut in den Griff bekommen. Die Tatsache, dass tiefere Neuronale Netzwerke eine schlechtere Performance haben, kann weiterhin auch an der Initialisierung der Schichten liegen oder an der Optimierungsfunktion.
Wie lösen Residual Neural Networks das Problem?
Der Grundbaustein eines Residual Neural Networks sind die sogenannten Residual Blocks. Die Grundidee hierbei ist, dass sogenannte „Skip Connections“ in das Netzwerk eingebaut werden. Diese sorgen dafür, dass die Aktivierung einer Schicht mit dem Output einer späteren Schicht zusammenaddiert werden.

Diese Architektur ermöglicht es dem Netzwerk gewisse Schichten einfach zu überspringen, vor allem dann, wenn sie nichts zu einem besseren Ergebnis beitragen. Ein Residual Neural Network setzt sich aus mehreren von diesen sogenannten Residual Blocks zusammen.
Welche Probleme können bei ResNets entstehen?
Vor allem bei Convolutional Neural Networks kommt es natürlich vor, dass die Dimensionalität am Anfang der Skip Connection nicht mit der am Ende der Skip Connection übereinstimmt. Das ist vor allem dann der Fall, wenn mehrere Schichten übersprungen werden. Bei Convolutional Neural Networks wird nämlich in jedem Block die Dimensionalität mithilfe eines Filters verändert. Somit steht die Skip Connection vor dem Problem, die Inputs vorheriger Layer einfach zu dem Output von späteren Layern hinzuzufügen.
Um dieses Problem zu lösen, kann das Residual mit einer linearen Projektion multipliziert werden, um die Dimensionen anzugleichen. In vielen Fällen wird dafür beispielsweise eine 1×1 Convolutional Layer genutzt. Es kann jedoch auch vorkommen, dass eine Angleichung von Dimensionen gar nicht notwendig ist.
Wie baut man einen ResNet Block in TensorFlow?
Ein ResNet Block lässt sich in TensorFlow relativ einfach programmieren, vor allem dann, wenn sichergestellt ist, dass die Dimensionen bei der Zusammenführung diesselben sind.
In diesem Fall durchläuft der Input erst eine Dense-Layer mit 1024 Neuronen. Anschließend folgt ein Block bestehend aus einer Dropout-Layer und zwei Dense-Layer, die die Zahl der Neuronen erst auf 512 beschränkt, bevor es wieder auf 1024 erhöht wird. Dann erfolgt die Zusammenführung mit der Add-Layer. Da beide Inputs eine Dimensionalität von 1024 haben, lassen sie sich ohne Probleme aufaddieren.
Das solltest Du mitnehmen
- Residual Neural Networks oder kurz ResNets bieten eine Möglichkeit, tiefe Neuronale Netzwerke ohne hohe Fehlerrate zu trainieren.
- Dazu sind sie aus vielen sogenannten Residual Blocks aufgebaut, die durch eine Skip Connection charakterisiert sind.
- Die Skip Connection ermöglicht es dem Netzwerk eine oder mehrere Schichten zu überspringen, falls diese das Ergebnis nicht verbessern.
Andere Beiträge zum Thema ResNet
- Hier findest Du das ursprüngliche Paper zu Residual Neural Networks: Deep Residual Learning for Image Recognition.