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