PyTorch für Deep Learning. Ian Pointer

PyTorch für Deep Learning - Ian Pointer


Скачать книгу
Bilder zu verbessern oder unseren Sprachbefehlen zuzuhören. Unsere E-Mail-Programme lesen unsere E-Mails und produzieren kontextbezogene Antworten, unsere Lautsprecher hören uns zu, Autos fahren von selbst, und der Computer hat die besten Spieler bei Go inzwischen besiegt. Wir sehen auch, dass die Technologie in autoritären Ländern für ruchlosere Zwecke eingesetzt wird, etwa wenn Wächter mithilfe von neuronalen Netzwerken Gesichter aus der Menge herauspicken und darüber entscheiden, ob die Menschen verhaftet werden sollen.

      Auch wenn es einem so vorkommen mag, dass dies alles sehr rasch voranging, so reichen die zugrunde liegenden Konzepte der neuronalen Netze und des Deep Learning dennoch weit zurück. Der Beweis, dass ein solches Netz in der Lage ist, jede mathematische Funktion in einer approximativen Weise zu ersetzen – was die Idee untermauert, dass neuronale Netze für viele verschiedene Aufgaben trainiert werden können –, geht zurück ins Jahr 1989.1 Neuronale Konvolutionsnetze wurden bereits in den späten 1990er-Jahren zur Erkennung von Ziffern auf Schecks verwendet. In dieser Zeit hat sich ein solides Fundament aufgebaut. Warum also fühlt es sich so an, als hätte es in den letzten zehn Jahren eine explosionsartige Entwicklung in diesem Bereich gegeben?

      Hierfür gibt es zahlreiche Gründe, wobei der wichtigste wohl der Anstieg der Leistungsfähigkeit von Grafikprozessoren (GPUs) und deren zunehmende Erschwinglichkeit ist. Ursprünglich für Spiele entwickelt, sind GPUs darauf ausgelegt, unzählige Millionen von Matrixoperationen pro Sekunde auszuführen, um alle Polygone für das Fahr- oder Ballerspiel, das Sie auf Ihrer Konsole oder Ihrem PC spielen, zu rendern – Operationen, für die ein gewöhnlicher Hauptprozessor (CPU) einfach nicht optimiert ist. Der im Jahr 2009 erschienene Forschungsbeitrag »Large-Scale Deep Unsupervised Learning Using Graphics Processors« von Rajat Raina et al.2 wies darauf hin, dass das Training neuronaler Netze ebenfalls auf der Ausführung zahlreicher Matrixoperationen basiert, sodass zusätzliche Grafikkarten das Training beschleunigen und dadurch auch erstmals noch größere, tiefere neuronale Netzwerkarchitekturen eingesetzt werden können.

      Andere wichtige Methoden wie Dropout (die wir in Kapitel 3 betrachten werden) wurden ebenfalls in den letzten zehn Jahren eingeführt, um das Training nicht nur zu beschleunigen, sondern auch besser zu verallgemeinern (damit das Netzwerk nicht einfach nur die Trainingsdaten auswendig lernt – ein Problem namens Überanpassung, auf das wir im nächsten Kapitel stoßen werden). In den letzten Jahren haben Unternehmen diesen GPU-basierten Ansatz auf die nächste Ebene gehoben. Dabei hat Google etwas entwickelt, das es als Tensorprozessoren (TPUs) bezeichnet. Es handelt sich dabei um anwendungsspezifische Chips, die speziell dafür entwickelt wurden, so schnell wie möglich Deep-Learning-Anwendungen durchzuführen. Darüber hinaus stehen sie sogar der allgemeinen Öffentlichkeit als Teil des Google-Cloud-Ökosystems zur Verfügung.

      Eine weitere Möglichkeit, den Fortschritt des Deep Learning in den letzten zehn Jahren zu skizzieren, bietet der ImageNet-Wettbewerb. ImageNet ist eine riesige Datenbank mit über 14 Millionen Bildern, die zu Zwecken des maschinellen Lernens für 20.000 Kategorien manuell gelabelt sind. Seit dem Jahr 2010 wird jährlich im Rahmen des Wettbewerbs ImageNet Large Scale Visual Recognition Challenge versucht, die Anwendungen aller Teilnehmer anhand eines Auszugs aus der Datenbank mit 1.000 Kategorien zu testen. Bis 2012 lagen die Fehlerquoten für die Bewältigung der Aufgaben bei etwa 25%. In jenem Jahr gewann jedoch ein tiefes neuronales Konvolutionsnetz den Wettbewerb mit einer Fehlerquote von 16%, womit es alle anderen Teilnehmer deutlich übertraf. In den folgenden Jahren wurde diese Fehlerquote immer weiter nach unten gedrückt, bis die ResNet-Architektur im Jahr 2015 ein Ergebnis von 3,6% erreichte, das unterhalb der durchschnittlichen menschlichen Leistung (5%) lag. Wir wurden also überholt.

       Aber was genau ist Deep Learning, und brauche ich einen Doktortitel, um es verstehen zu können?

      Die Definitionen von Deep Learning sind oft eher verwirrend als erhellend. Eine Definitionsmöglichkeit besteht darin, Deep Learning als eine Methode des maschinellen Lernens zu bezeichnen, die mehrere und zahlreiche Schichten nicht linearer Transformationen verwendet, um nach und nach Merkmale aus der ursprünglichen Eingabe zu extrahieren. Das ist zwar richtig, aber es hilft nicht wirklich weiter, oder? Ich ziehe es vor, es als eine Methode zu beschreiben, die Aufgaben löst, bei denen Sie dem Computer die Eingaben und die gewünschten Ausgaben liefern und er die Lösung findet, im Regelfall unter Verwendung eines neuronalen Netzes.

      Auf viele Menschen abschreckend wirkt im Zusammenhang mit Deep Learning die dahinterstehende Mathematik. Wenn Sie sich irgendeinem Forschungspapier in diesem Bereich widmen, werden Sie fast überall auf undurchdringliche Mengen an Notationen in Form von griechischen Buchstaben stoßen und wahrscheinlich schreiend im Dreieck springen. Die Sache ist die: Man muss in den meisten Fällen kein Mathegenie sein, um die Methoden des Deep Learning anwenden zu können. Tatsächlich muss man für die meisten alltäglichen, grundlegenden Anwendungen der Technologie überhaupt nicht viel wissen. Um wirklich zu verstehen, was vor sich geht (wie Sie in Kapitel 2 sehen werden), muss man sich nur ein wenig anstrengen, um die Konzepte nachvollziehen zu können, die man wahrscheinlich bereits in der Oberstufe gelernt hat. Lassen Sie sich also nicht von der Mathematik verunsichern. Am Ende von Kapitel 3 werden Sie in der Lage sein, einen Bildklassifikator zusammenzustellen, der mit nur wenigen Zeilen Code mit dem konkurriert, was die besten Köpfe im Jahr 2015 anbieten konnten.

       PyTorch

      Wie bereits zu Beginn erwähnt, ist PyTorch eine Open-Source-Bibliothek von Facebook, die das Programmieren von Deep-Learning-Code in Python erleichtert. Der Ursprung der Bibliothek fußt wiederum auf zwei weiteren Bibliotheken. Sie leitet, und angesichts ihres Namens vielleicht nicht ganz überraschend, viele Funktionen und Konzepte von Torch ab, einer Lua-basierten Bibliothek für neuronale Netzwerke, die auf das Jahr 2002 zurückgeht. Der zweite wichtige Vorläufer ist die Bibliothek Chainer, die im Jahr 2015 in Japan entwickelt wurde. Chainer war eine der ersten Bibliotheken für neuronale Netzwerke, die einen eifrigen bzw. interaktiven (engl. Eager Execution) Ansatz zur Differenzierung anstelle der Definition statischer Graphen bot. Das ermöglichte eine größere Flexibilität bei der Erstellung, dem Training und der Handhabung von Netzwerken. Die Kombination aus Elementen von Torch und Ideen von Chainer hat PyTorch in den letzten Jahren populär gemacht.3

      Die Bibliothek umfasst auch hilfreiche Module zur Text-, Bild- und Tondatenmanipulation (torchtext, torchvision und torchaudio) sowie integrierte Varianten populärer Architekturen wie ResNet (mit Gewichten, die heruntergeladen werden können, um bei Methoden wie Transfer Learning, das Sie in Kapitel 4 kennenlernen werden, Unterstützung zu bieten).

      Auch über Facebook hinaus gewann PyTorch in der Industrie schnell an Akzeptanz. Unternehmen wie Twitter, Salesforce, Uber und NVIDIA nutzen es auf verschiedene Weise für ihre Deep-Learning-Anwendungen. Ich ahne aber bereits die nächste Frage …

       Warum nicht TensorFlow?

      Genau, richten wir unseren Blick auf das ziemlich große von Google konzipierte Schwergewicht in der gegenüberliegenden Ecke. Was bietet PyTorch, was TensorFlow nicht bieten kann? Warum sollten Sie stattdessen PyTorch lernen?

      Die Antwort ist, dass das traditionelle TensorFlow anders funktioniert als PyTorch, was erhebliche Auswirkungen auf den Code und die Fehlersuche mit sich bringt. In TensorFlow verwenden Sie die Bibliothek, um eine Graphendarstellung der Architektur des neuronalen Netzwerks aufzubauen, und führen dann Operationen auf diesem Graphen aus, was innerhalb der TensorFlow-Bibliothek geschieht. Diese Methode der deklarativen Programmierung steht im Widerspruch zum imperativen Paradigma von Python, was bedeutet, dass TensorFlow-Programme in Python etwas seltsam und schwer verständlich aussehen und sich auch so anfühlen können. Das andere Problem ist, dass im Vergleich zum Ansatz mit PyTorch die statische Graphendeklaration die dynamische Änderung der


Скачать книгу