Machine Learning für Softwareentwickler. Paolo Perrotta
Anhang
Wie sieht Python-Code aus?
Dynamische Typisierung
Einrückungen
Die Bausteine von Python
Datentypen und Operatoren
Datenstrukturen
Strings
Schleifen
Funktionen definieren und aufrufen
Schlüsselwortargumente
Standardargumente
Module und Pakete
Module definieren und importieren
Das __main__-Idiom
Pakete verwalten
Objekte erstellen und verwenden
Das war’s
B Wörterbuch des Machine Learning
Für meine Frau.
Na, wie klingt das, Irene?
Danksagung
Ein besonderes Dankeschön gilt meinen Fachgutachtern: Alessandro Bahgat, Arno Bastenhof, Roberto Bettazzoni, Guido »Zen« Bolognesi, Juan de Bravo, Simone Busoli, Pieter Buteneers, Andrea Cisternino, Sebastian Hennebrüder, Alberto Lumbreras, Russ Olsen, Luca Ongaro, Pierpaolo Pantone, Karol Przystalski, Dan Sheikh, Leonie Sieger, Gal Tsubery, l’ùmarèin pugnàtta di Casalecchio und Giancarlo Valente. Ich schulde euch eine ganze Menge! Ja, unter anderem auch ein Bier!
Vielen Dank auch den großzügigen Lesern, die mir in der Betaphase Kommentare und Errata geschickt haben: Marco Arena, Glen Aultman-Bettridge, Zbynek Bazanowski, Jamis Buck, Charles de Bueger, Leonardo Carotti, Helge Eichhorn, George Ellis, Bruno Girin, Elton Goci, Dave Halliday, Darren Hunt, Peter Lin, Karen Mauney, Bradley Mirly, Vasileios Ntarlagiannis, Volkmar Petschnig, David Pinto, Conlan Rios, Roman Romanchuk, Ionut Simion, Drew Thomas und Jeroen Wenting. Sollten wir uns mal auf einer Konferenz begegnen, dann sprecht mich ruhig an!
Danke auch an Annamaria Di Sebastiano, die mir die Geschichte vom Anfang des ersten Kapitels erzählt hat. Lange nicht mehr gesehen!
Des Weiteren danke ich Marc Schnierle für seine hervorragende Web-App LaTeX4technics1, mit der ich die Formeln erstellt habe; Kimberly Geswein für die Gestaltung der Schriftart Indie Flower, die ich in den Diagrammen verwendet habe; den Designern der in der Originalausgabe ausgiebig verwendeten Schriftarten DejaVu Sans und DejaVu Sans Mono; und dem Stadtrat von Brisbane für die Veröffentlichung des Fotos mit dem Ameisenigel2, das in leicht veränderter Form in einem der späteren Kapitel auftaucht.
Dieses Buch ging durch die Hände von drei hervorragenden Lektorinnen. Vielen Dank an Meghan Blanchette und Susan Conant, die mich von den ersten Entwürfen bis zur Mitte des Buchs brachten. Entschuldigt bitte, wenn ich hier noch Unterschiede mache, aber mein besonderer Dank gilt Katherine Dvorak für die unglaubliche Arbeit, die sie in dieses Buch investiert hat, und ihre feste, aber immer geduldige Führung. Du bist eine erstaunliche Lektorin, Katie.
Vielen Dank auch an Dad, Mom, Anna und Susanna sowie an meine erweiterte Familie von Freunden und Verwandten, die weit verstreut rund um die Welt leben. Es ist mir immer eine große Freude, euch um mich zu haben.
Und schließlich danke ich meiner Frau Irene: Du warst da, als ich mit dem Schreiben begann, und hast mich in diesem rauen Sommer sehr unterstützt. Jetzt, da das Buch in den Druck geht, bist du immer noch da, unerschütterlich und unbeirrbar. Ich verdanke dir alles. Dieses Buch ist dir gewidmet.
Wie um alles in der Welt ist so etwas möglich?
Machine Learning kann wie Zauberei wirken. Wie kann ein Computer die Objekte in einem Bild erkennen? Wie kann ein Auto selbstständig fahren?
Diese Leistungen sind nicht nur für Laien verblüffend, sondern auch für viele Softwareentwickler wie Sie und mich. Obwohl ich schon viele Jahre lang Code schrieb, war es mir völlig unklar, wie Machine Learning überhaupt funktionieren konnte. Während ich ein bisschen mit den neuesten Web-Frameworks herumbastelte, schrieben andere Leute faszinierende Software, die wie Science-Fiction wirkte und die ich einfach nicht fassen konnte.
Ich wollte mitmachen. Ich wollte selbst in der Lage sein, solche Dinge zu tun.
Da ich schon wusste, wie man Software schreibt, glaubte ich, ich könnte Machine Learning schnell begreifen. Wie schwer konnte das auch schon sein? Also setzte ich ein zuversichtliches Lächeln auf und widmete mich dem Studium dieses Themas. Mein zuversichtliches Lächeln gefror, als ich gegen ganze Batterien von Wänden anrannte.
Für Entwickler wie mich fühlt sich Machine Learning fremdartig an. Diese Disziplin quillt über von mathematischer Terminologie, akademischen Konventionen und, mal ganz ehrlich gesagt, schlechtem Code. Anstatt auf Tutorials werden Sie auf Vorträge und Forschungsberichte verwiesen. Für viele von uns ist Machine Learning ebenso einschüchternd wie faszinierend.
Dieses Buch ist das, was ich selbst gut hätte gebrauchen können, als ich mich mit Machine Learning zu befassen begann: eine Einführung, die sich an Entwickler richtet und in unserer Sprache geschrieben ist. Nach der Lektüre werden Sie mit den Grundlagen vertraut und in der Lage sein, Machine-Learning-Programme zu schreiben. Höchstwahrscheinlich werden Sie dann zwar immer noch nicht ihr eigenes selbstfahrendes Auto konstruieren können, aber zumindest werden Sie wissen, wie um alles in der Welt so etwas möglich ist.
Über dieses Buch
Dies ist ein Buch für Entwicklerinnen und Programmierer, die Machine Learning von der Pike auf lernen wollen.
Machine Learning ist ein sehr breit gefächertes Gebiet, das sich in einem einzelnen Buch nicht vollständig abhandeln lässt. Der Schwerpunkt liegt hier daher auf den drei Aspekten des Machine Learning, die heutzutage als die wichtigsten gelten: auf überwachtem Lernen, neuronalen Netzen und Deep Learning. Was es mit diesen Begriffen auf sich hat, werden wir uns im Verlauf dieses Buchs noch ansehen, aber für den Anfang finden Sie hier schon einmal eine Skizze sowie einige Definitionen in Kurzfassung:
Überwachtes Lernen ist die heutzutage am weitesten verbreitete Spielart des Machine Learning. Teil I dieses Buchs, »Von null auf Bilderkennung«, gibt eine praktische Einführung in überwachtes Lernen. Schon im zweiten Kapitel werden wir ein minimales ML-Programm schreiben, das wir anschließend Schritt für Schritt erweitern und in ein als Perzeptron bezeichnetes Machine-Learning-System verwandeln. Unser Perzeptron ist dabei ein echtes Programm für maschinelles Sehen, das leistungsfähig genug ist, um handgeschriebene Zeichen zu erkennen. Wir gestalten es komplett selbst, ohne dazu ML-Bibliotheken zu Hilfe zu nehmen, damit Sie jede einzelne Zeile des Codes genau verstehen.
Es gibt viele verschiedene Möglichkeiten, um ein System für überwachtes Lernen zu implementieren. Am häufigsten werden dazu neuronale Netze verwendet. Dabei handelt es sich um einen brillanten Algorithmus, der sich an die Verknüpfung der Neuronen in