Transcript: PP08 - Machine Learning am Beispiel Bildklassifikation

· Back to episode

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.

Einen Python-Treffen für die Python-Community.

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 dem Podcast mal angefangen hat. Und das war eine tolle Konferenz und wir haben da halt auch mal versucht, irgendwie mitzubekommen, was die Leute denn so haben wollen, von so einer, erwarten, an Features erwarten, von so einer Podcast-Publishing-Lösung.

Also eigentlich alle wollten sagen, habt ihr keine Kapitelmarken? Also wir nutzen 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 mag gerne beim Chaos-Radio immer die Werbeunterbrechung, die Nachrichten, die es gibt.

Dann 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, das ist dann natürlich trotzdem da.

Ja, das kippe ich dann eigentlich nicht. Also entweder höre ich halt oder nicht. Plus, Minus, Stopp. Aber gut, für euch jetzt, das ist dann natürlich trotzdem da.

Also was halt momentan noch nicht geht, sind halt sowas wie, dass 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 diese Kapitelmarke übersprungen.

Ja, genau. Man kann jetzt aber zum Beispiel auch noch da Links reinschreiben, wenn man die spitze Klammern setzt. Und man könnte auch noch Bilder hinzufügen. Jedenfalls kann man das, was man natürlich tun sollte, bei Auphonic auch noch mit reintut, damit die halt im

in der Audiodatei auch mit drin sind, damit man die auch im Player hat.

Ja, also wir haben doch gar nicht so respektlos gesagt, also wie man das überhaupt macht irgendwie. Also den Podcast aufnehmen mit Ultraschall, irgendwie dann das dann auf Auphonic reinpumpen und dann halt unserem Cast hosen.

Ja, aber wir wollten eigentlich über das Python Camp, glaube ich, nochmal reden. Also wir haben jetzt schon viel über die Kapitelmarken gesagt. Ihr habt die jetzt bei uns mit im DjangoCast, finde ich, auf PyPy und auf Jochens Repo.

Genau.

Ja, genau. Eine weitere Veranstaltung, auf der wir waren, ist jetzt letzte Woche, letztes Wochenende.

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.

Man kann ja irgendwie bei Python Barcamp EU auf die Seite mal gehen, kann sich erstmal alles angucken. Da gibt es doch relativ gute Dokumentationen in den einzelnen Sessions jeweils, was da so gemacht worden ist. Also 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, hat irgendwie den Landtagsreden irgendwie alle gepasst. Das ist sehr spannend.

Das ist eine super interessante Geschichte, genau. Die haben halt alle ihre Reden und Protokolle.

Ja, die haben alle ihre Sitzungsprotokolle als PDF veröffentlicht und 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 war sowieso einer der, ein überraschender Trend. Also ich meine, dass irgendwie Machine Learning 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 Basteln war doch 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 den Testament hingelernt, also vielleicht bringen wir da auch noch die eine oder andere Folge mit zusammen und mal gucken, was da so rauskommt.

Ja, genau, wir haben auch kurz vorgestellt, 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 es halt bei der Tepta-Marke. Was soll ich mal, erhebe ich immer die Hand und winke?

Ja, genau, winke einfach mal. Was soll ich denn da reinschreiben?

Veranstaltungshinweise.

Ah, Veranstaltungshinweise, alles klar, okay.

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.

Klar, das ist gut, wenn man da gerne mal ein bisschen Urlaub macht, wenn man da Lust hat und dann so ein bisschen einen Reis von machen, das ist bestimmt cool.

Vom 2. bis 5. Mai, Florenz.

Ja, dann geht es weiter. Ich weiß nicht, das ist jetzt gerade gar nicht so geordnet. Ich muss jetzt mal gucken.

Also Juni geht es weiter mit der GeoPython in Basel.

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 ist auch in Basel irgendwie im gleichen Gebäude, denke ich mal.

Das haben die extra dafür gebaut, hat er jetzt.

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.

Ja, 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?

Du meinst im 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 EuroCyPy.

Das ist wissenschaftlich auch sehr interessant. Und wir haben die PyData in Berlin vom 9. bis 13. Oktober.

Ja, PyCon.de.

Also, 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.

Tja.

Chicago Blackhawks.

Ja, ja. Und, genau. Damit haben wir ja schon fast alle... Müssen wir diese Veranstaltungshinweise auch nie wieder machen, dieses Jahr. Weil, damit haben wir alles Richtige durch, oder?

Ja, vielleicht kann man doch den MP Sprint erwähnen, den es gibt. Den haben wir, glaube ich, schon vergessen.

Oh, ach so, richtig. Stimmt.

Genau. PyDDF Sprint. Wann war denn der?

Nochmal im 4. Juli, Mai?

Ja.

Ich glaube schon.

Ja.

4. Juli, 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 es wirklich immer sehr, sehr nett.

Genau. Und bilden sich ein paar Grüppchen und programmieren an irgendwelchen Projekten rum. Und, ja, ist immer sehr lustig. Hat Spaß zusammen. Lernt sich ein bisschen kennen.

Sollte ich euch...

Anmelden beim Meetup und, ja.

Genau.

Ja.

Ja, ich glaube, das war es für das nächste Mal hier in der Gegend.

Ja, okay. Dann haben wir damit die Veranstaltungshinweise auch irgendwie durch.

Dann wäre es jederzeit für den Chapter-Markt. Also, ich denke übrigens hinter dir ist ein bisschen...

Ach so, ja.

Wenn du gerade seitens der Vermittlung guckst, muss ich sagen.

Gut, okay. Dann...

Ja. Und danach gehen wir einfach so quasi...

Ja, ein Thema, wie wir sagen, dass du wieder...

Genau.

Alles klar.

Fangen wir 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-Markts...

Also da später...

Man kann zwar irgendwie so einen anonymen Chapter-Markt 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.

Selbst Auslö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 irgendwie eine Capital-Marke setzt.

Naja, da müssen wir halt hardware-technisch noch so ein bisschen aufrüsten, aber...

Ja.

Da soll irgendwo ein Raspberry stehen, den können wir über das Netzwerk anschächen.

Dann schenken wir den Bluetooth ans Raspberry und dann drückt er einfach das 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...

Ja, so ein bisschen die Einführung...

Genau, wir haben da eigentlich auch schon eine 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?

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 ist ein klassisches Beispiel.

Das Allereinfachste ist binär.

Genau, wir hatten Reuters Text, da hat es einen 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,

da nochmal ein bisschen drauf einzugehen.

Da ist es halt so, dass viele Tasks, die vorher schwer waren, also eben im Bereich Bilderkennung oder Speech-to-Text,

wo es darum geht, ja, 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 das halt irgendwie, möchte damit halt überwachte,

also so Supervised Machine Learning machen, dann war das pro Domain früher immer sehr aufwendig, weil man dann halt domainspezifische Features erstmal extra,

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, also, ähm,

wenn man jetzt nicht Texte, äh, äh, klassifizieren möchte, das hat halt auch mit den,

mit diesem Back-of-Words-Ansatz, den wir gestern auch schon hatten und, äh, TF-EDF funktioniert das schon halbwegs gut, ja, so oder so,

das ist schon ziemlich, äh, ziemlich klasse, ähm, aber, äh,

ähm, wenn man jetzt Bilder zum Beispiel klassifizieren möchte in sowas wie Hundekatzen oder, äh, Elefanten, äh, Eichhörnchen,

ähm, das hat nie wirklich gut funktioniert, es gibt da so ein klassisches Dataset, äh, namens Image, äh, äh, ImageNet,

da drin ungefähr tausend Klassen und, ähm, ja, das ist manchmal so ein bisschen, das ist manchmal so ein bisschen eigen, dieses, äh,

dieses Dataset, so, äh, jemand hat mal, ach, ich glaub, das war André Capaci oder so, der jetzt irgendwie, äh,

Datascience-Chef von, von Tesla ist, äh, der hat, äh, äh, irgendwann mal, weil er wissen wollte, wie ist eigentlich der Fehler von Menschen auf diesem Set,

äh, äh, selber sich so ein Amputationstool in JavaScript gebastelt, äh, und, ähm, ja,

äh, äh, ähm, ähm, dabei halt irgendwie, eine der Sachen, die er gelernt hat, die für ihn überraschend waren, ist, dass halt ein Drittel der, äh, der, der Bilder sind halt irgendwie irgendwelche Hunde oder Hunderassen,

und das ist natürlich total auch für Menschen super ätzend schwierig, irgendwie, äh, genau rauszukriegen, wenn man jetzt ein Bild, und die sind dann, werden alle relativ klein gerechnet, die Bilder, ja, so, man hat da irgendwie so 150 mal 150 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, äh,

irgendwie, keine Ahnung, äh, ein Dackel oder ein, äh, weiß ich nicht, äh, Spezial-Dackel, ich kenn mich jetzt auch damit nicht aus, und er auch nicht, und dann, äh, so, hat er ganz schön geflucht, und hatte irgendwie dann daneben sich dann Bilder von den einzelnen Hunde, Hunderassen da irgendwie hingelegt, und dann irgendwie das, und, ja, hatte doch erstaunlich viele Fehler dabei, äh, und, äh, das war, das war auch, äh, mit den, mit den klassischen Ansätzen war dieses Problem furchtbar schwierig für Computer, äh,

äh, bis dann halt, äh, irgendwann 2011, glaube ich, war das mit AlexNet, äh, das ist, ja, also nochmal ganz kurz, ähm, ImageNet ist irgendwie von, 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, ja, und, ähm, AlexNet ist, äh, jetzt das, äh, nächste, genau, ähm, ich guck grad nochmal nach, wann das genau, äh, sozusagen diese, es gibt da so ein Challenge, äh, zu, äh, zu diesem Dataset, äh, und, äh,

Da gibt es dann sowas 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 nochmal nach, wann das genau war.

Ah ja, das ist genau, es gibt halt diese ImageNet 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 ein gewaltiger Schritt.

Also es war halt so, das hat mal, wie ich meine, ein Interview mit Jeffrey Hinton, glaube ich, nee, das war Jan de Kuhn,

hat das irgendwie mal...

in einem Interview erzählt, er 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 einer Zeitschrift veröffentlicht zu bekommen,

wenn man da irgendwie sich mit Convolutional Neural Nets beschäftigt hat.

Und nach dieser, nach diesem Erfolg von Alex Nett, 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.

Und ja, es sind also dramatische Verbesserungen irgendwie eingetreten.

Und das ist halt auch nicht nur in dem einen Bereich.

Und das ist auch nicht nur in dem einen Bereich.

Das ist nicht nur in dem einen Bereich passiert, sondern bei Spracherkennung halt auch.

Und 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 Convolutional 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, worum es geht.

Sollte man, ist aber auch schwierig, wirklich zu erklären, was es ist.

Also man, was man immer so, wenn man jetzt das aus Medien mitbekommt, was es darum geht,

dann meistens ist es 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ß niemand 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,

die dann irgendwie eine kryptische Verbindung haben, weil da irgendwie Strom von A nach B fließt oder so.

Und dann halt irgendwie eine Beziehung dargestellt.

Vielleicht meint 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 ja, man kann.

Man kann sich das ungefähr so vorstellen, dass man hat halt Schichten von...

und von so 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 Abstraktionsschiebene als die Helligkeit des Bildes oder so.

Oder andere Dinge, vielleicht dann noch grobe Strukturen unterteilt.

Kanten, Kanten, genau. Wo ist hier eine Kante, wo ist eine Ecke, was sind helle Flecken in dem Bild und so.

Und jetzt hast du eine Neuronenschicht.

Ja, oder mehrere Schichten.

Und das, was da passiert im Grunde, ist halt das, was die Konvolution gilt.

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,

hat halt auch, dass sobald sich irgendwas so ein bisschen geändert hat,

also wenn der Hund in einem Trainingsbeispiel, in einem ersten Trainingsbeispiel,

in einer 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, und man hat für jeden Kanal halt 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, 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, also Tier, wenn es halt guckt, ist es ein Hund, guckt dann erstmal jemand, ob es überhaupt ein Tier ist, oder sowas.

Könnte natürlich passen, oder ist es ein Lebewesen, oder sowas, oder ist es überhaupt ein Bild, also...

Ja, 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...

Und ja...

Diese Modelle sind halt...

Bilden das halt sehr gut ab und repräsentieren darum halt das, was man da bekommt halt.

Also 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 alte 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...

Kein Feature-Engineering mehr so macht.

Mehr machen.

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...

Der Bild hat diese verschiedenen Dinge, Netze, Schichten.

Und durch die ich dann einfach durch iterieren kann und...

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 Riesenfortschritt.

Schwarm-Intelligenz, schon wieder.

Schwarm, naja.

Ja.

Aber ja.

Es macht 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 Domain 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 äh...

Die wirklich knackigen Probleme, wenn es darum geht, irgendwie wirklich intelligentes Verhalten oder...

Was heißt also überhaupt, wie definiert man das?

Also wenn ich jetzt tatsächlich als ein individuelles, autonomes Individuum hätte, das ich dann als intelligent definieren kann,

dann ist es 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.

Also das ist vielleicht so...

Das ist auch überraschend, wie viel sich auf solche Entscheidungen reduzieren lässt.

Also das ist tatsächlich, macht das schon viel aus, aber...

Äh, diese, die, die, ähm...

Die Welt, äh, äh, sozusagen gesehen aus der Sicht von so einem Netz, ist halt sehr, sehr, das ist eine sehr, sehr oberflächliche Sicht der Welt.

Die lassen sich auch alle sehr, diese Modelle lassen sich sehr leicht täuschen, weil sie eben fast nichts über die Welt wissen.

Und, ähm...

Also du fällst das alles nicht für intelligent.

Nein, überhaupt nicht.

Also ich finde das natürlich schon, äh, riesen...

Also, um bei einem Griff zu bleiben, Intelligence, äh, die da irgendwo hinter steckt.

Also man ist natürlich jetzt nicht ungefragt vernehmbar.

Und die sticht natürlich an 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.

Selbst 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.

Ja, also ich...

Und das ist vielleicht schon irgendwo Intelligenz.

Ich denke, der, der, der, 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 irgendwie 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 programmieren.

Das ist schon clever.

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?

Die müssen das halt irgendwie hinschreiben, die müssen das auch verstehen.

Ja, klar.

Also insofern ist das natürlich schon ein Riesenfortschritt.

Aber es ist halt nicht auf alle Probleme anwendbar.

Es gibt viele Probleme, bei denen 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 sind wir mittlerweile ziemlich gut.

Aber...

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...

Mit irgendwelchen Dingen und dann...

Aber gut, das sind ja noch so Machine Learning Security, das 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, wenn 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 mal 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 es, dass Menschen das auch super hinkriegen, aber...

Dass alles nicht...

Diese Daten nicht brauchen.

Und dann steht 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 man kann jetzt sagen...

Und die Menschen lernen das dann anhand dieser Masse von Informationen so schnell doch.

Ja, man kann jetzt sagen, also Menschen eben sehen auch Sachen, hören nicht nur Dinge und so.

Aber ich glaube, das ist gar nicht so der Punkt, sondern...

Oder das, was halt so der...

Ja.

Übliche Ansicht ist halt, dass Menschen halt und Tiere irgendwie super...

An Supervised Learning halt wirklich, 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, in Computern momentan nicht.

Und es...

Da kriegt man halt eben schon sowas nicht hin wie, was ist da überhaupt eine geeignete Vernunft?

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.

Also da, man sieht irgendwie, keine Ahnung, eine Savanne in Afrika oder laufen irgendwie Tiere durch die Kamera.

Ja, irgendwie dieses Problem, 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 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 Experimenten...

Irgend so einen exponentellen Aufbau übersetzen.

Aber wenn man sich jetzt anguckt, können...

Wie gut können Menschen das vorhersagen, was da passiert?

Super, ja.

Also das...

Die verstehen auch, dass wenn die Sonne untergeht, dann wird es dunkel oder so.

Für solche Maschinen oder Modelle sehr, sehr schwierig.

Die kriegen halt den...

Vielleicht einen 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 findet 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.

Ja, das liegt auch genau an dem Problem, dass die Maschinen an der Stelle nicht diese Sinneswahrnehmung von einer echten Welt,

in der Gänze der Erfahrungsmöglichkeiten, was hessofraktale, dimensionale Strukturen angeht, erfassen konnten.

Und das dann nicht vorliegt in dem Datensatz.

Möglicherweise wäre das eine Option, da irgendwie so ranzugehen.

Jetzt wollen wir noch ein paar Fraktaltheorien...

Naja, das ist ja wieder Hingespinze, aber ja.

Vielleicht kann man das...

Vielleicht kann man dadurch irgendwann sowas dann doch basteln und dann die KI für sich...

Ja, kann man bestimmt, aber momentan wissen wir halt nicht, wie.

Und ja, 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, auch am Supervised, 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...

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...

Wie gut war jetzt dieser Zug, den ich gemacht habe?

Weil das weiß halt eh keiner so genau.

Und 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 verdienst 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...

Ja, 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.

So selbstfahrende Autos sind halt auch so ein...

Oder überhaupt laufende Roboter und so, das ist alles Reinforcement Learning.

Oh, laufende Roboter, schön.

Hast du das gesehen von Boston Dynamics, das neue Ding?

Da haben irgendwie 15 diese, weiß nicht, pferdeförmigen Hunderoboter so einen LKW getogen.

So irgendwo irgendeine Straße.

Ich finde diese Videos immer sehr beunruhigend.

Ja, die sind etwas spooky jetzt tatsächlich.

Die können ziemlich viel Militärtechnik.

Wenn man sich da überlegt, da ist irgendwie so eine Wasser drauf oder sowas,

dann hüpfen die durch den Wald und...

Ja, und dann stürzen sich dabei die Türen aufzumachen und um die Ecke zu gucken.

Ja, ja, das ist...

Das ist dann ein bisschen spooky tatsächlich.

Ja, creepy, ja.

Ja, ist ja auch vom DARPA finanziert, ne?

Ja, ja, ja.

Ich glaube, die Firma selber ist gekauft worden von Google.

Ja, 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 und so.

Ja.

Mal gucken, was da so schönes für die Zivilgesellschaft noch bei raus springt.

Ja, ja, auf jeden Fall.

Weil 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.

Also ich habe schon als Kind immer gegen meinen Schachcomputer verloren.

Ja, ja, aber nicht jeder Mensch hätte gegen seinen 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, als dass man da irgendwie...

Das ist völlig aussichtslos.

Und das damals, ja, so nach 1998 war dann halt klar,

okay, Menschen haben jetzt irgendwie hier keine Chance mehr.

Aber...

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...

Und lass mir meinen Zug aber von einem anderen Bot prädikten.

Also gewinnt dann der schnellere Bot?

Oder was ist das, wenn der beide Bot gegeneinander spielt?

Ist das dann zufällig?

Ne, ne, ü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...

Aber vielleicht kommen dann Regen raus.

Vielleicht geht immer Weiß.

Ne, ja, ne, 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,

steckt da halt ganz viel domainspezifisches Wissen drin.

Da steckt da halt viel Schachtheorie drin.

Da war eine Endspieldatenbank dran.

Da war viel...

Ähm...

Ähm...

Äh...

Blatter, Overhead.

Brauchen wir heute alles nicht mehr wegschmeißen.

Lernen von einer eine, fertig.

Ja, also da steckt ja ganz, ganz viel menschliche Arbeit drin.

Sozusagen.

Äh...

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 ein...

Äh...

Ähm...

Ja, weiß ich nicht.

Baggerfahrprogramm irgendwie bauen,

das mit den besten Baggerfahrern mithalten kann oder so.

Dann müsste man dafür genauso viel Zeit investieren,

wie...

Äh...

Oder vielleicht noch mehr oder keine Ahnung.

Auf jeden Fall sehr, sehr viel Zeit,

um das halt...

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 ein,

was ich für einen Roboter mir selber anschaffen würde.

Für jede Menge Geld wäre es 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...

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.

Äh...

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 nicht...

Keine praktische Lösung.

Es ist nicht wirklich effizient.

Und...

Naja...

Ja, für Schach, aber...

In anderer...

Ja.

Aber jetzt irgendwie durch AlphaGo Zero und so,

das sind Dinger, wo kein...

äh, Domänenwissen mehr drinsteckt.

Die, äh, sind, äh, also AlphaGo Zero

ist, äh, von, also

Null-Schachtheorie zu irgendwie

superjungen Performance innerhalb von ein paar Stunden

durch gegen sich selbst spielen, gut geworden.

Ja, also der, der Worte, der dann, ähm,

auch gegen Bo gespielt hat, hat ja irgendwelche völlig

unkonventionellen Türen gespielt, wo keiner machte, was macht der denn da?

Das würde ja ganz anders spielen und dann hat er ja 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

Schachtheorie, wir haben irgendwie, äh, ein paar

tausend Jahre vielleicht, äh, Go-Theorie

und da, jetzt

sind wir halt viel weitergekommen in sehr, sehr kurzer

Zeit und verstehen nicht mal mehr, was

da passiert, weil, äh, es ist halt außerhalb

von unseren, äh, ja,

wir kriegen das nicht mehr, wir sind halt leider ein bisschen

zu dumm dafür, offenbar, oder nicht gut genug

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. Also das

heißt das Ding ja auch, dieses AlphaGo Zero

Ding, das ist quasi das gleiche

das gleiche Ding, was halt Schach

Schoku, das ist dieses

japanische Schach irgendwie, 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.

Also die 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 Gott, das sind Werte mit Maschinen und Gebauen.

Relativ unwahrscheinlich, dass so etwas funktioniert.

Ja, es gibt da schöne Theorien zu

Ja, das

Ja, aber das

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 und den ganzen Variablen. Die kennen wir ja alle nicht.

Alles viel zu viele Unbekannten.

Das kennt man schon, aber das ist alles nicht so einfach

umzusetzen.

Und das Problem ist halt

auch, du musstest 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.

Außen rumläuft, da passiert so viel komischer Kram.

Welche Sensorspektren endlich erweitern

und die Maschinen damit füttern?

Ja, nee, es ist eher,

von der Sensor-Seite, 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 nicht so viel.

Ich brauche nicht sehr viel Rechenleistung und muss das ganz, ganz, ganz viel probieren.

Wenn ich das, äh,

ja, wenn ich das mit physischen Objekten

da draußen machen muss, das funktioniert nicht.

Das ist, äh, ja.

Und, äh, daher

wird das, also alles, was irgendwie

mit physischen, also mit der Manipulation

von irgendwelchen physischen Dingen zu tun hat,

das ist alles noch nicht so richtig, äh,

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 es da alles so an Fortschritten gibt.

Ähm, ja.

Ähm,

genau, äh,

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 war Convolutional Neuronetworks.

Ähm, was ist das nächste Kapitel? Ist das, ähm,

ähm,

nochmal Fehler und wir wollten noch was über FITs

machen. Achso, genau, wir wollten, wir wollten irgendwie was,

äh, genau, dass das, äh, ja, ähm,

Ähm, äh, das hatten wir gestern auch noch nicht so richtig, ähm, drin, äh, wenn man jetzt so Modelle trainiert, äh, was ist eigentlich, äh, äh, was, was passiert da eigentlich, was kann da eigentlich schief gehen?

Es gibt da Metriken und so, da hatten wir gestern auch schon so ein bisschen, äh, was erzählt, aber, äh, oder beim letzten Mal was erzählt, äh, aber es gibt da so prinzipielle Geschichten und die hatten wir irgendwie nicht mit drin.

Und zwar, äh, wenn man jetzt, ähm, oder das ist vielleicht sogar am einfachsten, wenn man das am, äh, aber ich, ich empfehle mir so.

Am Schluss, am Ende willst du kurz einführen, wo, wo bist du gerade? Ich hab.

Ja, ich überlege gerade, wie das mit dem praktischen Beispiel aussieht, weil wir wollten ja auch noch so, äh, Hunde versus Katzen machen.

Ja.

Und, äh, ähm, da könnte man das auch noch rein, aber, ja, egal, nein.

Ja, aber ich fand das ganz gut, wie du das gemacht hast bei dem PiDD.

11 Vortrag, da kann man dann hinterher tatsächlich ganz gut dahin, dass man sowas wie Oberfitting relativ gut da rein machen könnte.

Und da müsste das mit den PiS versus Variants auch reinpassen.

Ja, ja, stimmt, stimmt, stimmt.

Also das ist ja, wir gehen vielleicht dann doch nochmal mit dem Beispiel an.

Genau, dann, dann machen wir doch nochmal Beispiel hier.

Und, ähm, 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, äh, ja, wie man die dann auch versuchen will, von einer Hand zu unterscheiden.

Und wie man dann die Maschine dazu bringt, dass sie das versteht, was da passiert.

Weil, ähm, wie man sich vielleicht vorstellen kann, Hunde und Katzen sind unterschiedliche.

Tiere zwar, aber, ähm, die sehen vielleicht doch schon ganz schön ähnlich aus.

Und vor allem, wenn die irgendwie halb verdeckt sind oder so von, ähm, gelangt oder in irgendeine Kiste reinhüpfen.

Also wir nehmen das, das einfachste Problem sozusagen, ähm, was wir, äh, was wir haben.

Nämlich binäre Klassifikationen, nur jetzt die Klassen sind Hunde und Katzen.

Ähm, es gibt, ähm, so ein, so ein, so ein Dataset, äh, irgendwie das mal in der Kegel-Competition verwendet worden ist.

Ähm, 20.000 Hunde, 20.000 Katzen oder 10.000 Hunde, 10.000 Katzen, ich weiß nicht genau.

Aber wir nehmen nur, äh, 1.000 Hunde, 1.000 Katzen und nochmal 1.000, also 500 Hunde, 500 Katzen.

Also ein, ein Trainingsset, ein Testset und ein Validationsset, äh, äh, daraus.

Und das ist im gleichen, äh, äh, ja.

Warum nehmen wir nicht dann alle 10.000, Jochen?

Ja, weil das so lange dauern würde, das wäre irgendwie nicht, nicht gut.

Ähm, das ist sowieso schon auch, selbst mit den, selbst nur mit 1.000 Beispielen ist es schon so, ähm, dass man da ohne GPU nicht so richtig viel Spaß hat.

Äh, das ist so ein bisschen blöd.

Man braucht so ein bisschen Spaß.

Also mit der 1.080 kann ich aber schon ein bisschen was rechnen.

Jaja, also das, das wäre schon sehr gut.

Aber viele Leute haben ja vielleicht auch jetzt keine, äh, keine GPU irgendwie, äh, zu Hause direkt.

Glück, wenn man Computerspiele mag.

Ja, aber da muss man auch immer diesen ganzen Kram installieren und so und das ist auch alles nicht so richtig einfach.

Und, ähm, ja, also in dem, in dem Data Science Projekt ist, gibt's halt in dem Notebook-Verzeichnis, äh, auch so ein Ding, äh, äh, Hunde versus Katzen.

Mit welchem Modul kann man die Grafikkarte benutzen?

Jaja, das ist, äh, man muss erstmal das Betriebssystem dazu kriegen, dass das ordentlich funktioniert.

Dann braucht man halt irgendwie, äh, die NVIDIA-Bibliotheken da unten drunter, also QDNN und, äh, CUDA und so.

Und dann gibt es halt, äh, äh, diverse, äh, ja, Machine Learning Bibliotheken, die das benutzen, um damit irgendwie, äh, Deep Learning Netze zu bauen.

Das ist dann halt sowas wie TensorFlow oder halt eben, äh, PyTorch oder, äh, äh, äh, ja, ähm, ja, was, was gibt's denn da noch alles?

Also, äh, die, die diverse, diverse Geschichten.

Und, ähm, äh, das, was wir hier verwenden im Beispiel ist Keras, das ist sozusagen die Python, äh, ähm, Python Bindings für TensorFlow und, ähm, ähm, ja, die sind auch im TensorFlow-Projekt, ist das Ding mit drin enthalten.

Hat die gleiche API wie, ähm, bei den anderen Scikit-Learn, äh, Modellen.

Und, ähm.

Also, wenn ihr auf Windows das nutzen wollt, dann könnt ihr das zum Beispiel einfach mit Choco im Paketmanager, äh, ja, CUDA installieren und das dann ausprobieren.

Mit oder bei SIX.

Äh, aber das, äh, also 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 muss sagen, das werde ich auf jeden Fall tun.

Ja.

Und werde berichten.

Genau.

Ähm, äh, man kann das auch inzwischen, äh.

Äh.

Ich hab das auf meinem, ich hab so, äh, ich hab so ein Faible für Apple.

Ich bin so ein Apple-Jünger.

Äh, und, ähm, leider wird mir ja keine NVIDIA-GPUs mehr verbaut.

Daher funktioniert das alles nicht mehr so richtig.

Es gibt aber, ähm, da auch so ein Projekt ist, sollte man auch noch nie, muss ich auch noch nie Shownotes packen, äh, PlateML.

Ähm, damit kann man, äh, die, die AMD-GPUs, die ja darin sind, äh, benutzen.

Äh, äh, 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.

Die AMD-GPU, die jetzt in meinem MacBook, das ist ein relativ altes Ding von 2016, äh, drinsteckt, die ist auf jeden Fall irgendwie, äh, doppelt so schnell, wenn nur die GPU läuft, wie die vier i7-Kerne, die da sonst da drin sind.

Wusch.

Und das ist dann halt schon, also man kann so sagen, ungefähr GPU zu CPU, äh, Performance-Unterschied ist so 1 zu 10, mindestens.

Äh, kommt halt drauf an, was man für CPUs und GPUs hat, aber so eine Größenordnung mindestens mal.

Und, ähm, genau, wenn man jetzt keine GPU hat.

Dann, weil, also auf einer GPU, äh, äh, dauert das jetzt mit den Katzen und Hunden, mit den 1000 Beispielen, wenn man es from scratch einfach so trainiert, auch schon 5 Minuten.

Und das wäre dann jetzt, äh, wenn man eine CPU verwenden würde, so mindestens mal ungefähr eine Stunde.

Ja, das ist halt, da macht das dann schon keinen Spaß mehr.

5 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.

Vielleicht irgendwie nicht jedermanns Sache.

Ähm, und, ähm.

Genau, also, ähm, ja, ich kann ja einfach mal, äh, genau, was man tun kann, wenn man, wenn man jetzt keine eigene GPU hat, ist, man, ähm, äh, geht auf Google Colab oder bei, bei, bei Azure, äh, gibt's auch irgendwie, äh, freie Instanzen, wo man Notebooks ausführen kann, äh, sozusagen ohne, dass man dafür bezahlen muss.

Man kann bei, äh, Colab auch, äh, Notebooks direkt aus dem Git, GitHub, äh, irgendwie, äh.

Äh, ausführen.

Und das ist natürlich ganz praktisch.

Man muss nur unter Edit, äh, äh, Notebook Settings, äh, GPU anwählen.

Und man sollte das auch machen mit dem, also man muss zuerst dieses Prepared Training Data, äh, ähm, Notebook ausführen, äh, wo dann halt dieses Hundekatzen-Beispiel irgendwie gezogen wird.

Das liegt bei mir irgendwie auf dem S3-Ding.

Und, ähm, ja, dann werden halt auch diese Samples da rausgezogen.

Ähm, und wenn man das getan hat, das, da muss man auch schon die GPU aktivieren.

Damit das auf der gleichen Maschine bleibt.

Äh, und, äh, wenn man, ähm, äh, wenn man damit fertig ist, kann man, äh, das Notebook Model from Scratch, äh, irgendwie mal ausführen.

Und, ähm, ja, dann halt so ein kleines, äh, ja, convolutional Deep Learning, äh, Netz, äh, irgendwie trainieren.

Ähm, ja, also das Beispiel ist auch aus dem Buch, äh, Deep Learning with Python von, äh, von, äh, François Collet.

Das ist, äh, der Autor von Keras und, äh, wir arbeiten bei Google.

Ähm, ja, das sind sehr, das sind sehr, sehr schöne Beispiele, die da drin sind.

Das Buch ist sowieso sehr empfehlenswert, weil wenn man sich für Deep Learning und, und, und, äh, wie man das mit Python und Keras macht, interessiert, dann ist das, äh, auch auf jeden Fall eine, äh, Leseempfehlung.

Ähm, und, ähm, ja.

Ähm, ja, dann, äh, wir fangen halt an, das Modell wieder von Anfang an zu trainieren.

Das ist halt schon so ein Bereich, wo das halt für, äh, mit CPU, äh, irgendwie zu trainieren schon relativ knackig wird.

Ähm, dann nimmt man halt eben für, äh, dann legt man noch die, äh, die Verlustfunktion fest.

Das wäre an der Stelle Binary Cross-Entropy.

Das ist einfach nur Log-Loss, äh, 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.

Ähm, 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 Gigabyte oder ich weiß, das ist aber jedenfalls schon recht groß.

Das kriegt man nicht mehr so...

Im Hauptspeicher nicht über 140 Gigabyte groß?

Doch, kriegt, gibt's schon, sind wahrscheinlich Maschinen, das, äh, hab ich das, äh, ähm, äh...

Falsch, ich hab, kann sein, dass ich total einen Blödsinn gerade erzählt habe, wie groß ist ImageNet?

Das müssen wir schnell kontrollieren.

Das müssen wir gut, gut nachkontrollieren, äh...

Größe, ImageNet-Size.

Ja, hab ich grad nachgesucht, Google hat einen Wikipedia-Artikel gefunden, steht nicht drin.

Hm.

Ja, egal, also, äh, ist wahrscheinlich auf jeden Fall, äh, sehr, sehr groß.

Und, ähm, äh, ja, man, man arbeitet halt dann bei Bildern meistens mit so, äh...

Generatoren, das ist ja auch sowieso eine schöne Idee, wenn man...

154 Gigabyte.

Ah, ja, okay, also so schlimm ist es nicht, aber, äh, ja, hat man wahrscheinlich auch nicht unbedingt zu Hause.

Und, ähm, diese, äh, äh, ImageDataGenerator-Klasse abstrahiert das sozusagen weg und man iteriert sozusagen über die Bilder,

ohne dass man den ganzen Kram immer im Hauptspeicher halten muss.

Ähm, und sagt dann halt, okay, hier sind Trainingsdaten, da sind die, äh, Validationsdaten.

Validationsdaten, wer das benutzt, auch während der Trainingszeit schon anzuzeigen,

wie gut das Modell momentan, äh, performt, sozusagen, auf Daten, die man halt noch nicht gesehen hat.

Äh, 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, ähm, eigentlich muss man noch eine dritte Kategorie haben, man muss halt, äh, irgendwie ein Trainingsset haben,

man muss ein Set haben, auf dem man, äh, validiert, also vielleicht schon während man, äh, irgendwie ein Modell trainiert,

sieht, äh, geht das jetzt in die richtige Richtung oder nicht.

Und auf dem man halt auch Überparameter.

Das kann man wieder, äh, über Optimierung machen, aber das sollte man eben nicht auf dem Testset machen, sonst overfittet man das Testset.

Und man kann halt, äh, 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 irgendwie kurz und plottet.

Also, wenn man, wenn man das jetzt hier, äh, mal fittet, das Modell, dann kriegt man eben viele progressbare Geschichten angezeigt,

das sind, ähm, läuft über 30 Epochen, das bedeutet, 30 Mal geht man über das Modell.

Das komplette Set drüber.

Und, ähm, ja, man sieht dann halt...

Oh, jetzt warst du wieder mit TQDM.

Genau, äh, nee, das ist nicht TQDM.

Nein, die ist mir nicht.

Das ist irgendwie bei Keras eingebaut.

Ach so.

Aber man sieht halt, sozusagen, wie sich da, äh, die Accuracy, die hier als, äh, Maß für den Fehler genommen wird,

weil an der Stelle ist es tatsächlich mal so, dass es halbwegs aussagekräftig ist, was das, weil, wenn man halt zwei Klassen hat,

glaube ich, gleich viele Elemente, dann weiß man halt, 50 Prozent ist halt Zufall und wenn man, äh, irgendwie da von Richtung Eins geht,

dann ist das gut und je näher an Eins, desto besser.

Ähm...

Und man sieht auch, dass das auf den Trainingsdaten halt passiert und, äh, auf den Validationsdaten auch,

die man halt eben nicht in den Trainingsdaten hat, aber halt nicht so stark.

Und irgendwann geht der, äh, geht die Accuracy auf dem Validation-Set nicht mehr weiter hoch, auf dem Training-Set aber schon.

Und, ähm, das kann man sich auch irgendwie dann, äh, mal rausplotten.

Und man sieht dann halt, äh, irgendwie, sozusagen, ja, das als, äh, als...

Eine lineare Kurve und eine, die fällt dann so irgendwann so ein bisschen ab.

Ja.

Auf der X-Achse sieht man halt, wie, wie, wie...

Entfernen sich so ein bisschen voneinander.

Genau, wie, wie, wie oft man über das Training-Set drüber gelaufen ist und auf der, äh, Y-Achse die Accuracy und, äh, man sieht halt Training-Accuracy geht halt so schön immer weiter hoch und, äh, ja, Validation-Accuracy bleibt halt irgendwo so bei knapp über 70 Prozent und steigt dann nicht weiter an.

Und, äh, beim Fehler sieht man das eigentlich noch schöner, dass halt das so quasi auseinanderläuft und das ist, ähm, also geht halt so eine Schere auf zwischen, äh, dem Fehler auf den Trainingsdaten und...

Auf den, äh, auf den, äh, Validationsdaten und der Grund dafür ist...

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?

Ähm, das ist an der Stelle egal. Also, ja, beides. Äh, sozusagen, Accuracy, äh, ist sozusagen ein kombiniertes Maß für beides an der Stelle, weil es, äh, die Accuracy sozusagen gleich verändert, ob ich das, ob ich die eine Art Fehler habe oder die andere an der Stelle.

Ähm, ja, ich könnte natürlich auch jetzt, wenn ich ein anderes Problem hätte, könnte ich beide, äh, 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, äh, aber immer wenn man das sieht, dass das halt so auseinanderläuft, dann weiß man halt, okay, äh, man overfittet gerade das, äh, Trainingsset und das bedeutet halt, äh, dass man eigentlich nicht mehr wirklich lernt, also etwas, also 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, weil man, äh, ja, genau. Und, ja, also sozusagen, es gibt diverse Gründe dafür, warum das passiert. Es kann sein, dass man einfach zu wenig Daten, Trainingsdaten hat für, äh, die Komplexität des Modells, dass man, oder für die Anzahl der Parameter, die das Modell hat.

Es kann sein, dass, ähm, das Modell halt nicht, äh, äh, hinreichend, äh, quasi Maß, 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, äh, irgendwie sagen, dass...

Entschuldigung, was ist Dropout?

Ja, äh, da, äh, sozusagen schmeißt man, ähm, einige der Verbindungen halt weg. Also einen Anteil, ähm, irgendwie zwischen 10 und 50 Prozent oder sowas.

Äh, und, äh, zwingt damit sozusagen das Netz nicht nur, äh, also, ja, da, da schon generellere Geschichten...

...gelernt zu haben, weil es muss halt auch funktionieren mit, wenn halt ein Teil davon nicht mehr funktioniert, sozusagen.

So, es ist, es ist nicht so einfach zu erklären, warum das funktioniert. Es ist auch nicht so, dass, äh, das war schon, das war auch irgendwie, ähm, ja, bekannt, dass das irgendwie klappt oder so, aber niemand wusste genau, warum.

Also es ist, äh, ja, das ist auf jeden Fall etwas, was halt, äh, 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, äh, äh, Overfitting entgegen.

Äh, bei anderen Arten von Modellen gibt es halt auch so klassische Regularisierung bei linearen Modellen, wäre halt sowas, wie man, äh, bestraft das Modell dafür, dass die Größe, das halt ja, äh, das halt, ja, zum Beispiel die Länge des normalen Vektors, also die Länge des Modells, die Größe, äh, der Betrag, wie soll ich sagen, Länge des Vektors, äh, dass der zu groß wird, ja, in der L2-Norm zum Beispiel.

Und, ähm, sagt halt, das ist nicht gut.

Das sollten immer möglichst kleine Werte sein und, ähm, das regularisiert auch, es gibt halt die unterschiedlichsten Arten, wie man das hinkriegt.

Aber, äh, ja, also, an der Stelle ist es halt einfach tausend, äh, Beispiele sind einfach zu wenig, um wirklich zu lernen, was, äh, Katzen von Hunden untersteidet.

Und, ähm, ja, Overfitting ist halt so der, der große, äh, fiese Fehl-, äh, also einer der beiden großen fiesen Dinge, die passieren können.

Äh, genau, da, da wären wir jetzt auch bei diesem, ähm, Bias versus Variance, äh, Ding, wenn man halt, äh, eben sieht, dass das, äh, so aussieht wie in dem Plot bei dem Model-from-Scratch-Notebook, dann hat man halt Overfitting, aber es könnte halt auch sein, äh,

dass man, dass der Training-Error halt irgendwie

ja sozusagen

und das Training-Error und Validation-Error

beide noch relativ stark

beieinander liegen, aber halt hoch sind und dann kann es halt sein, dass man

underfittet, also das kann dann passieren, wenn das Modell zu einfach ist, was man benutzt

also wenn zum Beispiel, wenn die Daten irgendwie

verteilt sind in einer 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, das ist aber nicht so

dann underfittet man halt, oder in dem Fall wäre das

halt, ja

wenn man jetzt

sozusagen einfach zu wenig Trainingsepochen

nehmen würde, man würde jetzt einfach nur einmal über die

Training- 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 underfittet

und zwischen

underfitting und overfitting gibt es halt irgendwo

einen Bereich, der optimal ist und man muss halt

versuchen, den zu treffen

und dann gibt es da auch immer noch so einen Unterschied

zwischen Training

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 Validations-Error, 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

bestmöglichen Ergebnis

genau

ja

genau, damit haben wir das eigentlich im Grunde

schon so halbwegs

ja, also ich glaube, das wäre dann

dann wieder Zeit für einen Chat von Marc, 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

ok

ja, was sind

dann da kleinere Datensätze?

ja, eben sowas wie das, was wir hier haben

also tausend, zehntausend

bis tausend 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

so sagen, ok

so viele Bilder habe ich leider

nicht für mein Problem, ja, ich möchte jetzt irgendwie

keine Ahnung, irgendwie das praktisch

anwenden und

ähm

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

äh

bin in einer Müllverbrennungsanlage, oder so

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, ist Glas

Plastikflasche mit einem Hundeetikett

ja, also meine Klassen sind halt anders, die sind in dem ImageNet

Dataset so nicht drin

äh, und dann kann ich denken, ok, dann muss ich

jetzt erst anderthalb Millionen Bilder sammeln, hm

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

ähm, dann kann ich halt denken, ok

Deep Learning ist nichts für mich, das funktioniert alles nicht

äh, ich lasse weiter, dass irgendwie

äh, ein Eurojobber

und die sortieren das dann von Hand, oder so

ähm, aber

nein, man kann tatsächlich da was machen

und zwar, äh

braucht man gar nicht so viel

Beispiele, man kann nämlich

die, äh, vortrainierten

Modelle, äh, einfach benutzen

so, die wurden dann halt auf ImageNet

äh, äh, trainiert

und geht halt dann davon aus,

dass, äh, sozusagen ein Großteil

von dem, was unsere, ja, visuelle

Realität ausmacht, dann da schon

irgendwie

ordentlich trainiert worden ist, äh, sozusagen

also, Feature-Extraktion

aus Bildern hat dann

funktioniert damit halt schon ziemlich gut, und das, äh

diese Annahme wird wahrscheinlich halten

und dann, ähm

trainiert man halt ein eigenes Modell

was aber nur die von

einem

Deep Learning Modell, das auf ImageNet trainiert wurde

äh, äh, generiert worden, also man

man nimmt sozusagen, also bei den

Deep Learning Modellen, die auf ImageNet

trainiert wurden, ist halt so der Let's Layer, zum Beispiel der

Klassifikationslayer, der da sind 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, sozusagen, dafür, dass es in der Klasse

liegt

und diese beiden Dinger nimmt man einfach weg, also den

Klassifikationslayer, äh, und

ähm, nimmt nur das, was dabei

rauskommt, wenn man jetzt, 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

so, ein, 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, das, das geht

äh, und halt

oder tausend für jede Klasse,

die man halt hat

und, ähm, dann trainiert man einen eigenen

Klassifikationslayer, sozusagen

ein eigenes Modell auf diesen Features

mhm, mhm

und dann, äh, kommt man

damit auf, auch gar nicht

so schlechte Ergebnisse, äh,

und hat sozusagen das Deep-Learning

äh, äh, Modell nur zur Feature-Extraktion

benutzt, also das ist halt ein, das ist ein super

billiges Verfahren, also das, damit

kommt man schon in Bereiche, in die man früher nie gekommen wäre

ähm, mit wenig Trainingsdaten

einfach deswegen, weil man sich halt viel

viel von dem

von der Generalisierungs-Power oder der Fischer-Extraktions

äh, äh, Geschichte, die halt, äh,

auf einem Image-netrainierten Modell, was da halt drinsteckt

irgendwie sozusagen transferieren kann auf das Problem,

was man hat. Ja, also ich denke mal, diese Daten können wir relativ

einfach sammeln, ihr stellt euch einfach mal eure Kamera da zu dem

Unternehmen, wo ihr das einführen wollt, müsst halt pro Kategorie

tausend Fotos aus verschiedenen, äh,

Perspektiven schießen und schon wisst ihr, was da passiert.

Ja, genau, genau, also

das ist immer noch nicht einfach.

Ja, aber das ist halt, ne?

Aber das wird dann alles, kommt in den

machbaren Bereich. Ein Verfahren, was noch

besser funktioniert, ist, äh,

ähm, das nennt sich

Feintuning, da nimmt man halt so ein Modell,

äh, so ein Deep Learning-Modell und sagt halt,

okay, ähm,

ich nehme jetzt den obersten Klassifikations-Layer

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, ja, 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, äh,

oder Layer, die halt die abstraktesten Features detektieren,

die, ähm,

macht man trainierbar,

den Rest von dem Modell, also die ganzen

Layer, die halt so eher einfache

Sachen, äh, 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 finden 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, äh, damit kriegt man so,

sozusagen, äh, 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 hab ich gar nicht, wär schön, ich krieg

das vielleicht theoretisch in den Griff, aber praktisch kann ich's auch nicht

machen. Man kriegt die Dinge auch tatsächlich

praktisch in den Griff. Also, das ist, äh,

das ist schon, das sollte man vielleicht wissen, dass

das möglich ist, und wie man das machen kann.

Und man muss 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, äh, ja, das,

das, äh, damit kann man dann auf jeden Fall schon so richtige...

Also, wenn ihr Lust habt, dass wir so ein Maschinen-Learning-Projekt

baut, ich mach den dann, sagt auch mal Bescheid, ne, das ist natürlich...

Ja. Ähm,

muss man schon einen rechten, rechten, rechten, äh,

starken Wow-Effekt, äh, mit erzeugen.

Ähm,

ja, das, das wollte ich auf jeden Fall noch, äh,

erwähnen, deswegen ist das auch so, so interessant.

Und, äh, ich bin auch gespannt, aber das ist halt

in den nächsten Jahren, das dauert natürlich jetzt, äh, sehr lange.

Also, es gibt halt viele Dinge, die so theoretisch gelöst sind,

und, äh, ImageNet ist natürlich

so ein, so ein Dataset, das

kann man jetzt für, man, viele Sachen in der, in der

Praxis geht das, aber für andere Sachen geht das noch nicht.

Für andere, viele andere Sachen gibt's noch keine tollen Datasets.

Ähm, aber

bis das jetzt sozusagen, also viele, 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, äh, die das

wirklich benutzen, 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, äh, hinzubekommen.

Und, äh, dann dauert es nochmal ein paar Jahre,

äh, bis man, bis die Daten ordentlich sind, und

ja, so wie das halt so ist.

Also, alles sehr langsam, ja.

Ist leider so.

Ja. Aber, äh,

ist, wahrscheinlich wird, wird,

wird man da in vielen Bereichen, äh,

äh, tolle Verbesserungen sehen.

Und mir wird das ja schon reichen, wenn ich im Supermarkt nicht immer

irgendwie fluchend vor dem Pfandautomaten stehen muss.

Wobei ich, wahrscheinlich braucht man ja nicht schon

nicht mal Deep Learning, das ist einfach nur kaputt.

Ach, na, vielleicht gibt's doch nicht.

Das ist einfach ein Problem, schon nicht geht. Äh, naja.

Ich geb die Hoffnung nicht auf.

Ja, ja, genau, das wollte ich grad sagen. Also, eben mal so.

Ja, die Kunstintelligenz, die AGI

kriegen wir alle nicht hin, und die ganzen Roboter und so,

aber, ja, vielleicht ist es auch cool. Also,

ja, nützlich.

Gut, äh,

ja, also ein praktisches Beispiel hatten wir, hatten wir

eine Zeit, warum, genau, was wir vielleicht noch ein bisschen, äh,

uns angucken können, ist das Visualisierungs-

äh, Notebook.

Ja.

Ja.

Weil,

ja,

da bekommt jemand nicht, was er möchte.

Ja, immerhin.

Ja.

Hm.

Äh, genau, ähm,

da, äh,

sind sozusagen die, wenn man die ganzen Notebooks

halt ausgeführt hat, dann, äh, werden die Modelle

halt auch gespeichert, äh,

äh, äh, äh, und hier werden sie halt

immer reingeladen. Da werden auch die, äh,

die, die quasi endgültigen

Scores auf den Testdaten

ermittelt, äh, sozusagen, und man kann halt

so ein bisschen sich angucken, äh,

ja, wie, wie, äh,

welche Features werden eigentlich so aktiviert, wenn man jetzt

so ein Bild von einer Katze zum Beispiel da reinwirft.

Und, ähm,

ja, da gibt's auch ein, ein Ding, was hier so ein bisschen,

was so ein bisschen zeigt, äh,

ach, jetzt, das

Visualisierungs-Notebook stimmt, da, da, da ist auch

das tatsächlich, ähm, eher so,

wo, das zeigt, ja, da sind ein paar kaputte Sachen

dabei, und das zeigt tatsächlich eher so,

wo, äh, wie funktioniert das mit

den, den Controllers und so, das wollte ich aber

gar nicht zeigen. Das ist ein anderes Notebook, was ich

zeigen wollte. Ja, du hast gesagt, dass du das zeigen wolltest.

Ja, hab ich vertan.

Äh, Evaluation-Notebook,

das war das. Ah! Äh, genau.

Das ist das, wo die Modelle geladen

werden, die jetzt irgendwie gespeichert wurden auf der Platte.

Und, ähm.

Und was hast du gespeichert? Das Pickel? Äh, nee,

ähm, HDF5. HDF5.

Ja, es, äh,

was ist das?

Äh, es war

Vorläufer von NetCDF, oder ich weiß es nicht so genau.

Äh, es ist auch so in so einem wissenschaftlichen Bereich

übliches Format, äh, irgendwie

Daten zu speichern.

Ja, äh,

im Grunde stehen da halt die Parameter vom Netz drin.

Und, ähm, ja.

Man könnte die auch irgendwie anders speichern. Man könnte es

wahrscheinlich auch pickeln, aber, äh, ja.

Ähm.

Genau. Ja, äh,

und da kann man halt mal vergleichen, ob die, äh,

sowas, die man auf den Testdaten bekommt, halt auch

das sind, was man jetzt erwarten würde, nachdem man

das, äh, äh, äh,

Modell auf den Validationsdaten, äh,

irgendwie, äh, getestet hat.

Und das sieht eigentlich alles so aus, als ob das halbwegs stimmt.

Und, ähm,

dann kann man da so Dinge tun, wie,

man nimmt einfach mal Beispiels, Beispielbilder,

die man da reinwirft. Äh, ich glaub, ich weiß gar nicht,

ob ich die mit eingecheckt hab.

Ähm,

äh, wenn ja, dann

kann man einfach die, die da auskommentiert sind,

äh, probieren. Man kann aber auch eigene Bilder, äh,

nehmen, äh, muss sie halt da in den...

Fotografiert ihr eure Katze, fotografiert ihr euren Hund?

Ja, genau.

Ob das eine wirkliche Katze oder ein Hund ist, also zumindest nach der Meinung von dem Algorithmus.

Ja, wird man das natürlich auch irgendwie,

äh, äh,

wahrscheinlich sowas schon irgendwie so haben.

Ihr könnt auch was ganz anderes fotografieren

und fragen, ob es eine Katze oder ein Hund ist und gucken, was rauskommt.

Ja.

Äh,

ja, egal. Ähm,

genau, und dann wird das halt so unterskaliert,

das ist auch ein bisschen, sieht dann

ein bisschen deprimierend aus, weil man sieht nicht mehr so viel auf dem

Bild. Das sind halt immer so 150 mal 150

Pixel, äh, Bilder,

die da reingehen.

Ähm, und dann kann man halt mal die Modelle,

die man da hat, äh, äh, hernehmen

und, äh, die einfach klassifizieren lassen, was sie

dann darauf sehen und dann, äh,

sieht man schon, dass das vom Scratch-Model halt nicht so richtig

toll funktioniert vielleicht. Das sagt bei einem Hund

dann irgendwie mit einer 80-prozentigen Wahrscheinlichkeit,

oh, das ist eine Katze und, ähm,

oh. Ja, äh,

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 sagt dann schon, oh,

das sieht aber eher wie ein Hund aus und dann, äh,

ja, das, äh,

äh, äh,

Feintuning ist halt nochmal

deutlich besser. Und, ähm,

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,

äh,

äh, Beispiel-Dataset da so drin sind

und, äh, man kann sich das Ganze

nochmal so als Tabelle ausgucken. Ich hab übrigens, äh,

das war bei der letzten, äh,

äh, beim letzten

Treffen der Python-User-Group hab 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, äh,

hab ich jetzt hier mal gefixt. Das war einfach nur

so, dass das, äh, 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 hab ich jetzt nochmal

geändert, dass dann, wenn es irgendwie kleiner

50% ist, äh,

dass dann, dass dann Hund, äh,

als Klasse dasteht. Ja.

Ähm,

ja, ist auf jeden Fall, äh,

superschön zum Anteilen und ich glaube auch so zum Visualisieren von

so den ersten Tests. Solltet ihr es auf jeden Fall

auch mal ausprobieren. Ja.

Genau, und dann, ja,

äh,

und ich glaube, so von dem

ganzen theoretischen Überbau haben wir es schon so ziemlich viel

geschafft heute, würde ich sagen. Ja. Ich, ich

guck nochmal 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, 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, äh, Modul namens

MatMat. Ähm,

äh,

was das tut ist, äh, also es gibt,

es gibt ja, also testen ist ganz wichtig und so,

äh, und, ähm,

es gibt halt auch so Ansätze, irgendwie Tests

vielleicht zu automatisieren.

Ein, ein interessanter ist Hypothesis.

Das ist vielleicht dann auch irgendwie, äh, auch ein,

auch ein Pick. Äh, das Ding

generiert halt mögliche

Eingaben für Funktionen so und, äh,

probiert die halt alle durch und sagt einem Bescheid, wenn es irgendwo

Probleme gab.

Äh, das ist aber nur ein Ansatz und MatMat verfolgt

einen anderen und den finde ich eigentlich ziemlich cool.

Ähm, man kann sich natürlich

sowas ausgeben lassen wie Coverage, also sozusagen

wie viel Prozent von den

Zeilen, die man jetzt irgendwie hat,

äh, ist eigentlich quasi, äh,

mal durchlaufen worden, äh, 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,

ähm, man das halt auch, äh,

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, ähm,

macht etwas sehr Interessantes und zwar ändert es halt

zufällig, äh, irgendwie Dinge im Code.

So irgendwelche Datentypen oder sowas.

Ja, also es macht zum Beispiel, äh,

größer in kleiner Zeichen oder sowas,

ändert Bedingungen, fügt

irgendwie was hinzu oder so und guckt, ob

Tests viel schlagen.

Und das ist natürlich irgendwie

echt nett. Also sozusagen, es macht halt irgendwie

zufällige Änderungen an einem Code und guckt dann

halt irgendwie... Ist dann dein Test gut genug, um das

zu entdecken? Ist deine Test viel gut genug zu finden,

äh, gut genug, äh, ist deine Testabdeckung

gut genug, um rauszufinden, dass jetzt

irgendwie hier was zufällig geändert wurde.

Und das ist natürlich schon, äh, schon echt ein, äh,

sehr interessanter Ansatz. Sehr, sehr gut. Also gerade, wenn man

sowas nicht richtig mal bauen möchte, oder? Ja.

Äh, genau. Das wäre halt so mein Pick für, für, für,

für, äh, ja.

Diese Episode. Ja. Ja, also ich würde tatsächlich

auch nochmal, äh, Seaborn, äh, kurz

auswählen. Das hatten wir zwar schon in der Pandas-Episode, glaube ich,

kurz vorgestellt, aber, ähm, das einfach, wenn man

Matplotlib so kennt, ähm, einfach die

totale, tolle grafische Erweiterung, dass alles ein bisschen

schicker aussieht und mit, äh, mit dem das einfach

auf Matplotlib draufpackt und dann Seaborn reinbaut.

Und ich würde auch gerne irgendwie so

drei Kleinigkeiten aus der Standard-Bibliothek, aber die ich jetzt so

ein bisschen mehr drin bewahre, weil ich was

dazu geschrieben hatte, nur kurz vorstellen.

Ist natürlich jetzt wieder der, äh, NubPick, aber das ist da trotzdem

vielleicht für einige interessant. Und zwar

kennt ihr hoffentlich ArcPath, also mit dem man vernünftig,

ähm, so die,

ja, Parameter zu, ähm,

Skripten übergeben kann. Ähm,

kennst du, da, äh, gibt's irgendwie von, ähm,

na, wie heißt das von Google, äh, gibt's

eine Bibliothek? Es gibt noch Click.

Click, genau, ja. Und, genau, und,

ähm, ja, natürlich dann die Standard, äh,

Variante. Ähm,

aber ich find ArcPath ja ziemlich cool. Also ich find's

auch besser als Click. Also Click, das sind halt irgendwie so Dekoratoren,

um das irgendwie zu machen. Ja. Und,

äh, ja, weiß nicht, fand ich nicht,

nicht so toll, aber obwohl die Gesundheit auch ganz nett ist, aber

ArcPath fand ich auch irgendwie ganz nice.

Und dann, ja,

GetPath natürlich, um da irgendwie so Passwörter reinzubekommen,

irgendwie als verschlüsselten Text, dass man nicht direkt sieht, was eingegeben

wird. Ja. 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, in, in Notebooks.

Weil ansonsten,

ja, schreibt man das ja auch irgendwie,

äh, mit in die Notebooks rein

und checkt das vielleicht irgendwo ein oder so, das wäre ja irgendwie

gut. Genau. Und, ja, ich hab

ab und zu noch den Textwrap, äh, das Textwrap-Modul

benutzt, ähm, einfach nur zum Didenten

meistens von irgendwelchen mehrzeiligen

Docs, die sonst irgendwie verrutscht wären,

irgendwie einfach in meinen, äh,

ja, in meiner Struktur, in meinen Files.

Mhm. Konnte man

so ganz gut darstellen. Also, falls ihr das Problem

habt, Textwrap. Ja, das

war's eigentlich schon so mit den, mit den Modulen und, ähm,

ich hoffe, euch hat die Folge jetzt wieder gefallen, Machine Learning.

Mhm. Ähm,

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 hab schon fast

überlegt, ob man rausgehen soll. Ja. Ja.

Stimmt, könnte man eigentlich auch. Es ist wirklich, äh,

ja, Wetter ist momentan super.

Frühling, voll gut. Ja,

äh, aber ansonsten, äh, genau.

Hört, wo immer ihr möchtet. Ähm,

bleibt uns gewogen und schreibt uns euer Feedback an

hallo-at-pison-podcast.de. Ähm,

ja, wir hören uns. Oh, ja. Bis zum nächsten Mal.

Bis zum nächsten Mal. Tschüss. Tschüss.