Transcript: PP08 - Machine Learning am Beispiel Bildklassifikation
Full episode transcript. Timestamps refer to the audio playback.
Ja, hallo liebe Hörerinnen und Hörer. Willkommen zum Python-Podcast in der achten Episode.
Wir sind direkt wieder da. Es ist noch gar nicht lange Zeit vergangen, nachdem wir gestern eine Episode über Machine Learning aufgenommen haben.
Und weil wir fanden, dass wir dort sehr viele Beispiele gebracht haben, aber so ein paar Grundlagen noch nicht erklärt hatten, gibt es heute direkt eine neue Folge.
Wir sind im Wintergarten bei Jochen, mit Jochen.
Ja, wenn ihr Fragen, Anmerkungen, Kommentare, alles so andere, was ihr loswerden wollt, schickt eine E-Mail an unseren hallo-at-python-podcast.de.
Könnt ihr uns eigentlich relativ fix erreichen.
Links und zusätzliche Infos findet ihr wie immer
unten in den Shownotes.
Ja, was machen wir denn heute? Wir gehen noch mal ein bisschen auf die Grundlage von Machine Learning
ein und wollen
euch aber erstmal kurz ein bisschen vorstellen, wo wir
in letzter Zeit noch waren. Und zwar waren wir
auf der Subscribe, wo wir gestern schon drüber geredet hatten,
noch auf dem
PyCamp Cologne,
einem Python-Treffen für die
Python-Community. Ja, Moment, ich mach hier
gerade mal eine Kapitelmarke, weil das können wir nämlich jetzt seit
neuestem auch. Und sag mal, wir
nennen jetzt mal
wo waren
hier so
in letzter Zeit.
Ja, also wir können jetzt tatsächlich Kapitelmarken
in unserer eigenen Software DangoCast.
Das heißt, auch wenn ihr die benutzen wollt für euren eigenen Podcast,
könnt ihr sowas wie Kapitelmarken machen.
Und vielleicht könnt ihr das nächste Mal, wenn ihr uns hört, dann auch das skippen,
was euch nicht interessiert und wisst direkt, worum es geht.
Ja, das war, also genau,
wir waren eben auf so einer Podcaster-Konferenz
in Köln. Wir dachten uns, wenn die schon mal
hier in der Gegend ist, dann kann man da ja mal hingehen,
wenn man jetzt auch schon
mit den Podcasten mal angefangen hat.
Und das war eine tolle Konferenz.
Und wir haben da halt auch mal versucht mitzubekommen, was die Leute denn so haben wollen, von so einer, erwarten, an Features erwarten, von so einer Podcast-Publishing-Lösung.
Eigentlich alle wollten sagen, habt ihr keine Kapitelmarken? Also wir benutzen das eigentlich immer.
Hat mich ehrlich gesagt so ein bisschen überrascht, weil ich benutze das nie. Ich höre jetzt schon ganz lange Podcasts oder so, aber ich habe noch nie Kapitelmarken benutzt.
weil ich höre das immer in einem sehr wenig interaktiven Setting, ehrlich gesagt.
Also das läuft halt auf meinem Telefon und ich habe Kopfhörer drin
und ich kann da nicht viel tun, ich kann da nicht auf irgendwelche Kapitel,
weil selbst wenn ich, also ich möchte mich ja eigentlich gar nicht darum kümmern,
sondern das soll halt laufen, das soll halt auch gern sehr lang laufen,
also ich mag auch längere Podcasts lieber.
Ich habe gerne beim Cars-Radio immer die Werbeunterbrechung und die Nachrichten geskippt.
Okay, gut, da macht das schon irgendwie Sinn.
Aber die meisten, also eigentlich alle Podcasts, die ich höre, haben keine,
Doch, es gibt sogar welche mit Werbung, aber
ja, das kippe ich dann
eher so von Hand. Stimmt.
Ja, aber Kapitelmarken wären dafür natürlich
auch recht praktisch. Ja, ich benutze die eigentlich auch tatsächlich
nicht. Also entweder höre ich halt oder nicht.
Plus, Minus, Stopp. Aber gut,
für euch jetzt, da ist dann natürlich trotzdem da.
Ja, aber nachdem das irgendwie alle
irgendwie angemerkt haben, dass sie das doch gut
fänden, wenn das da drin ist. Und
natürlich ist es schon irgendwie auch natürlich sinnvoll,
da eine gewisse Struktur
drin zu haben, haben wir dann halt mal geguckt, ob sich
das irgendwie einbauen lässt. Und das
war nicht so schwer.
Und jetzt sind sie
drin, also gut in einer etwas vereinfachten
Form. Also
was halt momentan noch nicht geht,
sind halt
sowas wie
das Links und Bilder, die ja
auch in Kapitelmarken enthalten sein können,
automatisch mit drin sind, wenn man
da jetzt den Text, der bei
Ultraschall beispielsweise, wenn man sagt, exportiere
Kapitelmarken, dann fällt da raus
halt so eine Textdatei,
wo die erste Spalte ist halt irgendwie so ein
Zeitstempel oder ein Startzeitpunkt
und die zweite Spalte ist halt irgendwie ein Titel.
Ich glaube, jetzt haben schon einige Leute, die
diese Kapitelmark übersprungen.
Ja, dafür sind sie da.
Genau, man
kann jetzt aber zum Beispiel
auch noch da Links reinschreiben, wenn man die in spitze Klammern
setzt und man könnte auch noch Bilder
hinzufügen. Jedenfalls kann man das, wenn man
die jetzt, was man natürlich tun sollte, bei Auphonic
auch noch mit reintut, damit die halt
in der Audiodatei auch
mit drin sind, damit man die auch im Player hat.
Wir haben noch gar nicht so perspektiv gesagt, also wie man das
macht, also den Podcast aufnehmen mit Ultraschall
und das dann auf Hornig reinpumpen
und dann halt unserem Cast hosen.
Ja, wir wollten eigentlich über das Python Camp, glaube ich, noch mal
reden. Also wir haben jetzt schon viel über die
Kapitel mal gesagt. Ihr habt die jetzt bei uns mit
im Django-Cast.
Findet ihr auf PyPy und auf
Jochen's Repo. Genau.
Ja. Ja, genau.
Eine weitere Veranstaltung, auf der wir waren,
ist jetzt letzte Woche, letzte Wochenende
das Python Camp. Das war richtig cool. Also richtig
tolles Community-Treffen und gab leckeres
Grillen am Abend und so und ganz
viele tolle Talks und
ja, also kleine Riding-Talks und verschiedene
kleine Projekte vorzustellen
und richtig gute Sessions.
Jochen hat selber eins gemacht über Machine Learning
und dann hatten wir den Cast auch da.
Ja, war ziemlich gut. Und genau,
das war echt toll.
Ja,
ich weiß nicht genau, ob wir irgendwas darüber
erzählen wollen, was wir uns da so
angeguckt haben, aber ich glaube gleich.
Man kann ja irgendwie bei Python
BarkCamp.eu auf die Seite mal gehen,
Kannst du dir das mal alles angucken.
Da gibt es auch relativ gute Dokumentationen
in den einzelnen Sessions jeweils,
was da so gemacht worden ist.
Zumindest haben ziemlich viele ein Protokoll gebaut.
Ja, ich habe ein bisschen was zu Foxhut gemacht.
Das ist so eine Musikbibliothek für Python.
Ich habe noch ganz, ganz tolles von Oliver gesehen.
Er hat irgendwie die Landtagsreden irgendwie alle gepasst.
Das ist sehr spannend.
Das ist eine super interessante Geschichte.
Genau, die haben halt alle ihre Reden und Protokolle,
Sitzungsprotokolle als PDF veröffentlicht.
das wäre natürlich schon sehr praktisch, wenn man da irgendwie
Statistiken drüber machen könnte oder so.
Und genau, Oliver hat da versucht,
das irgendwie alles mal so irgendwie
zu parsen und
in so einheitliches Format zu bringen.
Ja, das ist auf jeden Fall sehr spannend.
Ich bin total gespannt, wenn das weiter ist.
Ein bisschen, was man damit alles so bauen kann.
Ja, und dann ist es
natürlich
noch einige andere spannende Sachen.
DevOps war noch ein ziemlich cooler Talk dabei,
der mir gefallen hat und so wie man
Kommentare in Python am besten schreibt.
Und ja, also eine Menge andere Dinge, die spannend waren mit Geo-Python und ein bisschen Micro-Python-Bau und sowas.
Ja, das war sowieso ein überraschender Trend.
Also ich meine, dass irgendwie Machine Learning und so ein Thema ist, das war eigentlich in den letzten Jahren auch schon immer so.
Aber es gab wirklich mehrere Sessions und damit halt auffällig viele für diesen ganzen Bereich Internet of Things.
Ja gut, aber so Bastel gab es auch schon immer so dabei, bei den Sprints auch und so, da war doch immer mindestens ein, zwei Gruppen, die irgendwas gebastelt haben.
Ja, einer war meistens dabei, der irgendwas mit Raspberry Pi gebastelt hat oder so, aber dass es jetzt wirklich mehrere gab, die da irgendwie ihre Steckdosen, mit ihren Steckdosen irgendwie ihre Gebäude warm sanieren wollten, irgendwie in eigener Regie, das war eigentlich, das hatte ich, also fand ich jedenfalls auffällig.
Also werden wir euch auch gerne nochmal was zu erzählen, aber das wird vielleicht noch ein bisschen auf sich warten lassen, unsere Liste ist das noch nicht so ganz nach oben gerutscht.
Ja, ich habe hier nette Menschen
kennengelernt, also vielleicht bringen wir da auch noch die eine oder andere
Folge mit zusammen und mal gucken, was da so rauskommt.
Genau, wir haben auch kurz vergestellt, dass wir
da so einen Podcast machen und
da werden
bestimmt noch einige interessante Gespräche
daraus entstehen. Das klang
alles sehr gut. Jetzt ist Zeit für eine Tepta-Marke.
Was soll ich mal, hebe ich immer die Hand und winke?
Genau, winke einfach mal. Was soll ich
denn da reinschreiben? Veranstaltungshinweise.
Ah, Veranstaltungshinweise, alles klar, okay.
Veranstaltungshinweise.
Ja, wir haben nämlich tatsächlich dann natürlich auch
mit Leuten geredet, die ganz viele neue
Veranstaltungen vorgestellt haben, wo man überall so hinfahren
kann. Jetzt als nächstes, das ist ja
schon nächste Woche, ist ja die PyConX in Florenz.
Das ist ein internationales
Event. Also warum man da hinfahren soll, das ist natürlich tolles Wetter
jetzt gerade so in Tyskana.
Man kann da so ein bisschen Urlaub machen, wenn man da Lust hat.
Und dann so ein bisschen Paison machen, das ist bestimmt cool.
Vom 2. bis 5. Mai
Florenz.
Ja, dann geht's weiter. Ich weiß nicht, das ist jetzt gerade
gar nicht so geordnet. Ich muss jetzt mal gucken.
Juni.
Geht es weiter mit der GeoPython in Basel?
Ja.
In Basel, der Martin hat da so ein paar Sachen erzählt,
der macht da ziemlich viel
und der hat im Juli direkt das Nächste
und zwar ist dann nämlich die...
Ja, EuroPython.
EuroPython.
Ist auch in Basel irgendwie im gleichen Gebäude, denke ich mal.
Das haben sie extra dafür gebaut, hat er jetzt gesagt.
Ja, genau.
Schönes neues Gebäude, ja.
Teilweise jedenfalls für diese Veranstaltung.
Ja, EuroPython ist eigentlich immer toll
und ehrlich gesagt, ich war aber noch nie da.
Ich habe immer nur gehört, dass es super sein soll.
Und gehst du nach Basel in die Schweiz?
Ja, aber ich glaube, dieses Jahr, das wird alles...
Ja, ist ein bisschen knapp.
Warum ist denn das eigentlich alles irgendwie so im Frühjahr?
Also ist es entweder Frühjahr...
Meinst du Juli, Juni, Oktober, Frühjahr?
Naja, Conference Season.
Ja, okay.
Ja, also danach, im September geht es nach Bilbao.
Am 2. bis 6. ist in Bilbao die EuroSciPy.
Das ist in wissenschaftlichen Sachen auch sehr interessant.
Und wir haben die PiData in Berlin vom 9. bis 13. Oktober.
PyCon.de beziehungsweise PyData
kombiniert in Berlin
und also zumindest ich werde auf jeden Fall
da auch sein.
Da bin ich nicht da, da bin ich
in Prag.
Chicago Blackhawks.
Ja, ja, und
genau, damit haben wir
ja schon fast alle, müssen wir dieses mit
diese Veranstaltungshinweise auch nie wieder machen, dieses Jahr,
weil damit haben wir alles Richtige durch, oder?
Ja, vielleicht kommt noch den MP Sprint erwähnen, den es gibt,
den haben wir glaube ich schon vergessen. Oh, achso, richtig, stimmt.
genau, Pi-DDF-Sprint, wann war
denn der nochmal? Im 4., 5.,
Mai? Ja.
Ich glaube schon. Ja.
4., 5. Mai.
Tatsächlich bei Trivago, wieder hier im Medienhafen
in Düsseldorf. Ja. Genau.
Das ist auch immer eine tolle Veranstaltung. Gut, macht natürlich
nur wirklich Sinn, wenn man
so ein bisschen aus der Gegend kommt, aber
da ist das wirklich dann auch
immer sehr, sehr nett. Genau, da bilden sich
ein paar Grüppchen und programmieren an irgendwelchen Projekten rum
und da ist es immer sehr lustig, hat Spaß zusammen,
lernt sich ein bisschen kennen.
Sollte ich euch für anmelden beim Meetup?
Und ja.
Genau.
Ja, ich glaube, das war's
für das nächste Mal hier so in der Gegend.
Ja,
okay, dann haben wir damit die Veranstaltungshinweise
auch irgendwie durch.
Dann wäre es wieder Zeit für den Chapter-Markt.
Ach, ich winke übrigens hinter dir jetzt ein bisschen.
Ach so.
Wenn du gerade dein Bild im Kopf
manchmal und ja.
Gut, okay, dann
ja, und danach gehen wir einfach so
quasi. Ja, ich würde sagen, dass du
wieder, genau. Alles klar. Wir fangen jetzt mit der
Einführung in Machine Learning nochmal so ein bisschen an.
Was denn das nochmal und warum, wieso?
Wollen wir da auch noch irgendwas strukturieren?
Puh.
Ja, also wir haben da auf jeden Fall verschiedene Unterthemen
und sonst setzen wir die Chapter Marks
also da später ein. Kannst du da irgendwie so einen anonymen
Chapter Mark setzen, dass man einfach
dann später den benennt, dann
müssen wir nicht so viel unterbrechen und einfach so klicken.
Das geht natürlich auch. Ich brauche da eigentlich
nur... Also ich brauche so einen Buzzer in der Hand
zu drücken. Selbstauslöser von
so einer Kamera. Das wäre tatsächlich nochmal
toll, wenn man irgendwie so einen Bluetooth-Buzzer
oder sowas hätte, der das
irgendwie dann eine Capital-Marke setzt.
Naja, da müssen wir halt
hardware-technisch noch so ein bisschen aufrüsten, aber
ja. Du hast doch irgendwo ein Raspberry stehen,
den können wir über das Netzwerk anschächen und dann schenken wir
den per Bluetooth ans Raspberry und dann drückt der einfach
Signal und dann sagt der Chapter-Markt Boben.
Ja, genau. Das brauchen wir in Python.
Okay. Ja.
Nächstes Mal. Ja, also
Machine Learning. Ja, was hatten wir gestern
ja gerade die Folge gemacht, wo wir so ein bisschen die
Einführung besprochen hatten.
Was ist das und so?
Menge zu erzählt und
die Teile
versuchen wir jetzt auch mal nicht zu wiederholen.
Mal schauen, ob das klappt.
Aber es ist natürlich irgendwie ein weites Feld
und man kann da irgendwie ganz
viel zu erzählen und
wenn ich mich
richtig erinnere, also Dinge, die wir gestern
dann noch nicht so wirklich erzählt hatten,
aber die auch irgendwie wichtig sind, ist halt,
ich würde mal sagen, so eine grundsätzliche
Einteilung, was hat man da
irgendwie an groben
Geschichten, die wichtig
sind, ja,
supervised learning, unsupervised
learning, reinforcement learning. Wir hatten
gestern das Beispiel supervised
learning, also sozusagen Textklassifikation,
das ist ein klassisches Beispiel,
das allereinfachste, das binäre. Genau, wir hatten
Reuters Text, da ist ein Satz und der wurde dann gemeinsam
analysiert mit dem Jupiter Notebook, was
der Jochen auch veröffentlicht hat,
Da kann man das alles so ein bisschen nachvollziehen
und daran auch so ein bisschen die Praxis vielleicht lernen.
Ja, vielleicht aus dem theoretischen Background
dann jetzt nochmal Details.
Was ist denn der Unterschied von Supervised Learning?
Naja, dass man halt sozusagen zu jedem Beispiel weiß,
was rauskommen soll.
Dass man halt nur das, in Anführungsstrichen,
nur das Problem hat,
dass man irgendwelchen Eingaben, halt Ausgaben zuordnen muss
und das halt anhand von Beispielen tut, die man schon kennt.
Und der Bereich ist auch, also wenn man jetzt, das hatten wir gestern auch nicht so wirklich viel davon drin, wir werden wahrscheinlich auch nochmal eine eigene Folge machen, die sich jetzt, die dann im Detail auch nochmal so auf Deep-Learning-Geschichten eingeht.
Aber ich denke schon, dass auch ganz interessant wäre, mal eben den Bereich, der halt auch in den letzten Jahren so wichtig geworden ist, nämlich Deep-Learning, doch nochmal ein bisschen darauf einzugehen.
Und es ist halt so, dass viele Tasks, die vorher schwer waren, also eben im Bereich Bilderkennung oder Speech-to-Text, alles was irgendwie, worum es geht, so ein Signal, wo die Features nicht so richtig offensichtlich sind.
Also man hat die Daten nicht strukturiert, sondern man hat halt irgendwie ein Bild, also Pixel oder man hat halt irgendwie ein Audiosignal oder so und man möchte damit halt überwachte, also supervised Machine Learning machen.
war das pro Domain
früher immer sehr aufwendig, weil man dann halt
Domain-spezifische Features erstmal extrahiert
hat. Also das
heißt irgendwie bei Bildern
sowas, diese Scale-Invariant
Feature-Geschichten
und bei Audio dann wiederum
andere und so, sodass es halt eine große Rolle spielt,
in welcher Domain man da unterwegs war
und das ist natürlich eine sehr
unschöne Geschichte, weil man kann
halt sozusagen die Erfahrungen, die man im einen Gebiet
gesammelt hat, nicht so richtig gut in ein anderes
Gebiet mitnehmen.
Und das hat auch nicht wirklich gut funktioniert.
wenn man jetzt nicht Texte
klassifizieren möchte, das hat halt auch mit
diesem Backup-Words-Ansatz, den wir gestern
auch schon hatten und TF-EDF, funktioniert das
schon halbwegs gut.
Das ist schon ziemlich klasse.
Aber
wenn man
jetzt Bilder zum Beispiel klassifizieren möchte
in sowas wie Hundekatzen oder
Elefanten, Eichhörnchen,
das hat nie wirklich gut
funktioniert. Es gibt da so ein klassisches Dataset
namens ImageNet.
Da sind eineinhalb Millionen Bilder drin,
ungefähr tausend Klassen.
Und ja, das ist manchmal
so ein bisschen eigen,
dieses Dataset.
Jemand hat mal,
ich glaube, das war André Carpathy
oder so, der jetzt irgendwie
Data Science Chef von Tesla ist.
Der hat
irgendwann mal, weil er
wissen wollte, wie ist eigentlich der Fehler von
Menschen auf diesem Set,
selber sich so ein Annotationstool in JavaScript
gebastelt und
ja,
dabei halt irgendwie eine
der Sachen, die er gelernt hat, die für ihn überraschend waren, ist
das halt ein Drittel der
Bilder
sind halt irgendwie irgendwelche Hunde oder Hunderassen
und das ist natürlich total auch für Menschen super
ätzend schwierig, irgendwie
genau rauszukriegen, wenn man jetzt ein Bild
und die sind dann, werden alle relativ klein gerechnet,
Bilder. Also man hat da irgendwie so
150x150 Pixel Ding, wo man
nicht viel drauf erkennt, wenn das ein großes Bild
war und man hat das so runterskaliert. Und man sieht da
irgendwas Wuscheliges und dann muss man sagen, ist das
jetzt irgendwie, keine Ahnung,
ein Dackel oder
ein, weiß ich nicht,
Spezialdackel.
Ich kenn mich jetzt
auch damit nicht aus und er auch nicht.
Und dann hat er ganz schön geflucht
und hat dann irgendwie daneben
sich Bilder von den einzelnen
Hunderassen hingelegt und dann
irgendwie das und ja,
hatte doch erstaunlich viele Fehler dabei
und das war
auch mit den klassischen Ansätzen
war dieses Problem furchtbar schwierig
für Computer, bis dann halt
irgendwann 2011, glaube ich, war das mit
AlexNet.
Ja, also nochmal ganz kurz, ImageNet ist irgendwie von
Princeton und Stanford so eine Gemeinschaftsproduktion,
die auch jeder frei benutzen kann, wo halt tatsächlich
diese Datenbanken mit den Labels
verfügbar sind für alle Bilder.
Und AlexNet
ist jetzt das nächste.
Genau.
Ich gucke gerade noch mal nach,
wann das genau sozusagen
diese, es gibt da eine Challenge zu
diesem Dataset
und da gibt es dann so etwas wie
Top 5 Fehler, also wie viele von den
Top 5 Klassen, die man halt für ein
Bild ausgespuckt hat, waren halt
falsch oder so.
Und ich gucke gerade noch mal
nach, wann das genau war.
Ah ja, das ist genau, es gibt halt diese Image
Net Large Scale Visual
Recognition Challenge und
genau 2012, also nicht 2011,
hat das Ding halt
gewonnen
und hat halt den Fehler
um
mehr als
10% irgendwie reduziert und das
war halt irgendwie gewaltiger
Schritt. Also es war halt so
das hat mal
in einem Interview mit
Jeffrey Hinton, glaube ich,
nee, das war
Jan de Kuhn hat das irgendwie mal
in einem Interview erzählt, der meinte halt
vorher war es so. Es gab
diese Convolutional Neural Nets,
die da verwendet wurden, ja auch schon lange
vorher, aber das hat niemand
so wirklich ernst genommen. Die waren so ein bisschen
esoterisch
und es war bis zu dem
Zeitpunkt, die waren auch lange Zeit nicht so wirklich
en vogue und es war sehr schwierig
irgendwie ein Paper durchzukriegen,
also in der Zeitschrift veröffentlicht zu bekommen,
wenn man
da irgendwie Convolutional
sich mit Convolutional Neural Nets beschäftigt hat.
Und
nach dieser,
nach diesem Erfolg von AlexNet
irgendwie so 2014 war es praktisch
unmöglich, ein Paper, was sich irgendwie mit Bildern
oder Vision oder so beschäftigt hat,
irgendwo unterzubekommen, dass sich nicht
mit Convolutional Neural Nets
beschäftigt hat. Das heißt, in zwei Jahren hat sich das
irgendwie, es gab so einen kompletten Paradigmenwechsel
in diesem Bereich und das ist natürlich schon sehr
erstaunlich. Also, und
ja, es sind also dramatische Verbesserungen
irgendwie eingetreten.
Und das ist halt auch nicht nur in dem
einen Bereich passiert, sondern bei Spracherkennung
halt auch.
Du musst ja vielleicht da ja nochmal die Basis erklären,
die hatten wir nämlich gestern alle nicht. Also was ist jetzt überhaupt
ein Convolution Neural Network? Vielleicht auch nochmal kurz,
was ist überhaupt ein Neural Network?
Das haben wir nämlich gestern einfach alles so vorausgesetzt,
aber für jetzt Menschen, die jetzt noch nicht so tief in dem Thema
drin sind, sollte man kurz erklären.
Sollte man, ist aber auch schwierig
wirklich zu erklären, was es ist.
Was man immer so, wenn man jetzt
das aus Medien
mitbekommt,
worum es da geht, da wird dann meistens
das so dargestellt, wie, naja, das ist
ein Vorbild des Gehirns modelliert oder so.
Weiß ich nicht. Ich finde, das ist alles immer sehr irreführend,
weil wie das Gehirn funktioniert, weiß nicht mal so richtig.
Und
im Grunde, ja,
man könnte sagen, es ist irgendwie inspiriert von Neuronen,
aber es ist auch mehr auch nicht.
Und mittlerweile hat das, was man da macht, nicht mehr viel zu tun
mit dem, was man mal angefangen hat.
Einfach irgendwie so ein paar leuchtende Punkte auf so einer
Karte, die dann irgendwie aufleuchten, mit irgendeiner
kryptische Verbindungen haben, weil da irgendwie Strom
von A nach B fließt oder so
und dann halt irgendwie eine Beziehung dargestellt werden kann.
Vielleicht meinten Neuron irgendwie sowas?
Naja, also eine passendere
Bezeichnung fände ich jetzt
irgendwie, das sind so
gestapelte Funktionsapproximatoren.
Also im Grunde geht es darum, halt Funktionen
zu approximieren und man hat
halt irgendwie rausgefunden, dass das super geht,
wenn man das in Schichten
organisiert und wenn man
sozusagen da bestimmte Aktivierungsfunktionen
verwendet, da hat sich auch viel getan.
Und, ähm, ja, äh, man kann sich das ungefähr so vorstellen, dass, also man hat halt, äh, ja, sozusagen Schichten von, äh,
von so
Parameter, parametrisierten
Dingen, die halt irgendwie etwas machen
mit einer Eingabe. Es kommt halt eine Eingabe rein
und dann
wird das von sehr, sehr
basalen oder
sehr, sehr konkreten Dingen,
die da detektiert werden, immer zu immer abstrakteren
Geschichten, je tiefer das durch das Netz durchgeht.
Vielleicht machen wir das einmal so kurz als Beispiel
anhand von so einem runden Bild.
Also ich habe jetzt vielleicht als erste Information
die Bildpixel irgendwie
in verschiedene Sektoren unterteilt. Dann vielleicht
sowas wie eine Abstraktionsschiebende als die Helligkeit
des Bildes oder so. Oder
andere Dinge. Vielleicht dann noch grobe
Strukturen unterteilt. Kanten.
Mit Hültern oder so. Kanten. Genau.
Wo ist hier eine Kante? Wo ist eine Ecke?
Was sind helle Flecken in dem Bild?
Und jetzt hast du eine Neuronenschicht.
Ja, oder mehrere Schichten.
Also, genau.
Und das, was da
passiert im Grunde, ist halt das, was die
Convolutional-Geschichte, ich will es gar nicht
mehr so ausführlich beschreiben, was da für eine
mathematische Operation ist, das ist eigentlich relativ simpel
passiert, aber was das
macht, ist, dass es dafür sorgt,
dass Dinge, die nah beieinander sind, halt
irgendwie auch
zusammenbleiben, sozusagen, weil man hat
sonst immer das Problem, oder das hatte man bei den
anderen Verfahren, mit denen man da
angefangen hat, halt auch,
dass sobald sich irgendwas so ein bisschen
geändert hat, also wenn der Hund
im Trainingsbeispiel, im ersten
Trainingsbeispiel nicht an der gleichen Stelle ist wie im zweiten
Trainingsbeispiel, dann wurde
das schon nicht mehr erkannt, weil, naja,
sozusagen, wenn man einfach ein Bild
einfach so als Vektor auffasst, dann
wenn sich da drin
sozusagen räumlich irgendetwas bewegt, dann ist das halt
an einer ganz anderen Stelle. Da werden halt ganz andere
Features sozusagen aktiviert. Man könnte ja
sagen, naiv, ein Bild ist einfach nur
irgendwie, hat so viele Dimensionen wie
Pixel oder so viele Dimensionen
wie Pixel mal drei, wenn man halt für jeden Kanal
halt noch ein... RGB, ja,
noch eine Dimension.
Aber dann hat man eben
dieses Problem, was passiert, wenn sich Dinge in dem Bild
bewegen und dann wird es halt ätzend
und funktioniert einfach auch nicht mehr.
Und dafür, dass
da helfen diese Convolutional
Geschichten halt
stark, weil die dafür sorgen, dass
Dinge halt sozusagen unabhängig davon, wo sie
passieren, irgendwie
detektiert werden können.
Und ja, man fängt halt mit sowas an,
wie eben Kantenhelligkeiten
in ganz einfachen Formen
und die werden dann sozusagen
in den Schichten halt immer weiter abstrahiert,
sodass halt man
auf, wenn das jetzt
durch mehrere Ebenen gegangen ist, hat man halt
abstraktere Features, die halt
weiter unten im Netz sozusagen
detektiert werden. Also es gibt
dann halt irgendwo
sozusagen Teile,
Layer,
die detektieren dann
Ohren oder Augen oder Haare
oder sowas.
Oder vielleicht irgendwie
ist da überhaupt ein Tier oder ist das nicht eher
Himmel oder ist das irgendwie
eine Wiese oder so? Ja, also auch
Masterklassen und sowas. Also ein Tier, wenn es
guckt, ist ein Hund, guckt dann erstmal jemand drüber, ist das überhaupt ein Tier
oder sowas? Könnte natürlich passen.
Oder ist das ein Lebewesen oder sowas?
Oder ist das überhaupt ein Bild?
Und ja, das passt halt
super,
weil irgendwie diese räumliche Dinge
haben halt eine räumliche Ordnung und sind halt irgendwie hierarchisch
strukturiert. So ist halt unsere Welt
irgendwie strukturiert, die wir wahrnehmen und
wenn man das, ja, diese
Modelle sind halt,
bilden das halt sehr gut ab
und repräsentieren darum halt das, was man
da bekommt halt, sind halt in der Lage
das sehr, sehr gut zu repräsentieren. Ja, ist das ein Ölgemälde,
ein Foto oder eine Skizze?
Ja, und genau, so
all solche Sachen, was ist die Textur von Dingen?
Ja,
und das hat halt super funktioniert
und was halt auch
total toll ist, ist, dass man
im Grunde keine,
kein echtes Feature-Engineering
mehr machen muss, so wie früher.
Sondern dass das halt
zum großen Teil automatisch passiert.
Und gut, die Architektur des Modells
ist natürlich noch so eine Sache, aber
das ist
halt nicht mehr das Gleiche,
als wenn man da jetzt von Hand
irgendwelche
Features rauszieht
aus einem Bild, sondern
das ist alles gelernt.
Also das heißt tatsächlich, durch diese Bibliotheken weiß man halt dann direkt, hey, ein Bild hat diese verschiedenen Dinge, Netze, Schichten und durch die ich dann einfach durch iterieren kann.
Ja, also das Modell trainiert halt eben nicht nur, passt sich nicht nur den vorher hartgecodeten Features an, sondern das Lernen, was sind eigentlich gute Features, ist halt mit dabei.
Und das ist halt ein riesen Fortschritt.
Schwarmintelligenz, schon wieder.
Schwarm, naja.
Ja.
Aber ja, es macht das halt viel einfacher und man kann halt die gleichen Methoden verwenden, ob man jetzt auf Audiodaten arbeitet oder eben auf Bildern oder auf irgendwas völlig anderem. Und das ist natürlich auch total toll, weil dann sozusagen Erfolge in einem Feld halt irgendwie in eine andere Domäne transportieren kann.
Ja, und das geht so weit, dass halt inzwischen man, ja, es gibt immer so den Satz, Perception is solved. Ja, so irgendwie alles, was damit zu tun hat, Dinge zu erkennen, irgendwie Handschrift, Ziffern, Autokennzeichen, irgendwie Hausnummern, Straßenschilder oder eben auch Katzen, Hunde, irgendwelche Alltagsgegenstände.
das machen diese Dinger mittlerweile
besser als Menschen. Also die haben da
auch eigentlich überall super
Human Performance erreicht. Also wenn man
dann selber das von Hand
labelt und dann guckt, wer macht mehr Fehler, dann
machen Menschen üblicherweise mehr Fehler.
Und das ist schon
ganz erstaunlich. Das wäre
zu dem Zeitpunkt, wo man das halt noch nicht wusste,
dass das geht, hätten viele gesagt, das ist völlig
unabsehbar, wann das jemals, oder ob es überhaupt
jemals möglich sein wird, dass sowas passiert.
Und dann ging es innerhalb von wenigen Jahren. Also
das ist tatsächlich ein riesen
Fortschritt passiert. Auf der anderen Seite
muss man natürlich sagen, das heißt jetzt nicht,
dass alles gelöst ist oder dann wird immer
davon künstliche Intelligenz geredet und das ist schon
irgendwie Quatsch, weil, also ich meine,
Machine Learning ist halt so ein Teilbereich der künstlichen Intelligenz
und wahrscheinlich auch so der interessanteste
zur Zeit, aber
die wirklich
knackigen Probleme,
wenn es darum geht,
irgendwie wirklich intelligentes Verhalten
oder...
Wie definiert man das? Ja, also wenn man jetzt tatsächlich
als ein individuelles, autonomes
Individuum hätte, das ich dann
als intelligent definieren kann, da ist natürlich was anderes
als wenn ich jetzt eine Maschine habe, die
immerhin binäre Entscheidungen treffen kann oder
sowas, die einigermaßen richtig sind.
Das ist auch überraschend,
wie viel sich auf solche Entscheidungen reduzieren lässt.
Also das ist tatsächlich, macht das schon viel aus, aber
diese,
die Welt
sozusagen
gesehen aus der Sicht von so einem Netz ist halt
eine sehr, sehr oberflächliche Sicht der Welt.
diese Modelle lassen sich sehr leicht täuschen,
weil sie eben fast nichts über die Welt wissen.
Also du verhältst das alles nicht für
intelligent. Also ich finde das natürlich schon
riesen,
also um bei einem Griff zu bleiben, Intelligence,
die da irgendwo hinter steckt. Also
man ist natürlich jetzt nicht ungefragt
hinnehmbar und die sticht natürlich in der
Stelle noch kein Menschen aus oder kann irgendwie Konkurrenz
werden oder sowas, wie vielleicht dann die Gefahren,
die mit so einem AI-Ding da irgendwie verknüpft
werden, auch noch hinzukämen. Aber
ich finde das schon sehr beeindruckend. Also ich würde fast auch schon
von Kunstintelligenz sprechen wollen, so aus dem
Laienverständnis heraus, als wenn es jetzt so eine richtige
Intelligenz jetzt vielleicht noch nicht ist.
Aber in gewisser Weise kann halt die Maschine
tatsächlich, also das ist glaube ich der Fortschritt,
mit neuen Dingen umgehen. Und das ist
halt nicht das, was sie vorher gelernt hat. Und das ist ja
das, was das Spannende daran ist.
Und das ist vielleicht schon irgendwo Intelligenz.
Ich denke, der große
Unterschied zu früher ist halt, dass
in, muss man auch sagen, begrenzten
Bereichen
muss man halt nicht mehr
wirklich explizit Sachen programmieren,
sondern man zeigt jetzt einer Maschine nur noch Beispiele dafür,
wie es richtig sein soll.
Und dann kann sie das halt auch mehr oder weniger genauso gut machen.
Das heißt, man muss in vielen Bereichen nicht mehr explizit shoppern.
Und das ist natürlich ein Riesenvorteil,
weil das war bisher immer so ein Bottleneck für viele Anwendungen.
Ja, genau.
Also wenn man halt immer noch Menschen drauf gucken lassen muss,
stimmt das jetzt alles oder nicht?
Ja, vor allem, die müssen das halt irgendwie hinschreiben,
die müssen das auch verstehen.
Ja, klar.
Also insofern ist das natürlich schon ein Riesenfortschritt.
es ist halt nicht auf
alle Probleme anwendbar. Es gibt
viele Probleme, wenn das grundsätzlich nicht so gut
funktioniert und
ja,
da kommen wir auch dann zu den Geschichten mit
dem Unterschied zwischen Supervised an Supervised
und Reinforcement
Learning. Also
Supervised geht, also da
ist es mittlerweile ziemlich gut,
aber auch
nur, wenn es um so ganz oberflächliche Geschichten geht,
also die Modelle wissen
nicht, was sie da tun, sie haben kein
Verständnis dafür, was da passiert.
Deswegen lassen sie sich auch eben sehr leicht
täuschen, weil es muss halt nur irgendwie
halbwegs oberflächlich so aussehen, das reicht ja
vollkommen.
Wenn da irgendwas sozusagen
physisch unmöglich wäre oder so, wo ein Mensch
sofort erkennt, das kann ja gar nicht sein,
ist es für so ein Modell völlig unmöglich.
Ja, man könnte so ein paar lustige Surveillance-Aktionen machen, indem man irgendwie so
Plakate hochhält mit gesuchten Persönlichkeiten
oder bedrohlichen Dingen
und dann Leute trollt oder so.
Aber gut, das sind ja noch so Machine Learning Security,
Hier ist nochmal ein ganz eigenes Ding.
Was aber jetzt zum Beispiel Menschen, Tiere super können.
Also einmal ist es halt total interessant,
dass Menschen nicht so viele Trainingsbeispiele brauchen.
Also wenn man sich zum Beispiel anguckt,
wie viele gelabelte Daten sieht so irgendwie ein Kind von null bis,
es kann irgendwie sprechen und verstehen,
dann ist das sehr, sehr wenig.
Und man versteht überhaupt nicht, wie das sein kann,
dass man mit so wenig Trainingsbeispielen irgendwie auskommt,
weil diese ganzen Deep Learning-Geschichten brauchen
viel, viel mehr. Was jetzt nicht so ein Problem
ist, weil man inzwischen Internet und so,
man hat die Daten und
wenn da alle Leute sprechen, dann irgendwie in ihre Telefone
und dann sammelt man davon
halt irgendwie tausend Stunden, Millionen,
Milliarden, keine Ahnung und dann
hat man genug, um halt
große Modelle mit vielen, vielen Parametern zu fitten
und dann funktioniert das auch, aber
es wäre natürlich schon interessant rauszukriegen, wie
kommt das, dass Menschen das auch super
hinkriegen, aber das alles nicht,
diese Daten nicht brauchen.
Wahrscheinlich liegt das an der Auflösung mit der Information, die die Menschen bekommen. Die ist wahrscheinlich auch so hoch und so riesengroß und so polymorph und so fraktal, dass da dann doch wieder alles hinten rausfällt, was an Informationen wichtig wäre für so ein neueres Network. Und Menschen lernen das dann anhand dieser Masse von Informationen so schnell doch.
Man kann jetzt sagen, Menschen sehen auch Sachen, hören nicht nur Dinge. Aber ich glaube, das ist gar nicht so sehr der Punkt. Oder das, was halt so die übliche Ansicht ist, dass Menschen und Tiere an Supervised Learning wirklich gut können.
wirklich gut in der Lage sind, einfach nur
durch Beobachten
super Repräsentationen der Welt irgendwie
aufzubauen.
Und das kann man halt
mit
ja, können halt die Modelle,
die wir da verwenden,
im Computer momentan nicht.
Und da kriegt man
halt eben schon sowas nicht hin wie,
was ist da überhaupt eine geeignete Verlustfunktion?
Also wenn man zum Beispiel sich so ein Problem anguckt, wie
man möchte vorhersagen, was als nächstes
passiert in einem Film, den man sieht.
Ja, also da, äh, man sieht irgendwie, keine Ahnung, eine Savanne in, äh, äh, in, in Afrika, oder laufen irgendwie Tiere durch die Kamera, ja, irgendwie dieses Problem, äh, was ist da für ein Tier, das ist, sozusagen, das geht, aber, ja, was passiert jetzt in fünf Minuten in diesem Film, oder was passiert, was passiert im nächsten Frame, ja, wenn die Tiere von links nach rechts durchlaufen, sind dann plötzlich keine Tiere mehr drin, oder, so, das muss man natürlich noch in entsprechenden Experiment, äh, in irgendeinem Experiment, äh, äh, Teilenaufbau übersetzen, aber wenn man sich jetzt anguckt, können, wie, wie gut können Menschen das vorhersagen,
was da passiert, super.
Die verstehen auch, dass wenn die Sonne untergeht,
dann wird es dunkel oder so. Für solche
Machine Learning Modelle sehr, sehr schwierig.
Die kriegen halt vielleicht ein Frame, vielleicht ein paar
irgendwie auch ganz gut vorhergesagt,
aber je länger das wird,
desto absurder wird das, was halt
vorhergesagt wird. Und man weiß nicht mal,
wie man jetzt da gut irgendwie eine Distanz
ausrechnet zu dem, was sie hätten
vorhersagen müssen. Das heißt, man kennt nicht mal
eine Verlustfunktion, die man da, das heißt, man kann das
Optimierungsproblem nicht gut lösen, weil man gar nicht weiß,
was man optimieren soll.
Das liegt aber auch an dem Problem, dass die Maschinen
an der Stelle nicht diese Sinneswahrnehmung
von einer echten Welt, in der
Gänze der Erfahrungsmöglichkeiten,
was jetzt fraktale, dimensionale
Strukturen angeht, erfassen konnten.
Und das dann nicht vorliegt in dem
Datensatz. Möglicherweise
wäre das eine Option, da irgendwie dran zu gehen.
Jetzt haben wir noch ein paar Fraktaltheorien,
wie Mendelbrot.
Naja, das ist ja wieder Hirngespinze, aber
vielleicht kann man dadurch irgendwann
sowas dann doch basteln und dann die KI
Ja, kann man bestimmt, aber
momentan wissen wir halt nicht wie.
Ist halt
schwer. Und
das ist sozusagen, wenn man es schaffen würde,
den Erfolg, den man jetzt beim Supervised Learning
hatte, irgendwie zu übertragen auf
unsupervised, das wäre natürlich ganz, ganz toll,
aber ist halt noch nicht so. Aber da arbeiten ganz viele Leute
dran. Und Reinforcement Learning ist
halt so ein Zwischending.
Wenn man halt nicht zu allem, was man tut, jetzt
ein Label hat oder eben
ein Feedback bekommt,
war das jetzt richtig oder falsch.
Sondern man bekommt diese Labels, die Labels werden Spars.
Also man bekommt halt nur ab und zu gesagt, ob jetzt was richtig war oder nicht.
Und dann muss man das halt irgendwie verteilen auf das, was man getan hat.
Also vielleicht ist da auch ein praktisches Beispiel irgendwie am besten.
Also wenn man spielen funktioniert das halt super.
Wenn man jetzt irgendwie Schach spielt oder Go oder sowas, dann spielt man halt eine ganze Zeit lang, macht viele Züge.
Und dann am Schluss bekommt man halt gesagt, okay, du hast jetzt gewonnen oder verloren.
Aber man bekommt keine Aussage zu, wie gut war jetzt dieser Zug, den ich gemacht habe.
weil das weiß halt eh keiner so genau
und irgendwie die definitive Aussage ist ja,
es kann ja auch sein, dass ein Zug, der irgendwie
schlecht aussieht, eigentlich sehr gut war.
Ja, es sei denn, du verlierst den nächsten Zug oder sowas.
Ja, aber
tatsächlich ist es halt so, wirklich definitiv weiß man es
erst, wenn man gewonnen oder verloren hat
und dann hat man das Problem, okay, jetzt muss ich irgendwie
sozusagen diese Feedback
irgendwie zurück assignen an alles, was ich
irgendwie gemacht habe und das ist genau
Reinforcement Learning und das ist halt
sozusagen
so ein Zwischending zwischen überwacht und unüberwacht,
weil halt da auch viel unüberwacht passiert, aber
ab und zu hat man ja doch so ein bisschen Feedback
und das hat halt viele Anwendungen.
Selbst fahrende Autos sind halt auch so ein,
oder überhaupt laufende Roboter und so, das ist alles
Reinforcement Learning.
Das ist schön. Du hast was gesehen von
Boston Dynamics, das neue Ding, da haben irgendwie
15 diese,
ich weiß nicht, Pferdeförderungen, Hunderoboter
so einen LKW gezogen oder so, irgendwo
irgendeine Straße. Ich finde diese
Videos immer sehr beunruhigend. Ja, die sind etwas
spooky tatsächlich.
Die kürzen mich wie Militärtechnik.
Wenn man sich da überlegt, da ist so eine Waffe drauf
oder sowas, dann hüpfen die durch den Wald.
Und dann schützen sie sich dabei, die Türen aufzumachen
und um die Ecke zu gucken.
Das ist schon ein bisschen spooky tatsächlich.
Ja, ist ja auch vom DARPA finanziert.
Ja, ja, ja.
Ich glaube, die Firma selber ist gekauft worden von Google.
Ich glaube, die haben sie wieder verkauft.
Haben sie wieder verkauft, aber kann auch sein.
Aber ja, die war mitfinanziert vom DARPA vor allen Dingen.
Ja.
Mal gucken, was da Schönes für die Zivilgesellschaft
noch bei raus springt.
Ja, auf jeden Fall irgendwie, das ist halt auch so ein hartes Problem, auch da gibt es tolle Erfolge, jetzt wenn man sich anguckt, was AlphaGo Zero angeht und so, das ist gar keine Frage, das ist ein super toller Erfolg, weil irgendwie früher waren ja auch die Lösungen, also Schach sozusagen das erste Mal, dass man Menschen keine Chance mehr hatten gegen Schachcomputer, da war irgendwann 1998, als Kasparov gegen Diplu dann verloren hatte.
Ich habe schon als Kind immer gegen meinen Schachcomputer verloren.
Ja, ja, aber nicht jeder Mensch hätte gegen deinen Schachcomputer verloren.
Das wollen wir nochmal sehen.
Ja, aber heute ist es so, dass kein Mensch mehr eine Chance hätte gegen einfach nur so ein blödes iPad.
Weil das ist halt schon schnell genug.
Das ist völlig aussichtslos.
Und das damals, ja, so nach 98 war dann halt klar, okay, Menschen haben jetzt irgendwie hier keine Chance mehr.
Wer gewinnt denn eigentlich, wenn ich
das Spiel von einem anderen
Rechner mitspielen lasse? Das wäre doch mal interessant.
Also ich spiele auf dem einen Rechner manuell
Schach gegen den Bot
und lasse mir meinen Zug aber
von einem anderen Bot predikten.
Gewinnt dann der schnellere Bot oder was, wenn der beide Bot
gegeneinander spielen? Ist das dann zufällig?
Üblicherweise kommt es halt darauf an, was das
für Dinger sind. Wenn die gleich sind, dann ist es vielleicht
Zufall oder dann soll es 50% 50-50
sein. Aber vielleicht kommt eine Regel raus, vielleicht geht es immer
weiß. Ja, ist schon so, dass
70% glaube ich, zwei Drittel
ungefähr weiß gewinnt.
Also wenn es gewinnt, also die meisten
Spiele sind sowieso Remi, aber wenn es
eine Entscheidung gibt, dann gewinnt meistens weiß.
Weil weiß ja schon einen leichten Vorteil hat durch
den Anzug.
Aber ja,
trotzdem hättest
du halt, sagen wir mal so, auch ein schlechtes
Schachprogramm hätte halt keine Chance gegen
einen wirklich guten, also eins von 98 oder so
hätte halt keine Chance gegen eins der modernen
auf einer modernen Hardware ist halt
das ist so viel besser geworden.
Aber eben auch in dem Ding, was halt 98
KSV aufgeschlagen hat, steckte halt ganz
viel domainspezifisches Wissen drin, da steckte
halt viel Schachttheorie drin, da war eine Endspieldatenbank
dran, da war
viel
ähm
Blatter, Overhead, brauchen wir heute alles nicht mehr
wegschmeißen, lernen von einer Einheit fertig
Also da steckte ganz, ganz viel menschliche Arbeit drin
sozusagen
und das, also wenn man
jetzt zum Beispiel sagt, okay, wir möchten
jetzt nicht einen Schachcomputer bauen, der
den Schachweltmeister schlägt, sondern wir möchten jetzt
Baggerfahrprogramm
irgendwie bauen, das mit den besten Baggerfahrern
mithalten kann oder so,
dann müsste man dafür genauso
viel Zeit investieren wie
oder vielleicht noch mehr oder keine Ahnung,
auf jeden Fall sehr, sehr viel Zeit, um
diese Domäne genauso gut zu modellieren, wie man
das damals mit Schach gemacht hat. Und das ist halt
völlig aussichtslos, würde sich niemals rechnen.
Es gibt so viele Dinge, die man irgendwie gut können will,
aber wo es absolut
aussichtslos wäre. Mir fällt ja immer so das
erste eine, was ich für einen Roboter mir selber
anschaffen würde, für jede Menge Geld, wäre
so der Haushaltsroboter, der putzen kann
und das ganze Haus in Ordnung hält. Vielleicht dann irgendwann
auch ein bisschen kochen. Also dann habe ich natürlich meine eigenen
Rezepte oder so. Aber das wäre natürlich
toll, weil dann müsste man das nicht
mehr machen. Ja, aber
es ist schwierig. Also all diese Dinge, wo man
mit der realen Welt interagiert, da komme ich
auch gleich nochmal drauf. Das sind alles, die sind
alle leider nicht so leicht. Man hat das sofort
immer irgendwie so Sicherheitsproblem.
Also
aber nochmal zu dem,
Das grundsätzliche Problem wäre halt, das würde sich überhaupt nicht lohnen für jeden Bereich, für jede Domäne, für jedes Problem, das man irgendwie hat, so viel Theorie und Wissen zu investieren, um das wirklich zu lösen.
Auf diese Art.
Deswegen ist das ja ein netter Erfolg, so nach außen hin, aber eigentlich ist es wertlos, weil man kann das zwar für Schach machen und bei Schach hat es halt einen so hohen symbolischen Wert, dass man es da tatsächlich gemacht hat.
Aber es ist keine praktische Lösung.
Es ist nicht wirklich effizient.
Und na ja, für Schach.
Aber jetzt irgendwie durch AlphaGo Zero und so,
das sind Dinger, wo kein Domänenwissen mehr drinsteckt.
Die sind, also AlphaGo Zero ist von null Schachtheorie
zu irgendwie superjungen Performance innerhalb von ein paar Stunden
durch gegen sich selbst spielen.
gut geworden.
Ja, also der Bot, der dann
auch gegen Go gespielt hat, hat ja irgendwelche
völlig unkonventionellen Züge gespielt, wo keiner warte, was macht
er denn da? Das würde ja ganz anders spielen und dann hat er
trotzdem gewonnen. Das war schon ein bisschen
spannend. Ja, ja, also das ist jetzt außerhalb
von dem, was irgendwie, also wir haben
ein paar hundert Jahre Schachttheorie, wir haben irgendwie
ein paar tausend Jahre vielleicht Go-Theorie
und da
jetzt sind wir halt viel weiter gekommen
in sehr, sehr kurzer Zeit und verstehen
nicht mal mehr, was da passiert, weil
das ist halt außerhalb von unseren
ja, wir kriegen das nicht mehr.
Wir sind halt leider ein bisschen zu dumm dafür, offenbar.
Oder nicht gut genug, jedenfalls.
ein Go oder Schach, um das noch nachvollziehen
zu können, was die Dinger da machen.
Aber es funktioniert, denn sie gewinnen immer.
Und
das ist halt deswegen
so ein riesen Fortschritt,
weil man jetzt
da diese, also solche, auch
diese Reinforcement-Learning-Geschichten sind jetzt
nicht prinzipiell auf irgendein
Problem geeicht.
Deswegen heißt das Ding ja auch AlphaGo Zero
Ding. Das ist quasi das gleiche
Ding, was halt Schach,
Shoku, das ist dieses japanische Schach
und Go irgendwie gelernt
hat. Das heißt, es funktioniert
über unterschiedliche Spiele hinweg.
Das muss nicht unbedingt jetzt, also
das ist halt, so jetzt kann man sich vorstellen,
wenn man jetzt Probleme hat, die ähnlich sind, dann kann
das möglicherweise auch relativ schnell
so gut lernen, dass es halt besser ist als jeder Mensch.
Und
dann lohnt sich das plötzlich, das für diverse
Bereiche einzusetzen, weil man gar kein Domain-Wissen
mehr braucht, dass sie sich das alles selber
beibringen.
Das klingt jetzt auch relativ
erschreckend wahrscheinlich, aber so schlimm ist es auch
wieder nicht, weil
wir haben,
das funktioniert nur dann super, wenn man eben
durch gegen sich selbst spielen oder
super viele Spiele ausprobieren
irgendwie lernen kann, was halt super geht
in so Situationen, wo man
die komplette Welt simulieren kann.
Welcher Gottes und wer hat denn mit Maschinen und Gebauen?
Relativ unwahrscheinlich, dass sowas funktioniert, ja.
Ja, es gibt da schöne Theorien zu
ja, das
ja, aber das
Das war für den kleinen Exkurs.
Ich wollte mit dir eine Zähne am Arsch setzen.
Ja, ich wollte das nur noch
kurz zu Ende führen. Also wenn man das simulieren kann,
ist super. Spiele sind halt,
da hat man die Simulation halt schon.
Genau, es gab da große Erfolge bei den
Atari Games. Voll toll,
aber der Witz ist eigentlich,
dass die Dinger sind halt super simulierbar,
deswegen hat das da so gut funktioniert.
So, die physische Realität ist
nicht wirklich gut simulierbar.
Ja, wir haben ja auch keine vernünftige Abbildung von
einem Modell der physischen Realität
in den ganzen Variablen. Die kennen wir ja alle nicht.
Das sind alles viel zu viele Unbekannten.
Das kennt man schon, aber das ist alles nicht so einfach
umzusetzen.
Und das Problem ist halt auch,
du müsstest ja nicht nur
sozusagen so eine Physik-Engine,
die relativ gut ist, haben. Das geht
vielleicht noch. Aber es passieren halt die ganze
Zeit so Dinge,
wo man nicht weiß, wie man das
irgendwie simulieren soll, ja, so
keine Ahnung, wenn man draußen rumläuft, da passiert
so viel komischer Kram
und
Vielleicht müssen wir unsere Sensorspektren endlich erweitern und die Maschinen
damit füttern
Nee, ist das eher, das ist nicht, also
von der Sensorseite, das funktioniert eigentlich alles, aber
was halt nicht funktioniert, ist
alles mögliche ausprobieren,
um rauszukriegen, wie diese Realität
dann funktioniert, weil das Problem ist, wenn man das jetzt
mit einem selbstfahrenden Auto macht, dann macht man ganz schön viel
kaputt und auch ganz schön
viele selbstfahrende Autos kaputt und die sind ja teuer
und es ist ja, selbst wenn ich das
alles simuliert mache, brauche ich sehr viel Rechenleistung
und muss das ganz, ganz, ganz viel probieren.
Wenn ich das
mit physischen Objekten da draußen machen muss,
das funktioniert nicht.
Und daher wird das
alles, was irgendwie mit physischen
also mit der Manipulation von irgendwelchen physischen Dingen
zu tun hat, das ist alles noch nicht so richtig
noch nicht so richtig
im Griff und bleibt schwierig
jedenfalls, solange man das nicht ordentlich
simulieren kann. Und das ist momentan
auch noch nicht gelöst. Aber
ja, ist natürlich schon interessant, was da alles
an Fortschritten gibt.
Ja.
Genau.
Ja, vielleicht machen wir
jetzt doch noch ein Chapter.
Ja, also
ein Chapter war auf jeden Fall Supervised Learning,
Unsupervised Learning und Reinforced Learning.
Und das ist jetzt über convolutional neural networks.
Was ist das nächste Kapitel?
Ist das
nochmal Fehler?
Und wir wollten auch was über FITs machen.
Achso, genau.
Wir wollten irgendwie was, genau, das, das, ja, ja.
Das hatten wir gestern auch noch nicht so richtig drin.
Wenn man jetzt so Modelle trainiert,
was ist eigentlich, was passiert da eigentlich,
was kann da eigentlich schiefgehen?
Es gibt da Metriken und so,
da hatten wir gestern auch schon so ein bisschen was erzählt,
aber, oder beim letzten Mal was erzählt,
aber es gibt da so prinzipielle Geschichten
und die hatten wir irgendwie nicht mit drin.
Und zwar,
wenn man jetzt,
oder das ist vielleicht sogar
am einfachsten, wenn man das am
Am Schluss, am Ende willst du kurz einführen,
wo bist du gerade?
Ja, ich überlege gerade, wie das mit dem
praktischen Beispiel aussieht, weil wir wollten ja auch noch so
Hunde versus Katzen machen.
Und
da könnte man
das auch noch rein, aber egal, nein.
Ich fand das ganz gut, wie ihr es gemacht habt bei dem
PiDD11-Vortrag.
Da kann man dann hinterher tatsächlich ganz gut dahin,
dass man sowas wie Oberfitting relativ gut da reinkommen könnte.
Und da müsste das mit den Pi Express Variants auch reinpassen.
Ja, stimmt, stimmt, stimmt.
Also deswegen fangen wir vielleicht dann doch nochmal mit dem Beispiel an.
Genau, dann machen wir doch nochmal ein Beispiel hier.
Und genau, ich mach noch Kapitelmarke.
Also wir erklären das jetzt kurz nochmal, wie man das macht,
wenn man jetzt so Hunden- und Katzenbilder hat.
Und ja,
wie man die dann versuchen will, von einander zu unterscheiden
und wie man dann die Maschine dazu bringt,
dass sie das versteht, was da passiert.
weil, wie man sich vielleicht vorstellen kann,
Hunde und Katzen sind unterschiedliche Tiere zwar,
aber die sehen vielleicht doch schon ganz schön ähnlich aus
und vor allem, wenn die irgendwie halb verdeckt sind
oder so von einem Schrank oder in irgendeine Kiste reinhüpfen.
Also wir nehmen das einfachste Problem sozusagen,
was wir haben, nämlich binäre Klassifikationen,
nur jetzt die Klassen sind Hunde und Katzen.
Es gibt so ein Dataset,
das mal in der Kegel-Competition verwendet worden ist,
ich glaube 20.000 Hunde,
20.000 Katzen oder 10.000 Hunde, 10.000 Katzen,
ich weiß nicht mehr genau, aber wir nehmen nur
1.000 Hunde,
1.000 Katzen und nochmal 1.000, also
500 Hunde, 500 Katzen, also
ein Training-Set, ein Test-Set und ein Validations-Set
daraus
und das ist im gleichen
Projekt.
Warum nehmen wir nicht alle 10.000, Jochen?
Ja, weil das so lange dauern würde, das wäre
irgendwie nicht gut.
Das ist sowieso schon auch, selbst mit
1.000 Beispielen ist es schon so,
dass man da ohne GPU nicht so richtig
viel Spaß hat. Das ist so ein bisschen blöd,
man braucht so ein bisschen Spezial-Hardware. Also mit der
1080 kann ich aber schon ein bisschen was rechnen.
Ja, ja, also das wäre schon sehr gut.
Aber viele Leute haben ja vielleicht auch jetzt
keine GPU irgendwie
zu Hause direkt.
Glück, wenn man Computerspiele mag.
Ja, aber dann muss man auch mal diesen ganzen
Kram installieren und so und das ist auch alles nicht so richtig
einfach. Und
ja, also in dem Data Science Projekt
gibt es halt in dem Notebook-Verzeichnis
auch so ein Ding,
Hunde versus Katzen.
Mit welchem Modul kann man die Grafikkarte benutzen?
Ja, das ist, ja,
man muss erst mal das Betriebssystem dazu kriegen,
dass das ordentlich funktioniert. Dann braucht man halt
irgendwie
die NVIDIA-Bibliotheken da unten drunter,
also QDNN und
CUDA und so.
Und dann gibt es halt
diverse
Machine Learning-Bibliotheken, die das benutzen,
um damit irgendwie
Deep Learning-Netze zu bauen. Das ist dann halt
sowas wie TensorFlow oder halt eben
PyTorch
oder
ja,
was gibt es denn da noch alles?
Also, diverse
Geschichten.
Und
das, was wir hier verwenden im Beispiel, ist Keras.
Das ist sozusagen die Python
Binding für TensorFlow.
Die sind auch im TensorFlow-Projekt, ist das Ding
mit drin enthalten, hat die gleiche API wie
bei den anderen Scikit-Learn-Modellen.
Also wenn ihr auf Windows
das mussten wollt, dann könnt ihr es zum Beispiel einfach mit Choco
im Paketmanager-Coder installieren
und das dann ausprobieren.
Aber das
kann ich vorwarnen, es wird böse
Überraschungen geben, das ist nicht so einfach.
Das ist alles ziemlich schwierig. Oder du kannst es ja mal
bei dir ausprobieren. Ja, ich wollte sagen, das werde ich auf jeden Fall
tun und werde
berichten. Genau.
Man kann das auch inzwischen,
Ich habe das auf meinem, ich habe so ein
Faible für Apple, ich bin so ein Apple-Jünger
und
leider werden ja keine
Nvidia-GPUs mehr verbaut, daher funktioniert das alles
nicht mehr so richtig. Es gibt aber
da auch so ein Projekt, das sollte man auch noch nie,
muss ich auch noch nie Shownotes packen, PlateML.
Damit kann man
die AMD-GPUs,
die ja darin sind, benutzen.
Es gibt ja die Abstraktion
von Apple selber, Metal
heißt die irgendwie, wenn man die benutzt,
dann ist das auch schon recht schnell.
Also sozusagen die AMD-GPU, die jetzt in meinem MacBook,
das ist ein relativ altes Ding von 2016, drin steckt,
die ist auf jeden Fall irgendwie doppelt so schnell,
wenn nur die GPU läuft, wie die vier i7-Kerne,
die da sonst so drin sind.
Wusch.
Und das ist dann halt schon, also man kann so sagen,
ungefähr GPU-zu-CPU-Performance-Unterschied ist so 1 zu 10 mindestens.
Kommt halt drauf an, was man für CPUs und GPUs hat,
aber so eine Größenordnung mindestens mal.
Und genau, wenn man jetzt keine
GPU hat, dann, weil, also auf einer
GPU dauert das jetzt mit
den Katzen und Hunden, mit den Tausendballspielen, wenn man es
from scratch einfach so trainiert, auch schon fünf Minuten.
Und das wäre dann jetzt,
wenn man eine CPU verwenden würde, so
mindestens mal ungefähr eine Stunde.
Da macht das dann schon keinen Spaß mehr.
Fünf Minuten kann man mal machen, aber
irgendwie eine Stunde irgendwie darauf warten, dass da
irgendwas, dass man so eine Stunde lang so ein
Progress Bar angucken ist.
Das ist vielleicht irgendwie nicht jedermanns Sache.
Und, genau, also, ja, ich kann ja einfach mal, genau, was man tun kann, wenn man jetzt keine eigene GPU hat, ist, man geht auf Google Colab oder bei Azure gibt es auch irgendwie freie Instanzen, wo man Notebooks ausführen kann, sozusagen ohne, dass man dafür bezahlen muss.
Man kann bei Colab auch Notebooks direkt aus dem GitHub irgendwie ausführen und das ist natürlich ganz praktisch. Man muss nur unter Edit Notebook Settings GPU anwählen und man sollte das auch machen mit dem, also man muss zuerst dieses Prepared Training Data Notebook ausführen, wo dann halt dieses Hundekatzenbeispiel irgendwie gezogen wird.
Und das liegt bei mir irgendwie auf dem S3-Ding.
Und ja, dann werden halt auch diese Samples da rausgezogen.
Und wenn man das getan hat, da muss man auch schon die GPU aktivieren,
damit das auf der gleichen Maschine bleibt.
Und wenn man damit fertig ist, kann man das Notebook Model from Scratch irgendwie mal ausführen.
Und ja, dann halt so ein kleines, ja, convolutional Deep-Learning-Netz irgendwie trainieren.
Ja, also das Beispiel ist auch aus dem Buch Deep-Learning with Python von Sarkole.
Das ist der Autor von Keras und wir arbeiten bei Google.
Ja, das sind sehr schöne Beispiele, die da drin sind.
Das Buch ist sowieso sehr empfehlenswert, wenn man sich für Deep-Learning und wie man das mit Python und Keras macht.
interessiert, dann ist das auch auf jeden Fall
eine Leseempfehlung.
Ja, dann
fangen wir halt an, das Modell wieder von Anfang an zu trainieren.
Genau, also zuerst
baut man das Modell halt irgendwie zusammen.
Darauf möchte ich jetzt, das machen wir
dann bei irgendeiner Deep Learning Folge, was
macht ein Convolution Operation eigentlich, was ist Max Pooling
und so, aber
das wird einfach
jetzt ein bisschen zu weit führen.
Aber man kann halt dieses Modell
bauen. Man kann sich ausgeben lassen, welche Layer sind da drin,
wie viele Parameter oder so man da so
durchgeht, sieht man das. Das ist jetzt
nicht so groß, es hat nur so dreieinhalb Millionen Parameter,
aber ist halt schon
so ein Bereich, wo das halt mit CPU
irgendwie zu trainieren schon relativ knackig wird.
Dann nimmt man halt
eben für,
man legt noch die
Verlustfunktion fest, das wäre an der Stelle
Binary Cross Entropy, das ist einfach nur
Log Loss.
Kann man auch einfach nachgoogeln, dann weiß man,
was das für eine Verlustfunktion ist.
Ähm, äh, die benutzt man eigentlich immer, wenn man sowas wie, äh, binäre Klassifikationen, so ein Problem hat oder, äh, irgendwie, ja, Dinge klassifizieren möchte.
Und, ähm, legt halt noch den, äh, äh, sozusagen Optimierungsalgorithmus fest.
Ja, und, äh, dann, da man bei Bildern oft das Problem hat, dass man die, ähm, Datenmenge also nicht so richtig in den Hauptspeicher packen kann, ich weiß auch nicht, wie groß ImageNet ist, aber irgendwie so 140 GB oder ich weiß, das ist aber jedenfalls schon recht groß.
Das kriegt man nicht mal so...
Ist ein Lautspeicher nicht über 140 GB groß?
Doch, gibt es wahrscheinlich Maschinen,
da habe ich das
falsch...
Kann sein, dass ich total ein Blödsinn
gerade erzählt habe, wie groß ist der Imageschnitt?
Das müssen wir schnell kontrollieren.
Das müssen wir gut nachkontrollieren.
Größe, Imageschnitt-Size.
Ja, habe ich gerade nach Google,
habe einen Wikipedia-Artikel gefunden.
Steht nicht drin.
Naja, egal. Also ist wahrscheinlich
auf jeden Fall sehr, sehr groß.
Und
ja,
man arbeitet halt dann bei Bildern
meistens mit so Generatoren.
Das ist ja auch sowieso eine schöne Idee, wenn man...
154 GB. Also okay.
Also so schlimm ist es nicht, aber
ja, hat man wahrscheinlich auch nicht
unbedingt zu Hause. Und
diese
Image-Data-Generator-Klasse abstrahiert
das sozusagen weg und man iteriert sozusagen
über die Bilder, ohne dass man den ganzen Kram
in meinem Hauptspeicher halten muss
und sage dann halt, okay, hier sind Trainingsdaten,
da sind die Validationsdaten.
Validationsdaten wäre das benutzt,
auch während der Trainingszeit
schon anzuzeigen, wie gut das
Modell momentan performt, sozusagen,
auf Daten, die man halt noch nicht gesehen hat.
Und am Schluss rechnet man halt
den Score aus auf dem Testset.
Das ist auch so eine ganz wichtige Geschichte, das hatten wir gestern nicht.
Da haben wir einfach Training und Test genommen.
Aber eigentlich
muss man noch eine dritte Kategorie haben.
Man muss halt irgendwie ein Trainingsset haben,
muss ein Set haben,
auf dem man validiert, also
vielleicht schon während man
ein Modell trainiert, sieht, geht das jetzt
in die richtige Richtung oder nicht.
Und auf dem man halt auch Überparameteroptimierung
macht, aber das sollte man eben nicht
auf dem Testset machen, sonst overfittet man das
Testset. Und man kann halt
sehen, dass man overfittet, wenn man
auf dem Validationsset immer bessere Resultate
erreicht und dann aber das nicht
sozusagen auf dem Testset
reproduziert werden kann.
Das kann man wieder tatsächlich am besten, wenn man das wieder visualisiert.
Also wenn man das jetzt hier mal fittet, das Modell, dann kriegt man eben viele Progressbar-Geschichten angezeigt. Das läuft über 30 Epochen. Das bedeutet, 30 Mal geht man über das komplette Set drüber.
Progressbar ist wieder mit TQDM.
Genau. Ne, das ist nicht T-Code.
Nein, die ist mir nicht.
Aber man sieht halt sozusagen, wie sich da
die Accuracy, die hier als
Maß für den Fehler genommen wird,
weil an der Stelle ist es tatsächlich mal so, dass es
halbwegs aussagekräftig ist,
weil wenn man halt zwei Klassen hat, gleich viele
Elemente, dann weiß man halt, 50%
ist halt Zufall und wenn man
irgendwie da von Richtung 1 geht,
dann ist das gut und je näher an 1, desto besser.
Und man sieht auch,
dass das auf den Trainingsdaten halt passiert und
auf den Validationsdaten
Daten auch, die man halt eben nicht
in den Trainingstätten hat, aber halt nicht so stark.
Und irgendwann geht der,
geht die Accuracy auf dem
Validation-Set nicht mehr weiter hoch,
auf dem Training-Set aber schon.
Und das kann man sich auch
irgendwie dann mal rausplotten
und sieht dann halt
irgendwie sozusagen
ja, das als
eine lineare Kurve und eine, die fällt dann so
irgendwann so ein bisschen ab. Also auf der x-Achse sieht man halt
die Infos. Entfernen sich so ein bisschen voneinander.
Genau, wie oft man über das Training-Set
drüber gelaufen, ist dann auf der
Y-Achse die Accuracy und
man sieht halt Training-Accuracy geht halt so schön
immer weiter hoch und
Validation-Accuracy
bleibt halt irgendwo so bei knapp über
70% und steigt dann nicht weiter an.
Und beim Fehler sieht man das
eigentlich noch schöner, dass halt das so
quasi auseinanderläuft und das ist
also geht halt so eine Schere auf
zwischen dem
Fehler auf den Trainingsdaten und Fehler
auf den
Validationsdaten und der Grund dafür
Also mit Fehler meinst du jetzt, die er falsch einsortiert hat,
oder meinst du damit diejenigen, die er richtig einsortiert hat,
die aber falsch sind?
Das ist an der Stelle egal. Also ja, beides.
Sozusagen Accuracy ist sozusagen
ein kombiniertes Maß für beides an der Stelle,
weil es die Accuracy
sozusagen gleich verändert, ob ich die eine
Fehler habe oder die andere an der Stelle.
Ja, ich könnte natürlich
auch jetzt, wenn ich ein anderes Problem hätte, könnte ich beide,
weil wenn ich jetzt Precision und Recall hätte, könnte ich
das halt beides plotten oder eben das kombinierte
Maß irgendwie F1 nehmen und plotten.
Ja, aber immer wenn man das sieht, dass das halt so auseinanderläuft, dann weiß man halt, okay, man overfittet gerade das Training-Set und das bedeutet halt, dass man eigentlich nicht mehr wirklich lernt, also etwas generalisiert von den Trainingsbeispielen, die man sieht, sondern man wird halt immer besser auf den Trainingsdaten, aber das hilft einem gar nicht bei neuen Daten, sondern macht das Ergebnis eigentlich nur noch schlechter.
Weil man halt quasi die Trainingsdaten auswendig lernt.
Genau. Es gibt diverse Gründe dafür, warum das passiert. Es kann sein, dass man einfach zu wenig Technikdaten hat für die Komplexität des Modells oder für die Anzahl der Parameter, die das Modell hat.
Es kann sein, dass man da nicht hinreichend Regularisierungsmaßnahmen gegen Overfitting getroffen hat. Also bei neuronalen Netzen wäre das Dropout. Man kann aber auch irgendwie für die Parameter halt irgendwie sagen, dass da sozusagen schmeißt man einige der Verbindungen halt weg.
Also ein Anteil zwischen 10 und 50 Prozent oder sowas. Und zwingt damit sozusagen das Netz nicht nur, also da schon generellere Geschichten gelernt zu haben, weil es muss halt auch funktionieren, wenn halt ein Teil davon nicht mehr funktioniert.
So, es ist nicht so einfach zu erklären, warum das funktioniert. Das ist auch nicht so, das war schon, das war auch irgendwie, ja, bekannt, dass das irgendwie klappt oder so, aber niemand wusste genau, warum. Also, das ist, ja, das ist auf jeden Fall etwas, was halt, ja, ein Modell, das sehr, sehr stark sich den Daten anpasst, halt bestraft irgendwie dafür, dass es das tut.
Und in dem Sinne wirkt es halt Overfitting entgegen. Bei anderen Arten von Modellen gibt es halt auch eine klassische Regularisierung. Bei linearen Modellen wäre halt sowas wie, man bestraft das Modell dafür, dass die Größe, dass halt zum Beispiel die Länge des normalen Vektors, also die Länge des Modells, der Betrag, die Länge des Vektors, dass der zu groß wird, in der L2-Norm zum Beispiel.
und sagt halt, das ist nicht gut.
Das sollten immer möglichst kleine
Werte sein und das
regularisiert auch. Es gibt halt die
unterschiedlichsten Arten, wie man das hinkriegt.
Aber ja,
also an der Stelle
ist es halt einfach tausend
Beispiele sind einfach zu wenig, um
wirklich zu lernen, was Katzen von Hunden
untersteidet.
Und ja,
Overfitting ist halt so der große
fiese Fehler, also einer der beiden
großen fiesen Dinge, die passieren können.
Genau, da wären wir jetzt auch bei diesem Bias versus Variance Ding, wenn man halt eben sieht, dass das so aussieht wie in dem Plot bei dem Model-from-Scratch-Notebook, dann hat man halt Overfitting, aber es könnte halt auch sein,
dass der Training-Error und Validation-Error beide noch relativ stark beieinander liegen, aber halt hoch sind.
Und dann kann es halt sein, dass man underfittet.
Das kann dann passieren, wenn das Modell zu einfach ist, was man benutzt.
Also wenn zum Beispiel die Daten irgendwie verteilt sind in der Parabel, aber man legt halt eine Gerade durch oder so, dann hat man einen zu großen Bias im Modell, dadurch, dass es halt vielleicht zu einfach ist. Man geht halt davon aus, dass es sich irgendwie durch eine Gerade darstellen lässt, ist aber nicht so, dann underfittet man halt.
Oder in dem Fall wäre das halt, wenn man jetzt sozusagen einfach zu wenig Trainingsepochen nehmen würde, man würde jetzt einfach nur einmal oder zweimal über die Trainingsdaten gehen, dann wäre zwar der Validation Error nicht viel schlimmer als der Trainings Error, aber man wäre nicht bei einem optimalen Ergebnis einfach deswegen, weil man noch nicht lange genug die Parameter optimiert hat
und hätte sozusagen das Problem underfitted.
Und zwischen Underfitting und Overfitting
gibt es halt irgendwo einen Bereich, der optimal ist.
Und man muss halt irgendwie versuchen, den zu treffen.
Perfekt Match.
Ja, und dann gibt es da auch immer noch so einen Unterschied
zwischen Trainings- und Validation-Error,
den man nicht wegkriegt.
Das ist so ein irreduzierbarer Fehler,
der halt vielleicht daherkommt, dass es da Rauschen gibt.
Vielleicht, dass es irgendwie nicht geht.
Ja, also die Overfitting- und Underfitting-Geschichten bekommt man halt irgendwie, wenn man das richtig macht, in den Griff.
Aber es gibt halt auch immer einen Unterschied zwischen Trainings- und Validationserror, den man nicht wegbekommt.
Ja, aber das halt voneinander unterscheiden zu können, ist relativ wichtig, weil wenn man sich jetzt an dem Fehler abarbeitet, den man nicht wegbekommt, dann ist das halt sinnlos.
Und wenn man irgendwie
denkt, man ist fertig und hat aber
einen der Fehler, die man eigentlich noch
wegoptimieren kann, dann
kommt man halt auch nicht zum
besten möglichen Ergebnis.
Ja.
Genau.
Damit haben wir das eigentlich im Grunde schon
so halbwegs
erklärt. Ja, also ich glaube, das wird dann wieder
Zeit für den Captain Mark, weil die Frage ist, was
fällt dir denn noch so ein? Außer dem Deep Learning,
was wir auf jeden Fall nochmal machen wollen, aber was wir wahrscheinlich in der eigenen
Folge irgendwie besprechen?
Ja, also
was ich noch
genau
ja genau, was ich auf jeden Fall noch erzählen
würde nach dem Beispiel
ist, warum
Deep
Learning
auch auf
kleineren Datensätzen funktioniert.
Okay,
ja. Was sind
dann da kleinere Datensätze?
Ja, eben sowas wie das, was wir hier haben.
Also 1000, 10.000
bis 1000 Datensätze. Ja, genau.
Also groß ist halt sowas, also da
funktioniert es ja gut, das weiß man ja.
Imagenet, aber das sind anderthalb Millionen Bilder. Jetzt könnte man auf die Idee kommen
und sagen, okay,
so viele Bilder
habe ich leider nicht für mein Problem. Ich möchte jetzt irgendwie
keine Ahnung, irgendwie das praktisch
anwenden und
ich möchte jetzt aber nicht Hunde von Katzen
unterscheiden oder
irgendwie Tische
in Bildern finden, sondern
ich habe das Problem, ich
mache jetzt, weiß ich nicht,
bin in einer
Müllverbrennungsanlage oder so, bin an einem Platz,
wo ganz viel Müll angeliefert wird und ich möchte jetzt irgendwie
den Müll auseinandersortieren.
Und das sind halt alles Klassen. Also ich möchte jetzt zum Beispiel
feststellen, ist das eine Plastikflasche oder ist das
halt irgendwie was anderes als Glas?
Eine Plastikflasche mit einem Hundeetikett.
Ja, also meine Klassen sind halt anders.
Die sind in dem Image-Net-Data-Set so nicht drin.
Und da kann ich denken,
okay, dann muss ich jetzt erst anderthalb Millionen Bilder sammeln.
Blöd, das kriege ich vielleicht nicht hin.
Und ich kann die auch nicht labeln.
Das ist alles irgendwie nicht wirklich handhabbar für mich.
Dann könnte ich halt denken, okay, Deep Learning ist nichts für mich.
Das funktioniert alles nicht.
Ich lasse weiter das irgendwie ein Euro-Jobber
und die sortieren das dann von Hand oder so.
Aber nein, man kann tatsächlich da was machen.
Und zwar braucht man gar nicht so viele Beispiele.
Man kann nämlich die vortrainierten Modelle einfach benutzen.
Die wurden dann halt auf ImageNet trainiert
und geht halt dann davon aus,
dass sozusagen ein Großteil von dem,
was unsere visuelle Realität ausmacht,
dann da schon irgendwie ordentlich trainiert worden ist.
Also Feature-Extraktion aus Bildern
funktioniert damit halt schon ziemlich gut
und diese Annahme wird wahrscheinlich halten.
Und dann trainiert man halt ein eigenes Modell,
was aber nur die von einem Deep-Learning-Modell,
das aus ImageNet trainiert wurde, generiert wurden.
Also man nimmt sozusagen, also bei den Deep-Learning-Modellen,
die auf ImageNet trainiert wurden, ist halt so der letzte Layer,
zum Beispiel der Klassifikationslayer, der das halt in die tausend,
das ist halt nochmal ein dichter Layer und danach sind nochmal tausend Ausgabeneuronen,
die halt dann die tausend Klassen von ImageNet darstellen.
Und dann bei jedem Ding kommt halt eine Wahrscheinlichkeit raus,
dafür, dass es in der Klasse liegt.
Und diese beiden Dinger nimmt man einfach
weg, also den Klassifikationslayer
und nimmt
nur das, was dabei rauskommt, wenn man jetzt
wirft man halt ein Bild von einer Plastikflasche
oben rein und dann kommt halt das raus, was jetzt
normalerweise dann als Elefant oder Hund
klassifiziert würde.
Ein Feature Vector, das ist an der Stelle noch nicht
ein Vector, das ist halt ein Tensor, der irgendwie so ein bisschen anders aussieht.
Den klopft man dann halt flach, irgendwie so
in einen Vector. Einmal mit der
großen Küchenrolle drüber. Genau, und dann
hat man halt so einen
Feature Vector extrahiert und das macht man halt mit allen
Bildern, die man hat. Vielleicht hat man halt nur so tausend, aber tausend
kann man durchaus sammeln, dass das geht.
Und halt
oder tausend für jede Klasse, die man halt hat.
Und
dann trainiert man einen eigenen
Klassifikationslayer, sozusagen ein eigenes
Modell auf diesen Features.
Und dann
kommt man damit auf
auch gar nicht so schlechte Ergebnisse
und hat sozusagen
das Deep Learning Modell
nur zur Feature-Extraktion benutzt.
Das ist ein super billiges Verfahren.
Damit kommt man schon in Bereiche,
in die man früher nie gekommen wäre,
mit wenig Trainingsdaten.
Einfach deswegen, weil man sich halt viel
von der Generalisierungs-Power
oder Feature-Extraktions-Geschichte,
die halt auf einem Image-net-trainierten
Modell, was halt drinsteckt, irgendwie sozusagen
transferieren kann auf das Problem, was man hat.
Ja, also ich denke mal, diese Daten kommt ja relativ einfach sammeln.
Ihr stellt euch einfach mit eurer Kamera da zu dem Unternehmen, wo ihr es einführen
wollt, müsst halt pro Kategorie 1000 Fotos
aus verschiedenen Perspektiven schießen und schon
ein bisschen was da passiert.
Genau, genau. Also
es ist immer noch nicht einfach.
Man muss das dann auch nebeln und so, aber das wird dann
alles, kommt in den machbaren Bereich.
Ein Verfahren, was noch besser funktioniert, ist
das nennt sich Feintuning.
Da nimmt man halt so ein Modell,
so ein Deep Learning Modell und sagt halt, okay,
ich nehme
jetzt den obersten Klassifikationslayer
oder vielleicht noch ein paar von den Layern mit
den abstraktesten Features. Vielleicht ist, wenn ich Plastikflaschen
erkennen will, gar nicht so
relevant, ob da jetzt Fell drauf ist oder nicht,
weil die haben halt kein Fell.
Aber ich möchte jetzt zwei Arten von Plastikflaschen unterscheiden,
da ist halt vielleicht was anderes wichtig. Das heißt,
man nimmt einige der abstraktesten
Layer, oder Layer,
die halt die abstraktesten Features detektieren,
die
macht man trainierbar, den Rest von dem
Modell, also die ganzen Layer,
die halt so eher einfache Sachen
detektieren,
die friert man ein.
Dann kann man in Keras einfach sagen, so, diese Layer sind alle
eingefroren, die ändern sich beim Training nicht.
Und nur die obersten paar Layer
dürfen sich halt ändern.
Und dann trainiert man neu.
Das ist halt wieder ein bisschen aufwendiger, weil man halt
viel mehr Parameter halt fitten muss.
Aber das funktioniert dann noch viel besser.
Und damit kommt man dann schon so in die Region von dem,
was ImageNet halt auch, äh, was diese
Modelle halt auch auf ImageNet für eine
Genauigkeit haben.
Und also da kommt man, ja, vielleicht nicht ganz
Richtung menschliche Performance, also aber schon
sehr, sehr, also es ist dann schon sehr, sehr gut.
Also Feintuning heißt die Methode,
funktioniert ziemlich
klasse. Und damit kriegt man
sozusagen Probleme,
wo man früher gedacht hätte, das geht gar nicht,
kriegt man nicht in den Griff. Und wenn man jetzt so ein bisschen was
von Deep Learning gehört hat, dann denkt man sich vielleicht so, oh, so viele
Trainingsbeispiele habe ich gar nicht. Wäre schön, ich
kriege es vielleicht theoretisch in den Griff, aber praktisch kann ich es auch
nicht machen. Man kriegt die Dinge auch
tatsächlich praktisch in den Griff. Also das ist
schon, das sollte man vielleicht wissen,
dass das möglich ist und wie man das machen kann.
Du musst dir mal alles ausprobieren.
Ich bin da total neugierig drauf. Ich muss mal ein, zwei Leute finden,
die Lust haben, dass man bei denen mal so ein Projekt baut.
Ja, und
ja, damit kann man dann auf jeden Fall
schon so richtige... Also wenn ihr Lust habt, dass wir so
ein Maschinen-Learning-Projekt bei euch machen, dann sagt auch mal
Bescheid, ne? Das ist natürlich...
Ja.
Aber schon einen recht
starken Wow-Effekt mit erzeugen.
Ja,
das wollte ich auf jeden Fall noch erwähnen.
Deswegen ist das auch so interessant.
Und ich bin auch gespannt, da wird es halt in den
nächsten Jahren, das dauert natürlich jetzt sehr lange, also
es gibt halt viele Dinge, die so theoretisch gelöst sind und
ImageNet ist natürlich so ein
Dataset, das kann man jetzt
für viele Sachen in der Praxis geht
das, aber für manche Sachen geht das noch nicht. Für viele
andere Sachen gibt es noch keine tollen Datasets.
Aber bis das
jetzt sozusagen, also viele dieser
Probleme, mit denen man in der Praxis was anfangen könnte,
sind jetzt theoretisch im Griff und man muss es halt nicht nur
praktisch umsetzen. Das wird aber
wahrscheinlich noch irgendwie lange dauern. Wahrscheinlich wird es die nächsten
zehn Jahre dauern, bis man das in Produkten im Alltag
sieht, dass die das wirklich benutzen
und auch richtig benutzen. Weil am Anfang
jetzt müssen die Leute erstmal lernen, wie das geht.
Die werden erstmal Fehler machen. Das wird erstmal
wird man viele Dinge komplett falsch machen
und dann dauert das halt irgendwie ein paar Jahre, bis die Leute
anfangen, das richtig hinzubekommen
und dann dauert es noch mal ein paar Jahre,
bis die Daten ordentlich sind
und ja, so wie das halt so ist.
Also, alles sehr langsam.
Ja, ist leider so.
Aber
wahrscheinlich wird man da
in vielen Bereichen
tolle Verbesserungen sehen und mir wird das ja schon
reichen, wenn ich im Supermarkt nicht immer irgendwie
fluchend vor dem Pfandautomaten stehen muss.
wahrscheinlich braucht man ja nicht mal Deep Learning,
das ist einfach nur kaputt. Ach,
vielleicht geht's doch nicht. Das ist einfach ein Problem, schon nicht geht.
Naja,
ich geb die Hoffnung nicht auf. Ja, ja, genau, das wollte ich
gerade sagen. Also eben mal so.
Die Kundenintelligenz, die AGI kriegen wir alle nicht
hin und die ganzen Roboter und so, aber
ja, vielleicht ist es auch cool, also
nützlich.
Gut, ja, also
ein praktisches Beispiel hatten wir, wir hatten eine Zeltform,
genau, was wir vielleicht noch ein bisschen uns angucken
können, ist das Visualisierungs-Notebook.
Ja, weil
ja,
da bekommt jemand nicht, was er möchte.
Nicht gut.
Ja.
Genau.
Da sind sozusagen die, wenn man die ganzen Notebooks
halt ausgeführt hat, dann werden die Modelle
halt auch gespeichert
und hier werden sie halt nochmal reingeladen.
Da werden auch die
quasi endgültigen Scores auf
den Testdaten ermittelt
sozusagen und man kann halt so ein bisschen
sich angucken,
welche Features
werden eigentlich so aktiviert, wenn man jetzt so ein Bild von einer Katze
zum Beispiel da reinwirft.
Und
da gibt es auch ein Ding, was hier so ein bisschen
zeigt.
Ach, jetzt das Visualisierungs-Notebook
stimmt, da ist auch das tatsächlich
eher so, das zeigt
ja, da sind ein paar kaputte Sachen dabei und das
zeigt tatsächlich eher so, wo
wie funktioniert das mit den Controllers
und so, das wollte ich aber gar nicht zeigen.
Das ist ein anderes Notebook, was ich zeigen wollte.
Da hast du gesagt, dass du das zeigen wolltest. Ja,
hab ich vertan.
Evaluation Notebook, das war das.
Genau, das ist das, wo
die Modelle geladen werden, die jetzt irgendwie
gespeichert wurden auf der Platte.
Was hast du gespeichert, das Pickel?
Nee, HDF5.
HDF5?
Ja.
Was ist das?
Ist das Vorläufer von NetCDF?
Ich weiß es nicht so genau.
Ist auch so ein wissenschaftlicher Bereich,
übliches Format, irgendwie Daten zu speichern.
Ja, im Grunde stehen halt die Parameter vom Netz drin.
Und ja, man könnte die auch irgendwie anders speichern.
Man könnte es wahrscheinlich auch pickeln, aber ja.
Genau. Ja, und da kann man halt mal vergleichen, ob die Scores, die man auf den Testdaten bekommt, halt auch das sind, was man jetzt erwarten würde, nachdem man das Modell auf den Validationsdaten irgendwie getestet hat.
Und das sieht eigentlich alles so aus, als ob das halbwegs stimmt. Und dann kann man da so Dinge tun wie, man nimmt einfach mal Beispielbilder, die man da reinwirft.
Ich weiß gar nicht, ob ich die mit eingecheckt habe.
Wenn ja, dann kann man einfach die, die da auskommentiert sind, probieren.
Man kann aber auch eigene Bilder nehmen.
Fotografiert ihr eure Katze, fotografiert ihr euren Hund?
Ja, genau.
Ob das wirklich eine Katze oder ein Hund ist,
zumindest nach der Meinung von dem Algorithmus.
Wird man das natürlich auch irgendwie,
wahrscheinlich sowas schon irgendwie so haben.
Ihr könnt auch fast ganz andere fotografieren und fragen,
ob es eine Katze oder ein Hund ist und gucken, was rauskommt.
Ja.
Ja, egal.
Genau, und dann wird das halt runterskaliert.
Das sieht dann auch ein bisschen deprimierend aus,
weil man sieht nicht mehr so viel auf dem Bild.
Das sind halt immer so 150x150 Pixel
Bilder, die da
reingehen.
Und dann kann man halt mal die Modelle, die man da hat,
hernehmen und
die einfach klassifizieren lassen, was sie dann darauf
sehen. Und dann sieht man schon, dass
das vom Sketch-Model halt nicht so richtig toll
funktioniert vielleicht. Das sagt bei einem Hund dann
irgendwie mit einer 80%igen Wahrscheinlichkeit,
oh, das ist eine Katze und
ja, da gab es auch
dann das mit Data Augmentation
ist so ein bisschen, um
Overfitting zu reduzieren, ist halt schon so ein bisschen besser,
aber das Feature Extraction
Modell, das hat dann schon, oh, das sieht aber
eher wie ein Hund aus und dann
ja, das
Fine Tuning ist halt nochmal deutlich
besser und
das kann man dann auch nochmal auf mehreren
Bildern machen und das ist vielleicht auch mal ganz interessant
zu sehen, welche Bilder halt in dem
Beispiel-Dataset da so drin sind
und man kann sich das Ganze nochmal
so als Tabelle ausgucken. Ich habe übrigens,
das war bei der letzten,
beim letzten Treffen
der Python-User-Group habe ich das auch irgendwie mal so ein bisschen
vorgestellt und da war das irgendwie, sah das
nicht gut aus, weil dann stand da irgendwie
Cat 0% oder sowas, aber das
habe ich jetzt hier mal gefixt. Das war einfach nur so,
dass das, der Klassenname war immer Cat
und 0% bedeutete einfach, es ist ein Hund.
Oh. Also es war schon richtig.
Es war nur blöd dargestellt, das habe ich jetzt nochmal geändert,
dass wenn es irgendwie kleiner als 50% ist,
dass dann
Hund als Klasse dasteht.
Ja, ist auf jeden Fall super schön zum Antauen
und ich glaube auch zum Visualisieren von den ersten Tests.
Solltet ihr es auf jeden Fall auch mal ausprobieren?
Ja, genau.
Und ich glaube, von dem ganzen theoretischen Überbau
haben wir es schon ziemlich viel geschafft heute, würde ich sagen.
Ich guck noch mal grad, ob es noch irgendwas gibt, was
äh. Hast du noch
einen letzten kleinen Punkt?
Nö. Nö, das ist, äh,
ich glaube, wir sind tatsächlich irgendwie so halbwegs
durch. Dann würde jetzt ja die nächste Chapter mal
kommen und wir würden vielleicht noch einfach kurz die Picks
nehmen, die wir immer so gerne noch wieder eingeführt hatten.
Ich glaube, die gefielen euch auch ganz gut.
Welches, äh, Modul
pickst du diese Woche, Jochen?
Äh, ja, hab ich auch in einem Podcast von gehört.
Ich weiß jetzt gar nicht mehr, ob es Python Bytes war.
Doch, ich meine. Aber, ähm,
und zwar, äh, gibt's da
ein sehr schönes Modul namens
MatMat.
Was das tut ist,
also es gibt ja, also testen ist ganz wichtig
und so. Und
es gibt halt auch so Ansätze, irgendwie
Tests vielleicht zu automatisieren.
Ein interessanter ist Hypothesis.
Das ist vielleicht dann auch irgendwie
auch ein Pick.
Das Ding generiert halt
mögliche Eingaben für Funktionen und so
und probiert die halt alle durch und sagt einem Bescheid,
wenn es irgendwo Probleme gab.
Das ist aber nur ein Ansatz und Mathematik verfolgt einen anderen und den finde ich eigentlich ziemlich cool. Man kann sich natürlich sowas ausgeben lassen wie Coverage, also sozusagen wie viel Prozent von den Zeilen, die man jetzt irgendwie hat, ist eigentlich quasi mal durchlaufen worden, wenn man jetzt die Tests wie durchläuft.
Das gibt einem so einen ganz guten Anhaltspunkt dafür, wie vollständig die Tests sind, aber naja, das heißt ja jetzt nicht, dass das wirklich funktioniert, dass wirklich, wenn etwas kaputt geht, man das halt auch tatsächlich bemerken würde.
Es könnte sein, aber es kann halt auch Fälle
geben, wo das dann nicht passiert. Und MatMat
setzt da irgendwie so ein bisschen an und
macht etwas sehr Interessantes. Und zwar ändert es
halt zufällig irgendwie Dinge
im Code. Irgendwelche Datentypen
oder sowas. Ja, also es macht zum Beispiel
größer in kleiner Zeichen oder
sowas. Ändert Bedingungen,
fügt irgendwie was hinzu oder so. Und guckt,
ob Tests fehlschlagen.
Und das ist natürlich
irgendwie echt nett. Also sozusagen, es macht
halt irgendwie zufällige Änderungen an deinem Code und
guckt dann halt irgendwie... Ist dann sein Test gut genug,
um das zu entdecken? Ist seine Test-Feed gut genug
zu finden, gut genug, ist seine
Testabdeckung gut genug, um rauszufinden,
dass jetzt irgendwie hier was zufällig geändert wurde.
Und das ist natürlich schon echt
ein sehr interessanter Ansatz. Sehr, sehr gut, also
gerade wenn man sowas nicht richtig mal bauen möchte, oder?
Ja, genau, das wäre halt so mein Pick
für, ja,
diese Episode. Ja, also ich würde
tatsächlich auch nochmal Seaborn
kurz auswählen, das hatten wir zwar schon in der
Pandas-Episode, glaube ich, kurz vorgestellt, aber das ist einfach,
wenn man Matplotlib so kennt,
einfach die totale tolle grafische Erweiterung,
dass alles ein bisschen schicker aussieht,
mit der man es einfach auf Matplotlib draufpackt
und an C-Bohren reinbaut.
Und ich würde auch gerne irgendwie so drei Kleinigkeiten
aus der Standardbibliothek,
aber die ich jetzt so ein bisschen mehr drin bewahre,
weil ich was dazu geschrieben hatte,
nur kurz vorstellen.
Das ist natürlich jetzt wieder der Nupic,
aber das ist da trotzdem vielleicht für einige interessant.
Und zwar kennt ihr hoffentlich ArcPath,
also mit dem man vernünftig so die Parameter
zu Skripten übergeben kann.
da gibt es irgendwie von,
wie heißt das von Google,
gibt es eine Bibliothek? Es gibt noch
Click. Genau.
Und natürlich dann die Standard
Variante.
Aber ich finde ArcPass ja ziemlich cool.
Also ich finde es auch besser als Click. Also Click benutzt halt irgendwie so
Dekoratoren, um das irgendwie zu machen.
Und ja, weiß nicht, fand ich
nicht so toll, aber obwohl die Gesundheit auch ganz nett ist,
aber ArcPass fand ich auch irgendwie ganz nice.
Und dann ja,
GetPass natürlich, um da irgendwie so Passwörter reinzubekommen.
Irgendwie als verschlüsselten Text, dass man nicht direkt sieht, was eingegeben
geben wird. Auch immer gut, wenn man sich irgendwo
einloggt, braucht man das vielleicht. Ja, das ist tatsächlich
super. Das ist vor allen Dingen auch schön in
Notebooks, weil ansonsten
schreibt man das ja auch
irgendwie mit in die Notebooks
rein und checkt das vielleicht irgendwo ein oder so.
Genau. Und
ja, ich habe ab und zu noch den Textwrap, das
Textwrap-Modul benutzt, einfach nur zum
Didenten, meistens von irgendwelchen
mehrteiligen Dockstrings, die sonst irgendwie
verrutscht wären, irgendwie einfach in meinen
ja, in meiner Struktur, in meinen
Files.
Konnte man so ganz gut darstellen. Also, falls ihr das Problem
habt, TechTrap.
Ja, das war es eigentlich schon so mit den Modulen
und ich hoffe, euch hat die Folge jetzt wieder gefallen,
Machine Learning.
Egal, wo ihr
die gehört habt gerade. Also, wir haben jetzt gerade
ausnahmsweise mal Nachmittag, sonst nehmen wir ja immer abends auf,
gerade relativ gutes Wetter. Ich habe schon
fast überlegt, ob wir rausgehen sollen.
Ja, bestimmt könnte man eigentlich auch.
Wetter ist momentan super.
Frühling, voll gut.
Ja, aber ansonsten, genau.
Hört, wo immer ihr möchtet.
Bleibt uns gewogen und schreibt uns euer Feedback
an hallo-at-pison-podcast.de
Ja, wir hören uns.
Bis zum nächsten Mal.