Transkript: PP08 - Machine Learning am Beispiel Bildklassifikation
Vollständiges Transkript der Episode. Zeitstempel beziehen sich auf die Audiowiedergabe.
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 uns an.
Hallo at pythonpodcast.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 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 außer auf der Subscribe, wo wir gestern schon drüber geredet hatten, noch auf dem PyCamp Cologne, einem Python-Treffen für die Python-Community.
Ich mache hier gerade mal eine Kapitelmarke, weil das können wir nämlich jetzt seit neuestem auch.
Und sag mal, wir nennen die jetzt mal, wo waren hier so in letzter Zeit.
Ja, also wir können jetzt tatsächlich Kapitelmarken in unserer eigenen Software Django Cast.
Das heißt, auch wenn ihr die benutzen wollt für euren eigenen Podcast, könnt ihr sowas wie Kapitelmarken machen.
Und vielleicht könnt ihr das nächste Mal, wenn ihr uns hört, dann auch das skippen, was euch nicht interessiert und wisst recht, worum es geht.
Ja, das war, also genau, wir waren eben auf so einer Podcaster-Konferenz in Köln.
Wir dachten uns, wenn die schon mal hier in der Gegend ist, dann kann man da ja mal hingehen, wenn man jetzt auch schon so 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 benutzen das eigentlich immer.
Hat mich ehrlich gesagt so ein bisschen überrascht, weil ich benutze das nie.
Ich höre jetzt schon ganz lange Podcasts oder so, aber ich habe noch nie Kapitelmarken benutzt, weil ich höre das immer in einem sehr wenig interaktiven Setting, ehrlich gesagt.
Also das läuft halt auf meinem Telefon und ich habe Kopfhörer drin und ich kann da nicht viel tun.
Ich kann da nicht auf irgendwelche Kapitel, weil selbst wenn ich es, also ich möchte mich ja eigentlich gar nicht drum kümmern, sondern das soll halt laufen.
Das soll halt auch gern sehr lang laufen.
Also ich mag auch längere Podcasts lieber.
Ich habe gerne beim Cars Radio immer die Werbeunterbrechung, die Nachrichten geskippt.
Okay, gut, da macht das schon irgendwie Sinn.
Aber die meisten, also eigentlich alle Podcasts, die ich höre, haben keine, doch, es gibt sogar welche Mitwerbungen, aber ja, das kippe ich dann eher so von Hand.
Stimmt.
Ja, aber Kapitelmarken werden dafür natürlich auch recht praktisch.
Ja, ich benutze sie eigentlich auch tatsächlich nicht.
Also entweder höre ich halt oder nicht.
So, plus, minus, Stopp.
Aber gut, für euch jetzt, da ist er natürlich trotzdem da.
Ja, aber nachdem das irgendwie alle irgendwie angemerkt haben, dass sie das doch gut fänden, wenn das da drin ist.
Und natürlich ist es schon irgendwie auch natürlich sinnvoll, da eine gewisse Struktur drin zu haben, haben wir dann halt mal geguckt, ob sich das irgendwie einbauen lässt.
Und das war, das war nicht so schwer.
Und jetzt sind sie, jetzt sind sie drin, also gut in einer etwas vereinfachten Form.
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 so den Text, der bei Ultraschall beispielsweise, wenn man sagt, exportiere Kapitelmarken, dann fällt daraus halt so eine Textdatei, wo die erste Spalte ist halt irgendwie so ein Zeitsteinpil oder ein Startzeitpunkt und die zweite Spalte ist halt irgendwie ein Titel.
Ich glaube, jetzt haben schon einige Leute diese Kapitelmarke übersprungen.
Naja, genau.
Man kann jetzt aber zum Beispiel auch noch da Links reinschreiben, wenn man die in spitze Klammern setzt.
Und man könnte halt auch noch Bilder hinzufügen.
Jedenfalls kann man das, wenn man die jetzt, was man natürlich tun sollte, bei Aphornec auch noch mit reintut, damit die halt in der Audiodatei auch mit drin sind, damit man die auch im Player hat.
Ja, aber sie haben doch gar nicht so Perspektifs gesagt, also wie man das überhaupt macht irgendwie.
Also den Podcast aufnehmen mit Ultraschall, irgendwie dann das in Auphonic reinpumpen und dann halt unserem Cast hosten.
Ja, wir wollten eigentlich über Spice and Camp, glaube ich, nochmal reden.
Also wir haben jetzt schon viel über die Pet-Mark gesagt.
Ihr habt die jetzt bei uns mit im Django Cast.
Finde ich ja auf PiPi und auf Jochens Repo.
Genau.
Ja, genau, eine weitere Veranstaltung, auf der wir waren, das ist jetzt letzte Woche, letzte Wochenende das Spicy-Camp.
Das war richtig cool, also richtig tolles Community-Treffen und gab leckeres Grillen am Abend und so und ganz viele tolle Talks und ja, also kleine Lightning-Talks, um verschiedene kleine Projekte vorzustellen und richtige gute Sessions.
Jochen hat selber eins gemacht über Machine Learning und dann hatten wir den Cast auch da.
War ziemlich gut.
Und genau, das war, das war, 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.
Es gibt auch relativ gute Dokumentation 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 Fox dort gemacht, das ist so eine Musikbibliothek für Python.
Ich habe noch ganz, ganz tolles vom Oliver gesehen, hat irgendwie die Landtagsreden irgendwie da alle gepasst, das ist sehr spannend.
Das ist eine super interessante Geschichte, genau.
Die haben halt alle ihre Reden und Protokolle, Sitzungsprotokolle als PDF veröffentlicht.
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, auf jeden Fall sehr spannend unsere Tage, dass man das weiter ist, ein bisschen, was man damit alles so bauen kann.
Ja.
Und dann ist es natürlich noch einige andere spannende Sachen.
Von DevOps war noch ein ziemlich cooler Talk dabei, irgendwie der gut gefallen hat und so wie man Kommentare in Python am besten schreibt.
Und ja, also wenige Menge andere Dinge, die spannend waren mit GeoPython und ein bisschen Micro-Python-Bau und sowas.
Ja.
Ja, das war sowieso einer der, ein überraschender Trend.
Also ich meine, dass irgendwie Machine Learning und so ein Thema ist, das ist Data Science.
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 Home.
Ja gut, aber
so Bastelgang war auch schon immer so dabei bei den Sprints auch und so.
Da war doch immer mitens ein, zwei Gruppen, die ja irgendwas gebastelt.
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 eigenen Regie.
Das war eigentlich.
Das hatte ich, fand ich jedenfalls auffällig.
Also da werden wir euch auch gerne nochmal was zu erzählen, aber das wird vielleicht noch ein bisschen auf sich warten lassen.
Unser Liste ist das noch nicht so ganz nach oben gerutscht.
Ja, haben wir den nette Managen gelernt, also vielleicht bringen wir da auch noch die eine oder andere Folge mit zusammen und
mal gucken, was da so rauskommt.
Genau, wir haben auch kurz vorgestellt, dass wir da so einen Podcast machen.
Und da werden bestimmt noch einige interessante Gespräche daraus entstehen.
Also das klang alles sehr gut.
Jetzt ist es halt eine Chapter-Marke.
Soll ich mal hebe ich immer die Hand und winke?
Genau, wir wink einfach mal.
Was soll ich denn da reinschreiben?
Veranstaltungshinweise.
Ah, Veranstaltungshinweise, alles klar, okay.
Veranstaltung.
Ja, wir haben nämlich tatsächlich dann natürlich auch mit Leuten geredet, die ganz viele neue Veranstaltungen vorgestellt haben, wo man über also hinfahren kann.
Jetzt als nächstes, das ist ja schon nächste Woche, ist die Pykon X in Florenz.
Das ist ein internationales Event.
Also warum man da hinfahren sollte, ist natürlich tolles Wetter jetzt gerade so in den Urgana.
Man kann da so ein bisschen Urlaub machen, wenn man da Lust hat und dann so ein bisschen Python 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 ja erstmal gucken.
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 Europython.
Ist auch in Basel irgendwie im gleichen Gebäude, denke ich mal.
Das haben sie extra dafür gebaut, hat er jetzt.
Ja, ja, genau.
Schönes neues Gebäude, ja.
Teilweise jedenfalls.
Für diese Veranstaltungen.
Ja, ja, Europython ist eigentlich immer toll und ehrlich gewartet, ich war aber noch nie da.
Ich habe immer nur gehört, dass es super sein soll.
Gehst du nach Basel in die Schweiz?
Ja, aber ich glaube, dieses Jahr, das wird alles.
Ja, ist ein bisschen krampf.
Warum ist denn das eigentlich alles irgendwie so im Frühjahr?
Also Juni, Juni,
Oktober, Frühjahr.
Naja, Conference Season.
Ja, okay.
Ja, also danach im September geht es nach Bilbao.
Am 2.
bis 6.
ist im Bilbao die Urusci-Pi.
Ganzwirtschaftlichen Sachen sind auch sehr interessant.
Und wir haben die Pi Data in Berlin, von 9.
bis 13.
Oktober.
PiCon.de bzw.
PiData 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 dieses mit den Veranstaltungshinweise auch nie wieder machen dieses Jahr, weil damit haben wir alles Richtige durch, oder?
Ja, vielleicht kommt noch den MP Sprint erwähnen, den gibt, den haben wir, glaube ich, immer vergessen.
Oh, achso, richtig, stimmt.
Genau, Pi-DDF-Sprint, wann war denn der nochmal?
4.
Ich glaube schon.
Ja.
Vierter, 5.
Mai.
Tatsächlich bei Trivago wieder hier im Medienhafen in Düsseldorf.
Ja.
Das ist auch mal eine tolle Veranstaltung.
Gut, macht natürlich nur wirklich Sinn, wenn man so ein bisschen aus der Gegend kommt, aber da ist das wirklich auch einmal sehr, sehr nett.
Genau, und dann
bildet nicht an den Grüppchen und programmieren an irgendwelchen Projekten rum.
Und da ist immer sehr lustig, hat Spaß zusammen, lernt sich ein bisschen kennen.
Solltet ihr euch für anmelden beim Meetup?
Und ja.
Genau.
Ja, ich glaube, das war so das nächste hier so in der Gegend.
Ja, okay, dann haben wir damit die Veranstaltungshinweise auch irgendwie durch.
Dann wäre es wieder Zeit für einen Chaptermarks.
Also hier linke übrigens hinter dir ist ein bisschen.
Weil ihr gerade seid mit dem Wildungsbruch, manchmal und ja.
Gut, okay.
Dann und danach gehen wir einfach so quasi.
Ja, ein Thema wirst du wieder, genau.
Alles klar.
Wir fangen jetzt mit der Einführung in Machine Learning nochmal so ein bisschen an.
Was denn das nochmal und warum?
Wieso?
Wollen wir da auch noch irgendwas strukturieren?
Puh.
Ja, also wir haben da auf jeden Fall verschiedene Unterthemen und sonst setzen wir die Chaptermarks also da später.
Kannst du da irgendwie so einen anonymen Chaptermark setzen, dass man einfach dann später den benennt, dann müssen wir nicht so viel einfach
so klickt.
Das geht natürlich auch.
Ich brauche da eigentlich nur
ich brauche so einen Buzzer in Handwies 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 Kapitelmarke setzt.
Naja, da müssen wir halt hardware-technisch noch so ein bisschen aufrüsten, aber ja.
Dass wir irgendwo ein Respie stehen, den können wir über das Netzwerk anchechen, dann checken wir den per Bluetooth ans Respi und dann blickt er einfach Signal und dann sagt der Chapter, der mag Boben.
Ja, genau, das ist das.
Das brauchen wir in Python.
Ja, nächstes Mal.
Ja, also Machine Learning, ja, was hatten wir gestern der ganzen Folge gemacht, wo wir so ein bisschen die Einführung haben.
Genau, beim Daten hat auch schon eine Menge Menge zu erzählt und die Teile versuchen wir jetzt auch mal nicht zu wiederholen.
Mal schauen, ob das klappt.
Aber es ist natürlich irgendwie ein weites Feld und man kann da irgendwie ganz viel zu erzählen.
Und wenn ich mich richtig erinnere, also Dinge, die wir gestern dann noch nicht so wirklich erzählt hatten, aber die auch irgendwie wichtig sind, ist halt, ich würde mal sagen, so eine grundsätzliche Einteilung, was hat man da irgendwie an groben Geschichten, die wichtig sind.
Ja, Supervised Learning, Unsupervised Learning, Reinforcement Learning.
Wir hatten gestern das Beispiel Supervised Learning, also sozusagen Textklassifikation, das ist ein klassisches Beispiel, das Alereinfachste ist binäre.
Genau, wir hatten Reuters Textdatensatz und der wurde dann gemeinsam analysiert mit dem Jupyter Notebook, was der Jochen auch veröffentlicht hat.
Da kann man das alles so ein bisschen nachvollziehen und daran dann auch so ein bisschen die Praxis vielleicht lernen.
Ja, aber 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.
Also 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, wie dann en Detail auch nochmal so auf Deep Learning-Geschichten eingeht, aber ich denke schon, dass auch ganz interessant wäre, mal eben den Bereich, der halt auch in den letzten Jahren so wichtig geworden ist, nämlich Deep Learning, doch nochmal ein bisschen drauf einzugehen, da ist es halt so, dass viele Tasks, die vor
her schwer waren, also eben im Bereich Bilderkennung oder Speech to Text, alles was irgendwie, worüber geht, ja, so ein Signal, wo die Features nicht so richtig offensichtlich sind.
Also man hat die Daten nicht strukturiert, sondern man hat 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 extrahiert hat.
Also das heißt irgendwie bei Bildern sowas, diese Scale im Sift, Scale-Invariant Feature-Geschichten und bei Audio dann wiederum andere und so und so, dass 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 Erfahrung, 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 wenn man jetzt nicht Texte klassifizieren möchte, das hat halt auch mit diesem Back-of-Words-Ansatz, den wir gestern auch schon hatten und TF-IDF funktioniert das schon halbwegs gut.
Das ist schon ziemlich klasse.
Aber wenn man jetzt Bilder zum Beispiel klassifizieren möchte in sowas wie Hunde, Katzen oder Elefanteneichchen, das hat nie wirklich gut funktioniert.
Es gibt also ein klassisches Dataset namens ImageNet.
Da sind anderthalb Millionen Bilder drin, ungefähr 1000 Klassen.
Und ja, das ist manchmal so ein bisschen, das ist manchmal so ein bisschen eigen, dieses Data-Set.
Jemand hat mal, ach ich glaube das war André Carpassy oder so, der jetzt irgendwie Data Science-Chef von Tesla ist, der hat irgendwann mal, weil er wissen wollte, wie ist eigentlich der Fehler von Menschen auf diesem Set, selber sich so ein Annotationstool in JavaScript gebastelt.
Und ja, dabei halt irgendwie eine der Sachen, die er gelernt hat, die für ihn überraschend waren, ist, dass halt ein Drittel der Bilder sind halt irgendwie irgendwelche Hunde oder Hunderassen und das ist natürlich total auch für Menschen super ätzend schwierig, irgendwie genau rauszukriegen, wenn man jetzt ein Bild, und die sind dann, wir werden alle relativ klein gerechnet, die Bilder, ja, also 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 irgendwie, keine Ahnung, ein Dackel oder ein, weiß ich nicht, äh,
eine Terrigen.
Sozialdacke, ich kenne mich jetzt auch damit nicht aus.
Und er auch nicht und dann hat er ganz schön geflucht.
Und hatte irgendwie dann daneben sich dann Bilder von den einzelnen Hunderassen da irgendwie hingelegt und dann irgendwie das und ja, hatte doch erstaunlich viele Fehler dabei.
Und das war, das war auch mit den klassischen Ansätzen war dieses Problem furchtbar schwierig für Computer.
Bis dann halt irgendwann 2011, glaube ich, war das mit Alexnet.
Ja, also nochmal ganz kurz, ImageNet ist irgendwie von Princeton und Stanford so eine Gemeinschaftsproduktion, die auch jeder frei benutzen kann, wo halt tatsächlich diese Datenbanken mit den Labels verfügbar sind für alle Bilder.
Und Alexnet ist jetzt das nächste.
Genau.
Ich guck grad nochmal nach, wann das genau sozusagen diese, es gibt dann eine Challenge zu diesem Dataset.
Und 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 guck grad nochmal nach, wann das genau war.
Ah ja, das ist genau, es gibt halt diese Image Net Large Scale Visual Recognition Challenge und genau, 2012, also nicht 2011, hat das Ding halt das gewonnen und hat halt den Fehler um mehr als 10% irgendwie reduziert und das war halt irgendwie gewaltiger Schritt.
Also es war halt so, ähm, naja, wie hat das, das hat mal, wie ich mal in einem Interview mit Jeffrey Hinton, glaube ich.
Nee, wer war?
Nee, das war, das war Jan Nikun, hat das irgendwie mal in einem Interview erzählt, der meinte halt, vorher war es so.
Es gab diese Convolutional Neural Nets, die da verwendet wurden, ja auch schon lange, vorher, aber das hat niemand so wirklich ernst genommen.
Die waren so ein bisschen esoterisch.
Und es war bis zu dem Zeitpunkt, die waren auch lange Zeit nicht so wirklich on vogue und es war sehr schwierig, irgendwie einen Paper durchzukriegen, also in einer Zeitschrift veröffentlicht zu bekommen, wenn man da irgendwie sich mit Convolutional Neuralnetz beschäftigt hat.
Und 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 Neuralnetz beschäftigt hatte.
Das heißt, in zwei Jahren hat sich das irgendwie, es gab so einen kompletten Paradigmenwechsel in diesem Bereich und das ist natürlich schon sehr erstaunlich.
Also und ja, es sind also dramatische Verbesserungen irgendwie eingetreten.
Und das ist halt auch nicht nur in dem einen Bereich passiert, sondern bei Spracherkennung halt auch.
Und du
musst ja vielleicht daher 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?
Da haben wir mich gestern einfach alles so vorausgesetzt, aber für jetzt Menschen, die jetzt noch nicht so tief in dem Thema drin sind, das sollte man kurz erkennen,
sollte man, ist aber auch schwierig wirklich zu erklären, was es ist.
Also man erkennen, was man immer so, wenn man jetzt das aus Medien mitbekommt, worum es da geht, da wird dann meistens das so dargestellt, naja, das ist natürlich ein Vorbild des Gehirns modelliert oder so.
Weiß ich nicht.
Ich finde, das ist alles immer sehr irreführend, weil wie das Gehirn funktioniert, weiß nicht man so richtig.
Und im Grunde, ja, man könnte sagen, es ist irgendwie inspiriert von Neuronen, aber es ist auch mehr, mehr auch nicht.
Und mittlerweile hat das, was man da macht, nicht mehr viel zu tun mit dem, was man mal nur mit einem Bahn angefangen hat.
Irgendwie so ein paar leuchtende Punkte auf so einer Karte, die dann irgendwie aufleuchten, wie die irgendeine kryptische Verbindung haben, weil da irgendwie Strom von A nach B fließt oder so und dann halt irgendwie eine Beziehung dargestellt werden kann.
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 herausgefunden, 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 sich das ungefähr so vorstellen, dass, also man hat halt sozusagen Schichten 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 Hundebild.
Also ich habe jetzt vielleicht als erste Information, die Bildpixel irgendwie in verschiedene Sektoren unterteilt.
Dann vielleicht sowas wie eine Abstraktionsschriebene als die Helligkeit des Bildes oder so oder andere Dinge, vielleicht dann noch so grobe Strukturen unterteilt
in Kantenakten oder so, Kanten.
Genau, wo ist hier eine Kante, wo ist eine Ecke, was sind helle Flecken in dem Bild und so.
Und das ist
vielleicht das.
Das ist eine Neuronenschicht.
Ja, oder mehrere Schichten.
Also genau.
Und das, was da passiert im Grunde, ist halt das, was die Convolutional-Geschichte, ich will jetzt 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 das Hund, wenn der Hund im Trainingsbeispiel, im ersten Trainingsbeispiel nicht an der gleichen Stelle ist wie im zweiten Trainingsbeispiel, dann wurde das schon nicht mehr erkannt, weil, naja, sozusagen, wenn man einfach ein Bild einfach so als Vektor auffasst, dann, wenn sich da drin sozusagen räumlich irgendetwas bewegt, dann ist das halt an einer ganz anderen Stelle.
Da werden halt ganz andere Features sozusagen aktiviert.
Man könnte ja sagen, naiv, ein Bild ist einfach nur, irgendwie hat so viele Dimensionen wie Pixel oder so viele Dimensionen wie Pixel mal drei, wenn man halt für jeden Kanal halt noch ein Dimension.
Aber dann hat man eben dieses Problem, was passiert, wenn sich Dinge in dem Bild bewegen und dann wird es halt ätzend und funktioniert einfach auch nicht mehr.
Und dafür, dass da helfen diese Convolutional-Geschichten halt stark, weil die dafür sorgen, dass Dinge halt sozusagen unabhängig davon, wo sie passieren, irgendwie detektiert werden können.
Und ja, man fängt halt mit sowas an wie eben Kanten, Helligkeiten, 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 was, also ne, Tier, wenn es halt guckt, ist ein Hund, guckt dann erstmal irgendwann, ist überhaupt ein Tier oder sowas, ne?
Können natürlich passen.
Oder ist das ein Lebewesen oder sowas?
Oder ist das überhaupt ein Bild?
Ja, ja.
Und ja, das passt halt, äh, passt halt super, weil irgendwie diese räumlichen, 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.
Ist das ein Ölgemälde, ein Foto oder eine Skizze?
Ja, und genau, so alle 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 echtes, kein Feature Engineering mehr so machen mehr machen muss, so wie früher.
Sondern dass das halt zum großen Teil automatisch passiert.
Und na 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 irgendwelche Features rauszieht aus einem Bild, sondern das ist alles gelernt.
Also das heißt tatsächlich, durch diese Bibliotheken weiß man halt dann direkt, hey, ein Bild hat diese verschiedenen Dinge, Netze, Schichten und durch die ich dann einfach durchiterieren kann und.
Ja, also das Modell trainiert halt eben nicht nur, passt sich nicht nur den vorher hart gecodeten Features an, sondern die, das Lernen, was sind eigentlich gute Features, ist halt mit dabei.
Und das ist halt ein riesen Fortschritt.
Schwarmintelligenz schon wieder.
Schwarm, naja.
Ja.
Aber ja, es macht das halt viel einfacher und man kann halt die gleichen Methoden verwenden, ob man jetzt auf Audiodaten arbeitet oder eben auf Bildern oder auf irgendwas völlig anderem.
Und das ist natürlich auch total toll, weil dann sozusagen Erfolge in einem Feld halt irgendwie in eine andere Domain transportieren kann.
Ja, und das geht so weit, dass halt inzwischen man, ja, es gibt immer so den Satz, Perception ist solved.
Also irgendwie alles, was damit zu tun hat, Dinge zu erkennen, irgendwie Handschrift, Ziffern, Autokennzeichen, irgendwie Hausnummern, Straßenschilder oder eben auch Katzenhunde, irgendwelche Alltagsgegenstände.
Das machen diese Dinger mittlerweile besser als Menschen.
Also die haben da auch eigentlich überall Superhuman-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 es geht, hätten viele gesagt, das ist völlig unabsehbar, wann das jemals ist, oder ob es überhaupt jemals möglich sein wird, dass sowas passiert.
Und dann ging es innerhalb von wenigen Jahren.
Also das ist, da ist tatsächlich ein Riesenfortschritt 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ünstlicher 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 zurzeit, aber die wirklich knackigen Probleme, wenn es darum geht, irgendwie wirklich intelligentes Verhalten oder wirklich.
Was heißt das überhaupt und wie definiert man das ja?
Also wenn ich jetzt tatsächlich als ein individuelles, autonomes Individuum hätte, das sich dann als intelligent definieren kann, dann ist das natürlich was anderes, als wenn ich jetzt eine Maschine habe, die immerhin binäre Entscheidungen treffen kann oder sowas, die einigermaßen richtig sind.
Das ist auch überraschend, wie viel sich auf solche Entscheidungen reduzieren lässt.
Also das ist tatsächlich, macht das schon viel aus, aber diese Welt 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.
Also du fällt das alles nicht für intelligent.
Also ich finde das halt wirklich schon riesen, also um bei dem Griff zu bleiben, Intelligenz, die da irgendwo hintersteckt.
Also man ist natürlich jetzt nicht ungefragt hinnehmbar und die sticht dazu in der Stelle noch kein Menschen aus oder kann irgendwie Konkurrenz werden oder sowas, wie vielleicht dann die Gefahren, die mit so einem AI-Ding da irgendwie verknüpft werden, auch noch da hinzu kämen.
Aber ich finde das schon sehr beeindruckend.
Also ich würde fast auch schon von Künstlerintelligenz sprechen wollen, so aus dem Laienverständnis heraus, als wenn es jetzt so eine richtige Intelligenz jetzt vielleicht noch nicht ist.
Aber in gewisser Weise kann halt die Maschine tatsächlich, also das ist glaube ich der Fortschritt, mit neuen Dingen umgehen.
Und das ist halt nicht das, was sie vorher gelernt hat und das ist ja das, was das Spannende daran ist.
Und das vielleicht schon irgendwo Intelligenz.
Ich denke, der große Unterschied zu früher ist halt, dass in, muss man auch sagen, begrenzten Bereichen muss man halt nicht mehr und 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 nicht mehr, muss in vielen Bereichen nicht mehr explizit programmieren sein.
Und das ist natürlich ein Riesenvorteil, weil das war bisher immer so ein Bottleneck für viele Anwendungen natürlich.
Ja genau, also wenn man halt immer noch Menschen dann drauber gucken lassen musste, stimmt das jetzt alles oder nicht?
Ja, vor allem, die müssen das halt irgendwie hinschreiben, die müssen das auch verstehen.
Ja, klar.
Also insofern ist das natürlich schon ein Riesenfortschritt, aber es ist halt nicht auf alle Probleme anwendbar.
Es gibt auch 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, Unsupervised und Reinforcement Learning.
Also, Supervised geht.
Also, da sind wir mittlerweile ziemlich gut.
Aber auch nur, wenn es um so ganz oberflächliche Geschichten geht.
Also die Modelle wissen nicht, was sie da tun.
Sie haben kein Verständnis dafür, was da passiert.
Deswegen lassen sie sich auch eben sehr leicht täuschen, weil es muss halt nur irgendwie halbwegs oberflächlich so aussehen.
Das reicht ja vollkommen.
Wenn da irgendwas sozusagen physisch unmöglich wäre oder so, wo ein Mensch sofort erkennt, das kann ja gar nicht sein, ist es für so ein Modell völlig unmöglich.
Ja, man könnte so ein paar lustige Surveillance-Aktionen machen, indem man irgendwie so Plakate hochhält mit gesuchten Persönlichkeiten oder bedrohlichen Dingen und dann Leute trollt oder so.
Aber gut, das sind so Machine Learning Security ist immer 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 man sich zum Beispiel anguckt, wie viel 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 halt inzwischen Internet und so, man hat die Daten und wenn da alle Leute sprechen, da 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 finden.
Und dann funktioniert das auch.
Aber es wäre natürlich schon interessant, rauszukriegen, wie kommt das, dass Menschen das auch super hinkriegen, aber diese Daten nicht brauchen.
Ja, wahrscheinlich steht das an der Auflösung mit der Information, die die Menschen bekommen, 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 neues Netzwerk.
Und Menschen lernen das dann anhand dieser Masse von Informationen so schnell noch.
Ja, man könnte jetzt sagen, also Menschen eben sehen auch Sachen, hören nicht nur Dinge und so.
Aber ich glaube, das ist gar nicht so sehr der Punkt, sondern, oder das, was halt so der übliche Ansicht ist, ist halt, dass Menschen halt und Tiere irgendwie super, unsupervised learning halt wirklich, wirklich gut können und 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 da kriegt man halt eben schon sowas nicht hin wie, was ist da überhaupt eine geeignete Verlustfunktion?
Also wenn man zum Beispiel sich so ein Problem anguckt wie, man möchte vorhersagen, was als nächstes passiert in einem Film, den man sieht.
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?
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 irgendeinen experimentalen Aufbau übersetzen.
Aber wenn man sich jetzt anguckt, wie gut können Menschen das vorhersagen, was da passiert, super, ja.
Also die verstehen auch, dass wenn die Sonne untergeht, dann wird es dunkel oder so.
Für solche Machine Learning-Modelle sehr, sehr schwierig.
Die kriegen halt vielleicht 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 kennt nicht mal eine Verlustfunktion, die man da.
Das heißt, man kann das Optimierungsproblem nicht gut lösen, weil man gar nicht weiß, was man optimieren soll.
Ja, du darfst nicht verlassen.
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 jetzt so fraktale dimensionale Strukturen angeht, erfassen konnten.
Und das dann nicht vorliegt in dem Datensatz.
Möglicherweise wäre das eine Option, da irgendwie so ranzugehen.
Es gibt ein paar Fraktaltheorien, wie Mendelboden, naja, ist ja wieder Hilgespitze, aber ja, vielleicht kann man da durch irgendwann sowas dann doch basteln und dann die KI vertigen.
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 auf Unsupervised, das wäre natürlich ganz, ganz toll, aber ist halt noch nicht so.
Aber da arbeiten ganz viele Leute dran.
Und Reinforcement Learning ist halt so ein Zwischending.
Wenn man halt nicht zu allem, was man tut, jetzt ein Label hat oder eben ein Feedback bekommt, war das jetzt richtig oder falsch?
Sondern man bekommt diese Labels, die Labels werden Spars.
Also man bekommt halt nur ab und zu gesagt, ob jetzt was richtig war oder nicht.
Und dann muss man das halt irgendwie verteilen auf das, was man getan hat.
Also vielleicht ist da auch das praktische Beispiel irgendwie am besten, also wenn man spielen funktioniert das halt super, wenn man jetzt irgendwie Schach spielt oder Go oder sowas, dann spielt man halt eine ganze Zeit lang, macht viele Züge und dann am Schluss bekommt man halt gesagt, okay, du hast jetzt gewonnen oder verloren.
Aber man bekommt keine Aussage zu, wie gut war jetzt dieser Zug, den ich gemacht habe, weil das weiß halt eh keiner so genau.
Und irgendwie definitive Aussage ist ja, es kann ja auch sein, dass ein Zug, der irgendwie schlecht aussieht, eigentlich sehr gut war.
Es sei denn, du verlierst im nächsten Zug oder so,
aber ja.
Ja, aber tatsächlich ist es halt so, 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 dieses Feedback irgendwie zurückassignen an alles, was ich irgendwie gemacht habe.
Und das ist genau Reinforcement Learning und das ist halt sozusagen so ein Zwischending zwischen Überwacht und Unüberwacht, weil halt da auch viel Unüberwacht passiert, aber ab und zu hat man ja doch so ein bisschen Feedback und das hat halt viele Anwendungen.
Selbst fahrende Autos sind halt auch so ein, oder überhaupt laufende Roboter und so, das ist alles Reinforcement Learning.
Oh, laufende
Roboter ist schön.
Hast du es gesehen von Boston Dynamics, das neue Ding, da haben irgendwie 15 diese, weiß nicht, pferdeförmigen Hunderoboter, so ein LKW gezogen oder so.
Irgendwo irgendeine Straße.
Ich finde diese Videos immer sehr beunruhigend.
Ja, das ist etwas spooky hier tatsächlich.
Die könnte sowieso wie Militärtechnik, wenn man sich da überlegt, da ist dann irgendwie so eine Waffe drauf oder sowas, dann hüpfen die durch den Wald und
irgendwann die Türen aufzumachen und um die Ecke zu gucken.
Das ist schon ein bisschen spooky tatsächlich.
Ja, ist ja auch vom DAPA finanziert, ne?
Ja, ich glaube, die Firma selber ist gekauft worden von Google.
Ja, ich glaube, die haben sie wieder verkauft.
Haben sie wieder verkauft, also ja kann auch sein.
Aber ja, die war mitfinanziert vom DAPA vor allen Dingen und so.
Mal gucken, was da Schönes für die Zivilgesellschaft noch bei rausspringen.
Ja, auf jeden Fall irgendwie auch so ein hartes Problem.
Auch da gibt es tolle Erfolge, 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 soll irgendwann 98, oder so als Kasparow gegen die Plou dann verloren hat.
Ich hab schon als Kind immer gegen meinchcomputer verloren.
Ja, ja, aber nicht jeder Mensch hätte gegen deinen Schachcomputer verloren.
Das wollen wir nochmal sehen.
Ja, aber heute ist es so, dass kein Mensch mehr eine Chance hätte gegen einfach nur so ein blödes iPad.
Weil das ist halt schon schnell genug, als dass man da irgendwie völlig aussichtslos.
Und das damals, ja, so nach 98 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 Bot und lass mir meinen Zug aber von einem anderen Bot predikten.
Also gewinnt halt der schnellere Bot oder was das, wenn der beide Bot gegeneinander spielt, ist es dann Zufalls.
Nee, nee, üblicherweise kommt halt darauf an, was das für Dinger sind.
Wenn die gleich sind, dann ist es vielleicht Zufall oder soll es 50% 50-50 sein, aber.
Aber vielleicht kommt
eine Regel raus, vielleicht gewinnt immer weiß.
Nee, ja, nee, es 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, oder sagen wir so, auch ein schlechtes Schachprogramm hätte halt keine Chance gegen ein wirklich.
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
glatter Overhead.
Brauchen wir halt alles nicht mehr wegschmeißen, lern von einem einen fertig.
Ja, also da steckt ja ganz, ganz viel menschliche Arbeit drin, sozusagen.
Und das, also wenn man jetzt zum Beispiel sagt, okay, wir möchten jetzt nicht einen Schachcomputer bauen, der den Schachweltmeister schlägt, sondern wir möchten jetzt ein, 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, 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 sich für einen Roboter mir selber anschaffen würde, für jede Menge Geld wäre so der Haushaltsroboter, der putzen kann und das ganze Haus in Ordnung hält.
Vielleicht dann irgendwann auch ein bisschen kochen.
Also dann habe ich natürlich meine eigenen Rezepte oder so, aber das wäre natürlich toll, weil dann müsste man das nicht mehr machen.
Ja, aber es ist schwierig.
Also all diese Dinge, wo man mit der realen Welt interagiert, da komme ich auch gleich nochmal drauf.
Die sind alle leider nicht so leicht.
Und man hat auch sofort immer irgendwie so Sicherheitsprobleme.
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 anderen, ja.
Aber jetzt irgendwie durch Alpha Gui Ziro und so, das sind Dinger, wo kein Domänenwissen mehr drinsteckt.
Die sind, also Alpha Guiro ist von, also null Schachtheorie zu irgendwie superjungen Performance innerhalb von ein paar Stunden durch gegen sich selbst spielen gut geworden.
Ja, also der Bot, der dann auch gegen Go gespielt hat, hat ja irgendwelche völlig unkonventionellen Tüge gespielt, wo keiner machte, was macht der denn da?
Das würde ja ganz anders spielen und dann hat er trotzdem gewonnen, das war schon ein bisschen spieler.
Ja, ja, also das ist jetzt außerhalb von dem, was irgendwie, also wir haben ein paar hundert Jahre Schachtheorie, wir haben irgendwie ein paar tausend Jahre vielleicht Go-Theorie und da jetzt sind wir halt viel weitergekommen in sehr, sehr kurzer Zeit und verstehen nicht mal mehr, was da passiert, weil es halt außerhalb von unseren, ja, wir kriegen das nicht mehr, wir sind halt leider ein bisschen zu dumm dafür, offenbar.
Oder nicht gut genug, jedenfalls ein Go oder Schach, um das noch nachvollziehen zu können, was die Dinger da machen.
Aber es funktioniert, denn sie gewinnen immer.
Und das ist halt deswegen so ein Riesenfortschritt, weil man jetzt, da diese, also solche, auch diese Reinforcement Learning Geschichten sind jetzt nicht prinzipiell auf irgendein Problem geeicht.
Also das ist deswegen heißt das Ding ja auch Alpha Gosh, dieses Alpha Gosero-Ding, das ist quasi das gleiche Ding, was halt Schach-Shoku, 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 es 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 erschränkend wahrscheinlich, aber so schlimm ist es auch wieder nicht, weil wir haben, das funktioniert nur dann super, wenn man eben durchgegen sich selbst spielen oder super viele Spiele ausprobieren, irgendwie lernen kann, was halt super geht in solchen Situationen, wo man die komplette Welt simulieren kann.
Welcher Gott das und Werte mit Machine Learning gebaut.
Relativ unwahrscheinlich, dass sowas funktioniert, ja.
Ja, es gibt da schöne Theorien zu ja, das finde ich.
Das ist halt
für den kleinen Ex-Kurs.
Ich wollte ja alles beim Arkt setzen.
Ja, ich wollte das nur noch kurz zu Ende führen.
Also wenn man das simulieren kann, ist super.
Spiele sind halt, da hat man die Simulation halt schon.
Genau, es gab da große Erfolge bei den Atari-Games.
Voll toll, aber der Witz ist eigentlich, dass die Dinger sind halt super simulierbar, deswegen hat das da so gut funktioniert.
So, die physische Realität ist nicht wirklich gut simulierbar.
Ja, wir haben ja auch keine vernünftige Abbildung von einem Modell der physischen Realität in den ganzen Variablen.
Die kennen wir alle nicht, alle zu viele Unbekannten.
Ja, also das kennt man schon, aber das ist alles nicht so einfach umzusetzen.
Naja, kennen.
Und das Problem ist halt auch, du musstest ja nicht nur die sozusagen so eine Physikengine, 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.
Keine Ahnung.
Wenn man draußen rumläuft, da passiert so viel komischer Kram.
Vielleicht müssen wir unsere Sensorspektren endlich erweitern und die Maschinen damit füttern.
Ja, nee, es ist eher, das ist nicht, also von der Sensorseite, das funktioniert eigentlich alles, aber was halt nicht funktioniert, ist alles Mögliche ausprobieren, um rauszukriegen, wie diese Realität dann funktioniert, weil das Problem ist, wenn man das jetzt mit einem selbstfahrenden Auto macht, dann macht man ganz schön viel kaputt.
Und auch ganz schön viele selbstfahrende Autos kaputt, die sind ja teuer.
Und es ist ja, selbst wenn ich das alles simuliert mache, brauche ich sehr viel Rechenleistung und muss das ganz, ganz, ganz viel probieren.
Wenn ich das ja, wenn ich das mit physischen Objekten da draußen machen muss, das funktioniert nicht.
Das ist, äh, ja.
Und daher wird das, wird alles, was irgendwie mit physisch, also mit einer 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.
Ja.
Genau.
Ja, vielleicht machen wir jetzt doch nur Chapter.
Ja, also Chapter war auf jeden Fall Supervised Learning, Unsupervised Learning und Reinforced Learning.
Was ist das nächste Kapitel?
Ist das nochmal Fehler und wir wollten noch was über Fitness?
Achso, genau, wir wollten, wir wollten irgendwie was, genau, das, das, äh, ja.
Das hatten wir gestern auch noch nicht so richtig drin, wenn man jetzt so Modelle trainiert, was ist eigentlich, was passiert da eigentlich, was kann da eigentlich schief gehen?
Es gibt da Metriken und so, da hatten wir gestern auch schon so ein bisschen was erzählt, aber oder beim letzten Mal was zu erzählt, aber es gibt da so prinzipielle Geschichten und die hatten wir irgendwie nicht mit drin.
Und zwar, wenn man jetzt, oder das ist vielleicht sogar am einfachsten, wenn wir das am
Ende willst du kurz einführen, wo bist du gerade?
Ja, ich überlege gerade, wie das mit dem praktischen Beispiel aussieht, weil wir wollten ja auch noch so Hunde versus Katzen machen.
Und da könnte man das auch noch rein, aber ja, egal.
Nein.
Ja, aber
ich fand das ganz gut, wie du es gemacht hast bei dem PiDF-Vortrag.
Da kann man dann hinterher tatsächlich ganz gut dahin, dass man sowas wie Overfitting relativ gut da reinbauen könnte.
Und dann müsst ihr das mit den Pias-Variants auch reinpassen.
Ja, stimmt, stimmt.
Aber deshalb fangen wir vielleicht dann doch nochmal mit dem Beispiel an.
Genau, dann machen wir doch nochmal Beispiele hier.
Und genau, ich mache noch Kapitelmarke.
Also wir erklären das jetzt kurz nochmal, wie man das macht, wenn man jetzt so Hunden- und Katzenbilder hat und ja, wie man die dann versuchen will, voneinander zu entscheiden und wie man dann die Maschine dazu bringt, dass sie das versteht, was da passiert.
Weil, wie man sich vielleicht vorstellen kann, Hunde und Katzen sind unterschiedliche Tiere zwar, aber die sehen vielleicht doch schon ganz schön ähnlich aus und vor allem, wenn die irgendwie halb verdeckt sind oder so von einem Schlank oder in irgendeine Kiste reinhüfen.
Also wir nehmen das einfachste Problem sozusagen, was wir haben, nämlich binäre Klassifikationen, nur jetzt die Klassen sind 100 und Katzen.
Es gibt so ein Dataset, das mal in der Kagel Competition verwendet worden ist.
Ich glaube 20.000 Hunde, 20.000 Katzen oder 10.000, 10.000 Katzen, ich weiß nicht mal genau.
Aber wir nehmen nur Hunde, 1000 Katzen und nochmal 1000, also 500, 100, 500 Katzen.
Also ein Trainingset, ein Test-Set und ein Validationsset da raus.
Und das ist im gleichen, ja.
Warum nehmen wir nicht denn alle 10.000 Jochen?
Ja, weil das so lang dauern würde, das wäre irgendwie nicht gut.
Das ist sowieso schon auch selbst mit den Wen, selbst nur mit 1000 Beispielen ist es schon so, dass man da ohne GPU nicht so richtig viel Spaß hat.
Das ist so ein bisschen blöd.
Man braucht so ein bisschen Spezialhardware.
Also mit der 1080 kann ich aber schon ein bisschen was rechnen.
Ja, ja.
Also das wäre schon sehr gut.
Aber viele Leute haben ja vielleicht auch jetzt keine GPU irgendwie zu Hause direkt.
Glück, wenn man Computerspiele mag.
Ja.
Aber da muss man auch mal diesen ganzen Kram installieren und so und das ist auch alles nicht so richtig einfach.
Und ja, also in dem Data Science-Projekt gibt es halt in dem Notebook-Verzeichnis auch so ein Ding Hunde versus Katzen.
Mit welchem Modul kann man die Grafikhard benutzen?
Ja, das ist, ja, man muss erstmal das Betriebssystem dazu kriegen, dass das ordentlich funktioniert.
Dann braucht man halt irgendwie die Nvidia-Bibliotheken da unten drunter, also QDN und KUDA und so.
Und dann gibt es halt diverse Machine Learning-Bibliotheken, die das benutzen, um damit irgendwie Deep Learning-Netze zu bauen.
Das ist dann halt sowas wie Tensorflow oder halt eben PyTorch oder was gibt's denn da noch alles?
Also diverse Geschichten.
Und das, was wir hier verwenden im Beispiel, ist Keras, das ist sozusagen die Python, ähm, Python Bindings für TensorFlow und die sind auch im TensorFlow-Projekt, ist das Ding mit drin enthalten, hat die gleiche AP wie bei den anderen Cikit-Learn-Modellen.
Und wenn ihr auf Windows das nutzen wollt, dann könnt ihr es zum Beispiel einfach mit Chuku im Paketmanager CUDA installieren und das dann ausprobieren.
Mit Over X.
Aber das, da, also kann ich vorwarnen, das wird böse Üraschungen geben, das ist nicht so einfach.
Das ist alles ziemlich schwierig.
Oder du kannst es ja mal bei dir ausprobieren.
Ja, ich würde sagen, das werde ich auf jeden Fall tun.
Ja.
Und werde berichten.
Genau.
Man kann das auch inzwischen, ich habe das auf meinem, ich habe so, ich habe so ein Fable für Apple, ich bin so ein Apple-Jünger.
Und leider werden ja keine Nvidia-GPUs mehr verbaut, daher funktioniert das alles nicht mehr so richtig.
Es gibt aber da auch so ein Projekt, das sollte man auch noch nicht auch noch in die Shownotes packen, Plate.ml.
Damit kann man die AMD-GPUs, die ja darin sind, benutzen.
Es gibt ja die Abstraktion von Apple selber, Metal heißt die irgendwie, wenn man die benutzt, dann ist das auch schon recht schnell.
Also sozusagen die AMD-GPU, die jetzt in meinem MacBook, das ist ein relativ altes Ding von 2016, drin steckt, die ist auf jeden Fall irgendwie doppelt so schnell, wenn nur die GPU läuft, wie die vier i7-Kerne, die da sonst drin sind.
Wusch.
Und das ist dann halt schon, also man kann so sagen, ungefähr GPU zu CPU-Performance-Unterschied ist so 1 zu 10, mindestens.
Kommt dann halt darauf an, was man für CPUs und GPUs hat, aber so eine Größenordnung mindestens mal.
Und genau, wenn man jetzt keine GPU hat, dann, weil, also auf einer GPU dauert das jetzt mit den Katzenhunden, mit den tausend Beispielen, wenn man es vom Scratch einfach so trainiert, auch schon fünf Minuten.
Und das wäre dann jetzt, wenn man eine CPU verwenden würde, so mindestens mal ungefähr eine Stunde.
Da macht das dann schon keinen Spaß mehr.
Fünf Minuten kann man mal machen, aber irgendwie eine Stunde irgendwie darauf warten, dass da irgendwas, dass man so eine Stunde lang so ein Progress Bar angucken.
Das ist vielleicht irgendwie nicht jedermanns Sache.
Und genau, also ja, ich kann ja einfach mal, was man tun kann, wenn man jetzt keine eigene GPU hat, ist, man geht auf Google Colab oder bei Azure gibt es auch irgendwie freie Instanzen, wo man Notebooks ausführen kann, sozusagen, ohne dass man dafür bezahlen muss.
Man kann bei Colab auch Notebooks direkt aus dem GitHub irgendwie ausführen.
Und das ist natürlich ganz praktisch.
Man muss nur unter Edit Notebook-Settings GPU anwählen.
Und man sollte das auch machen mit dem, also man muss zuerst dieses Prepared Training Data Notebook ausführen, wo dann halt dieses Hunde-Katzenbeispiel irgendwie gezogen wird.
Das liegt bei mir irgendwie auf dem S3-Ding.
Und ja, dann werden halt auch diese Samples daraus gezogen.
Wenn man das getan hat, da muss man auch schon die GPU aktivieren, damit das auf der gleichen Maschine bleibt.
Und wenn man damit fertig ist, kann man das Notebook Model from Scratch irgendwie mal ausführen.
Und ja, dann halt so ein kleines Convolutional Deep Learning Netz irgendwie trainieren.
Ja, also das Beispiel ist auch aus dem Buch Deep Learning with Python von Saint Collet.
Das ist der Autor von Keras und wir arbeiten bei Google.
Ja, das sind sehr schöne Beispiele, die darin sind.
Das Buch ist sowieso sehr empfehlenswert, also wenn man sich für Deep Learning und wie man das mit Python und Keras macht, interessiert, dann ist das auch auf jeden Fall eine Leseempfehlung.
Und ja,
wir fangen halt an, das Modell wieder von Anfang an zu trainieren.
Genau.
Also zuerst baut man das Modell halt irgendwie zusammen.
Das macht man dann bei irgendwann in der Deep Learning-Folge, was macht eine Convolution-Operation eigentlich, was ist Max Pooling und so.
Aber das wird einfach jetzt ein bisschen zu weit führen.
Aber man kann halt dieses Modell bauen, man kann sich ausgeben lassen, welche Layer sind da drin, welche Parameter oder so, wenn da so durchgeht, sieht man das.
Das ist jetzt nicht so groß, es hat nur so dreieinhalb Millionen Parameter, aber ist halt schon so ein Bereich, wo das halt mit CPU irgendwie zu trainieren schon relativ knackig wird.
Dann nimmt man halt eben für, man legt noch die Verlustfunktion fest.
Das wäre an der Stelle Binary Cross-Enthrophy.
Das ist einfach nur Logloss.
Kann man auch einfach nachgoogeln, dann weiß man, was das für eine Verlustfunktion ist.
Die benutzt man eigentlich immer, wenn man sowas wie binäre Klassifikationen so ein Problem hat oder irgendwie Dinge klassifizieren möchte.
Und legt halt noch den Optimierungsalgorithmus fest.
Ja, und dann, da man bei Bildern oft das Problem hat, dass man die Datenmengen also nicht so richtig einen Hauptspeicher packen kann.
Ich weiß auch nicht, wie groß ImageNet ist, aber irgendwie so 140 GB oder ich weiß, es ist auf jeden Fall schon recht groß.
Das kriegt man nicht mal so.
Hauptspeicher nicht über 140 GB groß?
Doch, kriegt es schon.
Da gibt es wahrscheinlich Maschinen, die das.
Kann sein, dass ich total einen Blödsinn gerade erzählt habe, wie groß das ImageNet ist.
Das müssen wir schnell kontrollieren.
Das müssen wir gut nach kontrollieren.
Die Größe, ImageNet Size.
Ja, habe ich gerade nachgegoogelt und einen Wikipedia-Artikel gefunden.
Steht nicht drin.
Ja, egal.
Also ist wahrscheinlich auf jeden Fall sehr, sehr groß.
Und ja, man arbeitet halt dann bei Bildern meistens mit so Generatoren.
Das ist ja auch sowieso eine schöne Idee, wenn man.
154 GB.
Ah, okay.
Also so schlimm ist es nicht, aber ja, hat man wahrscheinlich auch nicht unbedingt zu Hause.
Und diese Image-Data-Generator-Klasse abstrahiert das sozusagen weg und man iteriert sozusagen über die Bilder, ohne dass man den ganzen Kram immer im Hauptsprecher halten muss.
Und sagt dann halt, okay, hier sind die Trainingsdaten, da sind die Validationsdaten.
Validationsdaten werden dazu benutzt, auch während der Trainingszeit schon anzuzeigen, wie gut das Modell momentan performt, sozusagen, auf Daten, die man halt noch nicht gesehen hat.
Und am Schluss rechnet man halt einen Score aus auf dem Testset.
Das ist auch so eine ganz wichtige Geschichte, das hatten wir gestern nicht, da haben wir einfach Training und Tests genommen.
Aber eigentlich muss man noch eine dritte Kategorie haben.
Man muss halt irgendwie ein Training-Set haben, man muss ein Set haben, auf dem man validiert.
Also vielleicht schon während man irgendwie ein Modell trainiert, sieht, geht das jetzt in die richtige Richtung oder nicht.
Und auf den man halt auch Überparameteroptimierung macht, aber das sollte man eben nicht auf dem Testset machen, sonst overfittet man das Testset.
Und man kann halt sehen, dass man overfittet, wenn man auf dem Validationsset immer bessere Resultate erreicht und dann aber das nicht sozusagen auf dem Testset reproduziert werden kann.
Das kann man wieder tatsächlich am besten sehen, wenn man das wieder visualisiert, also indem man irgendwie kurz und plottet.
Also wenn man das jetzt hier mal fittet, das Modell, dann kriegt man eben viele progressbare Geschichten angezeigt, das läuft über 30 Epochen, das bedeutet 30 Mal geht man über das komplette Set rüber.
Und ja, man sieht dann halt so.
Genau, nee, das ist nicht TQDM.
Nein, ist man nicht irgendwie bei Karas eingebaut.
Achso.
Aber man sieht halt sozusagen, wie sich da die Accuracy, die hier als Maß für den Fehler genommen wird, weil an der Stelle ist es tatsächlich mal so, dass es halbwegs aussagekräftig ist, was das, weil wenn man halt zwei Klassen hat, gleich viele Elemente, dann weiß man halt, 50% ist halt Zufall und wenn man irgendwie davon Richtung 1 geht, dann ist das gut und je näher an 1, desto besser.
Und man sieht auch, dass das auf den Trainingsdaten halt passiert und auf den Validationsdaten auch, die man halt eben nicht in den Trainingsetten hat, aber halt nicht so stark.
Und irgendwann geht die Accuracy auf dem Validation-Set nicht mehr weiter hoch, auf dem Trainingsset aber schon.
Und das kann man sich auch irgendwie dann mal rausplotten und sieht dann halt irgendwie sozusagen, ja, das als.
Eine lineare Kurve und eine, die fällt dann irgendwann so ein bisschen ab.
Also auf der X-Achse sieht man halt die.
Entfernen sich so ein bisschen voneinander an.
Genau, wie oft man über das Trainingset drüber gelaufen ist, dann auf der Y-Achse die Accuracy.
Und man sieht halt Training Accuracy geht halt so schön immer weiter hoch und ja, Validation Accuracy bleibt halt irgendwo so bei knapp über 70 Prozent und steigt dann nicht weiter an.
Und beim Fehler sieht man das eigentlich noch schöner, dass halt das so quasi auseinanderläuft.
Und das ist, also geht halt so eine Schere auf zwischen dem Fehler auf den Trainingsdaten und Fehler auf den Validationsdaten und der Grund dafür ist.
Also mit Fehler meinst du jetzt, die ja falsch einsortiert hat, oder meinst du damit diejenigen, die richtig einsortiert hat, die aber falsch sind?
Das ist an der Stelle egal.
Also ja, beides.
Sozusagen Accuracy ist sozusagen ein kombiniertes Maß für beides an der Stelle, weil es die Accuracy sozusagen gleich verändert, ob ich das, ob ich die eine Art Fehler habe oder die andere an der Stelle.
Ja, ich könnte natürlich auch jetzt, wenn ich ein anderes Problem hätte, könnte ich beide, weil wenn ich jetzt Precision und Recall hätte, könnte ich das halt beides plotten oder eben das kombinierte Maß irgendwie F1 nehmen und plotten.
Ja, aber immer wenn man das sieht, dass das halt so auseinanderläuft, dann weiß man halt, okay, man overfettet gerade das Trainingset.
Und das bedeutet halt, 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 auch schon nicht lernt.
Genau, weil man, weil man, 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 die Komplexität des Modells, das man, oder für die Anzahl der Parameter, die das Modell hat.
Es kann sein, dass das Modell halt nicht hinreichend quasi Maß, dass man da nicht hinreichend Regularisierungsmaßnahmen gegen Overfitting getroffen hat.
Also bei neuronal Netzen wäre das Dropout.
Man kann aber auch irgendwie für die Parameter halt irgendwie sagen, dass.
Entschuldigung, was das Dropout?
Ja, da sozusagen schmeißt man einige der Verbindungen halt weg, also einen Anteil, irgendwie zwischen 10 und 50 Prozent oder sowas.
Und zwingt damit sozusagen das Netz nicht nur, also ja, da schon generellere Geschichten gelernt zu haben, weil es muss halt auch funktionieren mit, wenn halt ein Teil davon nicht mehr funktioniert, sozusagen.
So ist es nicht so einfach zu erklären, warum das funktioniert.
Das ist auch nicht so, das, also das war schon, das war auch irgendwie ja bekannt, dass das irgendwie klappt oder so, aber niemand wusste genau warum.
Also es ist, ja, das ist auf jeden Fall etwas, was halt, ja, ein Modell, das sehr, sehr stark sich den Daten anpasst, halt bestraft irgendwie dafür, dass es das tut.
Und in dem Sinne wirkt es halt overfitting entgegen.
Bei anderen Arten von Modellen gibt es halt auch eine klassische Regularisierung bei linearen Modellen, wäre halt sowas, wie man bestraft das Modell dafür, dass die Größe, dass halt ja betracht, dass halt, ja, zum Beispiel die Länge des normalen Vektors, also die Länge des Modells, die Größe, der Betrag, Länge des Vektors, dass der zu groß wird, ja, in der L2-Norm zum Beispiel.
Und sagt halt, das ist nicht gut.
Das sollten immer möglichst kleine Werte sein.
Und das regularisiert auch.
Es gibt halt die unterschiedlichsten Arten, wie man das hinkriegt.
Aber ja, also an der Stelle ist es halt einfach 1000 Beispiele sind einfach zu wenig, um wirklich zu lernen, was Katzen von Hunden unterscheidet.
Und ja, Overfitting ist halt so der große, fiese Fehler, also einer der beiden großen fiesen Dinge, die passieren können.
Genau, da wären wir jetzt auch bei diesem Bias versus Variance Ding, wenn man halt eben sieht, dass das so aussieht wie in dem Plot bei dem Model from Scratch Notebook, dann hat man halt Overfitting.
Aber es könnte halt auch sein, dass 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, dann kann es halt sein, dass man underfittet.
Das kann dann passieren, wenn man das Modell zu einfach ist, was man benutzt.
Also wenn man zum Beispiel, wenn die Daten irgendwie verteilt sind in der Parabel, aber man legt halt ein 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 irgendwie sich durch eine Gerade darstellen lässt, ist es 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 irgendwie versuchen, den zu treffen.
Perfekt Match.
Ja, und dann gibt es da auch immer noch so einen Unterschied zwischen Trainings- und Validation Error, den man nicht wegkriegt.
Das ist so ein unreduzierbarer Fehler, der halt vielleicht daherkommt, dass es da Rauschen gibt, vielleicht dass es irgendwie nicht geht.
Ja, also die Overfitting und Underfitting-Geschichten bekommt man halt irgendwie, wenn man das richtig macht, in den Griff.
Aber es gibt halt auch immer einen Unterschied zwischen Trainings- und Validationserror, den man nicht wegbekommt.
Ja, aber das halt voneinander unterscheiden zu können, ist relativ wichtig, weil wenn man sich jetzt an dem Fehler abarbeitet, den man nicht wegbekommt, dann ist das halt sinnlos.
Und wenn man irgendwie denkt, man ist fertig und hat aber einen der Fehler, die man eigentlich noch wegoptimieren kann, dann kommt man halt auch nicht zum welchen Ergebnis, genau.
Ja.
Genau, damit haben wir das eigentlich im Grunde schon so halbwegs.
Ja, also ich glaube, das wäre dann wieder Zeit für den Chaptenmarkt, weil die Frage ist, was fällt dir 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, ähm, was ich auf jeden Fall noch erzählen wollte nach dem Beispiel, ist, warum Deep Learning auch auf kleineren Datensätzen funktioniert.
Okay, okay.
Was sind dann da kleinere Datensätze?
Ja, eben sowas wie das, was wir hier haben.
Also 1000, 10.000 bis 1000 Datensätze.
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önnt man auf die Idee kommen, zu sagen, okay, so viele Bilder habe ich leider nicht für mein Problem.
Ich möchte jetzt irgendwie, keine Ahnung, irgendwie das praktisch anwenden und ich möchte jetzt aber nicht Hunde von Katzen unterscheiden oder irgendwie Tische in Bildern finden, sondern ich habe das Problem, ich mache jetzt, weiß ich nicht, bin in einer Müllverbrennungsanlage oder so bin ich an einem Platz, wo ganz viel Müll angeliefert wird und ich möchte jetzt irgendwie den Müll auseinandersortieren.
Und das sind halt alles Klassen.
Also ich möchte jetzt zum Beispiel feststellen, ist das eine Plastikflasche oder ist das halt irgendwie was anderes als Glas.
Plastiflasche mit einem Hunde-Etikett.
Ja, also meine Klassen sind halt anders.
Die sind in dem Image-Net-Data-Set so nicht drin.
Und dann kann ich denken, okay, dann muss ich jetzt erst anderthalb Millionen Bilder sammeln.
Blöd, das kriege ich vielleicht nicht hin.
Und ich kann die auch nicht labeln.
Das ist alles irgendwie nicht wirklich handhabbar für mich.
Dann kann ich halt denken, okay, Deep Learning ist nichts für mich, das funktioniert alles nicht.
Ich lasse weiter, dass irgendwie einen Euro-Jobber und die sortieren das dann noch von Hand oder so.
Aber nein, man kann tatsächlich da was machen.
Und zwar braucht man gar nicht so viele Beispiele.
Man kann nämlich die vortrainierten Modelle einfach benutzen.
Also die wurden dann halt auf ImageNet trainiert.
Und geht halt dann davon aus, dass sozusagen ein Großteil von dem, was unsere visuelle Realität ausmacht, dann da schon irgendwie ordentlich trainiert worden ist.
Sozusagen, also Feature-Extraktionen aus Bildern hat dann, funktioniert damit halt schon ziemlich gut.
Und diese Annahme wird wahrscheinlich halten.
Und dann trainiert man halt ein eigenes Modell, was aber nur die von einem Deep Learning-Modell, das aus ImageNet trainiert wurde, generiert wurden.
Also man nimmt sozusagen, also bei den Deep Learning-Modellen, die auf ImageNet trainiert wurden, ist halt so der letzte Layer zum Beispiel der Klassifikationslayer, der das sind halt in die 1000, das ist halt nochmal ein dichter Layer und danach sind nochmal 1000 Ausgabeneuronen, die halt dann die 1000 Klassen von ImageNet darstellen und dann bei jedem Ding kommt halt dann eine Wahrscheinlichkeit raus, sozusagen, dafür, dass es in der Klasse liegt.
Und diese beiden Dinger nimmt man einfach weg, also den Klassifikationslayer, und nimmt nur das, was dabei rauskommt, wenn man jetzt, 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 Feature-Vektor, das an der Stelle noch nicht ein Vektor, das ist halt ein Tensor, der irgendwie so ein bisschen anders aussieht.
Den klopft man dann halt flach, irgendwie so in einen Vektor.
Einmal mit der großen Küchenrolle drüber.
Genau, und dann hat man halt so einen Feature-Vektor extrahiert und das macht man halt mit allen Bildern, die man hat.
Vielleicht hat man halt nur so tausend, aber tausend kann man durchaus sammeln, dass das geht.
Und halt, oder tausend für jede Klasse, die man halt hat.
Und dann trainiert man einen eigenen Klassifikationslayer, sozusagen, ein eigenes Modell auf diesen Features.
Und dann kommt man damit auf auch gar nicht so schlechte Ergebnisse.
Und hat sozusagen das Deep Learning-Modell nur zur Feature-Extraktion benutzt.
Also das ist halt ein, das ist ein super billiges Verfahren.
Also, damit kommt man schon im Bereich, in dem man früher nie gekommen wäre, mit wenig Trainingsdaten.
Einfach deswegen, weil man sich halt viel von dem Generalisierungs-Power oder Feature-Extraktionsgeschichte, die halt auf einem Image-Nett trainierten Modell, was 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.
Ist stellt euch einfach mit eurer Kameradato dem Unternehmen, wo ihr das einführen wollt.
Ihr müsst halt pro Kategorie 1000 Fotos aus verschiedenen Perspektiven schießen und schon wisst ihr, was da passiert.
Genau, genau.
Also es ist immer noch nicht einfach.
Ja, aber muss das dann auch labeln und so.
Aber das wird dann alles, kommt in den machbaren Bereich.
Ein Verfahren, was noch besser funktioniert, ist, das nennt sich Feintuning.
Da nimmt man halt so ein Modell, so ein Deep Learning-Modell und sagt halt, okay, ich nehme jetzt den obersten Klassifikationslayer oder vielleicht noch ein paar von den Layern mit den abstraktesten Features.
Vielleicht ist, wenn ich Plastikflaschen erkennen will, gar nicht so relevant, ob da jetzt Fell drauf ist oder nicht, weil die haben halt kein Fell.
Aber ich möchte jetzt zwei Arten von Plastikflaschen unterscheiden, da ist halt vielleicht was anderes wichtig.
Das heißt, man nimmt einige der abstraktesten Layer oder Layer, die halt die abstraktesten Features detektieren, die macht man trainierbar den Rest von dem Modell.
Also die ganzen Layer, die halt so eher einfache Sachen detektieren, die friert man ein.
Dann kann man in Keras einfach sagen, so, diese Layer sind alle eingefroren, die ändern sich beim Training nicht.
Und nur die obersten paar Layer dürfen sich halt ändern.
Und dann trainiert man neu.
Das ist halt wieder ein bisschen aufwendiger, weil man halt viel mehr Parameter halt 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 ImageNet für eine Genauigkeit haben.
Und also da kommt man ja vielleicht nicht ganz Richtung menschlich Parum, also aber schon sehr, sehr, also es ist dann schon sehr, sehr gut.
Also Feintuning heißt die Methode, funktioniert ziemlich klasse.
Und damit kriegt man sozusagen Probleme, wo man früher gedacht hätte, das geht gar nicht, kriegt man nicht in den Griff.
Und wenn man jetzt so ein bisschen was von Deep Learning gehört hat, dann denkt man sich vielleicht so, oh, so viele Trainingsbeispiele habe ich gar nicht.
Wäre schön, ich kriege es vielleicht theoretisch in den Griff, aber praktisch kann ich es auch nicht machen.
Man kriegt die Dinge auch tatsächlich praktisch in den Griff.
Also das ist schon, da sollte man vielleicht wissen, dass das möglich ist und wie man das machen kann.
Müssen wir mal alles ausprobieren?
Ich bin da total neu richtig drauf.
Ich muss mal ein, zwei Leute finden, die Lust haben, dass man bei denen mal so ein Projekt baut.
Ja, und damit kann man dann auf jeden Fall schon so richtige.
Also wenn ihr Lust habt, dass wir so ein Maschinen-Projekt machen, dann sagt auch mal Bescheid.
Wow-Effekt mit erzeugen.
Ja, das wollte ich auf jeden Fall noch erwähnen.
Deswegen ist das auch so interessant.
Und ich bin auch gespannt, da wird es halt in den nächsten Jahren, das dauert natürlich jetzt sehr lange.
Also es gibt halt viele Dinge, die so theoretisch gelöst sind.
Und ImageNet ist natürlich so ein Dataset, das kann man jetzt für viele Sachen in der Praxis geht das, aber für manche Sachen geht das noch nicht.
Für viele andere Sachen gibt es noch keine tollen Datasets.
Aber bis das jetzt sozusagen, also viele dieser Probleme, mit denen man in der Praxis was anfangen könnte, sind jetzt theoretisch im Griff und man muss es halt nicht nur praktisch umsetzen.
Das wird aber wahrscheinlich noch irgendwie lange dauern.
Wahrscheinlich wird es die nächsten zehn Jahre dauern, bis man das in Produkten im Alltag sieht, 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 hinzubekommen.
Und dann dauert es nochmal ein paar Jahre, bis die Daten ordentlich sind und ja, so wie das halt so ist.
Sehr langsam, ja, ist leider so.
Aber wahrscheinlich wird man da in vielen Bereichen tolle Verbesserungen sehen.
Und mir wird das ja schon reichen, wenn ich im Supermarkt nicht immer irgendwie fluchend vor dem Pfandautomaten stehen muss.
Wobei ich wahrscheinlich braucht man ja nicht mal Deep Learning, das ist einfach nur kaputt.
Ach, vielleicht geht's doch nicht.
Das ist das einfach, Problem schon nicht geht.
Naja.
Ich gebe die Hoffnung nicht auf.
Ja, ja, genau, das wollte ich gerade sagen.
Also eben mal so.
Die Kontinent, die ADI kriegen wir alle nicht hin und die ganzen Roboter und so, aber ja, vielleicht ist es doch cool.
Also nützlich.
Gut.
Ja, also ein praktisches Beispiel hatten wir hatten eine Zelt vom.
Genau, was wir uns vielleicht noch ein bisschen angucken können, ist das Visualisierungs-Notebook.
Ja.
Ja.
Weil.
Ja.
Da bekommt jemand nicht, was er möchte.
Ja, eigentlich.
Nicht gut.
Ja.
Äh, genau.
Da sind sozusagen die, wenn man die ganzen Notebooks halt ausgeführt hat, dann werden die Modelle halt auch gespeichert und hier werden sie halt nochmal reingeladen.
Da werden auch die quasi endgültigen Scores auf den Testdaten ermittelt, sozusagen und man kann halt so ein bisschen sich angucken, ja, welche Features werden eigentlich so aktiviert, wenn man jetzt so ein Bild von der Katze zum Beispiel da reinwirft.
Und ja, da gibt es auch ein Ding, was sich so ein bisschen was so ein bisschen zeigt, ach, jetzt das Visualisierungs-Notebook, stimmt.
Da ist auch das tatsächlich eher so, das zeigt, ja, da sind ein paar kaputte Sachen dabei.
Und das zeigt tatsächlich eher so, wo wie funktioniert das mit den Convolutionalern und so.
Das wollte ich aber gar nicht zeigen.
Das ist ein anderes Notebook, was ich zeigen wollte.
Ich habe gesagt, dass du das zeigen wolltest.
Ja, hat mich vertan.
Evaluation-Notebook, das war das.
Genau, das ist das, wo die Modelle geladen werden, die jetzt irgendwie gespeichert wurden auf der Platte.
Was habt ihr gespeichert?
Als Pickel?
Nee, ähm HDF5.
HDF5.
Was ist das?
Ist der Vorläufer von Netz-CDF, oder ich weiß es nicht so genau.
Ist auch so ein wissenschaftlichen Bereich übliches Format, irgendwie Daten zu speichern.
Ja, im Grunde stehen da halt die Parameter vom Netz drin.
Und ja, man könnte die auch irgendwie anders speichern.
Man könnte es wahrscheinlich auch pickeln, aber ja.
Genau.
Ja, und da kann man halt mal vergleichen, ob die Scores, die man auf den Testdaten bekommt, halt auch das sind, was man jetzt erwarten würde, nachdem man das Modell auf den Validationsdaten irgendwie getestet hat.
Und das sieht eigentlich alles so aus, als ob das halbwegs stimmt.
Und dann kann man da so Dinge tun wie, man nimmt einfach mal Beispielbilder, die man da reinwirft.
Ich weiß gar nicht, ob ich die mit eingecheckt habe.
Wenn ja, dann kann man einfach die, die da auskommentiert sind, probieren.
Man kann aber auch eigene Bilder nehmen, wo sie halt da an den.
Fotografiert eure Katze, fotografiert euren Hund.
Ja, genau, man fotografiert irgendwas, aber man kann.
Ob das wirklich eine Katze und ein Hund ist, also zumindest nach der Meinung von dem Algorithmus.
Ja, wird man das natürlich auch irgendwie wahrscheinlich sowas schon irgendwie so haben.
Ihr könnt auch was ganz anderes fotografieren und fragen, ob es eine Katze und ein Hund ist und gucken, was rauskommt.
Ja.
Ja, egal.
Genau, und dann wird das halt runter skaliert.
Das ist auch ein bisschen, sieht dann ein bisschen deprimierend aus, weil man sieht nicht mehr so viel auf dem Bild.
Das sind also immer so 150 mal 150 Pixel-Bilder, die da reingehen.
Und dann kann man halt mal die Modelle, die man da hat, hernehmen und die einfach klassifizieren lassen, was sie dann darauf sehen.
Und dann sieht man schon, dass das vom Scratch-Model halt nicht so richtig toll funktioniert vielleicht.
Das sagt man im Hund dann irgendwie mit einer 80%igen Wahrscheinlichkeit, oh, das ist eine Katze.
Oh.
Ja, da gab es dann das mit Data Ocumentation 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, ja, das Feintuning ist halt nochmal deutlich besser.
Und das kann man dann auch nochmal auf mehreren Bildern machen und das ist vielleicht auch mal ganz interessant zu sehen, welche Bilder halt in dem Beispieldata-Set da so drin sind.
Und man kann sich das Ganze nochmal so als Tabelle ausgeüben.
Ich habe übrigens, das war bei der letzten letzten Treffen der Python User Group, habe ich das auch irgendwie mal so ein bisschen vorgestellt.
Und da war das irgendwie, sah das nicht gut aus, weil dann stand da irgendwie Cat 0% oder sowas, aber das habe ich jetzt hier mal gefixt.
Das war einfach nur so, dass das der Klassenname war immer Cat und 0% bedeutete einfach, es ist ein Hund.
Oh.
Also es war schon richtig.
Es war nur blöd dargestellt, das habe ich jetzt nochmal geändert, dass dann, wenn es irgendwie kleiner 50% ist, dass dann ein Hund als Klasse dasteht.
Ja, es war auf jeden Fall super schön zum Anteilen und ich glaube auch so zum Visualisieren von so den ersten Test.
Solltet ihr es auf jeden Fall auch mal ausprobieren.
Ja.
Genau, und dann.
Und ich glaube, so von dem ganzen theoretischen Überbau haben wir es schon so ziemlich viel geschafft heute, würde ich sagen.
Ich gucke nochmal gerade, ob es noch irgendwas gibt, was.
Hast du noch einen letzten kleinen Punkt?
Nö.
Ne, das ist, äh, ich glaube, wir sind tatsächlich irgendwie so halbwegs durch.
Dann würde jetzt ja die nächste Chapter mal kommen und wir würden vielleicht noch einfach kurz die Picks nehmen, die wir immer so gerne noch wieder eingeführt hatten.
Ich glaube, die gefielen euch auch ganz gut.
Welches Modul pickst du diese Woche?
Ja, habe ich auch in einem Podcast von gehört.
Ich weiß jetzt gar nicht mehr, ob es Python Bytes war.
Doch, ich meine.
Aber und zwar gibt es da ein sehr schönes Modul namens MattMat.
Was das tut, ist, also es gibt ja, also Testen ist ganz wichtig und so.
Und es gibt halt auch so Ansätze, irgendwie Tests vielleicht zu automatisieren.
Ein interessanter ist Hypothesis, das ist vielleicht dann auch irgendwie auch ein Pick.
Das Ding generiert halt mögliche Eingaben für Funktionen und so und probiert die halt alle durch und sagt dann Bescheid, wenn es irgendwo Probleme gab.
Das ist aber nur ein Ansatz und hat man verfolgt einen anderen und den finde ich eigentlich ziemlich cool.
Man kann sich natürlich sowas ausgeben lassen wie Coverage, also sozusagen, wie viel Prozent von den Zeilen, die man jetzt irgendwie hat, ist eigentlich quasi mal durchlaufen worden, wenn man jetzt die Test-Suite 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 es wirklich funktioniert, dass wirklich, wenn etwas kaputt geht, man das halt auch tatsächlich bemerken würde in vielgeschlagen Test.
Es könnte sein, aber es kann halt auch Fälle geben, wo das dann nicht passiert.
Und Matt Matt setzt da irgendwie so ein bisschen an und macht etwas sehr Interessantes und zwar ändert es halt zufällig irgendwie Dinge im Code.
Irgendwelche Datentypen
oder sowas.
Ja, so es macht zum Beispiel größer in kleiner Zeichen oder sowas, ändert Bedingungen, fügt irgendwie was hinzu oder so und guckt, ob Testsfeed schlagen.
Und das ist natürlich irgendwie echt nett.
Also sozusagen, es macht halt irgendwie zufällige Änderungen an deinem Code und guckt dann halt irgendwie.
Bist du dann dein Test gut genug, um das zu entdecken?
Ist seine Testfeed gut genug zu finden, gut genug, um ist seine Testabdeckung gut genug, um rauszufinden, dass jetzt irgendwie hier was zufällig geändert wurde.
Und das ist natürlich schon echt ein sehr interessanter Ansatz.
Sehr, sehr gut.
Also gerade wenn man sowas mich richtig mal bauen möchte, oder?
Ja, genau.
Das ist ja halt so mein Pick für diese Episode.
Ja, also ich würde tatsächlich auch nochmal C-Bone kurz auswählen.
Das hatten wir zwar schon in der Pandas-Episode, glaube ich, kurz vorgestellt, aber dass einfach, wenn man Matplot-Lib so kennt, einfach die total tolle grafische Erweiterung, dass alles ein bisschen schicker aussieht und mit der es einfach auf Matplot-Lib draufpackt und dann C-Bone reinbaut.
Und ich würde noch gerne irgendwie so drei Kleinigkeiten aus der Standardbibliothek, aber die ich jetzt so ein bisschen mehr drin bewahre, weil ich was dazu geschrieben hatte, nur kurz vorstellen.
Ist natürlich jetzt wieder der Noob-Pick, aber das ist da trotzdem vielleicht für einige interessant.
Und zwar kennt ihr hoffentlich ArcPass, also mit dem man vernünftig so die Parameter zu Skripten übergeben kann.
Hast du da gibt es irgendwie von, wie heißt das von Google?
Gibt es eine Bibliothek?
Es gibt noch Klick.
Klick, genau, ja.
Und genau, und ja, natürlich dann die Standardvariante.
Aber ich finde ArcPass ziemlich cool.
Also ich finde es auch besser als Klick.
Also Klick benutzt halt irgendwie so Dekoratoren, um das irgendwie zu machen.
Und ja, weiß nicht, fand ich nicht so toll, aber obwohl die Sundheit auch ganz nett ist, aber ArcPass fand ich auch irgendwie ganz nice, um das machen.
Und dann, ja, GetPass natürlich, um da irgendwie so Passwörter reinzubekommen, irgendwie als Zerschlüssel-Text, dass man nicht direkt sieht, was eingegeben wird.
Auch immer gut, wenn man sich irgendwo einloggt, braucht man
das vielleicht.
Ja, das ist tatsächlich super.
Das ist vor allen Dingen auch schön in Notebooks, weil ansonsten schreibt man das ja auch irgendwie mit in die Notebooks rein und checkt genau, dass irgendwo ein oder so ist ja irgendwie.
Und ja, ich habe ab und zu noch das Text-Rap-Modul benutzt.
Einfach nur zum Didenten meistens von irgendwelchen mehrzeiligen Dog-Strings, die sonst irgendwie verrutscht wären, irgendwie einfach in meinem Struktur, in meinem File.
Konnte man so ganz gut darstellen.
Also falls ihr das Problem habt, Textwrap.
Ja, das war es eigentlich schon so mit den Modulen und ich hoffe, euch hat die Folge jetzt wieder gefallen, Machine Learning.
Egal wo ihr die gehört habt gerade.
Also wir haben jetzt gerade ausnahmsweise immer nachmittags, sonst nehmen wir immer abends auf.
Gerade relativ gutes Wetter.
Ich habe schon fast überlegt, ob man rausgehen soll.
Ja.
Stimmt könnte man eigentlich auch.
Es ist für dich, ja, Wetter ist momentan super.
Frühling, voll gut.
Ja, aber ansonsten, genau.
Hört, wo immer ihr möchtet.
Bleibt uns gewogen und schreibt uns euer Feedback an hallo.peisen podcast.de.
Ja, wir hören uns.
Oh ja, bis zum nächsten Mal.
Bis zum nächsten Mal.
Tschüss.
Tschüss.