Kapitel 1. Deine Deep Learning-Reise

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Hallo und vielen Dank, dass wir dich auf deiner Deep-Learning-Reise begleiten dürfen, egal, wie weit du schon gekommen bist! In diesem Kapitel erzählen wir dir ein bisschen mehr darüber, was dich in diesem Buch erwartet, stellen dir die wichtigsten Konzepte hinter Deep Learning vor und trainieren unsere ersten Modelle an verschiedenen Aufgaben. Es spielt keine Rolle, ob du einen technischen oder mathematischen Hintergrund hast (obwohl das auch in Ordnung ist!); wir haben dieses Buch geschrieben, um Deep Learning für so viele Menschen wie möglich zugänglich zu machen.

Deep Learning ist für alle da

Viele Leute gehen davon aus, dass du alle möglichen schwer zu findenden Dinge brauchst, um mit Deep Learning großartige Ergebnisse zu erzielen, aber wie du in diesem Buch sehen wirst, liegen diese Leute falsch. Tabelle 1-1 listet einige Dinge auf, die du für erstklassiges Deep Learning absolut nicht brauchst.

Tabelle 1-1. Was du für Deep Learning nicht brauchst
Mythos (nicht nötig) Die Wahrheit

Jede Menge Mathe

Mathe in der Oberstufe ist ausreichend.

Jede Menge Daten

Wir haben schon mit <50 Daten rekordverdächtige Ergebnisse erzielt.

Jede Menge teure Computer

Das, was du für die moderne Arbeit brauchst, kannst du kostenlos bekommen.

Deep Learning ist eine Computertechnik zur Extraktion und Umwandlung von Daten - mit Anwendungsfällen von der menschlichen Spracherkennung bis zur Klassifizierung von Tierbildern - durch den Einsatz mehrerer Schichten von neuronalen Netzen. Jede dieser Schichten nimmt ihre Eingaben von den vorhergehenden Schichten auf und verfeinert sie nach und nach. Die Schichten werden durch Algorithmen trainiert, die ihre Fehler minimieren und ihre Genauigkeit verbessern. Auf diese Weise lernt das Netz, eine bestimmte Aufgabe zu erfüllen. Im nächsten Abschnitt werden wir die Trainingsalgorithmen im Detail besprechen.

Deep Learning ist leistungsstark, flexibel und einfach. Deshalb glauben wir, dass es in vielen Disziplinen angewendet werden sollte. Dazu gehören die Sozial- und Naturwissenschaften, die Kunst, die Medizin, das Finanzwesen, die wissenschaftliche Forschung und viele mehr. Um ein persönliches Beispiel zu nennen: Obwohl Jeremy keinen medizinischen Hintergrund hat, gründete er Enlitic, ein Unternehmen, das Deep-Learning-Algorithmen zur Diagnose von Krankheiten einsetzt. Nur wenige Monate nach der Gründung des Unternehmens wurde bekannt, dass sein Algorithmus bösartige Tumoregenauer erkennen kannals Radiologen.

Hier ist eine Liste mit einigen der Tausenden von Aufgaben in verschiedenen Bereichen, für die Deep Learning oder Methoden, die Deep Learning stark nutzen, heute die besten der Welt sind:

Natürliche Sprachverarbeitung (NLP)

Beantworten von Fragen; Spracherkennung; Zusammenfassen von Dokumenten; Klassifizieren von Dokumenten; Auffinden von Namen, Daten usw. in Dokumenten; Suchen nach Artikeln, in denen ein Begriff erwähnt wird

Computer Vision

Interpretation von Satelliten- und Drohnenbildern (z. B. für die Katastrophenvorsorge), Gesichtserkennung, Bildunterschriften, Lesen von Verkehrsschildern, Lokalisierung von Fußgängern und Fahrzeugen in autonomen Fahrzeugen

Medizin

Auffinden von Anomalien in radiologischen Bildern, einschließlich CT-, MRT- und Röntgenbildern; Zählen von Merkmalen in pathologischen Präparaten; Messen von Merkmalen in Ultraschallaufnahmen; Diagnostizieren von diabetischer Retinopathie

Biologie

Faltung von Proteinen; Klassifizierung von Proteinen; viele Genomik-Aufgaben, wie die Sequenzierung von Tumoren und die Klassifizierung klinisch relevanter genetischer Mutationen; Zellklassifizierung; Analyse von Protein/Protein-Interaktionen

Bilderzeugung

Bilder einfärben, Bildauflösung erhöhen, Bildrauschen entfernen, Bilder in Kunst im Stil berühmter Künstler umwandeln

Empfehlungssysteme

Websuche, Produktempfehlungen, Homepage-Layout

Spiele spielen

Schach, Go, die meisten Atari-Videospiele und viele Echtzeit-Strategiespiele

Robotik

Umgang mit Objekten, die schwer zu finden sind (z. B. durchsichtig, glänzend, ohne Textur) oder schwer aufzuheben sind

Andere Anwendungen

Finanzielle und logistische Prognosen, Text to Speech und vieles mehr...

Es ist bemerkenswert, dass Deep Learning so vielfältige Anwendungsmöglichkeiten hat, aber fast alles Deep Learning auf einem einzigen innovativen Modelltyp basiert: dem neuronalen Netzwerk.

Aber neuronale Netze sind eigentlich nicht ganz neu. Um das Feld aus einer breiteren Perspektive zu betrachten, lohnt es sich, mit einem kleinen Rückblick zu beginnen.

Neuronale Netze: Eine kurze Geschichte

1943 taten sich Warren McCulloch, ein Neurophysiologe, und Walter Pitts, ein Logiker, zusammen, um ein mathematisches Modell eines künstlichen Neurons zu entwickeln. In ihrem Aufsatz "A Logical Calculus of the Ideas Immanent in Nervous Activity" erklärten sie Folgendes:

Aufgrund des "Alles-oder-nichts"-Charakters der Nervenaktivität können neuronale Ereignisse und die Beziehungen zwischen ihnen mit Hilfe der Aussagenlogik behandelt werden. Es zeigt sich, dass das Verhalten eines jeden Netzes mit diesen Begriffen beschrieben werden kann.

McCulloch und Pitts erkannten, dass ein vereinfachtes Modell eines echten Neurons durch einfache Addition und Schwellenwertbildung dargestellt werden konnte, wie inAbbildung 1-1 gezeigt. Pitts war Autodidakt und erhielt im Alter von 12 Jahren ein Angebot, an der Universität Cambridge bei dem großen Bertrand Russell zu studieren. Er nahm diese Einladung nicht an und lehnte sein ganzes Leben lang alle Angebote für höhere Abschlüsse oder Führungspositionen ab. Die meisten seiner berühmten Arbeiten entstanden, als er obdachlos war. Trotz des Fehlens einer offiziell anerkannten Position und seiner zunehmenden sozialen Isolation war seine Arbeit mit McCulloch einflussreich und wurde von einem Psychologen namens Frank Rosenblatt aufgegriffen.

Natural and artificial neurons
Abbildung 1-1. Natürliche und künstliche Neuronen

Rosenblatt entwickelte das künstliche Neuron weiter, um ihm die Fähigkeit zu geben, zu lernen. Und was noch wichtiger ist: Er arbeitete am Bau des ersten Geräts, das diese Prinzipien nutzte, dem Mark I Perceptron. In "The Design of an Intelligent Automaton" schriebRosenblatt über diese Arbeit: "Wir stehen kurz vor der Geburt einer solchen Maschine - einer Maschine, die in der Lage ist, ihre Umgebung ohne menschliches Training oder Kontrolle wahrzunehmen, zu erkennen und zu identifizieren." Das Perzeptron wurde gebaut und war in der Lage, einfache Formen erfolgreich zu erkennen.

Ein MIT-Professor namens Marvin Minsky (der auf derselben High School eine Klasse hinter Rosenblatt war!), schrieb zusammen mit Seymour Papert ein Buch namensPerceptrons (MIT Press) über Rosenblatts Erfindung. Sie zeigten, dass eine einzige Schicht dieser Geräte nicht in der Lage war, einige einfache, aber wichtige mathematische Funktionen (wie XOR) zu lernen. In demselben Buch zeigten sie auch, dass diese Einschränkungen durch den Einsatz mehrerer Schichten der Geräte behoben werden können. Leider wurde nur die erste dieser Erkenntnisse allgemein anerkannt. Das führte dazu, dass die akademische Gemeinschaft weltweit die neuronalen Netze in den nächsten zwei Jahrzehnten fast vollständig aufgab.

Die vielleicht wichtigste Arbeit im Bereich der neuronalen Netze in den letzten 50 Jahren war das mehrbändige Werk Parallel Distributed Processing (PDP) von David Rumelhart, James McClelland und der PDP Research Group, das 1986 bei MIT Press erschien. In Kapitel 1 wird eine ähnliche Hoffnung wie bei Rosenblatt geäußert:

Menschen sind schlauer als die heutigen Computer, weil das Gehirn eine grundlegende Rechenarchitektur verwendet, die besser geeignet ist, um einen zentralen Aspekt der natürlichen Informationsverarbeitungsaufgaben zu bewältigen, in denen Menschen so gut sind.... Wir werden einen Rechenrahmen für die Modellierung kognitiver Prozesse einführen, der... näher als andere Rahmen an der Art der Berechnung zu sein scheint, wie sie vom Gehirn durchgeführt werden könnte.

PDP geht davon aus, dass herkömmliche Computerprogramme ganz anders funktionieren als Gehirne und dass dies der Grund dafür sein könnte, warum Computerprogramme (zu diesem Zeitpunkt) so schlecht darin sind, Dinge zu tun, die Gehirnen leicht fallen (z. B. Objekte auf Bildern zu erkennen). Die Autoren behaupteten, dass der PDP-Ansatz der Funktionsweise des Gehirns "näher kommt als andere Frameworks" und deshalb besser in der Lage sein könnte, diese Art von Aufgaben zu bewältigen.

Tatsächlich ist der Ansatz, der in PDP beschrieben wird, dem Ansatz sehr ähnlich, der in den heutigen neuronalen Netzen verwendet wird. In dem Buch wird die parallele verteilte Verarbeitung wie folgt definiert:

  • Eine Reihe von Verarbeitungseinheiten

  • Ein Zustand der Aktivierung

  • Eine Ausgangsfunktion für jede Einheit

  • Ein Muster der Konnektivität zwischen Einheiten

  • Eine Ausbreitungsregel für die Ausbreitung von Aktivitätsmustern durch das Netzwerk von Konnektivitäten

  • EineAktivierungsregel zur Kombination der auf eine Einheit einwirkenden Eingaben mit dem aktuellen Zustand dieser Einheit, um eine Ausgabe für die Einheit zu erzeugen

  • EineLernregel, die besagt, dass sich die Muster der Konnektivität durch Erfahrung verändern

  • Eine Umgebung, in der das System funktionieren muss

Wir werden in diesem Buch sehen, dass moderne neuronale Netze jede dieserAnforderungen erfüllen.

In den 1980er Jahren wurden die meisten Modelle mit einer zweiten Schicht von Neuronen gebaut, um das von Minsky und Papert identifizierte Problem zu vermeiden (das war ihr "Muster der Konnektivität zwischen den Einheiten", um den vorhergehenden Rahmen zu verwenden). Und tatsächlich wurden neuronale Netze in den 80er und 90er Jahren in großem Umfang für echte, praktische Projekte eingesetzt. Aber auch hier wurde die Entwicklung durch ein falsches Verständnis der theoretischen Aspekte gebremst. Theoretisch reichte es aus, nur eine zusätzliche Schicht von Neuronen hinzuzufügen, um eine beliebige mathematische Funktion mit diesen neuronalen Netzen zu approximieren, aber in der Praxis waren solche Netze oft zu groß und zu langsam, um nützlich zu sein.

Obwohl Forscherinnen und Forscher schon vor 30 Jahren gezeigt haben, dass man noch mehr Schichten von Neuronen verwenden muss, um eine praktisch gute Leistung zu erzielen, wurde dieses Prinzip erst in den letzten zehn Jahren allgemein anerkannt und angewendet. Neuronale Netze können jetzt endlich ihr Potenzial ausschöpfen, weil mehr Schichten verwendet werden und weil die Computerhardware verbessert wurde, mehr Daten zur Verfügung stehen und die Algorithmen verbessert wurden, so dass neuronale Netze schneller und einfacher trainiert werden können. Wir haben jetzt, was Rosenblatt versprochen hat: "eine Maschine, die ihre Umgebung wahrnehmen, erkennen und identifizieren kann, ohne dass der Mensch sie trainiert oder kontrolliert".

Genau das wirst du in diesem Buch lernen. Aber da wir viel Zeit miteinander verbringen werden, sollten wir uns zuerst ein bisschen kennenlernen...

Wer wir sind

Wir sind Sylvain und Jeremy, deine Begleiter auf dieser Reise. Wir hoffen, dass du uns für diese Aufgabe geeignet findest.

Jeremy nutzt und lehrt maschinelles Lernen seit rund 30 Jahren. Vor 25 Jahren begann er, neuronale Netze zu nutzen. In dieser Zeit hat er viele Unternehmen und Projekte geleitet, bei denen maschinelles Lernen im Mittelpunkt steht, darunter die Gründung des ersten Unternehmens, das sich auf Deep Learning und Medizin konzentriert, Enlitic, und die Rolle des Präsidenten und Chefwissenschaftlers der weltweit größten Community für maschinelles Lernen, Kaggle. Zusammen mit Dr. Rachel Thomas ist er Mitbegründer von fast.ai, der Organisation, die den Kurs entwickelt hat, auf dem dieses Buch basiert.

Von Zeit zu Zeit wirst du in Sidebars direkt von uns hören, wie hier von Jeremy:

Jeremy Sagt

Hallo zusammen, ich bin Jeremy! Vielleicht interessiert es euch, dass ich keine formale technische Ausbildung habe. Ich habe ein BA-Studium mit Schwerpunkt Philosophie abgeschlossen und hatte keine guten Noten. Ich war viel mehr an realen Projekten interessiert als an theoretischen Studien, also habe ich während meiner Studienzeit Vollzeit bei einer Unternehmensberatung namens McKinsey and Company gearbeitet. Wenn du jemand bist, der sich lieber die Hände schmutzig macht und etwas baut, als jahrelang abstrakte Konzepte zu lernen, wirst du verstehen, woher ich komme! Halte Ausschau nach Informationen von mir, die für Menschen mit einem weniger mathematischen oder formalen technischen Hintergrund geeignet sind - also für Menschen wie mich...

Sylvain hingegen weiß viel über formale technische Bildung. Er hat 10 Mathematik-Lehrbücher geschrieben, die den gesamten französischen Mathe-Lehrplan für Fortgeschrittene abdecken!

Sylvain Sagt

Im Gegensatz zu Jeremy habe ich nicht viele Jahre damit verbracht, Algorithmen für maschinelles Lernen zu programmieren und anzuwenden. Vielmehr bin ich erst vor kurzem in die Welt des maschinellen Lernens gekommen, als ich mir Jeremys fast.ai-Kursvideos angesehen habe. Wenn du also jemand bist, der noch nie ein Terminal geöffnet und Befehle an der Kommandozeile geschrieben hat, wirst du verstehen, woher ich komme! Halte Ausschau nach Informationen von mir, die am besten für Leute mit einem mathematischen oder formalen technischen Hintergrund, aber weniger praktischer Programmiererfahrung geeignet sind - also für Leute wie mich...

Der fast.ai-Kurs wurde von Hunderttausenden von Schülern aus allen Gesellschaftsschichten besucht, aus allen Teilen der Welt. Sylvain stach als der beeindruckendste Kursteilnehmer hervor, den Jeremy je gesehen hatte. Das führte dazu, dass er fast.ai beitrat und dann zusammen mit Jeremy zum Co-Autor der fastai-Softwarebibliothek wurde.

Das bedeutet, dass du bei uns das Beste aus beiden Welten hast: die Leute, die mehr über die Software wissen als alle anderen, weil sie sie geschrieben haben; ein Experte für Mathematik und ein Experte für Programmierung und maschinelles Lernen; und auch Leute, die verstehen, wie es ist, ein relativer Außenseiter in Mathematik und ein relativer Außenseiter in Programmierung und maschinellem Lernen zu sein.

Jeder, der schon mal Sport geschaut hat, weiß, dass man bei einem Zwei-Personen-Kommentatorenteam auch eine dritte Person braucht, die "Sonderkommentare" macht. UnserSonderkommentator ist Alexis Gallagher. Alexis hat einen sehr vielseitigen Hintergrund: Er war Forscher in mathematischer Biologie, Drehbuchautor, Improvisationskünstler, McKinsey-Berater (wie Jeremy!), Swift-Coder und CTO.

Alexis Sagt

Ich habe beschlossen, dass es für mich an der Zeit ist, etwas über KI zu lernen! Schließlich habe ich schon so ziemlich alles andere ausprobiert....Aber ich habe nicht wirklich Erfahrung mit der Erstellung von Machine-Learning-Modellen. Aber... wie schwer kann das schon sein? Ich werde in diesem Buch lernen, genau wie du. Achte auf meine Seitenleisten mit Lerntipps, die ich auf meiner Reise als hilfreich empfunden habe und die du hoffentlich auch hilfreich finden wirst.

Wie man Deep Learning lernt

Der Harvard-Professor David Perkins, der das Buch Making Learning Whole (Jossey-Bass) geschrieben hat, hat viel über den Unterricht zu sagen. Die Grundidee ist, das ganze Spiel zu lehren. Das heißt, wenn du Baseball unterrichtest, nimmst du die Leute zuerst zu einem Baseballspiel mit oder lässt sie es spielen. Du bringst ihnen nicht bei, wie man Bindfäden aufwickelt, um einen Baseball herzustellen, oder die Physik einer Parabel oder den Reibungskoeffizienten eines Balls auf einem Schläger.

Paul Lockhart, promovierter Mathematiker an der Columbia University, ehemaliger Brown-Professor und Mathematiklehrer für die 12. Klasse, stellt sich in seinem einflussreichen Essay "A Mathematician's Lament" ( ) eine Albtraumwelt vor, in der Musik und Kunst so unterrichtet werden, wie Mathematik unterrichtet wird. Kinder dürfen erst dann Musik hören oder spielen, wenn sie mehr als ein Jahrzehnt damit verbracht haben, die Notenschrift und die Musiktheorie zu beherrschen und Notenblätter in eine andere Tonart zu transponieren. Im Kunstunterricht lernen die Schüler/innen Farben und Applikatoren, dürfen aber erst auf dem College selbst malen. Klingt absurd? So wird auch Mathematik gelehrt - wir verlangen von den Schülern, dass sie jahrelang auswendig lernen und trockene, unzusammenhängende Grundlagenerlernen, von denen wir behaupten, dass sie sich später auszahlen werden, lange nachdem die meisten von ihnen das Fach aufgegeben haben.

Leider fangen viele Lehrmaterialien zum Thema Deep Learning genau hier an: Sie fordern die Lernenden auf, die Definition der Hess'schen Funktion und die Theoreme für die Taylor-Approximation deiner Verlustfunktionen nachzuvollziehen, ohne jemals Beispiele für funktionierenden Code zu geben. Wir wollen die Infinitesimalrechnung nicht schlecht machen. Wir lieben Infinitesimalrechnung, und Sylvain hat sie sogar auf College-Ebene unterrichtet, aber wir glauben nicht, dass sie der beste Ausgangspunkt für Deep Learning ist!

Beim Deep Learning ist es sehr hilfreich, wenn du die Motivation hast, dein Modell zu verbessern, damit es besser funktioniert. Dann fängst du an, die entsprechende Theorie zu lernen. Aber du musst das Modell erst einmal haben. Wir lehren fast alles anhand von echten Beispielen. Während wir diese Beispiele ausbauen, gehen wir immer tiefer und zeigen dir, wie du deine Projekte immer besser machen kannst. Das bedeutet, dass du nach und nach alle theoretischen Grundlagen lernst, die du brauchst, und zwar im Kontext und so, dass du siehst, warum es wichtig ist und wie es funktioniert.

Hier ist also unsere Verpflichtung dir gegenüber. In diesem Buch folgen wir diesen Prinzipien:

Das ganze Spiel unterrichten

Wir beginnen damit, dir zu zeigen, wie du ein komplettes, funktionierendes, brauchbares und hochmodernes Deep-Learning-Netzwerk nutzen kannst, um reale Probleme mit einfachen, aussagekräftigen Tools zu lösen. Und dann werden wir nach und nach immer tiefer in das Verständnis eindringen, wie diese Werkzeuge hergestellt werden und wie die Werkzeuge, die diese Werkzeuge herstellen, hergestellt werden, und so weiter...

Immer durch Beispiele lehren

Wir stellen sicher, dass es einen Kontext und einen Zweck gibt, den du intuitiv verstehst, anstatt mit algebraischer Symbolmanipulation zu beginnen.

So viel wie möglich vereinfachen

Wir haben Jahre damit verbracht, Werkzeuge und Lehrmethoden zu entwickeln, die bisher komplexe Themen einfach machen.

Barrieren abbauen

Deep Learning war bis jetzt ein exklusives Spiel. Wir brechen es auf und sorgen dafür, dass jeder mitspielen kann.

Der schwierigste Teil des Deep Learning ist handwerklich: Woher weißt du, ob du genug Daten hast, ob sie im richtigen Format vorliegen, ob dein Modell richtig trainiert und was du tun solltest, wenn das nicht der Fall ist? Deshalb glauben wir an Learning by Doing. Wie bei den grundlegenden Fähigkeiten in der Datenwissenschaft wirst du auch beim Deep Learning nur durch praktische Erfahrung besser. Der Versuch, zu viel Zeit mit der Theorie zu verbringen, kann kontraproduktiv sein. Der Schlüssel ist, einfach zu programmieren und zu versuchen, Probleme zu lösen: Die Theorie kann später kommen, wenn du den Kontext und die Motivation hast.

Es wird Zeiten geben, in denen sich die Reise schwierig anfühlt. Zeiten, in denen du dich festgefahren fühlst. Gib nicht auf! Spule das Buch zurück, um die letzte Stelle zu finden, an der du definitiv nicht feststeckst, und lese dann langsam weiter, um die erste Unklarheit zu finden. Probiere dann selbst ein paar Code-Experimente aus und google nach weiteren Tutorials zu dem Thema, bei dem du nicht weiterkommst - oft findest du einen anderen Blickwinkel auf die Materie, der dir helfen kann, es zu verstehen. Außerdem ist es normal, dass du nicht alles auf Anhieb verstehst (vor allem den Code). Es kann manchmal schwierig sein, den Stoff erst nach und nach zu verstehen, bevor du weitermachst. Manchmal werden die Zusammenhänge erst klar, wenn du mehr über die einzelnen Teile erfährst und ein größeres Bild hast. Wenn du also bei einem Abschnitt nicht weiterkommst, versuche trotzdem weiterzumachen und notiere dir, dass du später darauf zurückkommen wirst.

Erinnere dich daran, dass du keinen besonderen akademischen Hintergrund brauchst, um beim Deep Learning erfolgreich zu sein. Viele wichtige Durchbrüche in Forschung und Industrie werden von Leuten ohne Doktortitel erzielt, wie z. B. die Arbeit"Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks" - eineder einflussreichsten Arbeiten des letzten Jahrzehnts mit über 5.000 Zitaten -, die Alec Radford als Studentgeschrieben hat. Selbst bei Tesla, wo man versucht, die extrem schwierige Aufgabe zu lösen, ein selbstfahrendes Auto zu bauen,sagt CEOElon Musk:

Ein Doktortitel ist definitiv nicht erforderlich. Alles, was zählt, ist ein tiefes Verständnis von KI und die Fähigkeit, NNs so zu implementieren, dass sie tatsächlich nützlich sind (der letzte Punkt ist das, was wirklich schwierig ist). Es ist egal, ob du die High School abgeschlossen hast.

Um erfolgreich zu sein, musst du jedoch das, was du in diesem Buch lernst, auf ein persönliches Projekt anwenden und immer durchhalten.

Deine Projekte und dein Mindset

Ganz gleich, ob du anhand von Bildern der Blätter erkennen willst, ob Pflanzen krank sind, ob du automatisch Strickmuster generieren willst, ob du anhand von Röntgenbildern Tuberkulose diagnostizieren willst oder ob du feststellen willst, ob ein Waschbär deine Katzentür benutzt - wir werden dich so schnell wie möglich dazu bringen, Deep Learning auf deine eigenen Probleme anzuwenden (mit Hilfe von vortrainierten Modellen anderer), und dann schrittweise mehr ins Detail gehen. Innerhalb der ersten 30 Minuten des nächsten Kapitels wirst du lernen, wie du Deep Learning nutzen kannst, um deine eigenen Probleme mit höchster Genauigkeit zu lösen! (Und wenn du unbedingt sofort mit dem Programmieren anfangen willst, kannst du auch gleich dorthin springen). Es ist ein verderblicher Mythos, dass du Rechenressourcen und Datensätze in der Größe von Google brauchst, um Deep Learning zu betreiben.

Welche Arten von Aufgaben eignen sich also als Testfälle? Du könntest deinem Modell beibringen, zwischen Picasso- und Monet-Gemälden zu unterscheiden oder Bilder deiner Tochter anstelle von Bildern deines Sohnes auszuwählen. Es ist hilfreich, sich auf deine Hobbys und Leidenschaften zu konzentrieren. Wenn du dir vier oder fünf kleine Projekte vornimmst, anstatt ein großes Problem zu lösen, funktioniert das in der Regel besser, wenn du gerade erst anfängst. Da man sich leicht festfahren kann, kann ein zu früher Ehrgeiz oft nach hinten losgehen. Wenn du dann die Grundlagen beherrschst, solltest du etwas schaffen, auf das du wirklich stolz bist!

Jeremy Sagt

Deep Learning kann für fast jedes Problem eingesetzt werden. Mein erstes Startup war zum Beispiel ein Unternehmen namens FastMail, das seit 1999 (und bis heute) verbesserte E-Mail-Dienste anbietet. Im Jahr 2002 setzte ich eine primitive Form des Deep Learning ein, nämlich einschichtige neuronale Netze, um E-Mails zu kategorisieren und zu verhindern, dass Kunden Spam erhalten.

Zu den gemeinsamen Charaktereigenschaften von Menschen, die beim Deep Learning gut abschneiden, gehören Verspieltheit und Neugierde. Der verstorbene Physiker Richard Feynman ist ein Beispiel für jemanden, von dem man erwarten würde, dass er gut im Deep Learning ist: Er entwickelte ein Verständnis für die Bewegung subatomarer Teilchen, weil er sich darüber amüsierte, wie Platten wackeln, wenn sie sich in der Luft drehen.

Konzentrieren wir uns nun auf das, was du lernen wirst, angefangen bei der Software.

Die Software: PyTorch, fastai und Jupyter (und warum das keine Rolle spielt)

Wir haben Hunderte von Machine-Learning-Projekten mit Dutzenden von Paketen und vielen Programmiersprachen durchgeführt. Bei fast.ai haben wir Kurse mit den meisten der wichtigsten Deep-Learning- und Machine-Learning-Pakete geschrieben, die heute verwendet werden. Als PyTorch 2017 auf den Markt kam, haben wir mehr als tausend Stunden damit verbracht, es zu testen, bevor wir uns entschieden, es für zukünftige Kurse, Softwareentwicklung und Forschung zu nutzen. Seitdem hat sich PyTorch zur am schnellsten wachsenden Deep-Learning-Bibliothek der Welt entwickelt und wird bereits für die meisten Forschungsbeiträge auf Top-Konferenzen verwendet. Dies ist in der Regel ein wichtiger Indikator für die Nutzung in der Industrie, denn diese Beiträge werden schließlich in kommerziellen Produkten und Dienstleistungen verwendet. Wir haben festgestellt, dass PyTorch die flexibelste und ausdrucksstärkste Bibliothek für Deep Learning ist. Sie macht keinen Kompromiss zwischen Geschwindigkeit und Einfachheit, sondern bietet beides.

PyTorch funktioniert am besten als Low-Level-Basisbibliothek, die die grundlegenden Operationen für höherwertige Funktionen bereitstellt. Die fastai-Bibliothek ist die beliebteste Bibliothek, um diese höheren Funktionen auf PyTorch aufzusetzen. Sie eignet sich auch besonders gut für die Zwecke dieses Buches, weil sie eine tief geschichtete Software-Architektur bietet (es gibt sogar einevon Experten begutachtete wissenschaftliche Arbeit über diese geschichtete API). Während wir in diesem Buch immer tiefer in die Grundlagen des Deep Learning eindringen, werden wir auch immer tiefer in die Schichten von fastai eindringen. Dieses Buch behandelt Version 2 der fastai-Bibliothek, die von Grund auf neu geschrieben wurde und viele einzigartige Funktionen bietet.

Es ist aber eigentlich egal, welche Software du lernst, denn es dauert nur ein paar Tage, um zu lernen, von einer Bibliothek zur anderen zu wechseln. Worauf es wirklich ankommt, ist, die Grundlagen und Techniken des Deep Learning richtig zu lernen. Wir werden uns darauf konzentrieren, Code zu verwenden, der die Konzepte, die du lernen musst, so klar wie möglich ausdrückt. Wenn wir High-Level-Konzepte unterrichten, verwenden wir High-Level-Fastai-Code, wenn wir Low-Level-Konzepte unterrichten, verwenden wir Low-Level-PyTorch oder sogar reinen Python-Code.

Auch wenn es den Anschein hat, dass neue Deep-Learning-Bibliotheken heutzutage in rasantem Tempo auftauchen, musst du dich darauf einstellen, dass sich die Veränderungen in den kommenden Monaten und Jahren noch viel schneller vollziehen werden. Je mehr Leute in das Feld einsteigen, desto mehr Fähigkeiten und Ideen werden sie einbringen und mehr Dinge ausprobieren. Du solltest davon ausgehen, dass bestimmte Bibliotheken und Software, die du heute lernst, in ein oder zwei Jahren veraltet sein werden. Denke nur an die vielen Veränderungen in den Bibliotheken und Technologiestapeln, die ständig in der Welt der Webprogrammierung stattfinden - ein viel reiferer und langsamer wachsender Bereich als DeepLearning. Wir sind der festen Überzeugung, dass der Schwerpunkt beim Lernen auf dem Verständnis der zugrundeliegenden Techniken und ihrer Anwendung in der Praxis liegen muss und darauf, wie man schnell Fachwissen über neue Tools und Techniken aufbauen kann, sobald sie veröffentlicht werden.

Am Ende des Buches wirst du fast den gesamten Code von fastai (und auch von PyTorch) verstehen, denn in jedem Kapitel gehen wir eine Ebene tiefer, um dir genau zu zeigen, was passiert, wenn wir unsere Modelle bauen und trainieren. Das bedeutet, dass du die wichtigsten bewährten Methoden des modernen Deep Learning kennenlernst - nicht nur, wie man sie anwendet, sondern auch, wie sie wirklich funktionieren und implementiert werden. Wenn du diese Ansätze in einem anderen Framework verwenden möchtest, hast du das nötige Wissen, um dies bei Bedarf zu tun.

Da das Wichtigste beim Lernen von Deep Learning das Schreiben von Code und das Experimentieren ist, ist es wichtig, dass du eine großartige Plattform für das Experimentieren mit Code hast. Die beliebteste Plattform für Programmierexperimente heißt Jupyter. Wir werden sie in diesem Buch durchgängig nutzen. Wir zeigen dir, wie du Jupyter zum Trainieren und Experimentieren mit Modellen verwenden kannst und wie du jede Phase der Datenvorverarbeitung und Modellentwicklung nachvollziehen kannst. Jupyter ist nicht umsonst das beliebteste Tool für Data Science in Python,. Es ist leistungsstark, flexibel und einfach zu bedienen. Wir denken, du wirst es lieben!

Schauen wir uns das in der Praxis an und trainieren unser erstes Modell.

Dein erstes Modell

Wie wir bereits gesagt haben, bringen wir dir erst bei, wie du etwas machst, bevor wir dir erklären, warum es funktioniert. Diesem Top-Down-Ansatz folgend, werden wir damit beginnen, einen Bildklassifikator zu trainieren, der Hunde und Katzen mit fast 100%iger Genauigkeit erkennt. Um dieses Modell zu trainieren und unsere Experimente durchzuführen, musst du zunächst einige Einstellungen vornehmen. Keine Sorge, es ist nicht so schwer, wie es aussieht.

Sylvain Sagt

Überspringe den Teil der Einrichtung nicht, auch wenn er zunächst einschüchternd aussieht, vor allem, wenn du wenig oder keine Erfahrung mit Dingen wie einem Terminal oder der Kommandozeile hast. Das meiste davon ist nicht nötig, und du wirst feststellen, dass die einfachsten Server mit deinem normalen Webbrowser eingerichtet werden können. Es ist wichtig, dass du parallel zu diesem Buch deine eigenen Experimente durchführst, um zu lernen.

Einen GPU Deep Learning Server bekommen

Für fast alles in diesem Buch brauchst du einen Computer mit einemNVIDIA-Grafikprozessor (leider werden andere Grafikprozessoren von den wichtigsten Deep-Learning-Bibliotheken nicht vollständig unterstützt). Wir empfehlen dir jedoch nicht, einen solchen zu kaufen; selbst wenn du bereits einen hast, solltest du ihn noch nicht benutzen! Einen Computer einzurichten, kostet Zeit und Energie, und du willst deine ganze Energie jetzt auf Deep Learning konzentrieren. Deshalb schlagen wir vor, dass du einen Computer mietest, auf dem alles, was du brauchst, bereits vorinstalliert und einsatzbereit ist. Die Kosten können bis zu 0,25 $ pro Stunde betragen, während du ihn nutzt, und einige Optionen sind sogar kostenlos.

Jargon: Graphics Processing Unit (GPU)

Auch bekannt als Grafikkarte. Ein spezieller Prozessor in deinem Computer, der Tausende von Einzelaufgaben gleichzeitig bewältigen kann. Er wurde speziell für die Darstellung von 3D-Umgebungen auf einem Computer zum Spielen entwickelt. Diese grundlegenden Aufgaben sind den Aufgaben neuronaler Netze sehr ähnlich, so dass GPUs neuronale Netze hundertmal schneller ausführen können als normale CPUs. Alle modernen Computer haben einen Grafikprozessor, aber nur wenige haben die richtige Art von Grafikprozessor, die für Deep Learning notwendig ist.

Die beste Auswahl an GPU-Servern für dieses Buch wird sich im Laufe der Zeit ändern, da Unternehmen kommen und gehen und sich die Preise ändern. Wir führen eine Liste der von uns empfohlenen Optionen auf der Website des Buches, also geh jetzt dorthin und folge den Anweisungen, um dich mit einem GPU Deep Learning Server zu verbinden. Keine Sorge, bei den meisten Plattformen dauert die Einrichtung nur etwa zwei Minuten, und bei vielen ist nicht einmal eine Zahlung oder eine Kreditkarte erforderlich, um loszulegen.

Alexis Sagt

Meine Meinung: Beherzige diesen Rat! Wenn du Computer magst, wirst du in Versuchung kommen, deine eigene Box einzurichten. Aber Vorsicht! Es ist machbar, aber überraschend aufwändig und ablenkend. Es gibt einen guten Grund, warum dieses Buch nicht den Titel Alles, was du schon immer über Ubuntu-Systemadministration, NVIDIA-Treiberinstallation, apt-get, conda, pip und Jupyter-Notebook-Konfiguration wissen wolltest trägt. Das wäre ein eigenständiges Buch. Da ich unsere Produktionsinfrastruktur für maschinelles Lernen entwickelt und eingesetzt habe, kann ich bestätigen, dass es zwar befriedigend ist, aber mit der Modellierung so wenig zu tun hat wie die Wartung eines Flugzeugs mit dem Fliegen.

Zu jeder Option, die auf der Website gezeigt wird, gibt es eine Anleitung. Nachdem du die Anleitung abgeschlossen hast, siehst du einen Bildschirm, der wieAbbildung 1-2 aussieht.

Initial view of Jupyter Notebook
Abbildung 1-2. Erste Ansicht von Jupyter Notebook

Du bist jetzt bereit, dein erstes Jupyter-Notebook zu starten!

Jargon: Jupyter Notebook

Eine Software, mit der du formatierten Text, Code, Bilder, Videos und vieles mehr in ein einziges interaktives Dokument einbinden kannst, . Jupyter erhielt die höchste Auszeichnung für Software, den ACM Software System Award, dank seiner weiten Verbreitung und seines enormen Einflusses in vielen akademischen Bereichen und in der Industrie. Jupyter Notebook ist die Software, die von Datenwissenschaftlern am häufigsten für die Entwicklung von und die Interaktion mit Deep Learning-Modellen verwendet wird.

Dein erstes Notebook betreiben

Die Hefte sind nach Kapiteln nummeriert, und zwar in der gleichen Reihenfolge wie in diesem Buch. Das allererste Notizbuch, das du siehst, ist das Notizbuch, das du jetzt benutzen musst. Mit diesem Heft wirst du ein Modell trainieren, das Hunde- und Katzenfotos erkennen kann. Zu diesem Zweck lädst dueinen Datensatz mit Hunde- und Katzenfotos herunter und trainierst damit ein Modell.

Ein Datensatz ist einfach ein Haufen Daten - das können Bilder, E-Mails, Finanzkennzahlen, Töne oder etwas anderes sein. Es gibt viele frei verfügbare Datensätze, die sich für das Training von Modellen eignen. Viele dieser Datensätze werden von Wissenschaftlern erstellt, um die Forschung voranzutreiben, viele werden für Wettbewerbe zur Verfügung gestellt (es gibt Wettbewerbe, bei denen Datenwissenschaftler darum wetteifern können, wer das genaueste Modell hat!

Volle und ausgezogene Notizbücher

Es gibt zwei Versionen der Notizbücher. Der Stammordner des Repo enthält genau die Notizbücher, die zur Erstellung des Buches, das du gerade liest, verwendet wurden, mit allen Ausgaben und Prosa. Der saubere Ordner hat dieselben Überschriften und Codezellen, aber alle Ausgaben und Prosa wurden entfernt. Nachdem du einen Abschnitt des Buches gelesen hast, empfehlen wir dir, die sauberen Notizbücher durchzuarbeiten, während du das Buch geschlossen hältst, und zu sehen, ob du herausfinden kannst, was die einzelnen Zellen zeigen, bevor du sie ausführst. Versuche auch, dich daran zu erinnern, was der Code demonstriert.

Um ein Notizbuch zu öffnen, klicke es einfach an. Das Notizbuch wird geöffnet,, und es sieht ungefähr so aus wie in Abbildung 1-3 (beachte, dass es auf verschiedenen Plattformen leichte Unterschiede in den Details geben kann; du kannst diese Unterschiede ignorieren).

An example of notebook
Abbildung 1-3. Ein Jupyter-Notizbuch

Ein Notizbuch besteht aus Zellen. Es gibt zwei wichtige Arten von Zellen:

  • Zellen, die formatierten Text, Bilder und so weiter enthalten. Sie verwenden ein Format namens Markdown, , das du gleich kennenlernen wirst.

  • Zellen, die Code enthalten, der ausgeführt werden kann, und Ausgaben, die direkt darunter erscheinen(das können einfacher Text, Tabellen, Bilder, Animationen, Sounds oder sogar interaktive Anwendungen sein).

Jupyter-Notizbücher können sich in einem von zwei Modi befinden: im Bearbeitungsmodus oder im Befehlsmodus. Im Bearbeitungsmodus tippst du auf deiner Tastatur die Buchstaben auf die übliche Weise in die Zelle ein. Im Befehlsmodus siehst du jedoch keinen blinkenden Cursor, und jede Taste auf deiner Tastatur hat eine besondere Funktion.

Bevor du fortfährst, drückst du die Escape-Taste auf deiner Tastatur, um in den Befehlsmodus zu wechseln (wenn du dich bereits im Befehlsmodus befindest, bewirkt dies nichts, also drück sie jetzt sicherheitshalber). Um eine vollständige Liste aller verfügbaren Funktionen zu sehen, drückst du H; drückst du Escape, um diesen Hilfebildschirm zu verlassen. Anders als in den meisten Programmen musst du im Befehlsmodus nicht die Strg-, Alt- oder ähnliche Taste gedrückt halten, sondern du drückst einfach die gewünschte Buchstabentaste.

Du kannst eine Zelle kopieren, indem du C drückst (die Zelle muss zuerst ausgewählt werden, was durch einen Umriss angezeigt wird; wenn sie noch nicht ausgewählt ist, klicke sie einmal an). Drücke dann V, um die Kopie einzufügen.

Klicke auf die Zelle, die mit der Zeile "# CLICK ME" beginnt, um sie auszuwählen. Das erste Zeichen in dieserZeile zeigt an, dass das, was folgt, ein Kommentar in Python ist und daher bei der Ausführung der Zelle ignoriert wird. Der Rest der Zelle ist, ob du es glaubst oder nicht, ein komplettes System zum Erstellen und Trainieren eines hochmodernen Modells zur Erkennung von Katzen und Hunden. Also, lass es uns jetzt trainieren! Dazu drückst du einfach die Umschalttaste auf deiner Tastatur oder klickst auf die Schaltfläche Abspielen in der Symbolleiste. Warte dann ein paar Minuten, während die folgenden Dinge passieren:

  1. Ein Datensatz namensOxford-IIIT Pet Dataset, der 7.349 Bilder von Katzen und Hunden aus 37 Rassen enthält, wird aus der fast.ai-Datensammlung auf den GPU-Server heruntergeladen, den du verwendest, und dann extrahiert.

  2. Ein vortrainiertes Modell, das bereits mit einem Wettbewerbssieger-Modell auf 1,3 Millionen Bildern trainiert wurde, wird aus dem Internet heruntergeladen.

  3. Das vortrainierte Modell wird mit den neuesten Fortschritten im Transfer-Lernen verfeinert, um ein Modell zu erstellen, das speziell auf die Erkennung von Hunden und Katzen zugeschnitten ist.

Die ersten beiden Schritte müssen nur einmal auf deinem GPU-Server ausgeführt werden. Wenn du die Zelle erneut ausführst, verwendet sie den Datensatz und das Modell, die bereits heruntergeladen wurden, und lädt sie nicht erneut herunter. Werfen wir einen Blick auf den Inhalt der Zelle und die Ergebnisse(Tabelle 1-2):

# CLICK ME
from fastai.vision.all import *
path = untar_data(URLs.PETS)/'images'

def is_cat(x): return x[0].isupper()
dls = ImageDataLoaders.from_name_func(
    path, get_image_files(path), valid_pct=0.2, seed=42,
    label_func=is_cat, item_tfms=Resize(224))

learn = cnn_learner(dls, resnet34, metrics=error_rate)
learn.fine_tune(1)
Tabelle 1-2. Ergebnisse des ersten Trainings
Epoche train_loss gültig_verlust fehler_rate Zeit
0 0.169390 0.021388 0.005413 00:14
Epoche train_loss gültig_verlust fehler_rate Zeit
0 0.058748 0.009240 0.002706 00:19

Wahrscheinlich wirst du nicht genau die gleichen Ergebnisse wie hier sehen. Bei der Ausbildung von Modellen gibt es viele Quellen für kleine Zufallsschwankungen. In der Regel liegt die Fehlerquote in diesem Beispiel aber deutlich unter 0,02.

Ausbildungszeit

Je nach Geschwindigkeit deines Netzwerks kann es ein paar Minuten dauern, bis das trainierte Modell und der Datensatz heruntergeladen sind. Die Ausführung von fine_tune kann etwa eine Minute dauern. Die Modelle in diesem Buch brauchen oft ein paar Minuten, um trainiert zu werden, und auch deine eigenen Modelle werden das tun, also solltest du dir gute Techniken ausdenken, um diese Zeit optimal zu nutzen. Lies zum Beispiel den nächsten Abschnitt weiter, während dein Modell trainiert wird, oder öffne ein weiteres Notizbuch und benutze es für einige Programmierexperimente.

Woher wissen wir also, ob dieses Modell etwas taugt? In der letzten Spalte der Tabelle siehst du die Fehlerquote, d. h. den Anteil der Bilder, die falsch identifiziert wurden. Die Fehlerquote ist unser Maßstab für die Qualität des Modells, der so gewählt wurde, dass er intuitiv und nachvollziehbar ist. Wie du siehst, ist das Modell nahezu perfekt, obwohl die Trainingszeit nur ein paar Sekunden betrug (ohne das einmalige Herunterladen des Datensatzes und des vortrainierten Modells). Tatsächlich ist die Genauigkeit, die du bereits erreicht hast, weitaus besser, als irgendjemand vor nur 10 Jahren je erreicht hat!

Zum Schluss wollen wir überprüfen, ob dieses Modell tatsächlich funktioniert. Besorge dir ein Foto von einem Hund oder einer Katze; wenn du keins zur Hand hast, suche einfach bei Google Images und lade ein Bild herunter, das du dort findest. Führe nun die Zelle aus, in der uploader definiert ist. Sie wird eine Schaltfläche ausgeben, auf die du klicken kannst, um das Bild auszuwählen, das du klassifizieren willst:

uploader = widgets.FileUpload()
uploader
An upload button

Jetzt kannst du die hochgeladene Datei an das Modell übergeben. Achte darauf, dass es sich um ein klares Foto eines einzelnen Hundes oder einer Katze handelt und nicht um eine Strichzeichnung, einen Cartoon oder ähnliches. Das Notizbuch sagt dir, ob es denkt, dass es ein Hund oder eine Katze ist, und wie sicher es ist. Hoffentlich wirst du feststellen, dass dein Modell gute Arbeit geleistet hat:

img = PILImage.create(uploader.data[0])
is_cat,_,probs = learn.predict(img)
print(f"Is this a cat?: {is_cat}.")
print(f"Probability it's a cat: {probs[1].item():.6f}")
Is this a cat?: True.
Probability it's a cat: 0.999986

Herzlichen Glückwunsch zu deinem ersten Klassifikator!

Aber was bedeutet das? Was hast du eigentlich getan? Um das zu erklären, lass uns noch einmal rauszoomen, um das Gesamtbild zu erfassen.

Was ist maschinelles Lernen?

Dein Klassifikator ist ein Deep-Learning-Modell. Wie bereits erwähnt, verwenden Deep Learning-Modelle neuronale Netze, die ursprünglich aus den 1950er Jahren stammen und dank der jüngsten Fortschritte sehr leistungsfähig geworden sind.

Ein weiterer wichtiger Aspekt ist, dass Deep Learning nur ein moderner Teilbereich der allgemeineren Disziplin des maschinellen Lernens ist. Um zu verstehen, was du getan hast, als du dein eigenes Klassifizierungsmodell trainiert hast, musst du Deep Learning nicht verstehen. Es reicht, wenn du siehst, dass dein Modell und dein Trainingsprozess Beispiele für die Konzepte sind, die für maschinelles Lernen im Allgemeinen gelten.

In diesem Abschnitt werden wir also das maschinelle Lernen beschreiben. Wir werden die wichtigsten Konzepte untersuchen und sehen, wie sie auf den ursprünglichen Aufsatz zurückgeführt werden können, in dem sie eingeführt wurden.

Maschinelles Lernen ist, wie das normale Programmieren, eine Möglichkeit, Computer dazu zu bringen, eine bestimmte Aufgabe zu erledigen. Aber wie würden wir eine normale Programmierung verwenden, um das zu tun, was wir im vorigen Abschnitt getan haben: Hunde von Katzen auf Fotos zu unterscheiden? Wir müssten dem Computer die genauen Schritte aufschreiben, die für die Ausführung der Aufgabe notwendig sind.

Normalerweise ist es für uns einfach, die Schritte aufzuschreiben, um eine Aufgabe zu erledigen, wenn wir ein Programm schreiben. Wir denken einfach an die Schritte, die wir machen würden, wenn wir die Aufgabe von Hand erledigen müssten, und übersetzen sie dann in Code. Wir können zum Beispiel eine Funktion schreiben, die eine Liste sortiert. Im Allgemeinen würden wir eine Funktion schreiben, die ungefähr so aussieht wie in Abbildung 1-4 (wobei die Eingaben eine unsortierte Liste und die Ergebnisse eine sortierte Liste sein könnten).

Pipeline inputs, program, results
Abbildung 1-4. Ein traditionelles Programm

Aber das Erkennen von Objekten auf einem Foto ist etwas knifflig.Was sind die Schritte, die wir unternehmen, wenn wir ein Objekt auf einem Bild erkennen? Wir wissen es wirklich nicht, denn es passiert alles in unserem Gehirn, ohne dass wir es bewusst wahrnehmen!

Schon in den Anfängen der Computertechnik, im Jahr 1949, arbeitete ein IBM-Forscher namensArthur Samuel an einem anderen Weg, Computer dazu zu bringen,Aufgaben zu erledigen, den er maschinelles Lernen nannte. In seinem klassischen Aufsatz von 1962 "Artificial Intelligence: A Frontier of Automation", schrieb er:

Einen Computer für solche Berechnungen zu programmieren, ist bestenfalls eine schwierige Aufgabe. Das liegt nicht in erster Linie an der Komplexität des Computers selbst, sondern vielmehr an der Notwendigkeit, jeden winzigen Schritt des Prozesses bis ins kleinste Detail zu beschreiben. Jeder Programmierer wird dir sagen, dass Computer riesige Idioten sind und keine riesigen Gehirne.

Seine Grundidee war folgende: Anstatt dem Computer die genauen Schrittezu sagen, die zur Lösung eines Problems erforderlich sind, zeige ihm Beispiele für das zu lösende Problem und lass ihn selbst herausfinden, wie er es lösen kann. Das erwies sich als sehr effektiv: 1961 hatte sein Schachprogramm so viel gelernt, dass es den Staatsmeister von Connecticut schlug! So beschrieb er seine Idee (aus demselben Aufsatz wie oben):

Nehmen wir an, wir haben ein automatisches Verfahren, mit dem wir die Effektivität der aktuellen Gewichtungszuweisung im Hinblick auf die tatsächliche Leistung testen können, und einen Mechanismus, mit dem wir die Gewichtungszuweisung so ändern können, dass die Leistung maximiert wird. Wir brauchen nicht auf die Details eines solchen Verfahrens einzugehen, um zu sehen, dass es völlig automatisch ablaufen kann und dass eine so programmierte Maschine aus ihren Erfahrungen "lernt".

In dieser kurzen Aussage steckt eine Reihe von wichtigen Konzepten:

  • Die Idee einer "Gewichtszuweisung"

  • Die Tatsache, dass jede Gewichtszuweisung eine gewisse "tatsächliche Leistung" hat

  • Die Anforderung, dass es ein "automatisches Mittel" zur Prüfung der Leistung geben muss

  • Die Notwendigkeit eines "Mechanismus" (d.h. eines weiteren automatischen Prozesses) zur Verbesserung der Leistung durch Änderung der Gewichtszuweisungen

Schauen wir uns diese Konzepte einzeln an, um zu verstehen, wie sie in der Praxis zusammenpassen. Zunächst müssen wir verstehen, was Samuel mit einer Gewichtszuweisung meint.

Gewichte sind einfach Variablen, und eine Gewichtungszuweisung ist eine bestimmte Auswahl von Werten für diese Variablen. Die Eingaben des Programms sind Werte, die es verarbeitet, um seine Ergebnisse zu erzielen - zum Beispiel Bildpixel als Eingaben zu nehmen und die Klassifizierung "Hund" als Ergebnis zu liefern. Die Gewichtungszuweisungen des Programms sind andere Werte, die festlegen, wie das Programm arbeiten soll.

Da sie sich auf das Programm auswirken, sind sie in gewisser Weise eine andere Art von Eingabe. Wir werden unser Grundbild in Abbildung 1-4aktualisieren und es durch Abbildung 1-5 ersetzen, um dies zu berücksichtigen.

Abbildung 1-5. Ein Programm mit Gewichtszuweisung

Wir haben den Namen unserer Box von "Programm" in " Modell" geändert, um der modernen Terminologie zu folgen und zu verdeutlichen, dass das Modell eine besondere Art von Programm ist: Es ist ein Programm, das je nach Gewichtung viele verschiedene Dinge tun kann. Es kann auf viele verschiedene Arten implementiert werden. In Samuels Damespiel zum Beispiel würden unterschiedliche Werte der Gewichte zu unterschiedlichen Spielstrategien führen.

(Übrigens wird das, was Samuel als "Gewichte" bezeichnet, heutzutage meist als Modellparameter bezeichnet, falls du diesen Begriff schon mal gehört hast. Der Begriff " Gewichte" ist für eine bestimmte Art von Modellparametern reserviert.)

Als Nächstes sagte Samuel, dass wir ein automatisches Mittel brauchen , um die Effektivitätjeder aktuellen Gewichtungszuweisung im Hinblick auf die tatsächliche Leistung zu testen. Im Fall seines Damespielprogramms wäre die "tatsächliche Leistung" eines Modells, wie gut es spielt. Und du könntest die Leistung zweier Modelle automatisch testen, indem du sie gegeneinander spielen lässt und siehst, welches Modell in der Regel gewinnt.

Schließlich sagt er, dass wir einen Mechanismus brauchen , um die Gewichtung so zu ändern, dass die Leistung maximiert wird. Wir könnten uns zum Beispiel den Unterschied zwischen den Gewichten des Gewinnermodells und des Verlierermodells ansehen und die Gewichte ein wenig mehr in Richtung Gewinner anpassen.

Jetzt verstehen wir, warum er sagte, dass ein solches Verfahren völlig automatisch ablaufen könnte und dass eine so programmierte Maschine aus ihren Erfahrungen "lernen" würde. Das Lernen würde völlig automatisch werden, wenn auch die Anpassung der Gewichte automatisch erfolgt - wenn wir ein Modell nicht mehr durch manuelle Anpassung der Gewichte verbessern, sondern uns auf einen automatischen Mechanismus verlassen, der Anpassungen auf der Grundlage der Leistung vornimmt.

Abbildung 1-6 zeigt das vollständige Bild von Samuels Idee, ein maschinelles Lernmodell zu trainieren.

The basic training loop
Abbildung 1-6. Training eines maschinellen Lernmodells

Beachte den Unterschied zwischen den Ergebnissen des Modells (z. B. die Züge in einem Damespiel) und seiner Leistung (z. B. ob es das Spiel gewinnt oder wie schnell es gewinnt).

Beachte auch, dass wir die Gewichte als Teil des Modells betrachten können, sobald das Modell trainiert ist, d.h. sobald wir unsere endgültige, beste und bevorzugte Gewichtung ausgewählt haben, da wir sie nicht mehr verändern.

Daher sieht die tatsächliche Verwendung eines trainierten Modells wie in Abbildung 1-7 aus.

Abbildung 1-7. Ein trainiertes Modell als Programm verwenden

Das sieht genauso aus wie unser ursprüngliches Diagramm inAbbildung 1-4, nur dass wir das Wort Programm durchModell ersetzt haben. Das ist eine wichtige Erkenntnis: Ein trainiertes Modell kann genau wie ein normales Computerprogramm behandelt werden.

Jargon: Maschinelles Lernen

Das Training von Programmen, die entwickelt werden, indem ein Computer aus seinen Erfahrungen lernt, anstatt die einzelnen Schritte manuell zu kodieren.

Was ist ein neuronales Netz?

Es ist nicht allzu schwer, sich vorzustellen, wie das Modell für ein Schachprogramm aussehen könnte. Es könnte eine Reihe von Strategien für das Damespielund eine Art Suchmechanismus geben, und die Gewichte könnten variieren, wie die Strategien ausgewählt werden, auf welche Teile des Spielbretts man sich bei der Suche konzentriert und so weiter. Aber es ist überhaupt nicht klar, wie das Modell für ein Bilderkennungsprogramm oder für das Verstehen von Text oder für viele andere interessante Probleme, die wir uns vorstellen können, aussehen könnte.

Was wir gerne hätten, ist eine Funktion, die so flexibel ist, dass man mit ihr jedes beliebige Problem lösen kann, indem man einfach die Gewichte verändert.Erstaunlicherweise gibt es diese Funktion tatsächlich! Es ist das neuronale Netz, das wir bereits besprochen haben. Wenn du ein neuronales Netz als mathematische Funktion betrachtest, stellt es sich als eine Funktion heraus, die je nach ihren Gewichten extrem flexibel ist. Ein mathematischer Beweis, das universelle Approximationstheorem, zeigt, dass diese Funktion theoretisch jedes Problem mit beliebiger Genauigkeit lösen kann. Die Tatsache, dass neuronale Netze so flexibel sind, bedeutet, dass sie in der Praxis oft ein geeignetes Modell sind und du dich auf das Training konzentrieren kannst, d.h. darauf, gute Gewichtungen zu finden.

Aber was ist mit diesem Prozess? Man könnte sich vorstellen, dass du einen neuen "Mechanismus" finden musst, um die Gewichte für jedes Problem automatisch zu aktualisieren. Das wäre sehr mühsam. Was wir auch hier wollen, ist eine ganz allgemeine Möglichkeit, die Gewichte eines neuronalen Netzes zu aktualisieren, damit es bei jeder Aufgabe besser wird. Praktischerweise gibt es auch das!

Dies wird stochastischer Gradientenabstieg (SGD) genannt. Wie neuronale Netze und SGD im Detail funktionieren, erfahren wir inKapitel 4. Dort wird auch das universelle Annäherungstheorem erklärt. Für den Moment werden wir aber lieber Samuels eigene Worte verwenden: Wir brauchen nicht ins Detail zu gehen, um zu sehen, dass ein solches Verfahren völlig automatisch ablaufen kann und dass eine so programmierte Maschine aus ihren Erfahrungen "lernt".

Jeremy Sagt

Keine Sorge, weder SGD noch neuronale Netze sind mathematisch komplex. Beide verlassen sich fast ausschließlich auf Addition und Multiplikation, um ihre Arbeit zu erledigen (aber sie machen eine Menge Addition und Multiplikation!). Die Hauptreaktion, die wir von Schülern hören, wenn sie die Details sehen, ist: "Ist das alles?"

Mit anderen Worten: Ein neuronales Netzwerk ist eine besondere Art von maschinellem Lernmodell, das genau zu Samuels ursprünglichem Konzept passt. Das Besondere an neuronalen Netzen ist, dass sie sehr flexibel sind. Das bedeutet, dass sie eine ungewöhnlich große Bandbreite an Problemen lösen können, indem sie einfach die richtigen Gewichte finden. Das ist sehr wirkungsvoll, denn der stochastische Gradientenabstieg bietet uns eine Möglichkeit, diese Gewichtungswerte automatisch zu finden.

Nachdem wir aus dem Bild herausgezoomt haben, wollen wir nun wieder hineinzoomen und unser Bildklassifizierungsproblem mithilfe von Samuels Rahmenwerk erneut betrachten.

Unsere Eingaben sind die Bilder. Unsere Gewichte sind die Gewichte indem neuronalen Netz. Unser Modell ist ein neuronales Netz. Unsere Ergebnisse sind die Werte, die vom neuronalen Netz berechnet werden, wie "Hund" oder "Katze".

Wie sieht es mit dem nächsten Teil aus, einem automatischen Mittel, mit dem wir die Effektivität der aktuellen Gewichtungszuweisung in Bezug auf die tatsächliche Leistung testen können? Die "tatsächliche Leistung" zu bestimmen, ist ganz einfach: Wir können die Leistung unseres Modells einfach als seine Genauigkeit bei der Vorhersage der richtigen Antworten definieren.

Wenn wir das alles zusammennehmen und davon ausgehen, dass die SGD unser Mechanismus für die Aktualisierung der Gewichtungen ist, sehen wir, dass unser Bildklassifizierer ein maschinelles Lernmodell ist, so wie Samuel es sich vorgestellt hat.

Ein bisschen Deep Learning-Jargon

Samuel arbeitete in den 1960er Jahren, und seitdem hat sich die Terminologie geändert. Hier ist die moderne Deep Learning-Terminologie für alle Teile, die wir besprochen haben:

  • Die funktionale Form des Modells wird als seine Architektur bezeichnet (abersei vorsichtig - manchmal wird Modell als Synonym für Architektur verwendet, was verwirrend sein kann).

  • Die Gewichte werden als Parameter bezeichnet.

  • Die Vorhersagen werden aus der unabhängigen Variable berechnet, d.h. aus den Daten ohne die Kennzeichnungen.

  • Die Ergebnisse des Modells werden als Vorhersagen bezeichnet.

  • Das Maß für die Leistung ist der Verlust.

  • Der Verlust hängt nicht nur von den Vorhersagen ab, sondern auch von den richtigenBezeichnungen (auch als Ziel oder abhängige Variable bezeichnet); z.B. "Hund" oder "Katze".

Nachdem wir diese Änderungen vorgenommen haben, sieht unser Diagramm in Abbildung 1-6wie Abbildung 1-8 aus.

Abbildung 1-8. Detaillierte Ausbildungsschleife

Grenzen des maschinellen Lernens

Anhand dieses Bildes können wir nun einige grundlegende Dinge über das Training eines Deep Learning-Modells erkennen:

  • Ein Modell kann nicht ohne Daten erstellt werden.

  • Ein Modell kann lernen, nur mit den Mustern zu arbeiten, die in den Eingabedaten zu sehen sind, mit denen es trainiert wurde.

  • Dieser Lernansatz erstellt nur Vorhersagen, aber keineHandlungsempfehlungen.

  • Es reicht nicht aus, nur Beispiele für Eingabedaten zu haben; wir brauchen auch Labels für diese Daten (z. B. reichen Bilder von Hunden und Katzen nicht aus, um ein Modell zu trainieren; wir brauchen für jedes Bild ein Label, das besagt, welche Bilder Hunde und welche Katzen sind).

Im Allgemeinen haben wir festgestellt, dass die meisten Organisationen, die sagen, sie hätten nicht genug Daten, tatsächlich meinen, dass sie nicht genug beschriftete Daten haben. Wenn eine Organisation daran interessiert ist, mit einem Modell etwas in der Praxis zu tun, dann hat sie vermutlich einige Eingaben, gegen die sie ihr Modell laufen lassen will. Und vermutlich machen sie das schon seit einiger Zeit auf andere Weise (z. B. manuell oder mit einem heuristischen Programm), so dass sie über Daten aus diesen Prozessen verfügen! In einer radiologischen Praxis gibt es zum Beispiel mit Sicherheit ein Archiv mit medizinischen Scans (denn dort muss man überprüfen können, wie sich der Zustand der Patienten im Laufe der Zeit entwickelt), aber diese Scans haben vielleicht keine strukturierten Beschriftungen mit einer Liste von Diagnosen oder Eingriffen (denn Radiologen erstellen in der Regel Freitextberichte in natürlicher Sprache und keine strukturierten Daten). Wir werden in diesem Buch viel über Beschriftungsansätze sprechen, weil das in der Praxis ein so wichtiges Thema ist.

Da diese Art von maschinellen Lernmodellen nur Vorhersagen machen können(d.h. versuchen, Kennzeichnungen zu replizieren), kann dies zu einer erheblichen Lücke zwischen den Unternehmenszielen und den Fähigkeiten des Modells führen. In diesem Buch lernst du zum Beispiel, wie du einEmpfehlungssystem erstellst, das vorhersagen kann, welche Produkte ein Nutzer kaufen könnte. Dies wirdhäufig im E-Commerce eingesetzt, z. B. um die Produkte auf der Startseite anzupassen, indem die am höchsten bewerteten Artikel angezeigt werden. Ein solches Modell wird jedoch in der Regel anhand der Kaufhistorie eines Nutzers(Inputs) und der von ihm gekauften oder angesehenenProdukte (Labels) erstellt. Das bedeutet, dass das Modell wahrscheinlich eher Produkte vorschlägt, die der Nutzer bereits besitzt oder über die er bereits Bescheid weiß, als neue Produkte, an denen er höchstwahrscheinlich interessiert sein wird. Das ist etwas ganz anderes als z. B. ein Experte in deinem Buchladen, der dir Fragen stellt, um deinen Geschmack herauszufinden, und dir dann Autoren oder Serien vorstellt, von denen du noch nie gehört hast.

Eine weitere wichtige Erkenntnis ergibt sich aus der Überlegung, wie ein Modell mit seiner Umgebung interagiert. Dadurch können Rückkopplungsschleifen entstehen, wie hier beschrieben:

  1. Es wird ein vorausschauendes Polizeimodell erstellt, das darauf basiert, wo es in der Vergangenheit zu Verhaftungen gekommen ist. In der Praxis bedeutet das nicht, dass Verbrechen vorhergesagt werden, sondern vielmehr, dass Verhaftungen vorhergesagt werden, und spiegelt daher zum Teil einfach die Verzerrungen in den bestehendenPolizeiprozessen wider.

  2. Die Vollzugsbeamten könnten dann anhand dieses Modells entscheiden, wo sie ihre Polizeiaktivitäten konzentrieren, was zu mehr Festnahmen in diesen Gebieten führen würde.

  3. Die Daten dieser zusätzlichen Verhaftungen würden dann wieder in das Modell einfließen, um zukünftige Versionen des Modells neu zu trainieren.

Dies ist eine positive Rückkopplungsschleife: Je mehr das Modell verwendet wird,desto verzerrter werden die Daten, wodurch das Modell noch verzerrter wird, und so weiter.

Rückkopplungsschleifen können auch in kommerziellen Umgebungen zu Problemen führen. Ein Videoempfehlungssystem könnte zum Beispiel dazu neigen, Inhalte zu empfehlen, die von den größten Videokonsumenten konsumiert werden (z. B. sehen Verschwörungstheoretiker und Extremisten tendenziell mehr Online-Videos als der Durchschnitt), was dazu führt, dass diese Nutzer ihren Videokonsum erhöhen, was wiederum dazu führt, dass mehr solcher Videos empfohlen werden. Wir werden dieses Thema in Kapitel 3 genauer betrachten.

Nachdem du nun die Grundlagen der Theorie kennengelernt hast, lass uns zu unserem Code-Beispiel zurückkehren und im Detail sehen, wie der Code dem Prozess entspricht, den wir gerade beschrieben haben.

Wie unser Bilderkenner funktioniert

Schauen wir uns an, wie unser Bilderkennungscode diese Ideen umsetzt. Wir fügen jede Zeile in eine eigene Zelle ein und sehen uns unter an, was jede einzelne Zeile macht (wir werden hier nicht alle Parameter im Detail erklären, sondern nur die wichtigen Teile beschreiben; alle Details werden später im Buch folgen). Die erste Zeile importiert die gesamte fastai.vision-Bibliothek:

from fastai.vision.all import *

Damit haben wir alle Funktionen und Klassen, die wir brauchen, um eine Vielzahl von Computer Vision Modellen zu erstellen.

Jeremy Sagt

Viele Python-Programmierer raten davon ab, eine ganze Bibliothek wie diese zu importieren (mit der import * Syntax), weil das in großen Softwareprojekten zu Problemen führen kann. Für die interaktive Arbeit, z. B. in einem Jupyter-Notebook, funktioniert es jedoch hervorragend. Die fastai-Bibliothek wurde speziell für diese Art der interaktiven Nutzung entwickelt und importiert nur die notwendigen Teile in deine Umgebung.

Die zweite Zeile lädt einen Standarddatensatz aus derSammlungfast.ai datasets auf deinen Server herunter, extrahiert ihn (wenn er nicht schon vorher extrahiert wurde) und gibt ein Path Objekt mit dem extrahierten Ort zurück:

path = untar_data(URLs.PETS)/'images'

Sylvain Sagt

Während meiner Studienzeit bei fast.ai und auch heute noch habe ich viel über produktive Programmierpraktiken gelernt. Die fastai-Bibliothek und die fast.ai-Notebooks sind voll mit tollen kleinen Tipps, die mich zu einem besseren Programmierer gemacht haben. Beachte zum Beispiel, dass die fastai-Bibliothek nicht einfach einen String mit dem Pfad zum Datensatz zurückgibt, sondern ein Path Objekt. Das ist eine sehr nützliche Klasse aus der Python 3-Standardbibliothek, die den Zugriff auf Dateien und Verzeichnisse erheblich vereinfacht. Wenn du sie noch nicht kennst, solltest du dir unbedingt die Dokumentation oder ein Tutorial ansehen und sie ausprobieren. Auf der Website des Buches findest du Links zu empfohlenen Tutorials für jedes Kapitel. Ich werde dich immer wieder über Tipps informieren, die ich für nützlich halte, sobald ich sie finde.

In der dritten Zeile definieren wir eine Funktion, is_cat, die Katzen auf der Grundlage einer von den Erstellern des Datensatzes vorgegebenen Dateinamensregel kennzeichnet:

def is_cat(x): return x[0].isupper()

Wir verwenden diese Funktion in der vierten Zeile, die fastai mitteilt, welche Art von Datensatz wir haben und wie er strukturiert ist:

dls = ImageDataLoaders.from_name_func(
    path, get_image_files(path), valid_pct=0.2, seed=42,
    label_func=is_cat, item_tfms=Resize(224))

Es gibt verschiedene Klassen für unterschiedliche Arten von Deep Learning-Datensätzen und -Problemen - hier verwenden wirImageDataLoaders. Der erste Teil des Klassennamens gibt in der Regel die Art der Daten an, die du hast, z. B. Bild oder Text.

Die andere wichtige Information, die wir fastai mitteilen müssen, ist, wie wir die Beschriftungen aus dem Datensatz erhalten. Bildverarbeitungsdatensätze sind in der Regel so strukturiert, dass die Beschriftung eines Bildes Teil des Dateinamens oder des Pfades ist - in der Regel der Name des übergeordneten Ordners. fastai verfügt über eine Reihe von standardisierten Beschriftungsmethoden und über Möglichkeiten, eigene zu schreiben. Hier weisen wir fastai an, die Funktion zu verwenden, die wir gerade definiert haben. is_cat

Schließlich definieren wir die Transforms, die wir brauchen. Ein Transform enthältCode, der während des Trainings automatisch angewendet wird; fastai enthält viele vordefinierte Transforms, und das Hinzufügen neuer ist so einfach wie das Erstellen einer Python-Funktion. Es gibt zwei Arten: item_tfms wird auf jedes Element angewendet (in diesem Fall wird jedes Element auf ein 224-Pixel-Quadrat verkleinert), währendbatch_tfms mit Hilfe der GPU auf einen Stapel von Elementen auf einmal angewendet wird,so dass sie besonders schnell sind (wir werden in diesem Buch viele Beispiele dafür sehen).

Warum 224 Pixel? Dies ist die Standardgröße aus historischen Gründen (alte vortrainierte Modelle benötigen genau diese Größe), aber du kannst so ziemlich alles angeben. Wenn du die Größe erhöhst, erhältst du oft ein Modell mit besseren Ergebnissen (da es sich auf mehr Details konzentrieren kann), aber auf Kosten der Geschwindigkeit und des Speicherverbrauchs; das Gegenteil ist der Fall, wenn du die Größe reduzierst.

Jargon: Klassifizierung und Regression

Klassifizierung und Regression haben beim maschinellen Lernen ganz bestimmte Bedeutungen. Das sind die beiden Haupttypen von Modellen, die wir in diesem Buch untersuchen werden. Ein Klassifizierungsmodell ist ein Modell, das versucht, eine Klasse oder Kategorie vorherzusagen. Das heißt, es macht Vorhersagen aus einer Reihe von diskreten Möglichkeiten, wie z. B. "Hund" oder "Katze". Bei einem Regressionsmodell wird versucht, eine oder mehrere numerische Größen vorherzusagen, z. B. eine Temperatur oder einen Ort. Manchmal wird das Wort Regression verwendet, um sich auf eine bestimmte Art von Modell zu beziehen, das sogenannte lineare Regressionsmodell; das ist eine schlechte Praxis, und wir werden diese Terminologie in diesem Buch nicht verwenden!

Der Pet-Datensatz enthält 7.390 Bilder von Hunden und Katzen, bestehend aus 37 Rassen. Jedes Bild ist mit seinem Dateinamen gekennzeichnet: Die Datei great_pyrenees_173.jpg ist zum Beispiel das 173. Beispiel für ein Bild eines Hundes der Rasse Great Pyrenees im Datensatz. Die Dateinamen beginnen mit einem Großbuchstaben, wenn es sich bei dem Bild um eine Katze handelt, und ansonsten mit einem Kleinbuchstaben. Wir müssen fastai mitteilen, wie wir die Bezeichnungen aus den Dateinamen erhalten. Dazu rufen wir from_name_func auf (was bedeutet, dass die Bezeichnungen mit einer Funktion extrahiert werden können, die auf den Dateinamen angewendet wird) und übergebenis_cat, was x[0].isupper() zurückgibt, das True auswertet, wenn der erste Buchstabe ein Großbuchstabe ist (d. h., es handelt sich um eine Katze).

Der wichtigste Parameter, der hier zu erwähnen ist, ist valid_pct=0.2. Er weist fastai an, 20% der Daten zurückzuhalten und sie nicht zum Trainieren des Modells zu verwenden. Diese 20% der Daten werden als Validierungsmenge bezeichnet; die restlichen 80% werden als Trainingsmenge bezeichnet. DerValidierungssatz wird verwendet, um die Genauigkeit des Modells zu messen. Standardmäßig werden die 20% der Daten nach dem Zufallsprinzip ausgewählt. Der Parameter seed=42 setzt den Zufallswert jedes Mal, wenn wir den Code ausführen, auf denselben Wert. Das bedeutet, dass wir jedes Mal, wenn wir den Code ausführen, denselben Validierungssatz erhalten.

fastai zeigt dir die Genauigkeit deines Modells immernur anhand des Validierungssatzes an, niemals anhand des Trainingssatzes. Das ist sehr wichtig, denn wenn du ein ausreichend großes Modell lange genug trainierst, wird es sich irgendwann die Beschriftung jedes Elements in deinem Datensatz merken! Das Ergebnis wird kein brauchbares Modell sein, denn was uns interessiert, ist, wie gut unser Modell bei bisher ungesehenen Bildern funktioniert. Das ist immer unser Ziel, wenn wir ein Modell erstellen: Es soll für Daten nützlich sein, die das Modell erst in der Zukunft sieht, nachdem es trainiert wurde.

Auch wenn sich dein Modell nicht alle Daten vollständig gemerkt hat, kann es sich zu einem früheren Zeitpunkt im Training bereits bestimmte Teile der Daten gemerkt haben. Je länger du trainierst, desto besser wird die Genauigkeit der Trainingsmenge. Auch die Genauigkeit der Validierungsmenge verbessert sich eine Zeit lang, aber irgendwann wird sie schlechter, weil das Modell beginnt, sich die Trainingsmenge einzuprägen, anstatt verallgemeinerbare Muster in den Daten zu finden. Wenn das passiert, sprechen wir von einer Überanpassung des Modells.

Abbildung 1-9 zeigt, was bei einer Überanpassung passiert, und zwar anhand eines vereinfachten Beispiels, bei dem wir nur einen Parameter und einige zufällig generierte Daten haben, die auf der Funktion x**2 basieren. Wie du siehst, sind die Vorhersagen des überangepassten Modells zwar für Daten in der Nähe der beobachteten Datenpunkte genau, aber außerhalb dieses Bereichs liegen sie weit daneben.

Example of overfitting
Abbildung 1-9. Beispiel für Overfitting

Die Überanpassung ist das wichtigste und schwierigste Problem beim Training für alle Praktiker des maschinellen Lernens und alle Algorithmen. Wie du sehen wirst, ist es einfach, ein Modell zu erstellen, das mit genau den Daten, auf denen es trainiert wurde, gute Vorhersagen macht. Aber es ist viel schwieriger, genaue Vorhersagen mit Daten zu treffen, die das Modell noch nie gesehen hat. Und das sind natürlich die Daten, auf die es in der Praxis ankommen wird. Wenn du zum Beispiel einen Klassifikator für handgeschriebene Ziffern entwickelst (was wir bald tun werden!) und ihn zur Erkennung von Zahlen auf Schecks einsetzt, wirst du nie eine der Zahlen sehen, auf die das Modell trainiert wurde - jeder Scheck hat eine leicht abweichende Schreibweise, mit der du umgehen musst.

In diesem Buch lernst du viele Methoden kennen, um Overfitting zu vermeiden. Du solltest diese Methoden jedoch erst anwenden, wenn du festgestellt hast, dass ein Overfitting vorliegt (d. h. wenn du beobachtet hast, dass die Validierungsgenauigkeit während des Trainings schlechter wird). Wir sehen oft, dass Praktiker/innen Techniken zur Vermeidung von Überanpassung anwenden, selbst wenn sie genug Daten haben, um dies nicht tun zu müssen, und am Ende ein Modell erhalten, das möglicherweise weniger genau ist als das, was sie hätten erreichen können.

Validierungsset

Wenn du ein Modell trainierst, musst du immer sowohl einen Trainings- als auch einen Validierungssatz haben, und du musst die Genauigkeit deines Modells nur auf dem Validierungssatz messen. Wenn du zu lange mit zu wenig Daten trainierst, wird sich die Genauigkeit deines Modells verschlechtern; das nennt man Overfitting. fastai setzt valid_pct auf 0.2, also selbst wenn du es vergisst, erstellt fastai ein Validierungsset für dich!

Die fünfte Zeile des Codes, mit dem wir unseren Bilderkenner trainieren, weist fastai an, ein Faltungsneuronales Netzwerk(CNN) zu erstellen und gibt an, welche Architektur verwendet werden soll (d.h. welche Art von Modell erstellt werden soll), mit welchen Daten wir es trainieren wollen und welche Metrik verwendet werden soll:

learn = cnn_learner(dls, resnet34, metrics=error_rate)

Warum ein CNN? Es ist der derzeit modernste Ansatz zur Erstellung von Computer-Vision-Modellen. In diesem Buch werden wir alles darüber erfahren, wie CNNs funktionieren. Ihre Struktur ist von der Funktionsweise des menschlichen Sehsystems inspiriert.

Es gibt viele Architekturen in fastai, die wir in diesem Buch vorstellen werden (und wir besprechen auch, wie du deine eigene erstellen kannst). In den meisten Fällen ist die Auswahl einer Architektur jedoch kein sehr wichtiger Teil des Deep Learning-Prozesses. Akademiker reden gerne darüber, aber in der Praxis ist es unwahrscheinlich, dass du viel Zeit darauf verwenden musst. Es gibt einige Standardarchitekturen, die in den meisten Fällen funktionieren, und in diesem Fall verwenden wir eine namens ResNet, über die wir in diesem Buch viel sprechen werden; sie ist sowohl schnell als auch genau für viele Datensätze und Probleme. Das 34 inresnet34 bezieht sich auf die Anzahl der Schichten in dieser Variante der Architektur (andere Optionen sind 18, 50, 101 und 152). Modelle, die Architekturen mit mehr Schichten verwenden, brauchen länger zum Trainieren und sind anfälliger für Overfitting (d.h. du kannst sie nicht so viele Epochen lang trainieren, bevor die Genauigkeit in der Validierungsmenge schlechter wird). Auf der anderen Seite können sie bei der Verwendung von mehr Daten sehr viel genauer sein.

Was ist eine Metrik? Eine Metrik ist eine Funktion, die die Qualität der Vorhersagen des Modells anhand der Validierungsmenge misst und am Ende jeder Epoche ausgegeben wird. In diesem Fall verwenden wir error_rate, eine Funktion von fastai, die genau das tut, was sie sagt: Sie gibt an, wie viel Prozent der Bilder in der Validierungsmenge falsch klassifiziert wurden. Eine weitere gängige Metrik für die Klassifizierung ist accuracy (einfach 1.0 - error_rate). fastai bietet noch viele weitere Funktionen, die im Laufe dieses Buches besprochen werden.

Das Konzept der Metrik erinnert dich vielleicht an den Verlust, aber es gibt einenwichtigen Unterschied. Der gesamte Zweck des Verlustes besteht darin, ein "Leistungsmaß" zu definieren, das das Trainingssystem zur automatischen Aktualisierung der Gewichte verwenden kann. Mit anderen Worten: Eine gute Wahl für den Verlust ist eine Wahl, die für den stochastischen Gradientenabstieg einfach zu verwenden ist. Eine gute Metrik ist also eine Metrik, die für dich leicht zu verstehen ist und die sich so genau wie möglich an das hält, was das Modell tun soll. Manchmal magst du entscheiden, dass die Verlustfunktion eine geeignete Metrik ist, aber das ist nicht unbedingt der Fall.

cnn_learner hat auch einen Parameter pretrained, der standardmäßig auf True steht (also wird er in diesem Fall verwendet, obwohl wir ihn nicht angegeben haben), der die Gewichte in deinem Modell auf Werte setzt, die bereits von Experten trainiert wurden, um tausend verschiedene Kategorien auf 1,3 Millionen Fotos zu erkennen (unter Verwendung des berühmten ImageNet-Datensatzes ). Ein Modell mit Gewichten, die bereits auf einem anderen Datensatz trainiert wurden, wird als Pretrain-Modell bezeichnet. Du solltest fast immer ein vortrainiertes Modell verwenden, denn es bedeutet, dass dein Modell bereits sehr leistungsfähig ist, bevor du ihm überhaupt Daten gezeigt hast. Und wie du sehen wirst, sind viele dieser Fähigkeiten in einem Deep-Learning-Modell Dinge, die du brauchst, fast unabhängig von den Details deines Projekts. Zum Beispiel beherrschen Teile der vortrainierten Modelle die Erkennung von Kanten, Farbverläufen und Farben, die für viele Aufgaben benötigt werden.

Wenn du ein vortrainiertes Modell verwendest, entfernt cnn_learner die letzte Schicht , da diese immer speziell auf die ursprüngliche Trainingsaufgabe (d. h. die Klassifizierung des ImageNet-Datensatzes) zugeschnitten ist, und ersetzt sie durch eine oder mehrere neue Schichten mit zufälligen Gewichten, die für den Datensatz, mit dem du arbeitest, geeignet sind. Dieser letzte Teil des Modells wird als " Kopf" bezeichnet.

Die Verwendung von vortrainierten Modellen ist die wichtigste Methode, die wir haben, um genauere Modelle zu trainieren, schneller, mit weniger Daten und weniger Zeit und Geld. Man könnte meinen, dass die Verwendung von vortrainierten Modellen der am meisten untersuchte Bereich im akademischen Deep Learning ist... aber da liegst du ganz, ganz falsch! Die Bedeutung von vortrainierten Modellen wird in den meisten Kursen, Büchern oder Softwarebibliotheken nicht erkannt oder diskutiert und auch in akademischen Abhandlungen wird sie nur selten berücksichtigt. Während wir dies Anfang 2020 schreiben, beginnt sich das gerade zu ändern, aber das wird wohl noch eine Weile dauern. Sei also vorsichtig: Die meisten Leute, mit denen du sprichst, werden wahrscheinlich stark unterschätzen, was du mit Deep Learning mit wenigen Mitteln erreichen kannst, weil sie wahrscheinlich nicht genau wissen, wie man vortrainierte Modelle verwendet.

Die Verwendung eines vorab trainierten Modells für eine andere Aufgabe als die, für die es ursprünglich trainiert wurde, wird als Transferlernen bezeichnet. Da das Transfer-Lernen so wenig erforscht ist, gibt es leider nur wenige Bereiche, für die bereits trainierte Modelle zur Verfügung stehen. Zum Beispiel gibt es in der Medizin nur wenige trainierte Modelle, so dass Transferlernen in diesem Bereich nur schwer eingesetzt werden kann. Außerdem weiß man noch nicht genau, wie man Transferlernen für Aufgaben wie die Zeitreihenanalyse einsetzen kann.

Jargon: Transfer Learning

Verwendung eines trainierten Modells für eine andere Aufgabe als die, für die es ursprünglich trainiert wurde.

Die sechste Zeile unseres Codes teilt fastai mit, wie das Modell angepasst werden soll:

learn.fine_tune(1)

Wie wir bereits besprochen haben, beschreibt die Architektur nur eine Vorlage für eine mathematische Funktion; sie tut nichts, bis wir Werte für die Millionen von Parametern angeben, die sie enthält.

Das ist der Schlüssel zum Deep Learning - die Bestimmung der Parameter eines Modells , damit es dein Problem löst. Um ein Modell anzupassen, müssen wir mindestens eine Information bereitstellen: wie oft jedes Bild betrachtet werden soll (bekannt als Anzahl der Epochen). Die Anzahl der Epochen, die du auswählst, hängt vor allem davon ab, wie viel Zeit du zur Verfügung hast und wie lange du in der Praxis brauchst, um dein Modell anzupassen. Wenn du eine zu geringe Anzahl wählst, kannst du später immer noch für mehr Epochen trainieren.

Aber warum heißt die Methode fine_tune und nicht fit? fastaihat eine Methode namens fit, , die in der Tat ein Modell anpasst (d.h. die Bilder in der Trainingsmenge mehrmals betrachtet und jedes Mal die Parameter aktualisiert, um die Vorhersagen immer näher an die Zielbezeichnungen zu bringen). Aber in diesem Fall haben wir mit einem trainierten Modell begonnen, und wir wollen nicht alle Fähigkeiten, die es bereits hat, wegwerfen. Wie du in diesem Buch lernen wirst, gibt es einige wichtige Tricks, um ein trainiertes Modell an einen neuen Datensatz anzupassen - ein Prozess, der Feinabstimmung genannt wird.

Jargon: Feinschliff

Ein Transfer-Lernverfahren, bei dem die Parameter eines vortrainierten Modells aktualisiert werden, indem zusätzliche Epochen mit einer anderen Aufgabe als der für das Vortraining verwendeten trainiert werden.

Wenn du die Methode fine_tune verwendest, nutzt fastai diese Tricks für. Es gibt ein paar Parameter, die du einstellen kannst (die wir später besprechen), aber in der hier gezeigten Standardform führt es zwei Schritte aus:

  1. Nutze eine Epoche, um nur die Teile des Modells anzupassen, die notwendig sind, damit der neue Zufallskopf korrekt mit deinem Datensatz funktioniert.

  2. Verwende die beim Aufruf der Methode angeforderte Anzahl von Epochen, um das gesamte Modell anzupassen. Dabei werden die Gewichte der späteren Schichten (insbesondere des Kopfes) schneller aktualisiert als die der früheren Schichten (die, wie wir sehen werden, im Allgemeinen nicht viele Änderungen gegenüber den vorher trainierten Gewichten benötigen).

Der Kopf eines Modells ist der Teil, der neu hinzugefügt wird, um spezifisch fürden neuen Datensatz zu sein. Eine Epoche ist ein kompletter Durchlauf durch den Datensatz.Nach dem Aufruf von fit werden die Ergebnisse nach jeder Epoche ausgedruckt. Dabei werden die Epochennummer, die Verluste im Trainings- und Validierungsset (das "Leistungsmaß", das für das Training des Modells verwendet wird) und die von dir angeforderten Kennzahlen(in diesem Fall die Fehlerrate) angezeigt.

Mit all diesem Code hat unser Modell also gelernt, Katzen und Hunde zu erkennen, indem es einfach aus gelabelten Beispielen ausgewählt hat. Aber wie hat es das gemacht?

Was unser Bilderkenner gelernt hat

In diesem Stadium haben wir einen Bilderkenner, der gut funktioniert, aber wir haben keine Ahnung, was er tut! Obwohl sich viele Menschen darüber beschweren, dass Deep Learning zu undurchschaubaren "Black Box"-Modellen führt (d. h. zu etwas, das zwar Vorhersagen macht, aber niemand verstehen kann), könnte das nicht weiter von der Wahrheit entfernt sein. Es gibt eine Vielzahl von Forschungsergebnissen, die zeigen, wie man Deep-Learning-Modelle genau unter die Lupe nehmen und daraus wertvolle Erkenntnisse gewinnen kann. Allerdings ist es bei allen Arten von maschinellen Lernmodellen (einschließlich Deep Learning und traditionellen statistischen Modellen) schwierig, sie vollständig zu verstehen, vor allem wenn man bedenkt, wie sie sich verhalten, wenn sie auf Daten treffen, die sich stark von den Daten unterscheiden, mit denen sie trainiert wurden. Wir werden dieses Thema im Laufe dieses Buches diskutieren.

2013 veröffentlichten der Doktorand Matt Zeiler und sein Betreuer Rob Fergus die Publikation "Visualizing and Understanding Convolutional Networks", , in der sie zeigten, wie man die in den einzelnen Schichten eines Modells erlernten Gewichte des neuronalen Netzes visualisieren kann. Sie analysierten das Modell, das den ImageNet-Wettbewerb 2012 gewonnen hatte, sorgfältig und nutzten diese Analyse, um das Modell so zu verbessern, dass sie auch den Wettbewerb 2013 gewinnen konnten! Abbildung 1-10 zeigt das Bild, das sie von den Gewichten der ersten Schicht veröffentlicht haben.

Activations of early layers of a CNN
Abbildung 1-10. Aktivierungen der ersten Schicht eines CNN (mit freundlicher Genehmigung von Matthew D. Zeiler und Rob Fergus)

Dieses Bild bedarf einiger Erklärungen. Für jede Schicht zeigt der Bildteil mit dem hellgrauen Hintergrund die rekonstruierten Gewichte, und der größere Abschnitt unten zeigt die Teile der Trainingsbilder, die am stärksten mit jedem Satz von Gewichten übereinstimmen. Für Schicht 1 können wir sehen, dass das Modell Gewichte entdeckt hat, die diagonale, horizontale und vertikale Kanten sowie verschiedene Farbverläufe darstellen. (Beachte, dass für jede Schicht nur eine Teilmenge der Merkmale gezeigt wird; in der Praxis gibt es Tausende von Merkmalen in allen Schichten).

Dies sind die grundlegenden Bausteine, die das Modell für das Computersehen gelernt hat. Sie wurden von Neurowissenschaftlern und Computervision-Forschern eingehend analysiert, und es hat sich herausgestellt, dass diese erlernten Bausteine der grundlegenden visuellen Maschinerie des menschlichen Auges sehr ähnlich sind, ebenso wie die handwerklichen Computervision-Merkmale, die vor den Tagen des Deep Learning entwickelt wurden. Die nächste Ebene ist inAbbildung 1-11 dargestellt.

Activations of early layers of a CNN
Abbildung 1-11. Aktivierungen der zweiten Schicht eines CNN (mit freundlicher Genehmigung von Matthew D. Zeiler und Rob Fergus)

Für Schicht 2 gibt es neun Beispiele für Gewichtsrekonstruktionen für jedes der vom Modell gefundenen Merkmale. Wir können sehen, dass das Modell gelernt hat, Merkmalsdetektoren zu erstellen, die nach Ecken, sich wiederholenden Linien, Kreisen und anderen einfachen Mustern suchen. Diese werden aus den in der ersten Schicht entwickelten Grundbausteinen erstellt. Für jedes dieser Merkmale zeigt die rechte Seite des Bildes kleine Ausschnitte aus aktuellen Bildern, denen diese Merkmale am ehesten entsprechen. Das besondere Muster in Zeile 2, Spalte 1 entspricht zum Beispiel den Farbverläufen und Texturen von Sonnenuntergängen.

Abbildung 1-12 zeigt das Bild aus dem Papier, das die Ergebnisse der Rekonstruktion der Merkmale von Schicht 3 zeigt.

Activations of medium layers of a CNN
Abbildung 1-12. Aktivierungen der dritten Schicht eines CNN (mit freundlicher Genehmigung von Matthew D. Zeiler und Rob Fergus)

Wie du auf der rechten Seite des Bildes sehen kannst, sind die Merkmale nun in der Lage, semantische Komponenten auf höherer Ebene zu identifizieren und zuzuordnen, z. B. Autoreifen, Text und Blumenblätter. Mithilfe dieser Komponenten können die Ebenen 4 und 5 sogar noch höherwertige Konzepte identifizieren, wie in Abbildung 1-13 dargestellt.

Activations of end layers of a CNN
Abbildung 1-13. Aktivierungen der vierten und fünften Schicht eines CNN (mit freundlicher Genehmigung von Matthew D. Zeiler und Rob Fergus)

In diesem Artikel wurde ein älteres Modell namens AlexNet untersucht, das nur fünf Schichten enthielt. Netzwerke, die seitdem entwickelt wurden, können Hunderte von Schichten haben - du kannst dir also vorstellen, wie reichhaltig die von diesen Modellen entwickelten Funktionen sein können!

Bei der Feinabstimmung unseres vortrainierten Modells haben wir den Fokus der letzten Schichten (Blumen, Menschen, Tiere) angepasst, um uns auf das Problem Katzen gegen Hunde zu spezialisieren. Allgemeiner ausgedrückt: Wir könnten ein solches Modell auf viele verschiedene Aufgaben spezialisieren. Schauen wir uns einige Beispiele an.

Bilderkennungssysteme können auch Aufgaben übernehmen, die nichts mit Bildern zu tun haben

Ein Bilderkenner kann, wie sein Name schon sagt, nur Bilder erkennen. Aber viele Dinge können als Bilder dargestellt werden, was bedeutet, dass ein Bilderkenner lernen kann, viele Aufgaben zu erledigen.

Ein Geräusch kann zum Beispiel in ein Spektrogramm umgewandelt werden, einDiagramm, das den Anteil jeder Frequenz zu jeder Zeit in einer Audiodatei anzeigt. Der Fast.ai-Student Ethan Sutin hat mit diesem Ansatzdie veröffentlichte Genauigkeit eines hochmodernen Modells zur Erkennung von Umweltgeräuschenmit einem Datensatz von 8.732 Stadtgeräuschenleicht übertroffen. fastai's show_batch zeigt deutlich, dass jedes Geräusch ein ganz eigenes Spektrogramm hat, wie du inAbbildung 1-14 sehen kannst.

show_batch with spectrograms of sounds
Abbildung 1-14. show_batch mit Spektrogrammen von Geräuschen

Eine Zeitreihe kann leicht in ein Bild umgewandelt werden, indem du dieZeitreihe einfach in ein Diagramm einträgst. Es ist jedoch oft eine gute Idee, deine Daten so darzustellen, dass du die wichtigsten Komponenten möglichst einfach herausziehen kannst. Bei einer Zeitreihe sind Dinge wie Saisonalität und Anomalien am ehesten von Interesse.

Für Zeitreihendaten gibt es verschiedene Transformationen. Der fast.ai-Student Ignacio Oguiza hat zum Beispiel Bilder aus einem Zeitreihendatensatz für die Klassifizierung von Olivenöl mit einer Technik namens Gramian Angular Difference Field (GADF) erstellt;. Das Ergebnis siehst du in Abbildung 1-15. Anschließend hat er diese Bilder mit einem Bildklassifizierungsmodell gefüttert, wie du es in diesem Kapitel siehst. Obwohl er nur 30 Trainingsbilder zur Verfügung hatte, lag die Genauigkeit seiner Ergebnisse bei über 90 % und damit nahe am aktuellen Stand der Technik.

Converting a time series into an image
Abbildung 1-15. Umwandlung einer Zeitreihe in ein Bild

Ein weiteres interessantes Beispiel für ein fast.ai-Studentenprojekt stammt von Gleb Esman. Er arbeitete an der Erkennung von Betrug bei Splunk, anhand eines Datensatzes von Mausbewegungen und -klicks der Nutzer. Er verwandelte diese in Bilder, indem er ein Bild zeichnete, das die Position, Geschwindigkeit und Beschleunigung des Mauszeigers mit farbigen Linien anzeigte, und die Klicks wurden mitkleinen farbigen Kreisen dargestellt, wie in Abbildung 1-16 gezeigt. Er fütterte damit ein Bilderkennungsmodell, wie wir es in diesem Kapitel verwendet haben, und es funktionierte so gut, dass es zu einem Patent für diesen Ansatz zur Betrugsanalyse führte!

Converting computer mouse behavior to an image
Abbildung 1-16. Das Verhalten der Computermaus in ein Bild umwandeln

Ein weiteres Beispiel stammt aus dem Artikel"Malware Classification with Deep Convolutional Neural Networks" von Mahmoud Kalash et al. , in dem erklärt wird, dass "die Malware-Binärdatei in 8-Bit-Sequenzen unterteilt wird, die dann in entsprechende Dezimalwerte umgewandelt werden. Dieser dezimale Vektor wird umgeformt und [ein] Graustufenbild erzeugt, das das Malware-Muster darstellt" ( Abbildung 1-17).

Malware classification process
Abbildung 1-17. Prozess der Malware-Klassifizierung

Die Autoren zeigen dann "Bilder", die durch diesen Prozess von Malware in verschiedenen Kategorien entstanden sind, wie in Abbildung 1-18 dargestellt.

Malware examples
Abbildung 1-18. Malware-Beispiele

Wie du sehen kannst, sehen die verschiedenen Arten von Malware für das menschliche Auge sehr unterschiedlich aus. Das Modell, das die Forscherinnen und Forscher auf der Grundlage dieser Bilddarstellung trainiert haben, war bei der Klassifizierung von Schadsoftware genauer als alle bisherigen Ansätze in der wissenschaftlichen Literatur. Daraus lässt sich eine gute Faustregel für die Umwandlung eines Datensatzes in eine Bilddarstellung ableiten: Wenn das menschliche Auge Kategorien aus den Bildern erkennen kann, sollte ein Deep-Learning-Modell dazu ebenfalls in der Lage sein.

Im Allgemeinen wirst du feststellen, dass eine kleine Anzahl von allgemeinen Ansätzen beim Deep Learning sehr weit gehen kann, wenn du bei der Darstellung deiner Daten ein bisschen kreativ bist! Du solltest Ansätze wie die hier beschriebenen nicht als "hacky workarounds" betrachten, denn sie übertreffen oft (wie hier) den Stand der Technik. Das sind wirklich die richtigen Wege, um über diese Problembereiche nachzudenken.

Jargon Rekapitulation

Wir haben gerade eine Menge Informationen behandelt, also lass uns kurz rekapitulieren.Tabelle 1-3 enthält eine praktische Vokabelliste.

Tabelle 1-3. Deep Learning-Vokabular
Begriff Bedeutung

Etikett

Die Daten, die wir vorhersagen wollen, wie z. B. "Hund" oder "Katze"

Architektur

Die Vorlage des Modells, das wir anpassen wollen, d.h. die eigentliche mathematische Funktion, der wir die Eingabedaten und Parameter übergeben

Modell

Die Kombination der Architektur mit einem bestimmten Satz von Parametern

Parameter

Die Werte im Modell, die verändern, welche Aufgabe es erledigen kann und die durch das Modelltraining aktualisiert werden

Fit

Aktualisiere die Parameter des Modells so, dass die Vorhersagen des Modells unter Verwendung der Eingabedaten mit den Zielkennzeichnungen übereinstimmen

Zug

Ein Synonym für fit

Vortrainiertes Modell

Ein Modell, das bereits trainiert wurde, in der Regel auf der Grundlage eines großen Datensatzes, und das dann fein abgestimmt wird

Feinabstimmung

Aktualisiere ein vorab trainiertes Modell für eine andere Aufgabe

Epoche

Ein vollständiger Durchlauf durch die Eingabedaten

Verlust

Ein Maß dafür, wie gut das Modell ist, das für die Ausbildung über SGD ausgewählt wird.

Metrisch

Ein Maß dafür, wie gut das Modell unter Verwendung der für den menschlichen Verzehr ausgewählten Validierungsmenge ist

Validierungssatz

Eine Reihe von Daten, die aus dem Training herausgehalten werden und nur dazu dienen, zu messen, wie gut das Modell ist.

Trainingsset

Die Daten, die für die Anpassung des Modells verwendet werden; enthält keine Daten aus dem Validierungssatz

Überanpassung

Ein Modell so zu trainieren, dass es sich an bestimmte Merkmale der Eingabedaten erinnert, anstatt es auf Daten zu verallgemeinern, die beim Training nicht berücksichtigt wurden

CNN

Neuronales Faltungsnetzwerk; eine Art von neuronalem Netzwerk, das besonders gut für Computer Vision Aufgaben geeignet ist

Mit diesem Vokabular sind wir nun in der Lage, alle bisher eingeführten Schlüsselbegriffe zusammenzufassen. Nimm dir einen Moment Zeit, um die Definitionen zu überprüfen und die folgende Zusammenfassung zu lesen. Wenn du den Erklärungen folgen kannst, bist du gut gerüstet, um die kommenden Diskussionen zu verstehen.

Maschinelles Lernen ist eine Disziplin, in der wir ein Programm nicht selbst schreiben, sondern aus Daten lernen. Deep Learning ist ein Spezialgebiet des maschinellen Lernens, das neuronale Netze mit mehreren Schichten verwendet. Ein repräsentatives Beispiel ist die Bildklassifizierung (auch bekannt als Bilderkennung). Wir beginnen mit beschrifteten Daten - einerReihe von Bildern, denen wir einEtikett zugewiesen haben, das angibt, was sie darstellen. Unser Ziel ist es, ein Programm, ein sogenanntes Modell, zu erstellen, das bei einem neuen Bild eine genaue Vorhersage darüber trifft, was dieses neue Bild darstellt.

Jedes Modell beginnt mit der Wahl einer Architektur, einer allgemeinen Vorlage dafür, wie das Modell intern funktioniert. Beim Trainieren(oder Anpassen) des Modells geht es darum, eine Reihe von Parameterwerten (oder Gewichten) zu finden, die diese allgemeine Architektur in ein Modell verwandeln, das für unsere spezielle Art von Daten gut funktioniert. Um zu bestimmen, wie gut ein Modell bei einer einzelnen Vorhersage funktioniert, müssen wir eineVerlustfunktion definieren, die festlegt, wie wir eine Vorhersage als gut oder schlecht bewerten.

Um den Trainingsprozess zu beschleunigen, können wir mit einemvortrainierten Modellbeginnen- einemModell, das bereits mit den Daten eines anderen Unternehmens trainiert wurde. Wir können es dann an unsere Daten anpassen, indem wir es mit unseren Daten weiter trainieren - ein Prozess, der als Feintuning bezeichnet wird.

Wenn wir ein Modell trainieren, müssen wir vor allem dafür sorgen, dass unser Modellverallgemeinert: Es lernt allgemeine Lektionen aus unseren Daten, die auch für neue Objekte gelten, auf die es stößt, damit es für diese Objekte gute Vorhersagen machen kann. Wenn wir unser Modell schlecht trainieren, besteht die Gefahr, dass es sich, anstatt allgemeine Lektionen zu lernen, nur das merkt, was es bereits gesehen hat, und dann schlechte Vorhersagen über neue Bilder macht. Ein solcher Fehler wird als Overfitting bezeichnet.

Um dies zu vermeiden, teilen wir unsere Daten immer in zwei Teile auf: die Trainingsmenge und dieValidierungsmenge. Wir trainieren das Modell, indem wir ihm nur die Trainingsmenge zeigen, und bewerten dann, wie gut das Modell bei den Elementen der Validierungsmenge abschneidet. Auf diese Weise überprüfen wir, ob die Lektionen, die das Modell aus der Trainingsmenge lernt, auch auf die Validierungsmenge übertragbar sind. Damit eine Person beurteilen kann, wie gut das Modell in der Validierungsmenge insgesamt abschneidet, definieren wir eineMetrik. Wenn das Modell während des Trainingsprozesses jedes Element der Trainingsmenge gesehen hat, nennen wir das eine Epoche.

All diese Konzepte gelten für maschinelles Lernen im Allgemeinen. Sie gelten für alle Arten von Schemata zur Definition eines Modells durch Training mit Daten. Was Deep Learning so besonders macht, ist eine bestimmte Klasse von Architekturen: die Architekturen, die auf neuronalen Netzen basieren. Vor allem bei Aufgaben wie der Bildklassifizierung kommenFaltungsnetzwerke zum Einsatz, auf die wir gleich noch eingehen werden.

Deep Learning ist nicht nur für die Bildklassifizierung geeignet

In den letzten Jahren wurde viel über die Effektivität von Deep Learning bei der Klassifizierung von Bildern diskutiert. Bei komplexen Aufgaben wie der Erkennung von bösartigen Tumoren in CT-Scans wurden sogar übermenschlicheErgebnisse erzielt. Aber es kann noch viel mehr, wie wir hier zeigen werden.

Sprechen wir zum Beispiel über etwas, das für autonome Fahrzeuge von entscheidender Bedeutung ist: die Lokalisierung von Objekten in einem Bild. Wenn ein selbstfahrendes Auto nicht weiß, wo ein Fußgänger ist, weiß es auch nicht, wie es ihm ausweichen soll! Ein Modell zu erstellen, das den Inhalt jedes einzelnen Pixels in einem Bild erkennen kann, nennt manSegmentierung. Hier siehst du, wie wir ein Segmentierungsmodell mit fastai trainieren können, indem wir eine Teilmenge des CamVid-Datensatzes aus dem Artikel"Semantic Object Classes in Video: A High-Definition Ground Truth Database" von Gabriel J. Brostow et al:

path = untar_data(URLs.CAMVID_TINY)
dls = SegmentationDataLoaders.from_label_func(
    path, bs=8, fnames = get_image_files(path/"images"),
    label_func = lambda o: path/'labels'/f'{o.stem}_P{o.suffix}',
    codes = np.loadtxt(path/'codes.txt', dtype=str)
)

learn = unet_learner(dls, resnet34)
learn.fine_tune(8)
Epoche train_loss gültig_verlust Zeit
0 2.906601 2.347491 00:02
Epoche train_loss gültig_verlust Zeit
0 1.988776 1.765969 00:02
1 1.703356 1.265247 00:02
2 1.591550 1.309860 00:02
3 1.459745 1.102660 00:02
4 1.324229 0.948472 00:02
5 1.205859 0.894631 00:02
6 1.102528 0.809563 00:02
7 1.020853 0.805135 00:02

Wir werden diesen Code nicht einmal Zeile für Zeile durchgehen, denn er ist fast identisch mit unserem vorherigen Beispiel! (Wir werden uns inKapitel 15 eingehend mit Segmentierungsmodellen befassen, zusammen mit all den anderen Modellen, die wir in diesem Kapitel kurz vorstellen, und vielen, vielen weiteren).

Wir können uns ein Bild davon machen, wie gut es seine Aufgabe erfüllt hat, indem wir das Modell bitten, jedes Pixel eines Bildes farblich zu kodieren. Wie du sehen kannst, klassifiziert es jedes Pixel in jedem Objekt nahezu perfekt. Du kannst zum Beispiel sehen, dass alle Autos mit der gleichen Farbe überlagert sind und alle Bäume mit der gleichen Farbe überlagert sind (in jedem Bildpaar ist das linke Bild die Grundwahrheit und das rechte die Vorhersage des Modells):

learn.show_results(max_n=6, figsize=(7,8))

Ein weiterer Bereich, in dem sich Deep Learning in den letzten Jahren dramatisch verbessert hat, ist die natürliche Sprachverarbeitung (NLP). Computer können jetzt Texte generieren, automatisch von einer Sprache in eine andere übersetzen, Kommentare analysieren, Wörter in Sätzen markieren und vieles mehr. Hier findest du den gesamten Code, den du brauchst, um ein Modell zu trainieren, das die Stimmung in einer Filmkritik besser einordnen kann als alles, was es vor fünf Jahren auf der Welt gab:

from fastai.text.all import *

dls = TextDataLoaders.from_folder(untar_data(URLs.IMDB), valid='test')
learn = text_classifier_learner(dls, AWD_LSTM, drop_mult=0.5, metrics=accuracy)
learn.fine_tune(4, 1e-2)
Epoche train_loss gültig_verlust Genauigkeit Zeit
0 0.594912 0.407416 0.823640 01:35
Epoche train_loss gültig_verlust Genauigkeit Zeit
0 0.268259 0.316242 0.876000 03:03
1 0.184861 0.246242 0.898080 03:10
2 0.136392 0.220086 0.918200 03:16
3 0.106423 0.191092 0.931360 03:15

Dieses Modell verwendet den IMDb Large Movie Review Dataset aus "Learning Word Vectors for Sentiment Analysis" von Andrew Maas et al. Es funktioniert gut mit Filmkritiken, die viele tausend Wörter umfassen, aber wir wollen es an einer kurzen Filmkritik testen, um zu sehen, wie es funktioniert:

learn.predict("I really liked that movie!")
('pos', tensor(1), tensor([0.0041, 0.9959]))

Hier sehen wir, dass das Modell die Rezension als positiv eingestuft hat. Der zweite Teil des Ergebnisses ist der Index von "pos" in unserem Datenvokabular und der letzte Teil sind die Wahrscheinlichkeiten, die den einzelnen Klassen zugeordnet werden (99,6% für "pos" und 0,4% für "neg").

Jetzt bist du dran! Schreibe deine eigene Mini-Filmkritik oder kopiere eine aus dem Internet, und du kannst sehen, was dieses Modell darüber denkt.

docWenn du jemals Fragen zu einer fastai-Methode hast, solltest du die Funktion verwenden und ihr den Methodennamen übergeben:

doc(learn.predict)

Es öffnet sich ein Fenster mit einer kurzen einzeiligen Erklärung. Der Link "Show in docs" führt dich zur vollständigen Dokumentation, in der du alle Details und viele Beispiele findest. Aufsind die meisten fastai-Methoden nur eine Handvoll Zeilen lang. Du kannst also auf den Link "Quelle" klicken, um genau zu sehen, was hinter den Kulissen passiert.

Kommen wir nun zu etwas, das weit weniger sexy ist, aber vielleicht einen deutlich größeren kommerziellen Nutzen hat: die Erstellung von Modellen aus einfachen Tabellendaten.

Jargon: Tabellarisch

Daten, die in Form einer Tabelle vorliegen, z. B. aus einer Tabellenkalkulation, einer Datenbank oder einer CSV-Datei (Comma-Separated Values). Ein Tabellenmodell ist ein Modell, das versucht, eine Spalte einer Tabelle auf der Grundlage von Informationen in anderen Spalten der Tabelle vorherzusagen.

Es stellt sich heraus, dass auch das sehr ähnlich aussieht. Hier ist der Code, der nötig ist, um ein Modell zu trainieren, das anhand des sozioökonomischen Hintergrunds einer Person vorhersagt, ob sie zu den Besserverdienenden gehört:

from fastai.tabular.all import *
path = untar_data(URLs.ADULT_SAMPLE)

dls = TabularDataLoaders.from_csv(path/'adult.csv', path=path, y_names="salary",
    cat_names = ['workclass', 'education', 'marital-status', 'occupation',
                 'relationship', 'race'],
    cont_names = ['age', 'fnlwgt', 'education-num'],
    procs = [Categorify, FillMissing, Normalize])

learn = tabular_learner(dls, metrics=accuracy)

Wie du siehst, mussten wir fastai mitteilen, welche Spalten kategorisch sind (sie enthalten Werte, die zu einer diskreten Gruppe von Auswahlmöglichkeiten gehören, wie occupation) und welche kontinuierlich sind (sie enthalten eine Zahl, die eine Menge darstellt, wie age).

Für diese Aufgabe gibt es kein vortrainiertes Modell (generell sind vortrainierte Modelle für tabellarische Modellierungsaufgaben nicht weit verbreitet, obwohl einige Organisationen sie für den internen Gebrauch erstellt haben),daher verwenden wir in diesem Fall nicht fine_tune. Stattdessen verwenden wirfit_one_cycle, die am häufigsten verwendete Methode, um fastai-Modelle von Grund auf zu trainieren (d. h. ohne Transferlernen):

learn.fit_one_cycle(3)
Epoche train_loss gültig_verlust Genauigkeit Zeit
0 0.359960 0.357917 0.831388 00:11
1 0.353458 0.349657 0.837991 00:10
2 0.338368 0.346997 0.843213 00:10

Dieses Modell verwendet den Erwachsenendatensatz aus dem Artikel"Scaling Up the Accuracy of Naive-Bayes Classifiers: a Decision-Tree Hybrid" von Ron Kohavi, der einige demografische Daten über Personen enthält (z. B. Bildung, Familienstand, Ethnie, Geschlecht und ob sie ein Jahreseinkommen von mehr als 50.000 US-Dollar haben). Das Modell ist über 80 % genau und brauchte etwa 30 Sekunden zum Trainieren.

Schauen wir uns eine weitere an. Empfehlungssysteme sind wichtig, vor allem im E-Commerce. Unternehmen wie Amazon und Netflix bemühen sich, Produkte oder Filme zu empfehlen, die den Nutzern gefallen könnten. Hier wird ein Modell trainiert, das anhand der bisherigen Sehgewohnheiten der Nutzer/innen vorhersagt, welche Filme ihnen gefallen könnten. Dazu wird der MovieLens-Datensatz verwendet:

from fastai.collab import *
path = untar_data(URLs.ML_SAMPLE)
dls = CollabDataLoaders.from_csv(path/'ratings.csv')
learn = collab_learner(dls, y_range=(0.5,5.5))
learn.fine_tune(10)
Epoche train_loss gültig_verlust Zeit
0 1.554056 1.428071 00:01
Epoche train_loss gültig_verlust Zeit
0 1.393103 1.361342 00:01
1 1.297930 1.159169 00:00
2 1.052705 0.827934 00:01
3 0.810124 0.668735 00:01
4 0.711552 0.627836 00:01
5 0.657402 0.611715 00:01
6 0.633079 0.605733 00:01
7 0.622399 0.602674 00:01
8 0.629075 0.601671 00:00
9 0.619955 0.601550 00:01

Dieses Modell sagt die Filmbewertungen auf einer Skala von 0,5 bis 5,0 mit einer durchschnittlichen Fehlerquote von 0,6 voraus. Da wir eine kontinuierliche Zahl und keine Kategorie vorhersagen wollen, müssen wir fastai mit dem Parameter y_range mitteilen, welchen Bereich unser Ziel hat.

Obwohl wir eigentlich kein vorgefertigtes Modell verwenden (aus demselben Grund wie beim Tabellenmodell), zeigt dieses Beispiel, dass fastai uns in diesem Fall trotzdem fine_tune verwenden lässt (wie und warum das funktioniert, erfährst du inKapitel 5). Manchmal ist es am besten, mit fine_tune und fit_one_cycle zu experimentieren, um zu sehen, was für deinen Datensatz am besten funktioniert.

Wir können denselben Aufruf von show_results verwenden, den wir bereits gesehen haben, um ein paar Beispiele für Nutzer- und Film-IDs, aktuelle Bewertungen und Vorhersagen zu sehen:

learn.show_results()
userId movieId Bewertung rating_pred
0 157 1200 4.0 3.558502
1 23 344 2.0 2.700709
2 19 1221 5.0 4.390801
3 430 592 3.5 3.944848
4 547 858 4.0 4.076881
5 292 39 4.5 3.753513
6 529 1265 4.0 3.349463
7 19 231 3.0 2.881087
8 475 4963 4.0 4.023387
9 130 260 4.5 3.979703

Jedes der von uns trainierten Modelle wies einen Trainings- und einen Validierungsverlust auf. Ein guter Validierungssatz ist einer der wichtigsten Bestandteile des Trainingsprozesses. Wir sehen uns an, warum das so ist, und lernen, wie man ein solches Set erstellt.

Validierungssets und Testsets

Wie wir bereits besprochen haben, besteht das Ziel eines Modells darin, Vorhersagen über Daten zu treffen. Aber der Prozess der Modellschulung ist im Grunde genommen dumm. Wenn wir ein Modell mit all unseren Daten trainieren und es dann mit denselben Daten bewerten würden, könnten wir nicht sagen, wie gut unser Modell bei Daten funktioniert, die es noch nicht gesehen hat. Ohne diese wertvolle Information, an der wir uns beim Training unseres Modells orientieren können, ist die Wahrscheinlichkeit groß, dass es zwar gute Vorhersagen für diese Daten macht, aber bei neuen Daten schlecht abschneidet.

Um dies zu vermeiden, haben wir unseren Datensatz zunächst in zwei Gruppen aufgeteilt: die Trainingsgruppe (die unser Modell beim Training sieht) und die Validierungsgruppe, auch bekannt als Entwicklungsgruppe(die nur für die Auswertung verwendet wird). So können wir testen, ob das Modell aus den Trainingsdaten Lektionen lernt, die sich auf neue Daten, die Validierungsdaten, übertragen lassen.

Eine Möglichkeit, diese Situation zu verstehen, ist, dass wir nicht wollen, dass unser Modell gute Ergebnisse erzielt, indem es "schummelt". Wenn es eine genaue Vorhersage für ein Datenelement trifft, sollte dies darauf zurückzuführen sein, dass es die Merkmale dieser Art von Daten gelernt hat, und nicht darauf, dass das Modell durch das tatsächliche Sehen dieses bestimmten Elements geformt wurde.

Das Abspalten unserer Validierungsdaten bedeutet, dass unser Modell diese Daten beim Training nie zu Gesicht bekommt und somit in keiner Weise davon beeinflusst wird. Richtig?

In der Tat nicht unbedingt. Die Situation ist viel subtiler. Das liegt daran, dass wir in realistischen Szenarien selten ein Modell erstellen, indem wir seine Parameter nur einmal trainieren. Stattdessen werden wir wahrscheinlich viele Versionen eines Modells erforschen, indem wir verschiedene Modellierungsentscheidungen in Bezug auf die Netzwerkarchitektur, Lernraten, Strategien zur Datenerweiterung und andere Faktoren treffen, die wir in den nächsten Kapiteln besprechen werden. Viele dieser Entscheidungen können als Wahl der Hyperparameter bezeichnet werden. Das Wort spiegelt wider, dasses sich um Parameter über Parameter handelt, da sie die übergeordneten Entscheidungen sind, die die Bedeutung der Gewichtungsparameter bestimmen.

Das Problem ist, dass der normale Trainingsprozess zwar nur die Vorhersagen für die Trainingsdaten betrachtet, wenn er Werte für die Gewichtungsparameter lernt, aber das gilt nicht für uns. Wir, die Modellierer, bewerten das Modell, indem wir uns die Vorhersagen der Validierungsdaten ansehen, wenn wir uns entscheiden, neue Werte für die Hyperparameter zu untersuchen! Spätere Versionen des Modells werden also indirekt dadurch beeinflusst, dass wir die Validierungsdaten gesehen haben. Genauso wie beim automatischen Trainingsprozess die Gefahr besteht, dass die Trainingsdaten übermäßig angepasst werden, besteht auch bei uns die Gefahr, dass die Validierungsdaten durch menschliches Ausprobieren und Erforschen übermäßig angepasst werden.

Die Lösung für dieses Rätsel besteht darin, eine weitere Ebene mit noch stärker zurückhaltenden Daten einzuführen: die Testmenge. Genauso wie wir die Validierungsdaten vom Trainingsprozess fernhalten, müssen wir auch die Testdaten von uns selbst fernhalten. Sie können nicht zur Verbesserung des Modells verwendet werden, sondern nur zur Bewertung des Modells am Ende unserer Bemühungen. Wir definieren also eine Hierarchie der Daten, je nachdem, wie vollständig wir sie vor dem Trainings- und Modellierungsprozess verbergen wollen: Die Trainingsdaten sind vollständig offengelegt, die Validierungsdaten sind weniger offengelegt und die Testdaten sind vollständig verborgen. Diese Hierarchie entspricht den verschiedenen Arten von Modellierungs- und Bewertungsprozessen selbst - dem automatischen Trainingsprozess mit Backpropagation, dem eher manuellen Prozess des Ausprobierens verschiedener Hyperparameter zwischen den Trainingseinheiten und der Bewertung unseres Endergebnisses.

Die Test- und Validierungsmengen sollten genügend Daten enthalten, damit dueine gute Einschätzung deiner Genauigkeit erhältst. Wenn du z. B. einen Katzendetektor entwickelst, brauchst du in der Regel mindestens 30 Katzen in deinem Validierungsset. Wenn du also einen Datensatz mit Tausenden von Objekten hast, kann es sein, dass die Standardgröße von 20 % des Validierungssatzes mehr ist, als du brauchst. Wenn du hingegen viele Daten hast, hat es wahrscheinlich keine Nachteile, einen Teil davon zur Validierung zu verwenden.

Zwei Ebenen von "reservierten Daten" zu haben - ein Validierungsset und ein Testset, wobei eine Ebene die Daten repräsentiert, die du praktisch vor dir selbst versteckst - mag ein bisschen extrem erscheinen. Aber das ist oft notwendig, denn Modelle neigen dazu, sich auf die einfachste Art und Weise gute Vorhersagen zu machen (Auswendiglernen), und wir als fehlbare Menschen neigen dazu, uns selbst zu täuschen, wenn es darum geht, wie gut unsere Modelle funktionieren. Die Disziplin der Testreihe hilft uns, intellektuell ehrlich zu bleiben. Das bedeutet nicht, dass wir immer einen separaten Testsatz brauchen - wenn du nur sehr wenige Daten hast, brauchst du vielleicht nur einen Validierungssatz -, aber im Allgemeinen ist es am besten, einen zu verwenden, wenn es möglich ist.

Dieselbe Disziplin kann entscheidend sein, wenn du einen Dritten mit der Modellierung in deinem Namen beauftragen willst. Es kann sein, dass ein Dritter deine Anforderungen nicht richtig versteht oder dass seine Anreize ihn sogar dazu verleiten, sie falsch zu verstehen. Ein guter Testsatz kann diese Risiken erheblich mindern und es dir ermöglichen, zu beurteilen, ob die Arbeit des Dritten dein tatsächliches Problem löst.

Kurz gesagt: Wenn du ein leitender Entscheidungsträger in deinem Unternehmen bist (oder leitende Entscheidungsträger berätst), ist die wichtigste Erkenntnis: Wenn du sicherstellst, dass du wirklich verstehst, was Test- und Validierungssets sind und warum sie wichtig sind, vermeidest du die größte Fehlerquelle, die wir gesehen haben, wenn sich Unternehmen für den Einsatz von KI entscheiden. Wenn du zum Beispiel erwägst, einen externen Anbieter oder Service zu beauftragen, solltest du sicherstellen, dass du einige Testdaten bereithältst, die der Anbieter nie zu Gesicht bekommt. Dann prüfst du das Modell des Anbieters anhand deiner Testdaten und wählst eine Kennzahl aus, die dir in der Praxis wichtig ist, und entscheidest, welche Leistung angemessen ist. (Es ist auch eine gute Idee, dass du selbst eine einfache Basislinie ausprobierst, damit du weißt, was ein wirklich einfaches Modell leisten kann. Oft wird sich herausstellen, dass dein einfaches Modell genauso gut funktioniert wie das eines externen "Experten").

Ermessensspielraum bei der Festlegung von Testgruppen

Um einen Validierungssatz (und möglicherweise auch einen Testsatz) zu definieren, musst du manchmal mehr tun, als nur zufällig einen Teil deines ursprünglichen Datensatzes zu nehmen. Erinnere dich: Eine wichtige Eigenschaft der Validierungs- und Testmengen ist, dass sie repräsentativ für die neuen Daten sein müssen, die du in Zukunft sehen wirst. Das mag wie ein unmöglicher Auftrag klingen! Per Definition hast du diese Daten noch nicht gesehen. Aber einige Dinge weißt du in der Regel trotzdem.

Es ist lehrreich, sich ein paar Beispielfälle anzusehen. Viele dieser Beispiele stammen aus Wettbewerben für prädiktive Modellierung auf derKaggle-Plattform, die eine gute Darstellung von Problemen und Methoden ist, die du in der Praxis sehen könntest.

Ein Beispiel wäre, wenn du Zeitreihendaten betrachtest. Bei einer Zeitreihe ist die Auswahl einer zufälligen Teilmenge der Daten sowohl zu einfach (dukannst die Daten sowohl vor als auch nach den Daten, die du vorhersagen willst, betrachten) als auch nicht repräsentativ für die meisten geschäftlichen Anwendungsfälle (bei denen du historische Daten nutzt, um ein Modell für die Zukunft zu erstellen). Wenn deine Daten das Datum enthalten und du ein Modell für die Zukunft erstellst, solltest du einen kontinuierlichen Abschnitt mit den neuesten Daten als Validierungsset wählen (z. B. die letzten zwei Wochen oder den letzten Monat der verfügbaren Daten).

Angenommen, du möchtest die Zeitreihendaten in Abbildung 1-19in Trainings- und Validierungssätze aufteilen.

A serie of values
Abbildung 1-19. Eine Zeitreihe

Eine zufällige Teilmenge ist eine schlechte Wahl (zu einfach, um die Lücken zu füllen, und nicht aussagekräftig für das, was du in der Produktion brauchst), wie wir in Abbildung 1-20 sehen können.

Random training subset
Abbildung 1-20. Eine schlechte Trainingsuntermenge

Stattdessen verwendest du die früheren Daten als Trainingsmenge (und die späteren Daten als Validierungsmenge), wie in Abbildung 1-21 dargestellt.

Training subset using the data up to a certain timestamp
Abbildung 1-21. Eine gute Trainingsuntermenge

Bei Kaggle gab es zum Beispiel einen Wettbewerb, bei dem es darum ging,die Umsätze einer ecuadorianischen Lebensmittelkette vorherzusagen. Die Trainingsdaten von Kagglereichten vom 1. Januar 2013 bis zum 15. August 2017 und die Testdaten vom 16. August 2017 bis zum 31. August 2017. Auf diese Weise stellte der Organisator des Wettbewerbs sicher, dass die Teilnehmer/innen Vorhersagen für einen Zeitraum machten, der aus der Sicht ihres Modellsin der Zukunft lag. Dies ist vergleichbar mit der Art und Weise, wie quantitative Hedgefonds-Händler/innen Backtesting betreiben, um zu prüfen, ob ihre Modelle auf der Grundlage von Daten aus der Vergangenheit Vorhersagen für zukünftige Zeiträume treffen.

Ein zweiter häufiger Fall tritt auf, wenn du leicht vorhersehen kannst, wie sich die Daten, für die du in der Produktion Vorhersagen treffen wirst, qualitativ von den Daten unterscheiden, mit denen du dein Modell trainieren kannst.

ImKaggle-Wettbewerb für abgelenkte Fahrer sind die unabhängigen Variablen Bilder von Fahrern am Steuer eines Autos, und die abhängigen Variablen sind Kategorien wie SMS schreiben, essen oder sicher nach vorne schauen. Viele Bilder zeigen dieselben Fahrer in verschiedenen Positionen, wie wir inAbbildung 1-22 sehen können. Wenn du ein Versicherungsunternehmen wärst, das aus diesen Daten ein Modell erstellt, würdest du dich vor allem dafür interessieren, wie das Modell bei Fahrern abschneidet, die es noch nie gesehen hat (da du wahrscheinlich nur Trainingsdaten für eine kleine Gruppe von Personen hast). Aus diesem Grund bestehen die Testdaten für den Wettbewerb aus Bildern von Personen, die nicht in der Trainingsgruppe vorkommen.

Two pictures from the training data, showing the same driver
Abbildung 1-22. Zwei Bilder aus den Trainingsdaten

Wenn du eines der Bilder in Abbildung 1-22 in deine Trainingsmenge und eines in die Validierungsmenge aufnimmst, wird es deinem Modell leicht fallen, eine Vorhersage für die Person in der Validierungsmenge zu treffen, so dass es scheinbar besser funktioniert als bei neuen Personen. Wenn du alle Personen zum Training deines Modells verwendest, könnte es sein, dass sich dein Modell zu sehr an die Besonderheiten dieser Personen anpasst und nicht nur die Zustände lernt (SMS schreiben, essen, etc.).

Eine ähnliche Dynamik gab es beimKaggle-Fischereiwettbewerb, bei dem es darum ging, die von Fischerbooten gefangenen Fischarten zu identifizieren, um den illegalen Fischfang gefährdeter Populationen zu reduzieren. Das Testset vonbestand aus Bildern von Booten, die nicht in den Trainingsdaten vorkamen. In diesem Fall solltest du also auch Boote in dein Validierungsset aufnehmen, die nicht im Trainingsset enthalten sind.

Manchmal ist es nicht klar, wie sich deine Validierungsdaten unterscheiden werden. Wenn du z. B. ein Problem mit Satellitenbildern hast, musst du mehr Informationen darüber sammeln, ob die Trainingsdaten nur bestimmte geografische Orte enthalten oder aus geografisch verstreuten Daten stammen.

Jetzt, wo du einen Eindruck davon bekommen hast, wie man ein Modell baut, kannst du entscheiden, was du als Nächstes angehen willst.

Ein "Choose Your Own Adventure" -Moment

Wenn du mehr darüber erfahren möchtest, wie du Deep-Learning-Modelle in der Praxis einsetzt, wie du Fehler identifizierst und behebst, eine funktionierende Webanwendung erstellst und vermeidest, dass dein Modell unerwarteten Schaden für dein Unternehmen oder die Gesellschaft im Allgemeinen anrichtet, dann lies die nächsten beiden Kapitel weiter. Wenn du wissen willst, wie Deep Learning unter der Haube funktioniert, lies weiter bei Kapitel 4. (Hast du als Kind jemals "Choose Your Own Adventure" -Bücher gelesen? Nun, das hier ist so ähnlich... nur mit mehr Deep Learning, als in dieser Buchreihe enthalten war.)

Du musst alle diese Kapitel lesen, um im Buch weiterzukommen, aber die Reihenfolge, in der du sie liest, bleibt dir überlassen. Sie hängen nicht voneinander ab. Wenn du Kapitel 4 überspringst, werden wir dich am Ende daran erinnern, die übersprungenen Kapitel noch einmal zu lesen, bevor du weitermachst.

Fragebogen

Nachdem du seitenweise Prosa gelesen hast, kann es schwierig sein zu wissen, auf welche wichtigen Dinge du dich konzentrieren und erinnern musst. Deshalb haben wir am Ende jedes Kapitels eine Liste mit Fragen und Vorschlägen für die nächsten Schritte zusammengestellt. Alle Antworten stehen im Text des Kapitels. Wenn du dir also bei etwas nicht sicher bist, lies den entsprechenden Teil des Textes noch einmal durch, um sicherzugehen, dass du ihn verstanden hast. Die Antworten auf all diese Fragen findest du auch auf der Website des Buches. Wenn du nicht weiterkommst, kannst du auch die Foren besuchen, um Hilfe von anderen zu bekommen, die sich mit diesem Stoff beschäftigen.

Weitere Fragen mit ausführlichen Antworten und Links zur Video-Timeline findest du in Radek Osmulskis Aiquizzes.

  1. Brauchst du sie für Deep Learning?

    • Jede Menge Mathe T/F

    • Jede Menge Daten T/F

    • Jede Menge teure Computer T/F

    • A PhD T/F

  2. Nenne fünf Bereiche, in denen Deep Learning heute das beste Werkzeug der Welt ist.

  3. Wie hieß das erste Gerät, das auf dem Prinzip des künstlichen Neurons basierte?

  4. Was sind die Voraussetzungen für die parallele verteilte Verarbeitung (PDP) nach dem gleichnamigen Buch?

  5. Was waren die beiden theoretischen Missverständnisse, die das Feld der neuronalen Netze behindert haben?

  6. Was ist ein Grafikprozessor?

  7. Öffne ein Notizbuch und führe eine Zelle aus, die Folgendes enthält: 1+1. Was passiert?

  8. Gehe jede Zelle der gestrichenen Version des Notizbuchs für dieses Kapitel durch. Bevor du jede Zelle ausführst, rate, was passieren wird.

  9. Fülle den Jupyter Notebook Online-Anhang aus.

  10. Warum ist es schwierig, mit einem herkömmlichen Computerprogramm Bilder auf einem Foto zu erkennen?

  11. Was meinte Samuel mit "Gewichtszuweisung"?

  12. Welchen Begriff verwenden wir beim Deep Learning normalerweise für das, was Samuel "Gewichte" nennt?

  13. Zeichne ein Bild, das Samuels Sicht auf ein maschinelles Lernmodell zusammenfasst.

  14. Warum ist es schwer zu verstehen, warum ein Deep-Learning-Modell eine bestimmteVorhersage trifft?

  15. Wie heißt das Theorem, das zeigt, dass ein neuronales Netzwerk jedes mathematische Problem mit beliebiger Genauigkeit lösen kann?

  16. Was brauchst du, um ein Modell zu trainieren?

  17. Wie könnte sich eine Feedbackschleife auf die Einführung eines vorausschauenden Polizeimodells auswirken?

  18. Müssen wir mit dem Katzenerkennungsmodell immer 224×224-Pixel-Bilder verwenden?

  19. Was ist der Unterschied zwischen Klassifizierung und Regression?

  20. Was ist ein Validierungsset? Was ist ein Testsatz? Warum brauchen wir sie?

  21. Was macht fastai, wenn du kein Validierungsset zur Verfügung stellst?

  22. Können wir immer eine Zufallsstichprobe für ein Validierungsset verwenden? Warum oder warum nicht?

  23. Was ist Overfitting? Gib ein Beispiel an.

  24. Was ist eine Kennzahl? Wie unterscheidet sie sich vom Verlust?

  25. Wie können vortrainierte Modelle helfen?

  26. Was ist der "Kopf" eines Modells?

  27. Welche Arten von Merkmalen finden sich in den frühen Schichten eines CNN? Wie sieht es mit den späteren Schichten aus?

  28. Sind Bildmodelle nur für Fotos nützlich?

  29. Was ist eine Architektur?

  30. Was ist Segmentierung?

  31. Wofür wird y_range verwendet? Wann brauchen wir es?

  32. Was sind Hyperparameter?

  33. Wie vermeidet man am besten Misserfolge beim Einsatz von KI in einem Unternehmen?

Weitere Forschung

Jedes Kapitel enthält außerdem einen Abschnitt "Weitere Recherchen", in dem Fragen gestellt werden, die im Text nicht vollständig beantwortet werden, oder weiterführende Aufgaben gestellt werden. Die Antworten auf diese Fragen findest du nicht auf der Website des Buches; du musst selbst recherchieren!

  1. Warum ist ein Grafikprozessor für Deep Learning nützlich? Was ist der Unterschied zu einer CPU, und warum ist sie für Deep Learning weniger effektiv?

  2. Überlege dir drei Bereiche, in denen Feedback-Schleifen den Einsatz von maschinellem Lernen beeinflussen könnten. Schau, ob du dokumentierte Beispiele aus der Praxis findest.

Get Deep Learning für Programmierer mit fastai und PyTorch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.