Geht es hier weiter?


Wo bleibt Teil 5?

Die kurze Antwort: “Ja, es geht weiter!” - Teil 5 ist bereits in Vorbereitung.

Die lange Antwort: Im Januar sollte es gleich mit Teil 5 weitergehen, und es war geplant, die Perzeptron-Reihe vor Beginn des Frühlings abzuschließen. Aber manchmal kommt etwas im Leben dazwischen, so dass der Plan nicht eingehalten werden konnte. Dankenswerter Weise habe ich in den letzten Monaten sehr viel nette Rückmeldungen von meinen LeserInnen bekommen, und ich freue mich, wieviele - jung und alt - schon die Tutorials erfolgreich durchgearbeitet haben! Das spornt mich an. Auch Fragen, die via E-Mail reinkommen (siehe Kontaktinfos unter /tutorials) beantworte ich fleißig. In diesen Tagen arbeite ich wieder intensiv am nächsten Teil und erarbeite dann mit Euch die Backpropagation für mehrschichtige Netze. Stay tuned, sorry for delay.

Tutorial - Das Perzeptron - Teil 4


Der Lego-Baukasten des Maschinellen Lernens - heute mit sigmoidaler Aktivierungsfunktion

Sigmoide Aktivierung und logistische Regression

Den wenigsten wird nach dem letzten Teil des Tutorials bewusst sein, welche enorme Vielfalt sich über Nacht eröffnet hat und wieviel Macht bereits in den Puzzle-Steinen steckt, die wir uns unter Schweiß und Tränen erarbeitet haben. Um einen Überblick über die ungeahnten Möglichkeiten zu gewinnen, und um das mühsam im letzten Tutorial Erlernte auch gleich for fun and profit anzuwenden und zu vertiefen, schieben wir einen Use-Case mit einem Datensatz über Weine ein!

Folgende wesentlichen Bausteine haben wir uns im letzten Teil angesehen:

  • Gradientenabstieg: Von einem beliebigen Startpunkt aus wandern wir auf einer Funktion entgegengesetzt zur Steigung hin zu einem Minimum;
  • wir sind auf einer Loss-Funktion zum Minimum des Fehlers gewandert; mit der Kettenregel haben wir einen Weg vom Loss zum Gewicht gefunden und konnten dadurch ein einzelnes Gewicht isolieren;
  • wir hatten eine lineare Aktivierung des Ausgabeneurons untersucht, damit eine Lineare Regression durchgeführt, also eine Gerade durch eine Datenwolke gezogen;
  • Und alles in allem, haben wir damit die erweiterte Delta-Regel hergeleitet.

Was wir tun wollen

Zum einen beschäftigen wir uns eingehender mit einer neuen Verlustfunktion oder auch Loss-Funktion. Wer sich bspw. mit Keras und TensorFlow bewegt, wird auch in der API eine ganze Reihe von Loss-Funktionen wiederfinden können, siehe bspw. https://keras.io/losses/. Dort werden einfach knapp die bereits implementierten Loss-Funktionen aufgelistet. Man sollte also vorher schon wissen, was man da warum verwenden möchte.

Zum anderen schauen wir uns eine andere Aktivierungsfunktion an, die sigmoide Schwellwertfunktion (keine Panik, das wird gleich noch schön auseinandergenommen).

Auch in tiefen Netzwerken gibt es die “letzte Meile”, das Ende des Netzes, und die Kenntnis von dem Zusammenspiel zwischen Verlust- und Aktivierungsfunktion ist ganz besonders wichtig.

Dann werden wir einen Datensatz als Grundlage für ein Training nehmen: dieses Mal wollen wir anhand von verschiedenen, laboranalytischen Eigenschaften eines Weines klassifizieren, ob es sich um einen edlen oder um einen schlechten Wein handelt. Wir werden also quasi über Nacht zum Weinkenner, ohne eine einzige Flasche aufzumachen! Was aber niemanden davon abhalten soll, heute Abend zur Belohnung ein wenig guten Weines einzuschenken. Prost!

Neuronale Netze als Baukasten des Machine Learning

Mit einer geschickten Kombination aus Aktivierungs- und Verlustfunktion und strukturellem Aufbau kann man mit Hilfe der neuronalen Netze eine ganze Schar von klassischen Algorithmen des Maschinellen Lernens, wie bspw. die Logistische Regression (engl. logistic regression) oder eine (lineare) Support Vektor Maschine (engl. support vector machine, SVM) wiederentdecken - man muss sich auch nicht doof vorkommen, wenn man diese Begriffe heute zum ersten Mal hört.

Die große Macht der neuronalen Netze heute ist nun auch darin begründet, dass man diese bewährten Verfahren in den neuronalen Netzen aufgehen lassen und durch Schachtelung und Rekombination zu neuen Höhen treiben kann. Die Neuronalen Netze sind also universelle Machine Learning-Algorithmen: das erklärt vielleicht auch, warum sich heute alle darauf stürzen, und warum es so viel Spaß macht, damit zu arbeiten.

Wir haben uns zum Verständnis des Gradientenabstieges im letzten Tutorial an der Linearen Regression lang gehangelt. In Zeiten von großen Datenmengen mit vielen Variablen kann es sogar sinnvoll sein, eine Variante des Gradientenabstieges auch für die Lineare Regression einzusetzen.

In diesem Tutorial erarbeiten wir uns allerdings mithilfe des neuronalen Modells ein Verfahren aus dem Maschinellen Lernen, das als Logistische Regression bekannt ist - und es gibt kaum einen Data Scientisten auf der Welt, der bei einer Klassifikationsaufgabe und einem bislang unbekannten Datensatz nicht als erstes auch eine LogReg, wie sie liebevoll genannt wird, darauf ansetzt.

Auch am Ende eines tiefen Netzwerkes für bspw. die Bilderkennung ist auch heute nichts anderes als eine sog. Logistische Regression! Das letzte Glied in der Kette ist ja oftmals eine Klassifikation, bspw., ob auf einem Bild ein Rüde oder ein Wollpullover zu sehen ist (nicht, dass man das immer sicher nur anhand eines Bildes unterscheiden könnte).

Eine logistische Regression ist dem Wesen nach nichts anderes als ein ganz bestimmtes neuronales Netzwerk mit je einer ganz bestimmten Aktivierungs- und Verlustfunktion. Nur, dass das über viele Jahrzehnte niemand in dieser Klarheit erkannt hat - die einen kamen eher aus der Statistik, die anderen eher aus der biologisch motivierten Neuroinformatik / Kybernetik. Ist ja auch egal, wie wir das Ding nennen - Hauptsache, wir lösen uns langsam mal von den Baby-Aktivierungsfunktionen! Und wir riechen auch so schon, dass neuronale Netze viel flexibler sein werden, als ein starres altbackenes Korsett der klassischen Verfahren.

Wir gehen da jetzt rein in pikanteste Details, also schnallt Euch an und: Legen wir los!

... hier weiterlesen ...

TensorSpace.js: Deep Learning Modelle in 3D


Hat hier jemand eine Blackbox gesehen?

Ein Neuronales Netz steht ja für gewöhnlich in Verruf, eine Blackbox zu sein. Insbesondere die tiefen neuronalen Netze wollen wohl unheimliche Mathematik-Monster sein, die niemand mehr verstehen oder kontrollieren kann.

Nicht nur deshalb haben sich Entwickler auf Github zusammengetan und eine Bibliothek entwickelt, mit der man im Browser tiefe neuronale Modelle visuell erforschen und untersuchen kann: TensorSpace.js!

Mit einer Keras-artigen API kann man via JavaScript ein Modell kreieren und auch vortrainierte Modelle laden, Predictions durchführen und das beste: Layer für Layer anzoomen, rotieren, anklicken und verstehen, was da eigentlich passiert. Hier sehen wir das Modell LeNet von Yann LeCunn in Aktion:

Quelle: tensorspace.org

Auch richtig fette Modelle sind dabei, so dass man schon eine Weile warten muss, um ein halbes Gigabyte an Gewichten für die neuronalen Netze runterzuladen. Richtig schön lassen sich die Convolutional Layer aufsplitten:

Quelle: tensorspace.org

Nagut, man muss zugeben: auch nach dem Reinzoomen erscheinen uns die Dinger noch wie geheimnisumwitterte Blackboxen. Aber für das Verständnis und zum Untersuchen von tiefen neuronalen Netzen ist diese Visualisierungsbibliothek allemal bestens geeignet. Das schöne ist ja: die API ist völlig offen, so dass man eigene Modelle ebenso damit visualisieren kann.

Viel Spaß beim Ausprobieren!

Tutorial - Das Perzeptron - Teil 3


Gradientenabstieg und Herleitung der Delta-Regel - die Mathematik hinter den Neuronalen Netzen

Die allgemeinere Mechanik des maschinellen Lernens

In den letzten beiden Tutorials haben wir uns eine Menge erarbeitet, aber natürlich wollen wir uns noch lange nicht damit zufrieden geben. Wir wollen noch mehr!

Einige Dinge haben wir auch einfach so akzeptiert, ohne, dass wir diese schon hinterfragt hätten. Warum brauche ich eine Lernrate? Wie groß soll meine Lernrate sein? Und warum funktioniert das Lernen überhaupt, und gibt es auch Fälle, in denen es nicht funktioniert? Können wir die Ausgabeneuronen immer nur binär aktivieren und nur 1/0-Entscheidungen treffen?

In dieser dritten und wirklich umfangreichen Ausgabe des Tutorials schließen wir daher noch ein paar konzeptionelle Lücken rund um das Perzeptron, und eines gleich vorweg: es wird ein paar Nüsse zu knacken geben.

Je nach Vorkenntnissen wird es passieren, dass man das Tutorial nicht an einem Nachmittag schafft, und man also über mehrere Tage verteilt den Text durchackert. Aber das ist vollkommen in Ordnung, und es lohnt sich auch tierisch!

Falls sich jemand, der schon Ableitungen rauf und runter gelernt hat, jemals gefragt hat, wofür man dieses Wissen benötigt: hier können wir es einsetzen. Aber keine Angst, wir stehen das gemeinsam durch. Legt schon mal ein Lineal und ein Energy-Drink Eurer Wahl bereit. Denn beides werden wir brauchen, um uns den Gradientenabstieg (engl. gradient descent) zu erarbeiten. Dazu machen wir uns die Welt auch erstmal wieder einfach.

Wir fangen ganz einfach an, mit einem Strich durch eine Datenwolke. Der Strich ist das Modell, das wir aus den Datenpunkten erlernen wollen. Das könnten bspw. Daten einer Messstation für CO2-Werte sein:

... hier weiterlesen ...

Bizarre GAN-Welten - wenn die KI (Alb-)Träume hat


Die Bildimaginationen von sog. GANs (von engl. Generative Adversarial Networks, auf dtsch. etwa Generative Gegnerische Netzwerke) erzeugen mitunter bizarre Bildwelten, die sich bspw. auf ganbreeder.app erkunden lassen.

Hier sieht man eine Bildreihe, von einem Ausgangsbild zum jeweils nächsten, die auf ganbreeder.app erzeugt wurde.

Bei GANs sind gleich zwei Akteure beteiligt: Ein Netz, das Bilder durch Aktivierung von Neuronen erzeugt, und ein weiteres Netz, das beurteilt, ob diese Imagination aussieht wie ein echtes Bild. Das generierende Netz (Generator) versucht dann, das beurteilende Netz (den Diskriminator) immer besser zu täuschen.

Unter dem Hashtag #ganbreeder kann man sich auf Twitter allerlei lustige Kreationen anderer User anschauen - oder man erzeugt einfach seine eigene.

Tutorial - Das Perzeptron - Teil 2


Mit Python und Numpy das Perzeptron verstehen

Nun kann es richtig losgehen

Im ersten Teil dieses Tutorials haben wir uns darauf eingelassen, grundlegende Ideen der künstlichen neuronalen Netze kennen zu lernen und haben die mathematischen Kniffe der Delta-Lernregel untersucht. Wir haben ein Ausgabeneuron geschaffen, das - immerhin - schon beliebig viele Eingabeneuronen haben kann. Das werden wir uns gleich auch zunutze machen.

Eine taktische Einschränkung haben wir damals noch gemacht: die Eingabeneuronen sollten zunächst nur binäre Aktivierung haben. Das war aber vor allen Dingen ein lerntaktischer Trick, um das Rechnen im Kopf einfach zu halten, wenn man versucht, die Schritte nachzuvollziehen.

Wir können diese Regelung getrost aufbrechen, und die Lernregel hält immer noch: in eben dieser Regel multiplizieren wir ja mit dem passenden Eingabeneuron i_n - und eine kleine Aktivierung dieses Eingabeneurons wird auch weiterhin einen eher kleinen Anteil am Netzfehler haben als eine große Aktivierung dieses Neurons. Wir könnten also auch bspw. für “Freunde haben Zeit” einen Wert von 0.7 eintragen, wenn nur ein Teil der Freunde Zeit gehabt hätte, und damit ganz neue Trainings-Horizonte eröffnen. 1

Was vorerst gleich bleibt, ist, das wir mit einem Ausgabeneuron weiterarbeiten und dieses auch weiterhin nur mit 1 aufleuchten oder mit 0 dunkel lassen, also binär aktivieren wollen, wie gehabt mit der schönen Treppenfunktion.

Kann man damit denn bis jetzt auch schon etwas Sinnvolles tun? Wir versuchen es!

Kurze Wiederholung und Vertiefung

Was wir tun wollen

Ein unter Data Scientisten mittlerweile bekannter Datensatz sind Aufzeichnungen eines Sonars, also das, was von den ausgesendeten Schallwellen wieder zurückreflektiert und sensorisch erfasst wurde. Dabei gibt es genau zwei Klassen in diesem Experiment: das eine sind Aufzeichnungen, die die Reflektionsmuster eines Felsens wiedergeben, das andere sind Beispiele für Echos von einem metallischen Zylinder. Insgesamt gibt es 111 Beispiele für Felsen und 97 Beispiele für Metallzylinder, und jedes Beispiel umfasst sagenhafte 60 verschiedene Merkmale. Jedes davon steht für die Intensität einer Frequenz, die wieder als Echo zurückkam.

... hier weiterlesen ...

Das Weihnachtsgeschenk für Data Scientisten


Was schenkt man einem Mathe-Nerd?

Allen Voraussagen zum Trotz kommt Weihnachten doch immer ganz plötzlich, und dann steht man wieder da mit einem kurzen Hemd mitten im Winter: was zur Hölle schenke ich eigentlich XY? Vor allen Dingen, wenn XY eine Data Scientistin oder ein Data Scientist oder sonstwie Matheverrückte/r ist, bleibt das ideale Geschenk mitunter eine ungelöste Variable.

Hier sind ein paar Dinge, die mir persönlich dieses Jahr besonders gut gefallen haben.

Ein Galtonbrett

Ein Galtonbrett zeigt auf spielerische Art und Weise gleich mehrere Aspekte des Alltags eines Data Scientisten: der Zufall bahnt sich seinen Weg, hier in Form von kleinen Stahlkügelchen, die allesamt die gleiche Chance haben, auf ihrem Weg nach unten nach links oder rechts abgelenkt zu werden. Schließlich entsteht eine Form, die sich deutlich als Glockenkurve zu erkennen gibt.

In Aktion sieht das ganze so aus: ist das nicht wunderbar?

In Deutschland ist das Galtonboard derzeit nur beim Mathematikum Gießen erhältlich: https://shop.mathematikum.de - wer das Mathematikum in Gießen nicht kennt, sollte aber zumindestens Prof. Beutelspacher kennen, den Autoren zahlreicher studentenfreundlicher Bücher. Der hat auch das Mathematikum “erfunden”.

Ein Roman: “NSA” von Andreas Eschbach

Das Buch “Nationales Sicherheits-Amt” von Andreas Eschbach, druckfrisch im Oktober 2018, bettet die aktuelle Diskussion um Internetüberwachung, Vorratsdatenspeicherung, Datenanalyse, Cloud-Speicher und mithörende Geräte in die düstere Geschichte des Dritten Reiches ein. Ausgehend von der Frage, was wäre gewesen, wenn der Computer schon im 19. Jahrhundert erfunden worden wäre - und nicht erst zum Ende des Zweiten Weltkrieges - baut Eschbach eine hervorragend in den Kontext der Zeit passende Geschichte, mit mobilen Volkstelefonen und bargeldlosen Geschäften.

Tut mir einen Gefallen und versucht, jedwedem Spoiler zu widerstehen, so dass die Erzählung ihre unmittelbare Kraft entfalten kann.

NSA - Nationales Sicherheits-Amt ist bei Bastei Luebbe erschienen.

Schokolade

Data ScientistInnen haben einen hohen Energiebedarf, gerade in der kalten Jahreszeit. Also, seid so gut, und packt noch einen Riegel Schokolade ins Weihnachtspaket. Wahlweise auch mit Nüssen, sofern diese nicht aufgrund von Allergien kontraindiziert sind.

Bremen kann KI


bremen.ai ging in die 2. Runde

Die gestrige zweite Event aus der Veranstaltungsreihe von bremen.ai war nicht nur überaus gut besucht, sondern auch höchst spannend zu verfolgen. Die Besucher von vielen kleineren und größeren Bremer Unternehmungen, in Form von sowohl etablierten Akteuren als auch Neugründungen, lassen schon erahnen, wie vielfältig KI in Bremen sein kann und auch heute schon ist.

Für mich war Bremen schon immer ein Top-Standort für KI in Deutschland, zum einen durch das DFKI, aber natürlich auch durch die hervorragende Arbeit an der Bremer Universität. Gut, dass bremen.ai das nun auch nach außen tragen möchte.

Als unternehmensübergreifendes Forum wird bremen.ai eine Heimat im Verein “Bremen Digitalmedia e. V.” erhalten und somit auch offiziell in öffentliche Hand gelegt. Unterstützt wird bremen.ai vom Senator für Wirtschaft, Arbeit und Häfen.

Die ersten Pflänzchen verwurzeln sich auch schon: neben Meetups zu speziellen Themen, wie Chatbots oder Deep Learning, werden auch weitere Formate eingeübt, bspw. Erfahrungstausch in Sachen Fördermittel, die in den kommenden Jahren im KI-Bereich zulegen werden, aber auch technische Hands-On Workshops scheinen nicht undenkbar, so dass die KI für viele besser erfahrbar werden kann.

Tutorial - Das Perzeptron


Neuronales Netz selbst entwickeln mit Python

Die Geschichte geht zurück auf das Perzeptron

Im Grunde fing der Hype um Deep Learning schon in der Mitte des letzten Jahrhunderts an - nur, dass dieser Hype von den Verfechtern einer anderen Form von KI wegpolemisiert wurde. Und zugegeben, damals konnten die Maschinen auch noch nicht so schnell rechnen wie heute.

Das Perzeptron von Frank Rosenblatt (1956) gehört zu den liebgewonnenen Klassikern der KI, und die hieran zeigbaren Ideen und Bausteine des maschinellen Lernens über die Erfindung des Künstlichen Neurons funktionieren im Kleinen wie im Großen (auch im sehr kleinen, denn gerade wird versucht, das Perzeptron auf Quantencomputern nachzubilden.)

Zentraler Gedanke dabei ist ein Neuron, das von anderen Neuronen gefüttert wird und je nach Menge der Eingaben selbst wieder aktiv wird und andere Neuronen aktiviert. Die Eingaben werden also kurzerhand im Neuron aufsummiert, als würden sich da Moleküle anreichern, und wenn ein bestimmter Schwellwert mit dieser gebildeten Summe erreicht wird, schaltet das Neuron selbst wieder auf 1, sonst auf 0, weil die Eingabe nicht gereicht hat. Im Grunde ist also dieser Zustand am Ende - das Neuron leuchtet auf (=1) oder bleibt dunkel (=0) - ein binärer Kippschalter. Zumindest in unserem einfachen Modell für den Anfang.

Schema eines Neurons - Creative Commons Attribution Share Alike 3.0 - Quelle: https://en.wikipedia.org/wiki/File:Neuron-no_labels2.png

In der Sprache des maschinellen Lernens würde man von einem binären Klassifikator sprechen: die Vorgänger des einen Ausgabe-Neurons sind die Eingabe-Neuronen. Am Ende steht das gewünschte Ergebnis, bspw. ob die Eingaben zu einer bestimmten Klasse gehören oder eben nicht. Man denke bspw. an viele Eingaben für die Pixel eines Bildes, und am Ende soll aufleuchten, ob auf dem Bild eine Katze zu erkennen ist. Soweit gehen wir in diesem kleinen Tutorial noch nicht, da wir ja eine ganze Menge neue Begriffe lernen müssen.

... hier weiterlesen ...

Finger, die auf Zeiger zeigen


Zeige mir, wo der Mauszeiger ist

Auf pointerpointer.com geht das Spiel so: man platziert seinen Mauszeiger, und eine Künstliche Intelligenz findet ein Foto, auf dem eine Person abgebildet ist, die mit ihrem Zeigefinger auf die Position zeigt, die Du am Bildschirm mit Deinem Mauszeiger gezeigt hast.

Eben Zeigefinger, die auf Mauszeiger zeigen - pointerpointer.com - Ein lustiger Spaß für zwischendurch :-)