49,90 €
39,99 €
Niedrigster Preis in 30 Tagen: 49,90 €
Aktualisierte Neuauflage des Bestsellers zu TensorFlow 2 und Deep Learning Behandelt jetzt auch die High-Level-API Keras Führt Sie methodisch geschickt in die Basics des Machine Learning mit Scikit-Learn ein und vermittelt darauf aufbauend Deep-Learning-Techniken mit Keras und TensorFlow 2 Mit zahlreiche Übungen und Lösungen Eine Reihe technischer Durchbrüche beim Deep Learning haben das gesamte Gebiet des maschinellen Lernens in den letzten Jahren beflügelt. Inzwischen können sogar Programmierer, die kaum etwas über diese Technologie wissen, mit einfachen, effizienten Werkzeugen Machine-Learning-Programme implementieren. Dieses praxisorientierte Buch zeigt Ihnen wie. Mit konkreten Beispielen, einem Minimum an Theorie und zwei unmittelbar anwendbaren Python-Frameworks – Scikit-Learn und TensorFlow 2 – verhilft Ihnen der Autor Aurélien Géron zu einem intuitiven Verständnis der Konzepte und Tools für das Entwickeln intelligenter Systeme. Sie lernen eine Vielzahl von Techniken kennen, beginnend mit einfacher linearer Regression bis hin zu Deep Neural Networks. Die in jedem Kapitel enthaltenen Übungen helfen Ihnen, das Gelernte in die Praxis umzusetzen. Um direkt zu starten, benötigen Sie lediglich etwas Programmiererfahrung.
Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:
Seitenzahl: 1250
Veröffentlichungsjahr: 2020
Zu diesem Buch – sowie zu vielen weiteren O’Reilly-Büchern – können Sie auch das entsprechende E-Book im PDF-Format herunterladen. Werden Sie dazu einfach Mitglied bei oreilly.plus+:
www.oreilly.plus
2. AUFLAGE
Konzepte, Tools und Technikenfür intelligente Systeme
Aurélien Géron
Deutsche Übersetzung vonKristian Rother & Thomas Demmig
Aurélien Géron
Lektorat: Alexandra Follenius
Übersetzung: Kristian Rother, Thomas Demmig
Korrektorat: Sibylle Feldmann, www.richtiger-text.de
Satz: III-satz, www.drei-satz.de
Herstellung: Stefanie Weidner
Umschlaggestaltung: Karen Montgomery, Michael Oréal, www.oreal.de
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN:
Print 978-3-96009-124-0
PDF 978-3-96010-339-4
ePub 978-3-96010-340-0
mobi 978-3-96010-341-7
2. Auflage
Translation Copyright für die deutschsprachige Ausgabe © 2020 dpunkt.verlag GmbH
Wieblinger Weg 17
69123 Heidelberg
Authorized German translation of the English edition of Hands-on Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition, ISBN 9781492032649 © 2019 Kiwisoft S.A.S. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same.
Dieses Buch erscheint in Kooperation mit O’Reilly Media, Inc. unter dem Imprint »O’REILLY«. O’REILLY ist ein Markenzeichen und eine eingetragene Marke von O’Reilly Media, Inc. und wird mit Einwilligung des Eigentümers verwendet.
Hinweis:
Dieses Buch wurde auf PEFC-zertifiziertem Papier aus nachhaltiger Waldwirtschaft gedruckt. Der Umwelt zuliebe verzichten wir zusätzlich auf die Einschweißfolie.
Schreiben Sie uns:
Falls Sie Anregungen, Wünsche und Kommentare haben, lassen Sie es uns wissen: [email protected].
Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.
Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.
Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Verlag noch Übersetzer können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.
5 4 3 2 1 0
Vorwort
Teil IDie Grundlagen des Machine Learning
1Die Machine-Learning-Umgebung
Was ist Machine Learning?
Warum wird Machine Learning verwendet?
Anwendungsbeispiel
Unterschiedliche Machine-Learning-Systeme
Überwachtes/unüberwachtes Lernen
Batch- und Online-Learning
Instanzbasiertes versus modellbasiertes Lernen
Die wichtigsten Herausforderungen beim Machine Learning
Unzureichende Menge an Trainingsdaten
Nicht repräsentative Trainingsdaten
Minderwertige Daten
Irrelevante Merkmale
Overfitting der Trainingsdaten
Underfitting der Trainingsdaten
Zusammenfassung
Testen und Validieren
Hyperparameter anpassen und Modellauswahl
Datendiskrepanz
Übungen
2Ein Machine-Learning-Projekt von A bis Z
Der Umgang mit realen Daten
Betrachte das Gesamtbild
Die Aufgabe abstecken
Wähle ein Qualitätsmaß aus
Überprüfe die Annahmen
Beschaffe die Daten
Erstelle eine Arbeitsumgebung
Die Daten herunterladen
Wirf einen kurzen Blick auf die Datenstruktur
Erstelle einen Testdatensatz
Erkunde und visualisiere die Daten, um Erkenntnisse zu gewinnen
Visualisieren geografischer Daten
Suche nach Korrelationen
Experimentieren mit Kombinationen von Merkmalen
Bereite die Daten für Machine-Learning-Algorithmen vor
Aufbereiten der Daten
Bearbeiten von Text und kategorischen Merkmalen
Eigene Transformer
Skalieren von Merkmalen
Pipelines zur Transformation
Wähle ein Modell aus und trainiere es
Trainieren und Auswerten auf dem Trainingsdatensatz
Bessere Auswertung mittels Kreuzvalidierung
Optimiere das Modell
Gittersuche
Zufällige Suche
Ensemble-Methoden
Analysiere die besten Modelle und ihre Fehler
Evaluiere das System auf dem Testdatensatz
Nimm das System in Betrieb, überwache und warte es
Probieren Sie es aus!
Übungen
3Klassifikation
MNIST
Trainieren eines binären Klassifikators
Qualitätsmaße
Messen der Genauigkeit über Kreuzvalidierung
Konfusionsmatrix
Relevanz und Sensitivität
Die Wechselbeziehung zwischen Relevanz und Sensitivität
Die ROC-Kurve
Klassifikatoren mit mehreren Kategorien
Fehleranalyse
Klassifikation mit mehreren Labels
Klassifikation mit mehreren Ausgaben
Übungen
4Trainieren von Modellen
Lineare Regression
Die Normalengleichung
Komplexität der Berechnung
Das Gradientenverfahren
Batch-Gradientenverfahren
Stochastisches Gradientenverfahren
Mini-Batch-Gradientenverfahren
Polynomielle Regression
Lernkurven
Regularisierte lineare Modelle
Ridge-Regression
Lasso-Regression
Elastic Net
Early Stopping
Logistische Regression
Abschätzen von Wahrscheinlichkeiten
Trainieren und Kostenfunktion
Entscheidungsgrenzen
Softmax-Regression
Übungen
5Support Vector Machines
Lineare Klassifikation mit SVMs
Soft-Margin-Klassifikation
Nichtlineare SVM-Klassifikation
Polynomieller Kernel
Ähnlichkeitsbasierte Merkmale
Der gaußsche RBF-Kernel
Komplexität der Berechnung
SVM-Regression
Hinter den Kulissen
Entscheidungsfunktion und Vorhersagen
Zielfunktionen beim Trainieren
Quadratische Programme
Das duale Problem
Kernel-SVM
Online-SVMs
Übungen
6Entscheidungsbäume
Trainieren und Visualisieren eines Entscheidungsbaums
Vorhersagen treffen
Schätzen von Wahrscheinlichkeiten für Kategorien
Der CART-Trainingsalgorithmus
Komplexität der Berechnung
Gini-Unreinheit oder Entropie?
Hyperparameter zur Regularisierung
Regression
Instabilität
Übungen
7Ensemble Learning und Random Forests
Abstimmverfahren unter Klassifikatoren
Bagging und Pasting
Bagging und Pasting in Scikit-Learn
Out-of-Bag-Evaluation
Zufällige Patches und Subräume
Random Forests
Extra-Trees
Wichtigkeit von Merkmalen
Boosting
AdaBoost
Gradient Boosting
Stacking
Übungen
8Dimensionsreduktion
Der Fluch der Dimensionalität
Die wichtigsten Ansätze zur Dimensionsreduktion
Projektion
Manifold Learning
Hauptkomponentenzerlegung (PCA)
Erhalten der Varianz
Hauptkomponenten
Die Projektion auf d Dimensionen
Verwenden von Scikit-Learn
Der Anteil erklärter Varianz
Auswählen der richtigen Anzahl Dimensionen
PCA als Komprimierungsverfahren
Randomisierte PCA
Inkrementelle PCA
Kernel-PCA
Auswahl eines Kernels und Optimierung der Hyperparameter
LLE
Weitere Techniken zur Dimensionsreduktion
Übungen
9Techniken des unüberwachten Lernens
Clustering
K-Means
Grenzen von K-Means
Bildsegmentierung per Clustering
Vorverarbeitung per Clustering
Clustering für teilüberwachtes Lernen einsetzen
DBSCAN
Andere Clustering-Algorithmen
Gaußsche Mischverteilung
Anomalieerkennung mit gaußschen Mischverteilungsmodellen
Die Anzahl an Clustern auswählen
Bayessche gaußsche Mischverteilungsmodelle
Andere Algorithmen zur Anomalie- und Novelty-Erkennung
Übungen
Teil IINeuronale Netze und Deep Learning
10Einführung in künstliche neuronale Netze mit Keras
Von biologischen zu künstlichen Neuronen
Biologische Neuronen
Logische Berechnungen mit Neuronen
Das Perzeptron
Mehrschichtiges Perzeptron und Backpropagation
Regressions-MLPs
Klassifikations-MLPs
MLPs mit Keras implementieren
TensorFlow 2 installieren
Einen Bildklassifikator mit der Sequential API erstellen
Ein Regressions-MLP mit der Sequential API erstellen
Komplexe Modelle mit der Functional API bauen
Dynamische Modelle mit der Subclassing API bauen
Ein Modell sichern und wiederherstellen
Callbacks
TensorBoard zur Visualisierung verwenden
Feinabstimmung der Hyperparameter eines neuronalen Netzes
Anzahl verborgener Schichten
Anzahl Neuronen pro verborgene Schicht
Lernrate, Batchgröße und andere Hyperparameter
Übungen
11Trainieren von Deep-Learning-Netzen
Das Problem schwindender/explodierender Gradienten
Initialisierung nach Glorot und He
Nicht sättigende Aktivierungsfunktionen
Batchnormalisierung
Gradient Clipping
Wiederverwenden vortrainierter Schichten
Transfer Learning mit Keras
Unüberwachtes Vortrainieren
Vortrainieren anhand einer Hilfsaufgabe
Schnellere Optimierer
Momentum Optimization
Beschleunigter Gradient nach Nesterov
AdaGrad
RMSProp
Adam-Optimierung
Scheduling der Lernrate
Vermeiden von Overfitting durch Regularisierung
ℓ1- und ℓ2-Regularisierung
Drop-out
Monte-Carlo-(MC-)-Drop-out
Max-Norm-Regularisierung
Zusammenfassung und praktische Tipps
Übungen
12Eigene Modelle und Training mit TensorFlow
Ein kurzer Überblick über TensorFlow
TensorFlow wie NumPy einsetzen
Tensoren und Operationen
Tensoren und NumPy
Typumwandlung
Variablen
Andere Datenstrukturen
Modelle und Trainingsalgorithmen anpassen
Eigene Verlustfunktion
Modelle mit eigenen Komponenten sichern und laden
Eigene Aktivierungsfunktionen, Initialisierer, Regularisierer und Constraints
Eigene Metriken
Eigene Schichten
Eigene Modelle
Verlustfunktionen und Metriken auf Modell-Interna basieren lassen
Gradienten per Autodiff berechnen
Eigene Trainingsschleifen
Funktionen und Graphen in TensorFlow
AutoGraph und Tracing
Regeln für TF Functions
Übungen
13Daten mit TensorFlow laden und vorverarbeiten
Die Data-API
Transformationen verketten
Daten durchmischen
Daten vorverarbeiten
Alles zusammenbringen
Prefetching
Datasets mit tf.keras verwenden
Das TFRecord-Format
Komprimierte TFRecord-Dateien
Eine kurze Einführung in Protocol Buffer
TensorFlow-Protobufs
Examples laden und parsen
Listen von Listen mit dem SequenceExample-Protobuf verarbeiten
Die Eingabemerkmale vorverarbeiten
Kategorische Merkmale mit One-Hot-Vektoren codieren
Kategorische Merkmale mit Embeddings codieren
Vorverarbeitungsschichten von Keras
TF Transform
Das TensorFlow-Datasets-(TFDS-)Projekt
Übungen
14Deep Computer Vision mit Convolutional Neural Networks
Der Aufbau des visuellen Cortex
Convolutional Layers
Filter
Stapeln mehrerer Feature Maps
Implementierung in TensorFlow
Speicherbedarf
Pooling Layers
Implementierung in TensorFlow
Architekturen von CNNs
LeNet-5
AlexNet
GoogLeNet
VGGNet
ResNet
Xception
SENet
Ein ResNet-34-CNN mit Keras implementieren
Vortrainierte Modelle aus Keras einsetzen
Vortrainierte Modelle für das Transfer Learning
Klassifikation und Lokalisierung
Objekterkennung
Fully Convolutional Networks
You Only Look Once (YOLO)
Semantische Segmentierung
Übungen
15Verarbeiten von Sequenzen mit RNNs und CNNs
Rekurrente Neuronen und Schichten
Gedächtniszellen
Ein- und Ausgabesequenzen
RNNs trainieren
Eine Zeitserie vorhersagen
Grundlegende Metriken
Ein einfaches RNN implementieren
Deep RNNs
Mehrere Zeitschritte vorhersagen
Arbeit mit langen Sequenzen
Gegen instabile Gradienten kämpfen
Das Problem des Kurzzeitgedächtnisses
Übungen
16Natürliche Sprachverarbeitung mit RNNs und Attention
Shakespearesche Texte mit einem Character-RNN erzeugen
Den Trainingsdatensatz erstellen
Wie ein sequenzieller Datensatz aufgeteilt wird
Den sequenziellen Datensatz in mehrere Fenster unterteilen
Das Char-RNN-Modell bauen und trainieren
Das Char-RNN-Modell verwenden
Einen gefälschten Shakespeare-Text erzeugen
Zustandsbehaftetes RNN
Sentimentanalyse
Maskieren
Vortrainierte Embeddings wiederverwenden
Ein Encoder-Decoder-Netzwerk für die neuronale maschinelle Übersetzung
Bidirektionale RNNs
Beam Search
Attention-Mechanismen
Visuelle Attention
Attention Is All You Need: Die Transformer-Architektur
Aktuelle Entwicklungen bei Sprachmodellen
Übungen
17Representation Learning und Generative Learning mit Autoencodern und GANs
Effiziente Repräsentation von Daten
Hauptkomponentenzerlegung mit einem untervollständigen linearen Autoencoder
Stacked Autoencoder
Einen Stacked Autoencoder mit Keras implementieren
Visualisieren der Rekonstruktionen
Den Fashion-MNIST-Datensatz visualisieren
Unüberwachtes Vortrainieren mit Stacked Autoencoder
Kopplung von Gewichten
Trainieren mehrerer Autoencoder nacheinander
Convolutional Autoencoder
Rekurrente Autoencoder
Denoising Autoencoder
Sparse Autoencoder
Variational Autoencoder
Fashion-MNIST-Bilder erzeugen
Generative Adversarial Networks
Schwierigkeiten beim Trainieren von GANs
Deep Convolutional GANs
Progressive wachsende GANs
StyleGANs
Übungen
18Reinforcement Learning
Lernen zum Optimieren von Belohnungen
Suche nach Policies
Einführung in OpenAI Gym
Neuronale Netze als Policies
Auswerten von Aktionen: Das Credit-Assignment-Problem
Policy-Gradienten
Markov-Entscheidungsprozesse
Temporal Difference Learning
Q-Learning
Erkundungspolicies
Approximatives Q-Learning und Deep-Q-Learning
Deep-Q-Learning implementieren
Deep-Q-Learning-Varianten
Feste Q-Wert-Ziele
Double DQN
Priorisiertes Experience Replay
Dueling DQN
Die TF-Agents-Bibliothek
TF-Agents installieren
TF-Agents-Umgebungen
Umgebungsspezifikationen
Umgebungswrapper und Atari-Vorverarbeitung
Trainingsarchitektur
Deep-Q-Netz erstellen
DQN-Agenten erstellen
Replay Buffer und Beobachter erstellen
Trainingsmetriken erstellen
Collect-Fahrer erstellen
Dataset erstellen
Trainingsschleife erstellen
Überblick über beliebte RL-Algorithmen
Übungen
19TensorFlow-Modelle skalierbar trainieren und deployen
Ein TensorFlow-Modell ausführen
TensorFlow Serving verwenden
Einen Vorhersageservice auf der GCP AI Platform erstellen
Den Vorhersageservice verwenden
Ein Modell auf ein Mobile oder Embedded Device deployen
Mit GPUs die Berechnungen beschleunigen
Sich eine eigene GPU zulegen
Eine mit GPU ausgestattete virtuelle Maschine einsetzen
Colaboratory
Das GPU-RAM verwalten
Operationen und Variablen auf Devices verteilen
Paralleles Ausführen auf mehreren Devices
Modelle auf mehreren Devices trainieren
Parallelisierte Modelle
Parallelisierte Daten
Mit der Distribution Strategies API auf mehreren Devices trainieren
Ein Modell in einem TensorFlow-Cluster trainieren
Große Trainingsjobs auf der Google Cloud AI Platform ausführen
Black Box Hyperparameter Tuning auf der AI Platform
Übungen
Vielen Dank!
ALösungen zu den Übungsaufgaben
BCheckliste für Machine-Learning-Projekte
CDas duale Problem bei SVMs
DAutodiff
EWeitere verbreitete Architekturen neuronaler Netze
FSpezielle Datenstrukturen
GTensorFlow-Graphen
Index
Im Jahr 2006 erschien ein Artikel (https://homl.info/136) von Geoffrey Hinton et al.,1 in dem vorgestellt wurde, wie sich ein neuronales Netz zum Erkennen handgeschriebener Ziffern mit ausgezeichneter Genauigkeit (> 98%) trainieren lässt. Ein Deep Neural Network ist ein (sehr) vereinfachtes Modell unseres zerebralen Kortex, und es besteht aus einer Folge von Schichten mit künstlichen Neuronen. Die Autoren nannten diese Technik »Deep Learning«. Zu dieser Zeit wurde das Trainieren eines Deep-Learning-Netzes im Allgemeinen als unmöglich angesehen,2 und die meisten Forscher hatten die Idee in den 1990ern aufgegeben. Dieser Artikel ließ das Interesse der wissenschaftlichen Gemeinde wieder aufleben, und schon nach kurzer Zeit zeigten weitere Artikel, dass Deep Learning nicht nur möglich war, sondern umwerfende Dinge vollbringen konnte, zu denen kein anderes Machine-Learning-(ML-)Verfahren auch nur annähernd in der Lage war (mithilfe enormer Rechenleistung und riesiger Datenmengen). Dieser Enthusiasmus breitete sich schnell auf weitere Teilgebiete des Machine Learning aus.
Zehn Jahre später hat Machine Learning ganze Industriezweige erobert: Es ist zu einem Herzstück heutiger Spitzentechnologien geworden und dient dem Ranking von Suchergebnissen im Web, kümmert sich um die Spracherkennung Ihres Smartphones, gibt Empfehlungen für Videos und schlägt den Weltmeister im Brettspiel Go. Über kurz oder lang wird ML vermutlich auch Ihr Auto steuern.
Deshalb interessieren Sie sich natürlich auch für Machine Learning und möchten an der Party teilnehmen!
Womöglich möchten Sie Ihrem selbst gebauten Roboter einen eigenen Denkapparat geben? Ihn Gesichter erkennen lassen? Oder lernen lassen, herumzulaufen?
Oder vielleicht besitzt Ihr Unternehmen Unmengen an Daten (Logdateien, Finanzdaten, Produktionsdaten, Sensordaten, Hotline-Statistiken, Personalstatistiken und so weiter), und Sie könnten vermutlich einige verborgene Schätze heben, wenn Sie nur wüssten, wo Sie danach suchen müssten, beispielsweise:
Kundensegmente finden und für jede Gruppe die beste Marketingstrategie entwickeln.
Jedem Kunden anhand des Kaufverhaltens ähnlicher Kunden Produktempfehlungen geben.
Betrügerische Transaktionen mit hoher Wahrscheinlichkeit erkennen.
Den Unternehmensgewinn im nächsten Jahr vorhersagen.
Was immer der Grund ist, Sie haben beschlossen, Machine Learning zu erlernen und in Ihren Projekten umzusetzen. Eine ausgezeichnete Idee!
Dieses Buch geht davon aus, dass Sie noch so gut wie nichts über Machine Learning wissen. Unser Ziel ist es, Ihnen die Grundbegriffe, ein Grundverständnis und die Werkzeuge an die Hand zu geben, mit denen Sie Programme zum Lernen aus Daten entwickeln können.
Wir werden eine Vielzahl von Techniken besprechen, von den einfachsten und am häufigsten eingesetzten (wie der linearen Regression) bis zu einigen Deep-Learning-Verfahren, die regelmäßig Wettbewerbe gewinnen.
Anstatt eigene Übungsversionen jedes Algorithmus zu entwickeln, werden wir dazu für den Produktionsbetrieb geschaffene Python-Frameworks verwenden:
Scikit-Learn (
http://scikit-learn.org/
) ist sehr einfach zu verwenden, enthält aber effiziente Implementierungen vieler Machine-Learning-Algorithmen. Damit ist es ein großartiger Ausgangspunkt, um Machine Learning zu erlernen.
TensorFlow (
http://tensorflow.org/
) ist eine komplexere Bibliothek für verteiltes Rechnen. Mit ihr können Sie sehr große neuronale Netze effizient trainieren und ausführen, indem Sie die Berechnungen auf bis zu Hunderte von Servern mit mehreren GPUs (
Graphics Processing Units
) verlagern. TensorFlow (TF) wurde von Google entwickelt und läuft in vielen großflächigen Machine-Learning-Anwendungen. Die Bibliothek wurde im November 2015 als Open Source veröffentlicht.
Keras (
https://keras.io/
) ist eine High-Level-Deep-Learning-API, die das Trainieren und Ausführen neuronaler Netze sehr einfach macht. Sie kann auf TensorFlow, Theano oder Microsoft Cognitive Toolkit (früher bekannt als CNTK) aufsetzen. TensorFlow bringt seine eigene Implementierung dieser API namens
tf.keras
mit, die einige der fortgeschritteneren TensorFlow-Features unterstützt (zum Beispiel die Möglichkeit, Daten effizient zu laden).
Dieses Buch verfolgt einen praxisorientierten Ansatz, bei dem Sie ein intuitives Verständnis von Machine Learning entwickeln, indem Sie sich mit konkreten Beispielen und ein klein wenig Theorie beschäftigen. Auch wenn Sie dieses Buch lesen können, ohne Ihren Laptop in die Hand zu nehmen, empfehlen wir Ihnen, mit den als Jupyter-Notebooks unter https://github.com/ageron/handson-ml2 verfügbaren Codebeispielen herumzuexperimentieren.
Dieses Buch geht davon aus, dass Sie ein wenig Programmiererfahrung mit Python haben und dass Sie mit den wichtigsten wissenschaftlichen Bibliotheken in Python vertraut sind, insbesondere mit NumPy (http://numpy.org/), pandas (http://pandas.pydata.org/) und Matplotlib (http://matplotlib.org/).
Wenn Sie sich dafür interessieren, was hinter den Kulissen passiert, sollten Sie ein Grundverständnis von Oberstufenmathematik haben (Analysis, lineare Algebra, Wahrscheinlichkeiten und Statistik).
Sollten Sie Python noch nicht kennen, ist http://learnpython.org/ ein ausgezeichneter Ausgangspunkt. Das offizielle Tutorial auf python.org (https://docs.python.org/3/tutorial/) ist ebenfalls recht gut.
Falls Sie Jupyter noch nie verwendet haben, führt Sie Kapitel 2 durch die Installation und die Grundlagen: Es ist ein leistungsfähiges Werkzeug in Ihrem Werkzeugkasten.
Und für den Fall, dass Sie mit den wissenschaftlichen Bibliotheken für Python nicht vertraut sind, beinhalten die mitgelieferten Jupyter-Notebooks einige Tutorials. Es gibt dort auch ein kurzes Mathematiktutorial über lineare Algebra.
Dieses Buch ist in zwei Teile aufgeteilt. Teil I behandelt folgende Themen:
Was ist Machine Learning? Welche Aufgaben lassen sich damit lösen? Welches sind die wichtigsten Kategorien und Grundbegriffe von Machine-Learning-Systemen?
Die Schritte in einem typischen Machine-Learning-Projekt.
Lernen durch Anpassen eines Modells an Daten.
Optimieren einer Kostenfunktion.
Bearbeiten, Säubern und Vorbereiten von Daten.
Merkmale auswählen und entwickeln.
Ein Modell auswählen und dessen Hyperparameter über Kreuzvalidierung optimieren.
Die Herausforderungen beim Machine Learning, insbesondere Underfitting und Overfitting (das Gleichgewicht zwischen Bias und Varianz).
Die verbreitetsten Lernalgorithmen: lineare und polynomielle Regression, logistische Regression, k-nächste Nachbarn, Support Vector Machines, Entscheidungsbäume, Random Forests und Ensemble-Methoden.
Dimensionsreduktion der Trainingsdaten, um dem »Fluch der Dimensionalität« etwas entgegenzusetzen.
Andere Techniken des unüberwachten Lernens, unter anderem Clustering, Dichteabschätzung und Anomalieerkennung.
Teil II widmet sich diesen Themen:
Was sind neuronale Netze? Wofür sind sie geeignet?
Erstellen und Trainieren neuronaler Netze mit TensorFlow und Keras.
Die wichtigsten Architekturen neuronaler Netze: Feed-Forward-Netze für Tabellendaten, Convolutional Neural Networks zur Bilderkennung, rekurrente Netze und Long-Short-Term-Memory-(LSTM-)Netze zur Sequenzverarbeitung, Encoder/Decoder und Transformer für die Sprachverarbeitung, Autoencoder und Generative Adversarial Networks (GANs) zum generativen Lernen.
Techniken zum Trainieren von Deep-Learning-Netzen.
Wie man einen Agenten erstellt (zum Beispiel einen Bot in einem Spiel), der durch Versuch und Irrtum gute Strategien erlernt und dabei Reinforcement Learning einsetzt.
Effizientes Laden und Vorverarbeiten großer Datenmengen.
Trainieren und Deployen von TensorFlow-Modellen im großen Maßstab.
Der erste Teil baut vor allem auf Scikit-Learn auf, der zweite Teil verwendet TensorFlow.
Springen Sie nicht zu schnell ins tiefe Wasser: Auch wenn Deep Learning zweifelsohne eines der aufregendsten Teilgebiete des Machine Learning ist, sollten Sie zuerst Erfahrungen mit den Grundlagen sammeln. Außerdem lassen sich die meisten Aufgabenstellungen recht gut mit einfacheren Techniken wie Random Forests und Ensemble-Methoden lösen (die in Teil I besprochen werden). Deep Learning ist am besten für komplexe Aufgaben wie Bilderkennung, Spracherkennung und Sprachverarbeitung geeignet, vorausgesetzt, Sie haben genug Daten und Geduld.
Diese zweite Auflage hat sechs zentrale Ziele:
Die Behandlung zusätzlicher ML-Themen: weitere Techniken zum unüberwachten Lernen (unter anderem Clustering, Anomalieerkennung, Dichteabschätzung und Mischmodelle), zusätzliche Techniken zum Trainieren von Deep Networks (einschließlich sich selbst normalisierender Netze), weitere Techniken der Bilderkennung (unter anderem Xception, SENet, Objekterkennung mit YOLO und semantische Segmentierung mit R-CNN), das Verarbeiten von Sequenzen mit Convolutional Neural Networks (CNNs, einschließlich WaveNet), Verarbeitung natürlicher Sprache mit rekurrenten neuronalen Netzen (RNNs), CNNs und Transformers, GANs.
Zusätzliche Bibliotheken und APIs (Keras, die Data-API, TF-Agents für das Reinforcement Learning) sowie das Trainieren und Deployen von TF-Modellen im großen Maßstab mithilfe der Distribution Strategies API, TF Serving und Google Cloud AI Platform; zudem eine kurze Vorstellung von TF Transform, TFLite, TF Addons/Seq2Seq und TensorFlow.js.
Vorstellen einiger der neuesten Forschungsergebnisse aus dem Deep Learning.
Migrieren aller TensorFlow-Kapitel nach TensorFlow 2 und Verwenden der TensorFlow-Implementierung der Keras-API (tf.keras), wann immer das möglich ist.
Aktualisieren der Codebeispiele auf die neuesten Versionen von Scikit-Learn, NumPy, pandas, Matplotlib und anderer Bibliotheken.
Anpassen einiger Abschnitte zum besseren Verständnis und Beheben von Fehlern dank sehr vieler Rückmeldungen von Lesern.
Es wurden ein paar Kapitel hinzugefügt, andere wurden umgeschrieben, und ein paar wurden neu angeordnet. Unter https://homl.info/changes2 finden Sie detailliertere Angaben darüber, was sich in der zweiten Auflage geändert hat.
Es gibt viele ausgezeichnete Ressourcen, mit deren Hilfe sich Machine Learning erlernen lässt. Der ML-Kurs auf Coursera (https://homl.info/ngcourse) von Andrew Ng ist faszinierend, auch wenn er einen beträchtlichen Zeitaufwand bedeutet (in Monaten).
Darüber hinaus finden Sie viele interessante Webseiten über Machine Learning, darunter natürlich den ausgezeichneten User Guide (https://homl.info/skdoc) von Scikit-Learn. Auch Dataquest (https://www.dataquest.io/), das sehr ansprechende Tutorials und ML-Blogs bietet, sowie die auf Quora (https://homl.info/1) aufgeführten ML-Blogs könnten Ihnen gefallen. Schließlich sind auf der Deep-Learning-Website (http://deeplearning.net/) Ressourcen aufgezählt, mit denen Sie mehr lernen können.
Natürlich bieten auch viele andere Bücher eine Einführung in Machine Learning, insbesondere:
Joel Grus,
Einführung in Data Science: Grundprinzipien der Datenanalyse mit Python (
https://www.oreilly.de/buecher/13335/9783960091233-einf%C3%BChrung-in-data-science.html
)
(O’Reilly). Dieses Buch stellt die Grundlagen von Machine Learning vor und implementiert die wichtigsten Algorithmen in reinem Python (von null auf).
Stephen Marsland,
Machine Learning: An Algorithmic Perspective
(Chapman & Hall). Dieses Buch ist eine großartige Einführung in Machine Learning, die viele Themen ausführlich behandelt. Es enthält Codebeispiele in Python (ebenfalls von null auf, aber mit NumPy).
Sebastian Raschka,
Machine Learning mit Python und Scikit-Learn und TensorFlow: Das umfassende Praxis-Handbuch für Data Science, Predictive Analytics und Deep Learning
(mitp Professional). Eine weitere ausgezeichnete Einführung in Machine Learning. Dieses Buch konzentriert sich auf Open-Source-Bibliotheken in Python (Pylearn 2 und Theano).
François Chollet,
Deep Learning mit Python und Keras: Das Praxis-Handbuch vom Entwickler der Keras-Bibliothek
(mitp Professional). Ein sehr praxisnahes Buch, das klar und präzise viele Themen behandelt – wie Sie es vom Autor der ausgezeichneten Keras-Bibliothek erwarten können. Es zieht Codebeispiele der mathematischen Theorie vor.
Andriy Burkov,
Machine Learning kompakt: Alles, was Sie wissen müssen
(mitp Professional). Dieses sehr kurze Buch behandelt ein beeindruckendes Themenspektrum gut verständlich, scheut dabei aber nicht vor mathematischen Gleichungen zurück.
Yaser S. Abu-Mostafa, Malik Magdon-Ismail und Hsuan-Tien Lin,
Learning from Data
(AMLBook). Als eher theoretische Abhandlung von ML enthält dieses Buch sehr tiefgehende Erkenntnisse, insbesondere zum Gleichgewicht zwischen Bias und Varianz (siehe
Kapitel 4
).
Stuart Russell and Peter Norvig,
Artificial Intelligence: A Modern Approach, 3rd Edition
(Pearson). Dieses ausgezeichnete (und umfangreiche) Buch deckt eine unglaubliche Stoffmenge ab, darunter Machine Learning. Es hilft dabei, ML in einem breiteren Kontext zu betrachten.
Eine gute Möglichkeit zum Lernen sind schließlich Webseiten mit ML-Wettbewerben wie Kaggle.com (https://www.kaggle.com/). Dort können Sie Ihre Fähigkeiten an echten Aufgaben üben und Hilfe und Tipps von einigen der besten ML-Profis erhalten.
Die folgenden typografischen Konventionen werden in diesem Buch verwendet:
Kursiv
Kennzeichnet neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateiendungen.
Konstante Zeichenbreite
Wird für Programmlistings und für Programmelemente in Textabschnitten wie Namen von Variablen und Funktionen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter verwendet.
Konstante Zeichenbreite, fett
Kennzeichnet Befehle oder anderen Text, den der Nutzer wörtlich eingeben sollte.
Konstante Zeichenbreite, kursiv
Kennzeichnet Text, den der Nutzer je nach Kontext durch entsprechende Werte ersetzen sollte.
Dieses Symbol steht für einen Tipp oder eine Empfehlung.
Dieses Symbol steht für einen allgemeinen Hinweis.
Dieses Symbol steht für eine Warnung oder erhöhte Aufmerksamkeit.
Es gibt eine Reihe von Jupyter-Notebooks voll mit zusätzlichem Material, wie Codebeispielen und Übungen, die zum Herunterladen unter https://github.com/ageron/handson-ml2 bereitstehen.
Einige der Codebeispiele im Buch lassen sich wiederholende Abschnitte oder Details weg, die offensichtlich sind oder nichts mit Machine Learning zu tun haben. Das sorgt dafür, dass Sie sich auf die wichtigen Teile des Codes konzentrieren können, und spart Platz, um mehr Themen unterzubringen. Wollen Sie sich die vollständigen Codebeispiele betrachten, finden Sie diese in den Jupyter-Notebooks.
Geben die Codebeispiele etwas aus, wird dies mit Python-Prompts (>>> und ...) wie in einer Python-Shell dargestellt, um den Code deutlich von den Ausgaben trennen zu können. So definiert beispielsweise folgender Code die Funktion square(), rechnet dann damit und gibt das Quadrat von 3 aus:
Gibt Code nichts aus, werden keine Prompts verwendet. Aber das Ergebnis wird manchmal als Kommentar angegeben, wie zum Beispiel hier:
Dieses Buch ist dazu da, Ihnen beim Erledigen Ihrer Arbeit zu helfen. Im Allgemeinen dürfen Sie die Codebeispiele aus diesem Buch in Ihren eigenen Programmen und der dazugehörigen Dokumentation verwenden. Sie müssen uns dazu nicht um Erlaubnis fragen, solange Sie nicht einen beträchtlichen Teil des Codes reproduzieren. Beispielsweise benötigen Sie keine Erlaubnis, um ein Programm zu schreiben, in dem mehrere Codefragmente aus diesem Buch vorkommen. Wollen Sie dagegen eine CD-ROM mit Beispielen aus Büchern von O’Reilly verkaufen oder verteilen, benötigen Sie eine Erlaubnis. Eine Frage zu beantworten, indem Sie aus diesem Buch zitieren und ein Codebeispiel wiedergeben, benötigt keine Erlaubnis. Eine beträchtliche Menge Beispielcode aus diesem Buch in die Dokumentation Ihres Produkts aufzunehmen, bedarf hingegen einer Erlaubnis.
Wir freuen uns über Zitate, verlangen diese aber nicht. Ein Zitat enthält Titel, Autor, Verlag und ISBN. Beispiel: »Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow von Aurélien Géron (O’Reilly). Copyright 2020, ISBN 978-3-96009-124-0.«
Wenn Sie glauben, dass Ihre Verwendung von Codebeispielen über die übliche Nutzung hinausgeht oder außerhalb der oben vorgestellten Nutzungsbedingungen liegt, kontaktieren Sie uns bitte unter [email protected].
In meinen wildesten Träumen hätte ich mir niemals vorgestellt, dass die erste Auflage dieses Buchs solch eine Verbreitung finden würde. Ich habe so viele Nachrichten von Lesern erhalten – oft mit Fragen, manche mit freundlichen Hinweisen auf Fehler und die meisten mit ermutigenden Worten. Ich kann gar nicht sagen, wie dankbar ich all diesen Lesern für ihre Unterstützung bin. Vielen, vielen Dank! Scheuen Sie sich nicht, sich auf GitHub (https://homl.info/issues2) zu melden, wenn Sie Fehler in den Codebeispielen finden (oder einfach etwas fragen wollen) oder um auf Fehler im Text aufmerksam (https://homl.info/errata2) zu machen. Manche Leser haben mir auch geschrieben, wie dieses Buch ihnen dabei geholfen hat, ihren ersten Job zu bekommen oder ein konkretes Problem zu lösen, an dem sie gearbeitet haben. Ich finde ein solches Feedback unglaublich motivierend. Hat Ihnen dieses Buch geholfen, würde ich mich freuen, wenn Sie mir Ihre Geschichte erzählen würden – entweder privat (zum Beispiel über LinkedIn (https://www.linkedin.com/in/aurelien-geron/)) oder öffentlich (beispielsweise in einem Tweet oder über ein Amazon-Review (https://homl.info/amazon2)).
Ich bin all den fantastischen Menschen unglaublich dankbar, die in ihrem geschäftigen Leben die Zeit gefunden haben, mein Buch im Detail gegenzulesen. Insbesondere möchte ich François Chollet dafür danken, dass er alle Kapitel zu Keras und TensorFlow kontrolliert und mir großartiges und detailliertes Feedback gegeben hat. Da Keras eine meiner wichtigsten Ergänzungen dieser zweiten Auflage ist, war die Review durch den Autor unbezahlbar. Ich empfehle Ihnen François’ Buch Deep Learning mit Python und Keras: Das Praxis-Handbuch vom Entwickler der Keras-Bibliothek (mitp Professional): Es bietet die Präzision, Klarheit und Tiefe, die auch die Keras-Bibliothek selbst besitzt. Besonderer Dank geht ebenfalls an Ankur Patel, der jedes Kapitel dieser zweiten Auflage begutachtet und mir ausgezeichnetes Feedback gegeben hat, insbesondere zu Kapitel 9, das sich um unüberwachtes Lernen dreht. Er könnte glatt ein ganzes Buch zu dem Thema schreiben … Moment mal, das hat er ja! Schauen Sie sich mal Praxisbuch Unsupervised Learning: Machine-Learning-Anwendungen für ungelabelte Daten mit Python programmieren (https://www.oreilly.de/buecher/13534/9783960091271-praxisbuch-unsupervised-learning.html) (O’Reilly) an. Ein großes Dankeschön auch an Olzhas Akpambetov, der alle Kapitel im zweiten Teil des Buchs begutachtet, sehr viel Code getestet und viele großartige Verbesserungsvorschläge gemacht hat. Ich bin dankbar, dass Mark Daoust, Jon Krohn, Dominic Monn und Josh Patterson den zweiten Teil des Buchs so genau begutachtet und ihre Erfahrungen eingebracht haben. Sie ließen keinen Stein auf dem anderen und lieferten ausgezeichnete Hinweise.
Beim Schreiben dieser zweiten Auflage hatte ich das Glück, sehr viel Hilfe von Mitgliedern des TensorFlow-Teams zu bekommen, insbesondere von Martin Wicke, der unermüdlich Dutzende meiner Fragen beantwortet und den Rest an die richtigen Leute weitergeleitet hat, unter anderen an Karmel Allison, Paige Bailey, Eugene Brevdo, William Chargin, Daniel »Wolff« Dobson, Nick Felt, Bruce Fontaine, Goldie Gadde, Sandeep Gupta, Priya Gupta, Kevin Haas, Konstantinos Katsiapis, Viacheslav Kovalevskyi, Allen Lavoie, Clemens Mewald, Dan Moldovan, Sean Morgan, Tom O’Malley, Alexandre Passos, André Susano Pinto, Anthony Platanios, Oscar Ramirez, Anna Revinskaya, Saurabh Saxena, Ryan Sepassi, Jiri Simsa, Xiaodan Song, Christina Sorokin, Dustin Tran, Todd Wang, Pete Warden (der auch die erste Auflage begutachtet hat), Edd Wilder-James und Yuefeng Zhou, die alle außerordentlich hilfreich waren. Ein großer Dank an euch alle und auch an alle anderen Mitglieder des TensorFlow-Teams – nicht nur für eure Hilfe, sondern auch dafür, dass ihr solch eine tolle Bibliothek geschaffen habt. Ein besonderer Dank geht an Irene Giannoumis und Robert Crowe vom TFCX-Team, die die Kapitel 13 und 19 im Detail durchgearbeitet haben.
Ich danke auch den fantastischen Menschen bei O’Reilly, insbesondere Nicole Taché für ihr aufschlussreiches, immer freundliches, ermutigendes und hilfreiches Feedback. Eine bessere Lektorin hätte ich mir nicht vorstellen können. Ein großer Dank geht an Michele Cronin, die zu Beginn dieser zweiten Auflage sehr hilfreich (und geduldig) war, und an Kristen Brown, Production Editor für die zweite Auflage, die sie auf allen Schritten begleitet hat (sie hat auch Korrekturen und Aktualisierungen jedes Nachdrucks der ersten Auflage koordiniert). Ich danke Rachel Monaghan und Amanda Kersey für ihr umfassendes Copyediting (der ersten bzw. zweiten Auflage) und Johnny O’Toole, der die Beziehung zu Amazon gemanagt und viele meiner Fragen beantwortet hat. Dank geht an Marie Beaugureau, Ben Lorica, Mike Loukides und Laurel Ruma dafür, dass sie an dieses Projekt geglaubt und mir geholfen haben, den Rahmen abzustecken. Ich danke Matt Hacker und dem gesamten Atlas-Team für das Beantworten aller meiner technischen Fragen zu Formatierung, AsciiDoc und LaTeX sowie Nick Adams, Rebecca Demarest, Rachel Head, Judith McConville, Helen Monroe, Karen Montgomery, Rachel Roumeliotis und allen bei O’Reilly, die zu diesem Buch beigetragen haben.
Ich möchte auch meinen früheren Kollegen bei Google danken, insbesondere dem Team zur Klassifikation von YouTube-Videos, von denen ich sehr viel über Machine Learning gelernt habe. Ohne sie hätte ich die erste Auflage niemals starten können. Besonderer Dank gebührt meinen persönlichen ML-Gurus: Clément Courbet, Julien Dubois, Mathias Kende, Daniel Kitachewsky, James Pack, Alexander Pak, Anosh Raj, Vitor Sessak, Wiktor Tomczak, Ingrid von Glehn und Rich Washington. Und danke an alle anderen, mit denen ich bei YouTube und in den großartigen Google-Forschungsteams in Mountain View zusammengearbeitet habe. Vielen Dank auch an Martin Andrews, Sam Witteveen und Jason Zaman, dass sie mich in ihre Google-Developer-Experts-Gruppe in Singapur aufgenommen haben – mit freundlicher Unterstützung durch Soonson Kwon – und für all die tollen Diskussionen über Deep Learning und TensorFlow. Jeder, der in Singapur an Deep Learning interessiert ist, sollte auf jeden Fall das Deep Learning Singapore Meetup (https://homl.info/meetupsg) besuchen. Jason verdient besonderen Dank für sein TFLite-Know-how, das in Kapitel 19 eingeflossen ist!
Nie werde ich all die netten Leute vergessen, die die erste Auflage dieses Buchs Korrektur gelesen haben, unter anderem David Andrzejewski, Lukas Biewald, Justin Francis, Vincent Guilbeau, Eddy Hung, Karim Matrah, Grégoire Mesnil, Salim Sémaoune, Iain Smears, Michel Tessier, Ingrid von Glehn, Pete Warden und natürlich mein lieber Bruder Sylvain. Ein besonderer Dank geht an Haesun Park, der mir sehr viel ausgezeichnetes Feedback gab und viele Fehler fand, während er die koreanische Übersetzung der ersten Auflage schrieb. Er hat auch die Jupyter-Notebooks ins Koreanische übersetzt, nicht zu vergessen die Dokumentation von TensorFlow. Ich spreche kein Koreanisch, aber in Anbetracht der Qualität seines Feedbacks müssen alle seine Übersetzungen wirklich ausgezeichnet sein. Darüber hinaus hat Haesun freundlicherweise ein paar der Lösungen zu den Übungen in dieser zweiten Auflage beigetragen.
Schließlich bin ich meiner geliebten Frau Emmanuelle und unseren drei wunderbaren Kindern Alexandre, Rémi und Gabrielle unendlich dafür dankbar, dass sie mich zur Arbeit an diesem Buch ermutigt haben. Auch danke ich ihnen für ihre unersättliche Neugier: Indem ich einige der schwierigsten Konzepte in diesem Buch meiner Frau und meinen Kindern erklärt habe, konnte ich meine Gedanken ordnen und viele Teile direkt verbessern. Und sie haben mir sogar Kekse und Kaffee vorbeigebracht. Was kann man sich noch mehr wünschen?
Die meisten Menschen denken beim Begriff »Machine Learning« an einen Roboter: einen zuverlässigen Butler oder einen tödlichen Terminator, je nachdem, wen Sie fragen. Aber Machine Learning ist keine futuristische Fantasie, es ist bereits Gegenwart. Tatsächlich gibt es Machine Learning in bestimmten, spezialisierten Anwendungsbereichen wie der optischen Zeichenerkennung (OCR) schon seit Jahrzehnten. Aber die erste weitverbreitete Anwendung von ML, die das Leben von Hunderten Millionen Menschen verbesserte, hat die Welt in den 1990er-Jahren erobert: Es war der Spamfilter. Es ist nicht gerade ein Skynet mit eigenem Bewusstsein, aber technisch gesehen ist es Machine Learning (es hat inzwischen so gut gelernt, dass Sie nur noch selten eine E-Mail als Spam kennzeichnen müssen). Dem Spamfilter folgten etliche weitere Anwendungen von ML, die still und heimlich Hunderte Produkte und Funktionen aus dem Alltag steuern, darunter Einkaufsempfehlungen und Stimmsuche.
Wo aber beginnt Machine Learning, und wo hört es auf? Worum genau geht es, wenn eine Maschine etwas lernt? Wenn ich mir eine Kopie von Wikipedia herunterlade, hat mein Computer dann schon etwas gelernt? Ist er auf einmal schlauer geworden? In diesem Kapitel werden wir erst einmal klarstellen, was Machine Learning ist und wofür Sie es einsetzen könnten.
Bevor wir aber beginnen, den Kontinent des Machine Learning zu erforschen, werfen wir einen Blick auf die Landkarte und lernen die wichtigsten Regionen und Orientierungspunkte kennen: überwachtes und unüberwachtes Lernen, Online- und Batch-Learning, instanzbasiertes und modellbasiertes Lernen. Anschließend betrachten wir die Arbeitsabläufe in einem typischen ML-Projekt, diskutieren die dabei wichtigsten Herausforderungen und besprechen, wie Sie ein Machine-Learning-System auswerten und optimieren können.
In diesem Kapitel werden diverse Grundbegriffe (und Fachjargon) eingeführt, die jeder Data Scientist auswendig kennen sollte. Es wird ein abstrakter und recht einfacher Überblick bleiben (das einzige Kapitel mit wenig Code), aber Ihnen sollte alles glasklar sein, bevor Sie mit dem Buch fortfahren. Schnappen Sie sich also einen Kaffee, und los geht’s!
Wenn Sie bereits sämtliche Grundlagen von Machine Learning kennen, können Sie direkt mit Kapitel 2 fortfahren. Falls Sie sich nicht sicher sind, versuchen Sie, die Fragen am Ende des Kapitels zu beantworten, bevor Sie fortfahren.
Machine Learning ist die Wissenschaft (und Kunst), Computer so zu programmieren, dass sie anhand von Daten lernen.
Hier ist eine etwas allgemeinere Definition:
[Maschinelles Lernen ist das] Fachgebiet, das Computern die Fähigkeit zu lernen verleiht, ohne explizit programmiert zu werden.
– Arthur Samuel 1959
Und eine eher technisch orientierte:
Man sagt, dass ein Computerprogramm dann aus Erfahrungen E in Bezug auf eine Aufgabe T und ein Maß für die Leistung P lernt, wenn seine durch P gemessene Leistung bei T mit der Erfahrung E anwächst.
– Tom Mitchell 1997
Ihr Spamfilter ist ein maschinelles Lernprogramm, das aus Beispielen für Spam-E-Mails (z.B. vom Nutzer markierten) und gewöhnlichen E-Mails (Nicht-Spam, auch »Ham« genannt) lernt, Spam zu erkennen. Diese vom System verwendeten Lernbeispiele nennt man den Trainingsdatensatz. Jedes Trainingsbeispiel nennt man einen Trainingsdatenpunkt (oder Instanz). In diesem Fall besteht die Aufgabe T darin, neue E-Mails als Spam zu kennzeichnen, die Erfahrung E entspricht den Trainingsdaten. Nur das Leistungsmaß P ist noch zu definieren; Sie könnten z.B. den Anteil korrekt klassifizierter E-Mails verwenden. Dieses Leistungsmaß nennt man Genauigkeit. Es wird bei Klassifikationsaufgaben häufig verwendet.
Falls Sie gerade eine Kopie von Wikipedia heruntergeladen haben, verfügt Ihr Computer über eine Menge zusätzlicher Daten, verbessert sich dadurch aber bei keiner Aufgabe. Deshalb ist dies kein Machine Learning.
Überlegen Sie einmal, wie Sie mit herkömmlichen Programmiertechniken einen Spamfilter schreiben würden (siehe Abbildung 1-1):
Zuerst würden Sie sich ansehen, wie Spam typischerweise aussieht. Sie würden feststellen, dass einige Wörter oder Phrasen (wie »Für Sie«, »Kreditkarte«, »kostenlos«, und »erstaunlich«) in der Betreffzeile gehäuft auftreten. Möglicherweise würden Ihnen auch weitere Muster im Namen des Absenders, dem Text und in anderen Teilen der E-Mail auffallen.
Sie würden für jedes der von Ihnen erkannten Muster einen Algorithmus schreiben, der dieses erkennt, und Ihr Programm würde E-Mails als Spam markieren, sobald eine bestimmte Anzahl dieser Muster erkannt wird.
Sie würden Ihr Programm testen und die Schritte 1 und 2 wiederholen, bis es gut genug ist.
Abbildung 1-1: Die herkömmliche Herangehensweise
Da diese Aufgabe schwierig ist, wird Ihr Programm vermutlich eine lange Liste komplexer Regeln beinhalten – und ganz schön schwer zu warten sein.
Dagegen lernt ein mit Machine-Learning-Techniken entwickelter Spamfilter automatisch, welche Wörter und Phrasen Spam gut vorhersagen, indem er im Vergleich zu den Ham-Beispielen ungewöhnlich häufige Wortmuster in den Spambeispielen erkennt (siehe Abbildung 1-2). Das Programm wird viel kürzer, leichter zu warten und wahrscheinlich auch treffsicherer.
Abbildung 1-2: Der Machine-Learning-Ansatz
Wenn außerdem die Spammer bemerken, dass alle ihre E-Mails mit »Für Sie« geblockt werden, könnten sie stattdessen auf »4U« umsatteln. Ein mit traditionellen Programmiertechniken entwickelter Spamfilter müsste aktualisiert werden, um die E-Mails mit »4U« zu markieren. Wenn die Spammer sich ständig um Ihren Spamfilter herumarbeiten, werden Sie ewig neue Regeln schreiben müssen.
Ein auf Machine Learning basierender Spamfilter bemerkt dagegen automatisch, dass »4U« auffällig häufig in von Nutzern als Spam markierten Nachrichten vorkommt, und beginnt, diese ohne weitere Intervention auszusortieren (siehe Abbildung 1-3).
Abbildung 1-3: Automatisches Einstellen auf Änderungen
Machine Learning brilliert außerdem bei Aufgaben, die entweder zu komplex für herkömmliche Verfahren sind oder für die kein bekannter Algorithmus existiert. Betrachten Sie z.B. Spracherkennung: Sagen wir, Sie beginnen mit einer einfachen Aufgabe und schreiben ein Programm, das die Wörter »one« und »two« unterscheiden kann. Sie bemerken, dass das Wort »two« mit einem hochfrequenten Ton (»T«) beginnt, und könnten demnach einen Algorithmus hartcodieren, der die Intensität hochfrequenter Töne misst und dadurch »one« und »two« unterscheiden kann. Natürlich skaliert diese Technik nicht auf Tausende Wörter, die von Millionen von Menschen mit Hintergrundgeräuschen und in Dutzenden von Sprachen gesprochen werden. Die (zumindest heutzutage) beste Möglichkeit ist, einen Algorithmus zu schreiben, der eigenständig aus vielen aufgenommenen Beispielen für jedes Wort lernt.
Schließlich kann Machine Learning auch Menschen beim Lernen unterstützen (siehe Abbildung 1-4): ML-Algorithmen lassen sich untersuchen, um zu erkennen, was sie gelernt haben (auch wenn dies bei manchen Algorithmen kompliziert sein kann). Wenn z.B. der Spamfilter erst einmal mit genug Spam trainiert wurde, lässt sich die Liste von Wörtern und Wortkombinationen inspizieren, die als gute Merkmale von Spam erkannt wurden. Manchmal kommen dabei überraschende Korrelationen oder neue Trends ans Tageslicht und führen dadurch zu einem besseren Verständnis der Aufgabe. Das Anwenden von ML-Techniken zum Durchwühlen großer Datenmengen hilft dabei, nicht unmittelbar ersichtliche Muster zu finden. Dies nennt man auch Data Mining.
Zusammengefasst, ist Machine Learning hervorragend geeignet für:
Aufgaben, bei denen die existierenden Lösungen eine Menge Feinarbeit oder lange Listen von Regeln erfordern: Ein maschineller Lernalgorithmus vereinfacht oft den Code und schneidet besser ab als der klassische Ansatz.
Komplexe Aufgaben, für die es mit herkömmlichen Methoden überhaupt keine gute Lösung gibt: Die besten Machine-Learning-Techniken können vielleicht eine Lösung finden.
Fluktuierende Umgebungen: Ein Machine-Learning-System kann sich neuen Daten anpassen.
Erkenntnisse über komplexe Aufgabenstellungen und große Datenmengen zu gewinnen.
Abbildung 1-4: Machine Learning hilft Menschen beim Lernen.
Schauen wir uns ein paar konkrete Beispiele für Aufgaben des Machine Learning und die dabei eingesetzten Techniken an:
Produktbilder in der Herstellung analysieren, um sie automatisch zu klassifizieren
Dies ist Bildklassifikation, meist ausgeführt durch Convolutional Neural Networks (CNNs, siehe Kapitel 14).
Tumoren in Gehirnscans erkennen
Das ist eine semantische Segmentierung, bei der jedes Pixel im Bild klassifiziert wird (da wir die genaue Position und Form des Tumors bestimmen wollen), meist ebenfalls mithilfe von CNNs.
Nachrichtenartikel automatisch klassifizieren
Dies ist linguistische Datenverarbeitung (NLP, Natural Language Processing) und, spezifischer, Textklassifikation, die sich über rekurrente neuronale Netze (RNNs), CNNs oder Transformer angehen lässt (siehe Kapitel 16).
Beleidigende Kommentare in Diskussionsforen automatisch markieren
Dabei handelt es sich ebenfalls um Textklassifikation mit den gleichen NLP-Tools.
Automatisch lange Dokumente zusammenfassen
Dies ist ein Zweig der NLP namens Textextrahierung, ebenfalls mit den gleichen Tools.
Einen Chatbot oder persönlichen Assistenten erstellen
Dazu gehören viele NLP-Komponenten, unter anderem das Verstehen natürlicher Sprache (Natural Language Understanding, NLU) und Module zum Beantworten von Fragen.
Den Umsatz Ihrer Firma für das nächste Jahr basierend auf vielen Performancemetriken vorhersagen
Dies ist eine Regressionsaufgabe (also das Vorhersagen von Werten), die über ein Regressionsmodell wie ein lineares oder polynomisches Regressionsmodell (siehe Kapitel 4), eine Regressions-SVM (siehe Kapitel 5), einen Regressions-Random-Forest (siehe Kapitel 7) oder ein künstliches neuronales Netzwerk (siehe Kapitel 10) angegangen werden kann. Wollen Sie Zeitreihen vergangener Metriken mit einbeziehen, können Sie RNNs, CNNs oder Transformer nutzen (siehe die Kapitel 15 und 16).
Kreditkartenmissbrauch erkennen
Dies ist Anomalieerkennung (siehe Kapitel 9).
Kunden anhand ihrer Einkäufe segmentieren, sodass Sie für jeden Bereich unterschiedliche Marketingstrategien entwerfen können
Das ist Clustering (siehe Kapitel 9).
Einen komplexen, hochdimensionalen Datensatz in einem klaren und verständlichen Diagramm darstellen
Hier geht es um Datenvisualisierung, meist unter Verwendung von Techniken zur Datenreduktion (siehe Kapitel 8).
Einem Kunden basierend auf dessen bisherigen Käufen ein Produkt empfehlen, das ihn interessieren könnte
Dies ist ein Empfehlungssystem. Ein Ansatz ist, Käufe aus der Vergangenheit (und andere Informationen über den Kunden) in ein künstliches neuronales Netzwerk einzuspeisen (siehe Kapitel 10) und es dazu zu bringen, den wahrscheinlichsten nächsten Kauf auszugeben. Dieses neuronale Netzwerk würde typischerweise mit bisherigen Abfolgen von Käufen aller Kunden trainiert werden.
Einen intelligenten Bot für ein Spiel bauen
Dies wird oft durch Reinforcement Learning (RL, siehe Kapitel 18) angegangen. Dabei handelt es sich um einen Zweig des Machine Learning, der Agenten trainiert (zum Beispiel Bots), um die Aktionen auszuwählen, die mit der Zeit in einer gegebenen Umgebung (wie dem Spiel) ihre Belohnungen maximieren (beispielsweise kann ein Bot immer dann eine Belohnung erhalten, wenn der Spieler Lebenspunkte verliert). Das berühmte AlphaGo-Programm, das den Weltmeister im Go geschlagen hat, wurde mithilfe von RL gebaut.
Diese Liste könnte immer weiter fortgeführt werden, aber hoffentlich haben Sie auch so schon einen Eindruck von der unglaublichen Breite und Komplexität der Aufgaben erhalten, die Machine Learning angehen kann, und die Art von Techniken, die Sie dafür verwenden würden.
Es gibt so viele verschiedene Arten von Machine-Learning-Systemen, dass es hilfreich ist, die Verfahren nach folgenden Kriterien in grobe Kategorien einzuteilen:
Ob sie mit menschlicher Überwachung trainiert werden oder nicht (überwachtes, unüberwachtes und halbüberwachtes Lernen sowie Reinforcement Learning).
Ob sie inkrementell dazulernen können oder nicht (Online-Learning gegenüber Batch-Learning).
Ob sie einfach neue Datenpunkte mit den bereits bekannten Datenpunkten vergleichen oder stattdessen Muster in den Trainingsdaten erkennen, um ein Vorhersagemodell aufzubauen, wie es auch Wissenschaftler tun (instanzbasiertes gegenüber modellbasiertem Lernen).
Diese Kriterien schließen sich nicht gegenseitig aus; sie lassen sich beliebig miteinander kombinieren. Zum Beispiel kann ein moderner Spamfilter ständig mit einem neuronalen Netzwerkmodell mit Beispielen für Spam und Ham dazulernen; damit ist er ein modellbasiertes, überwachtes Onlinelernsystem.
Betrachten wir jedes dieser Kriterien etwas genauer.
Machine-Learning-Systeme lassen sich entsprechend der Menge und Art der Überwachung beim Trainieren einordnen. Es gibt dabei vier größere Kategorien: überwachtes Lernen, unüberwachtes Lernen, halbüberwachtes Lernen und verstärkendes Lernen (Reinforcement Learning).
Beim überwachten Lernen enthalten die dem Algorithmus gelieferten Trainingsdaten die gewünschten Lösungen, genannt Labels (siehe Abbildung 1-5).
Abbildung 1-5: Ein Trainingsdatensatz mit Labels zur Spamerkennung (ein Beispiel für überwachtes Lernen)
Klassifikation ist eine typische überwachte Lernaufgabe. Spamfilter sind hierfür ein gutes Beispiel: Sie werden mit vielen Beispiel-E-Mails und deren Kategorie (Spam oder Ham) trainiert und müssen lernen, neue E-Mails zu klassifizieren.
Eine weitere typische Aufgabe ist, eine numerische Zielgröße vorherzusagen, wie etwa den Preis eines Autos auf Grundlage gegebener Merkmale (gefahrene Kilometer, Alter, Marke und so weiter), den sogenannten Prädiktoren. Diese Art Aufgabe bezeichnet man als Regression (siehe Abbildung 1-6).1 Um das System zu trainieren, benötigt es viele Beispielfahrzeuge mitsamt ihren Prädiktoren und Labels (also den Preisen).
Viele Regressionsalgorithmen lassen sich auch zur Klassifikation einsetzen und umgekehrt. Zum Beispiel ist die logistische Regression eine verbreitete Methode für Klassifikationsaufgaben, da sie die Wahrscheinlichkeit der Zugehörigkeit zu einer bestimmten Kategorie als Ergebnis liefert (z.B. 20%ige Chance für Spam).
Abbildung 1-6: Ein Regressionsproblem: Sage mithilfe eines Eingangsmerkmals einen Wert voraus (es gibt meist mehrere Eingangsmerkmale und manchmal auch mehrere Ausgangsmerkmale).
Hier sind ein paar der wichtigsten (in diesem Buch besprochenen) überwachten Lernalgorithmen:
k-nächste-Nachbarn
lineare Regression
logistische Regression
Support Vector Machines (SVMs)
Entscheidungsbäume und Random Forests
neuronale Netzwerke
2
Beim unüberwachten Lernensind die Trainingsdaten, wie der Name vermuten lässt, nicht gelabelt (siehe Abbildung 1-7). Das System versucht, ohne Anleitung zu lernen.
Abbildung 1-7: Ein Trainingsdatensatz ohne Labels für unüberwachtes Lernen
Hier sind ein paar der wichtigsten unüberwachten Lernalgorithmen (wir werden die Dimensionsreduktion in Kapitel 8 und Kapitel 9 behandeln):
Clustering
– k-Means
– DBSCAN
– hierarchische Cluster-Analyse (HCA)
Anomalieerkennung und Novelty Detection
– One-Class-SVM
– Isolation Forest
Visualisierung und Dimensionsreduktion
– Hauptkomponentenzerlegung (PCA)
– Kernel-PCA
– Locally-Linear Embedding (LLE)
– t-verteiltes Stochastic Neighbor Embedding (t-SNE)
Lernen mit Assoziationsregeln
– Apriori
– Eclat
Nehmen wir an, Sie hätten eine Menge Daten über Besucher Ihres Blogs. Sie möchten einen Clustering-Algorithmus verwenden, um Gruppen ähnlicher Besucher zu entdecken (siehe Abbildung 1-8). Sie verraten dem Algorithmus nichts darüber, welcher Gruppe ein Besucher angehört, er findet die Verbindungen ohne Ihr Zutun heraus. Beispielsweise könnte der Algorithmus bemerken, dass 40% Ihrer Besucher Männer mit einer Vorliebe für Comics sind, die Ihr Blog abends lesen, 20% dagegen sind junge Science-Fiction-Fans, die am Wochenende vorbeischauen. Wenn Sie ein hierarchisches Cluster-Verfahren verwenden, können Sie sogar jede Gruppe in weitere Untergruppen zerlegen, was hilfreich sein kann, wenn Sie Ihre Blogartikel auf diese Zielgruppen zuschneiden möchten.
Abbildung 1-8: Clustering
Algorithmen zur Visualisierung sind ebenfalls ein gutes Beispiel für unüberwachtes Lernen: Sie übergeben diesen eine Menge komplexer Daten ohne Labels und erhalten eine 2-D- oder 3-D-Repräsentation der Daten, die Sie leicht grafisch darstellen können (siehe Abbildung 1-9). Solche Algorithmen versuchen, die Struktur der Daten so gut wie möglich zu erhalten (z.B. Cluster in den Eingabedaten am Überlappen in der Visualisierung zu hindern), sodass Sie leichter verstehen können, wie die Daten aufgebaut sind, und womöglich auf unvermutete Muster stoßen.
Eine verwandte Aufgabe ist die Dimensionsreduktion, bei der das Ziel die Vereinfachung der Daten ist, ohne dabei allzu viele Informationen zu verlieren. Dazu lassen sich mehrere korrelierende Merkmale zu einem vereinigen. Beispielsweise korreliert der Kilometerstand eines Autos stark mit seinem Alter, daher kann ein Algorithmus zur Dimensionsreduktion beide zu einem Merkmal verbinden, das die Abnutzung des Fahrzeugs repräsentiert. Dies nennt man auch Extraktion von Merkmalen.
Abbildung 1-9: Beispiel für eine t-SNE-Visualisierung semantischer Cluster3
Meist ist es eine gute Idee, die Dimensionen Ihrer Trainingsdaten zu reduzieren, bevor Sie sie in einen anderen Machine-Learning-Algorithmus einspeisen (wie etwa einen überwachten Lernalgorithmus). Er wird viel schneller arbeiten, und die Daten beanspruchen weniger Platz auf der Festplatte und im Speicher. In manchen Fällen ist auch das Ergebnis besser.
Eine weitere wichtige unüberwachte Aufgabe ist das Erkennen von Anomalien – beispielsweise ungewöhnliche Transaktionen auf Kreditkarten, die auf Betrug hindeuten, das Abfangen von Produktionsfehlern oder das automatische Entfernen von Ausreißern aus einem Datensatz, bevor dieser in einen weiteren Lernalgorithmus eingespeist wird. Dem System werden beim Training vor allem gewöhnliche Datenpunkte präsentiert, sodass es lernt, sie zu erkennen. Sieht es dann einen neuen Datenpunkt, kann es entscheiden, ob dieser wie ein normaler Punkt oder eine Anomalie aussieht (siehe Abbildung 1-10). Eine sehr ähnliche Aufgabe ist die Novelty Detection: Ihr Ziel ist es, neue Instanzen zu erkennen, die anders als alle anderen Instanzen im Trainingsdatensatz aussehen. Dafür brauchen Sie einen sehr »sauberen« Trainingsdatensatz, der von allen Instanzen befreit ist, die der Algorithmus erkennen soll. Haben Sie beispielsweise Tausende von Bildern mit Hunden und sind nur auf 1% dieser Bilder Chihuahuas zu sehen, sollte ein Algorithmus zur Novelty Detection neue Bilder von Chihuahuas nicht als Besonderheiten behandeln. Ein Algorithmus zur Anomalieerkennung mag diese Hunde allerdings als so selten ansehen – und als so anders als andere Hunde –, dass er sie als Anomalien klassifizieren würde (nichts gegen Chihuahuas).
Abbildung 1-10: Erkennen von Anomalien
Schließlich ist auch das Lernen von Assoziationsregeln eine verbreitete unüberwachte Lernaufgabe, bei der das Ziel ist, in große Datenmengen einzutauchen und interessante Beziehungen zwischen Merkmalen zu entdecken. Wenn Sie beispielsweise einen Supermarkt führen, könnten Assoziationsregeln auf Ihren Verkaufsdaten ergeben, dass Kunden, die Grillsoße und Kartoffelchips einkaufen, tendenziell auch Steaks kaufen. Daher sollten Sie diese Artikel in unmittelbarer Nähe zueinander platzieren.
Da das Labeling normalerweise zeitaufwendig und teuer ist, werden Sie oftmals sehr viele ungelabelte und wenige gelabelte Instanzen haben. Einige Algorithmen können mit nur teilweise gelabelten Trainingsdaten arbeiten. Dies bezeichnet man als halbüberwachtes Lernen (siehe Abbildung 1-11).
Abbildung 1-11: Halbüberwachtes Lernen mit zwei Klassen (Dreiecke und Quadrate): Die ungelabelten Beispiele (Kreise) helfen dabei, eine neue Instanz (das Kreuz) in die Dreiecksklasse statt in die Quadratklasse einzuordnen, auch wenn sie näher an den gelabelten Quadraten ist.
Einige Fotodienste wie Google Photos bieten hierfür ein gutes Beispiel. Sobald Sie all Ihre Familienfotos in den Dienst hochgeladen haben, erkennt dieser automatisch, dass die gleiche Person A auf den Fotos 1, 5 und 11 vorkommt, während Person B auf den Fotos 2, 5 und 7 zu sehen ist. Dies ist der unüberwachte Teil des Algorithmus (Clustering). Nun muss das System nur noch wissen, wer diese Personen sind. Ein Label pro Person4 genügt, um jede Person in jedem Foto zuzuordnen, was bei der Suche nach Fotos äußerst nützlich ist.
Die meisten Algorithmen für halbüberwachtes Lernen sind Kombinationen aus unüberwachten und überwachten Verfahren. Beispielsweise beruhen Deep Belief Networks (DBNs) auf in Reihe geschalteten unüberwachten Komponenten namens restricted Boltzmann Machines (RBMs). Die RBMs werden nacheinander unüberwacht trainiert. Die Feinabstimmung des Gesamtsystems findet anschließend mit überwachten Lerntechniken statt.
Reinforcement Learning ist etwas völlig anderes. Das Lernsystem, in diesem Zusammenhang als Agent bezeichnet, beobachtet eine Umgebung, wählt Aktionen und führt diese aus. Dafür erhält es Belohnungen (oder Strafen in Form negativer Belohnungen wie in Abbildung 1-12). Das System muss selbst herausfinden, was die beste Strategie oder Policy ist, um mit der Zeit die meisten Belohnungen zu erhalten. Eine Policy definiert, welche Aktion der Agent in einer gegebenen Situation auswählt.
Abbildung 1-12: Reinforcement Learning
Beispielsweise verwenden viele Roboter Reinforcement-Learning-Algorithmen, um laufen zu lernen. Auch das Programm AlphaGo von DeepMind ist ein gutes Beispiel für Reinforcement Learning: Es geriet im Mai 2017 in die Schlagzeilen, als es den Weltmeister Ke Jie im Brettspiel Go schlug. AlphaGo erlernte die zum Sieg führende Policy, indem es Millionen von Partien analysierte und anschließend viele Spiele gegen sich selbst spielte. Beachten Sie, dass das Lernen während der Partien gegen den Weltmeister abgeschaltet war; AlphaGo wandte nur die bereits erlernte Policy an.
Ein weiteres Kriterium zum Einteilen von Machine-Learning-Systemen ist, ob das System aus einem kontinuierlichen Datenstrom inkrementell lernen kann.
Beim Batch-Learning kann das System nicht inkrementell lernen, es muss mit sämtlichen verfügbaren Daten trainiert werden. Dies dauert meist lange und beansprucht Rechenkapazitäten. Es wird daher in der Regel offline durchgeführt. Zuerst wird das System trainiert und anschließend in einer Produktivumgebung eingesetzt, wo es ohne weiteres Lernen läuft; es wendet lediglich das bereits Erlernte an. Dies nennt man Offline-Learning.
Wenn Sie möchten, dass ein Batch-Learning-System etwas über neue Daten erfährt (beispielsweise neuartigen Spam), müssen Sie eine neue Version des Systems ein weiteres Mal mit dem gesamten Datensatz trainieren (nicht einfach nur den neuen Datensatz, sondern auch den alten). Anschließend müssen Sie das alte System anhalten und durch das neue ersetzen.
Glücklicherweise lässt sich der gesamte Prozess aus Training, Evaluation und Inbetriebnahme eines Machine-Learning-Systems recht leicht automatisieren (wie in Abbildung 1-3 gezeigt). So kann sich selbst ein Batch-Learning-System anpassen. Aktualisieren Sie einfach die Daten und trainieren Sie eine neue Version des Systems so oft wie nötig.
Dies ist eine einfache Lösung und funktioniert meist gut, aber das Trainieren mit dem gesamten Datensatz kann viele Stunden beanspruchen. Daher würde man das neue System nur alle 24 Stunden oder wöchentlich trainieren. Wenn Ihr System sich an schnell ändernde Daten anpassen muss (z.B. um Aktienkurse vorherzusagen), benötigen Sie eine anpassungsfähigere Lösung.
Außerdem beansprucht das Trainieren auf dem gesamten Datensatz eine Menge Rechenkapazität (CPU, Hauptspeicher, Plattenplatz, I/O-Kapazität, Netzwerkbandbreite und so weiter). Wenn Sie eine Menge Daten haben und Ihr System automatisch jeden Tag trainieren lassen, kann Sie das am Ende eine Stange Geld kosten. Falls die Datenmenge sehr groß ist, kann der Einsatz von Batch-Learning sogar unmöglich sein.
Wenn Ihr System autonom lernen muss und die Ressourcen dazu begrenzt sind (z.B. eine Applikation auf einem Smartphone oder ein Fahrzeug auf dem Mars), ist das Herumschleppen großer Mengen an Trainingsdaten oder das Belegen einer Menge Ressourcen für mehrere Stunden am Tag kein gangbarer Weg.
In all diesen Fällen sind Algorithmen, die inkrementell lernen können, eine bessere Alternative.
Beim Online-Learning, wird das System nach und nach trainiert, indem einzelne Datensätze nacheinander oder in kleinen Paketen, sogenannten Mini-Batches, hinzugefügt werden. Jeder Lernschritt ist schnell und billig, sodass das System aus neuen Daten lernen kann, sobald diese verfügbar sind (siehe Abbildung 1-13).
Online-Learning eignet sich großartig für ein System mit kontinuierlich eintreffenden Daten (z.B. Aktienkursen), das sich entweder schnell oder autonom an Veränderungen anpassen muss. Auch wenn Ihnen nur begrenzte Rechenkapazitäten zur Verfügung stehen, ist es eine sinnvolle Option: Sobald ein Online-Learning-System die neuen Datenpunkte erlernt hat, werden diese nicht mehr benötigt und können verworfen werden (es sei denn, Sie möchten in der Lage sein, zu einem früheren Zustand zurückzukehren und den Datenstrom erneut »abzuspielen«). Dies kann enorme Mengen an Speicherplatz einsparen.
Abbildung 1-13: Beim Online-Learning wird ein Modell trainiert und in den Produktivbetrieb übernommen, wo es mit neu eintreffenden Daten weiterlernt.
Algorithmen zum Online-Learning lassen sich auch zum Trainieren von Systemen mit riesigen Datensätzen einsetzen, die nicht in den Hauptspeicher eines Rechners passen (dies nennt man auch Out-of-Core-Lernen). Der Algorithmus lädt einen Teil der Daten, führt einen Trainingsschritt auf den Daten aus und wiederholt den Prozess, bis er sämtliche Daten verarbeitet hat (siehe Abbildung 1-14).
Out-of-Core-Lernen wird für gewöhnlich offline durchgeführt (also nicht auf einem Produktivsystem), daher ist der Begriff Online-Learning etwas irreführend. Stellen Sie sich darunter eher inkrementelles Lernen vor.
Ein wichtiger Parameter bei Online-Learning-Systemen ist, wie schnell sie sich an sich verändernde Daten anpassen. Man spricht hier von der Lernrate. Wenn Sie die Lernrate hoch ansetzen, wird sich Ihr System schnell auf neue Daten einstellen, aber die alten Daten auch leicht wieder vergessen (Sie möchten sicher nicht, dass ein Spamfilter nur die zuletzt gesehenen Arten von Spam erkennt). Wenn Sie die Lernrate dagegen niedrig ansetzen, entwickelt das System eine höhere Trägheit; das bedeutet, es lernt langsamer, ist aber auch weniger anfällig für Rauschen in den neuen Daten oder für Folgen nicht repräsentativer Datenpunkte (Outlier).
Abbildung 1-14: Verwenden von Online-Learning zum Bewältigen riesiger Datensätze
Eine große Herausforderung beim Online-Learning besteht darin, dass in das System eingespeiste minderwertige Daten zu einer allmählichen Verschlechterung seiner Leistung führen. Wenn es sich dabei um ein Produktivsystem handelt, werden Ihre Kunden dies bemerken. Beispielsweise könnten minderwertige Daten von einem fehlerhaften Sensor an einem Roboter oder auch von jemandem stammen, der sein Ranking in einer Suchmaschine durch massenhafte Anfragen zu verbessern versucht. Um dieses Risiko zu reduzieren, müssen Sie Ihr System aufmerksam beobachten und den Lernprozess beherzt abschalten (und eventuell auf einen früheren Zustand zurücksetzen), sobald Sie einen Leistungsabfall bemerken. Sie können auch die Eingabedaten verfolgen und auf ungewöhnliche Daten reagieren (z.B. über einen Algorithmus zur Erkennung von Anomalien).
Eine weitere Möglichkeit, maschinelle Lernverfahren zu kategorisieren, ist die Art, wie diese verallgemeinern. Bei den meisten Aufgaben im Machine Learning geht es um das Treffen von Vorhersagen. Dabei muss ein System in der Lage sein, aus einer Anzahl von Trainingsbeispielen auf nie zuvor gesehene Beispiele zu verallgemeinern. Es ist hilfreich, aber nicht ausreichend, eine gute Leistung auf den Trainingsdaten zu erzielen; das wirkliche Ziel ist, eine gute Leistung auf neuen Datenpunkten zu erreichen.
Es gibt beim Verallgemeinern zwei Ansätze: instanzbasiertes Lernen und modellbasiertes Lernen.
Die vermutlich trivialste Art zu lernen, ist das einfache Auswendiglernen. Wenn Sie auf diese Weise einen Spamfilter erstellten, würde dieser einfach alle E-Mails aussortieren, die mit bereits von Nutzern markierten E-Mails identisch sind – nicht die schlechteste Lösung, aber sicher nicht die beste.
Anstatt einfach mit bekannten Spam-E-Mails identische Nachrichten zu markieren, könnte Ihr Spamfilter auch so programmiert sein, dass darüber hinaus bekannten Spam-E-Mails sehr ähnliche Nachrichten markiert werden. Dazu ist ein Ähnlichkeitsmaß zwischen zwei E-Mails nötig. Ein (sehr einfaches) Maß für die Ähnlichkeit zweier E-Mails könnte die Anzahl gemeinsamer Wörter sein. Das System könnte eine E-Mail als Spam markieren, wenn diese viele gemeinsame Wörter mit einer bekannten Spamnachricht aufweist.
Dies nennt man instanzbasiertes Lernen: Das System lernt die Beispiele auswendig und verallgemeinert dann mithilfe eines Ähnlichkeitsmaßes auf neue Fälle, wobei es sie mit den gelernten Beispielen (oder einer Untermenge davon) vergleicht. So würden beispielsweise in Abbildung 1-15 die neuen Instanzen als Dreieck klassifiziert werden, weil die Mehrheit der ähnlichsten Instanzen zu dieser Klasse gehört.
Abbildung 1-15: Instanzbasiertes Lernen
Eine andere Möglichkeit, von einem Beispieldatensatz zu verallgemeinern, ist, ein Modell aus den Beispielen zu entwickeln und dieses Modell dann für Vorhersagen zu verwenden. Das wird als modellbasiertes Lernen bezeichnet (siehe Abbildung 1-16).
Abbildung 1-16: Modellbasiertes Lernen
Nehmen wir an, Sie möchten herausfinden, ob Geld glücklich macht. Sie laden dazu die Daten des Better Life Index von der Webseite des OECD (https://homl.info/4) herunter und Statistiken zum Pro-Kopf-Bruttoinlandsprodukt (BIP) von der Webseite des IMF (https://homl.info/5). Anschließend führen Sie beide Tabellen zusammen und sortieren nach dem BIP pro Kopf. Tabelle 1-1 zeigt einen Ausschnitt des Ergebnisses.
Tabelle 1-1: Macht Geld Menschen glücklicher?
Land
BIP pro Kopf (USD)
Zufriedenheit
Ungarn
12240
4,9
Korea
27195
5,8
Frankreich
37675
6,5
Australien
50962
7,3
Vereinigte Staaten
55805
7,2
Stellen wir die Daten für einige dieser Länder dar (siehe Abbildung 1-17).
Abbildung 1-17: Sehen Sie hier eine Tendenz?
Es scheint so etwas wie einen Trend zu geben! Auch wenn die Daten verrauscht sind (also teilweise zufällig), sieht es so aus, als stiege die Zufriedenheit mehr oder weniger mit dem Pro-Kopf-BIP des Lands linear an. Sie beschließen also, die Zufriedenheit als lineare Funktion des Pro-Kopf-Bruttoinlandsprodukts zu modellieren. Diesen Schritt bezeichnet man als Modellauswahl: Sie wählen ein lineares Modell der Zufriedenheit mit genau einem Merkmal aus, nämlich dem Pro-Kopf-BIP (siehe Formel 1-1).
Diesen Modell enthält zwei Modellparameter, θ0 und θ1.5 Indem Sie diese Parameter verändern, kann das Modell jede lineare Funktion annehmen, wie Sie in Abbildung 1-18 sehen können.
Abbildung 1-18: Einige mögliche lineare Modelle
Bevor Sie Ihr Modell verwenden können, müssen Sie die Werte der Parameter θ0 und θ1 festlegen. Woher sollen Sie wissen, welche Werte zur bestmöglichen Leistung führen? Um diese Frage zu beantworten, müssen Sie ein Maß für die Leistung festlegen. Sie können dafür entweder eine Nutzenfunktion (oder Fitnessfunktion) verwenden, die die Güte Ihres Modells bestimmt. Alternativ können Sie eine Kostenfunktion definieren, die misst, wie schlecht das Modell ist. Bei linearen Modellen verwendet man typischerweise eine Kostenfunktion, die die Entfernung zwischen den Vorhersagen des linearen Modells und den Trainingsbeispielen bestimmt; das Ziel ist, diese Entfernung zu minimieren.
Nun passt das Modell (für ein lineares Modell) bestmöglich zu den Trainingsdaten, wie Abbildung 1-19 zeigt.
Abbildung 1-19: Das an die Trainingsdaten optimal angepasste lineare Modell
Um Ihren Appetit auf die folgenden Kapitel anzuregen, zeigt Beispiel 1-1 den Python-Code, der die Daten lädt, vorbereitet,6 einen Scatterplot zeichnet, ein lineares Modell trainiert und eine Vorhersage trifft.7
Wenn alles gut gegangen ist, wird Ihr Modell gute Vorhersagen treffen. Wenn nicht, müssen Sie weitere Merkmale heranziehen (Beschäftigungsquote, Gesundheit, Luftverschmutzung und Ähnliches), sich mehr oder hochwertigere Trainingsdaten beschaffen oder ein mächtigeres Modell auswählen (z.B. ein polynomielles Regressionsmodell).
Zusammengefasst:
Sie haben die Daten untersucht.
Sie haben ein Modell ausgewählt.
Sie haben es auf Trainingsdaten trainiert (d.h., der Trainingsalgorithmus hat nach den Modellparametern gesucht, die eine Kostenfunktion minimieren).
Schließlich haben Sie das Modell verwendet, um für neue Fälle Vorhersagen zu treffen (dies nennt man
Inferenz
), und hoffen, dass das Modell gut verallgemeinert.
So sieht ein typisches Machine-Learning-Projekt aus. In Kapitel 2
