WEBVTT

00:00:00.000 --> 00:00:17.160
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.

00:00:17.380 --> 00:00:32.220
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.

00:00:32.220 --> 00:00:45.880
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.

00:00:47.000 --> 00:00:49.740
Einen Python-Treffen für die Python-Community.

00:01:16.620 --> 00:01:40.480
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.

00:01:40.480 --> 00:01:45.560
Also eigentlich alle wollten sagen, habt ihr keine Kapitelmarken? Also wir nutzen das eigentlich immer.

00:01:46.240 --> 00:02:11.760
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.

00:02:11.760 --> 00:02:14.560
Ich mag gerne beim Chaos-Radio immer die Werbeunterbrechung, die Nachrichten, die es gibt.

00:02:15.860 --> 00:02:29.620
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.

00:02:29.620 --> 00:02:36.380
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.

00:02:45.480 --> 00:02:59.360
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.

00:02:59.360 --> 00:03:15.100
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.

00:03:15.100 --> 00:03:24.840
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.

00:03:24.840 --> 00:03:27.600
Ich glaube, jetzt haben schon einige Leute diese Kapitelmarke übersprungen.

00:03:27.600 --> 00:03:44.720
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

00:03:44.720 --> 00:03:48.120
in der Audiodatei auch mit drin sind, damit man die auch im Player hat.

00:03:48.120 --> 00:03:56.160
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.

00:03:56.160 --> 00:04:07.680
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.

00:04:07.680 --> 00:04:08.160
Genau.

00:04:08.160 --> 00:04:13.840
Ja, genau. Eine weitere Veranstaltung, auf der wir waren, ist jetzt letzte Woche, letztes Wochenende.

00:04:14.340 --> 00:04:32.280
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.

00:04:32.280 --> 00:04:43.340
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.

00:04:43.960 --> 00:05:07.000
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.

00:05:07.000 --> 00:05:13.000
Das ist eine super interessante Geschichte, genau. Die haben halt alle ihre Reden und Protokolle.

00:05:13.580 --> 00:05:30.220
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.

00:05:43.200 --> 00:06:12.820
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.

00:06:12.820 --> 00:06:18.600
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.

00:06:18.600 --> 00:06:36.520
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.

00:06:36.520 --> 00:06:42.440
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.

00:06:42.440 --> 00:06:49.880
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.

00:06:49.880 --> 00:06:59.800
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.

00:06:59.800 --> 00:07:02.860
Jetzt ist es halt bei der Tepta-Marke. Was soll ich mal, erhebe ich immer die Hand und winke?

00:07:02.860 --> 00:07:05.900
Ja, genau, winke einfach mal. Was soll ich denn da reinschreiben?

00:07:05.900 --> 00:07:07.240
Veranstaltungshinweise.

00:07:07.240 --> 00:07:08.700
Ah, Veranstaltungshinweise, alles klar, okay.

00:07:12.060 --> 00:07:19.640
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.

00:07:19.640 --> 00:07:27.500
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.

00:07:27.500 --> 00:07:32.760
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.

00:07:32.760 --> 00:07:36.620
Vom 2. bis 5. Mai, Florenz.

00:07:36.620 --> 00:07:41.220
Ja, dann geht es weiter. Ich weiß nicht, das ist jetzt gerade gar nicht so geordnet. Ich muss jetzt mal gucken.

00:07:42.060 --> 00:07:44.600
Also Juni geht es weiter mit der GeoPython in Basel.

00:07:44.600 --> 00:07:52.800
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...

00:07:52.800 --> 00:07:56.820
Ja, EuroPython ist auch in Basel irgendwie im gleichen Gebäude, denke ich mal.

00:07:56.820 --> 00:07:59.020
Das haben die extra dafür gebaut, hat er jetzt.

00:07:59.020 --> 00:08:11.680
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.

00:08:12.060 --> 00:08:14.320
Ja, ich habe immer nur gehört, dass es super sein soll.

00:08:14.320 --> 00:08:16.160
Und gehst du nach Basel in die Schweiz?

00:08:16.160 --> 00:08:19.200
Ja, aber ich glaube, dieses Jahr, das wird alles...

00:08:19.200 --> 00:08:19.880
Ja, ist ein bisschen knapp.

00:08:19.880 --> 00:08:22.020
Warum ist denn das eigentlich alles irgendwie so im Frühjahr?

00:08:22.020 --> 00:08:25.540
Du meinst im Juni, Oktober, Frühjahr?

00:08:25.540 --> 00:08:27.620
Naja, Conference Season.

00:08:27.620 --> 00:08:34.940
Ja, okay. Ja, also danach, im September geht es nach Bilbao. Am 2. bis 6. ist in Bilbao die EuroCyPy.

00:08:34.940 --> 00:08:40.460
Das ist wissenschaftlich auch sehr interessant. Und wir haben die PyData in Berlin vom 9. bis 13. Oktober.

00:08:40.460 --> 00:08:41.540
Ja, PyCon.de.

00:08:42.060 --> 00:08:47.600
Also, PyData kombiniert in Berlin. Und, also, zumindest ich werde auf jeden Fall da auch sein.

00:08:47.600 --> 00:08:51.320
Da bin ich nicht da. Da bin ich in Prag.

00:08:51.320 --> 00:08:51.800
Tja.

00:08:51.800 --> 00:08:54.200
Chicago Blackhawks.

00:08:54.200 --> 00:09:04.040
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?

00:09:04.040 --> 00:09:07.280
Ja, vielleicht kann man doch den MP Sprint erwähnen, den es gibt. Den haben wir, glaube ich, schon vergessen.

00:09:07.280 --> 00:09:08.360
Oh, ach so, richtig. Stimmt.

00:09:08.360 --> 00:09:11.960
Genau. PyDDF Sprint. Wann war denn der?

00:09:12.060 --> 00:09:14.280
Nochmal im 4. Juli, Mai?

00:09:14.280 --> 00:09:14.900
Ja.

00:09:14.900 --> 00:09:16.580
Ich glaube schon.

00:09:16.580 --> 00:09:17.180
Ja.

00:09:17.180 --> 00:09:21.100
4. Juli, Mai.

00:09:21.100 --> 00:09:24.480
Tatsächlich bei Trivago, wieder hier im Medienhafen in Düsseldorf.

00:09:24.480 --> 00:09:24.700
Ja.

00:09:24.700 --> 00:09:25.660
Genau.

00:09:25.660 --> 00:09:34.560
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.

00:09:34.560 --> 00:09:40.320
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.

00:09:40.320 --> 00:09:42.020
Sollte ich euch...

00:09:42.020 --> 00:09:44.180
Anmelden beim Meetup und, ja.

00:09:44.180 --> 00:09:46.080
Genau.

00:09:46.080 --> 00:09:47.080
Ja.

00:09:47.080 --> 00:09:50.840
Ja, ich glaube, das war es für das nächste Mal hier in der Gegend.

00:09:50.840 --> 00:09:57.140
Ja, okay. Dann haben wir damit die Veranstaltungshinweise auch irgendwie durch.

00:09:57.140 --> 00:10:00.480
Dann wäre es jederzeit für den Chapter-Markt. Also, ich denke übrigens hinter dir ist ein bisschen...

00:10:00.480 --> 00:10:01.300
Ach so, ja.

00:10:01.300 --> 00:10:04.540
Wenn du gerade seitens der Vermittlung guckst, muss ich sagen.

00:10:04.540 --> 00:10:08.640
Gut, okay. Dann...

00:10:08.640 --> 00:10:11.840
Ja. Und danach gehen wir einfach so quasi...

00:10:12.020 --> 00:10:13.900
Ja, ein Thema, wie wir sagen, dass du wieder...

00:10:13.900 --> 00:10:14.040
Genau.

00:10:14.040 --> 00:10:14.520
Alles klar.

00:10:14.520 --> 00:10:16.880
Fangen wir jetzt mit der Einführung in Machine Learning nochmal so ein bisschen an.

00:10:16.880 --> 00:10:19.140
Was denn das nochmal und warum, wieso?

00:10:19.140 --> 00:10:22.720
Wollen wir da auch noch irgendwas strukturieren?

00:10:22.720 --> 00:10:23.560
Puh.

00:10:23.560 --> 00:10:29.680
Ja, also wir haben da auf jeden Fall verschiedene Unterthemen und sonst setzen wir die Chapter-Markts...

00:10:29.680 --> 00:10:30.240
Also da später...

00:10:30.240 --> 00:10:34.480
Man kann zwar irgendwie so einen anonymen Chapter-Markt setzen, dass man einfach dann später den benennt.

00:10:34.480 --> 00:10:37.180
Dann müssen wir nicht so viel unterbrechen und einfach so klicken.

00:10:37.180 --> 00:10:39.720
Das geht natürlich auch. Ich brauche da eigentlich nur...

00:10:39.720 --> 00:10:41.980
Also ich brauche so einen Buzzer in der Hand zu drücken.

00:10:41.980 --> 00:10:43.620
Selbst Auslöser von so einer Kamera.

00:10:43.620 --> 00:10:48.100
Das wäre tatsächlich nochmal toll, wenn man irgendwie so einen Bluetooth-Buzzer oder sowas hätte,

00:10:48.100 --> 00:10:51.120
der das irgendwie dann irgendwie eine Capital-Marke setzt.

00:10:51.120 --> 00:10:54.980
Naja, da müssen wir halt hardware-technisch noch so ein bisschen aufrüsten, aber...

00:10:54.980 --> 00:10:56.180
Ja.

00:10:56.180 --> 00:10:58.440
Da soll irgendwo ein Raspberry stehen, den können wir über das Netzwerk anschächen.

00:10:58.440 --> 00:11:02.560
Dann schenken wir den Bluetooth ans Raspberry und dann drückt er einfach das Signal und dann sagt der Chapter-Markt Boben.

00:11:02.560 --> 00:11:04.000
Ja, genau.

00:11:04.000 --> 00:11:05.020
Das brauchen wir in Python.

00:11:05.020 --> 00:11:05.680
Okay.

00:11:05.680 --> 00:11:07.560
Ja, nächstes Mal.

00:11:07.560 --> 00:11:09.040
Ja, also Machine Learning.

00:11:09.040 --> 00:11:11.940
Ja, was hatten wir gestern ja gerade die Folge gemacht, wo wir...

00:11:11.940 --> 00:11:13.800
Ja, so ein bisschen die Einführung...

00:11:13.800 --> 00:11:22.560
Genau, wir haben da eigentlich auch schon eine Menge zu erzählt und die Teile versuchen wir jetzt auch mal nicht zu wiederholen.

00:11:22.560 --> 00:11:23.480
Mal schauen, ob das klappt.

00:11:23.480 --> 00:11:29.680
Aber es ist natürlich irgendwie ein weites Feld und man kann da irgendwie ganz viel zu erzählen.

00:11:29.680 --> 00:11:36.340
Und wenn ich mich richtig erinnere, also Dinge, die wir gestern dann noch nicht so wirklich erzählt hatten,

00:11:36.340 --> 00:11:41.460
aber die auch irgendwie wichtig sind, ist halt, ich würde mal sagen, so eine grundsätzliche Einteilung.

00:11:41.460 --> 00:11:41.680
Was?

00:11:41.900 --> 00:11:46.860
Was hat man da irgendwie an groben Geschichten, die wichtig sind?

00:11:46.860 --> 00:11:51.920
Ja, Supervised Learning, Unsupervised Learning, Reinforcement Learning.

00:11:51.920 --> 00:11:58.160
Wir hatten gestern das Beispiel Supervised Learning, also sozusagen Textklassifikation ist ein klassisches Beispiel.

00:11:58.160 --> 00:11:59.620
Das Allereinfachste ist binär.

00:11:59.620 --> 00:12:05.860
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.

00:12:05.860 --> 00:12:10.820
Da kann man das alles so ein bisschen nachvollziehen und daran auch so ein bisschen die Praxis vielleicht lernen.

00:12:11.860 --> 00:12:14.280
Ja, vielleicht aus dem theoretischen Background dann jetzt nochmal Details.

00:12:14.280 --> 00:12:17.740
Was ist denn der Unterschied von Supervised Learning?

00:12:17.740 --> 00:12:22.100
Naja, dass man halt sozusagen zu jedem Beispiel weiß, was rauskommen soll.

00:12:22.100 --> 00:12:32.000
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.

00:12:32.000 --> 00:12:41.560
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,

00:12:41.820 --> 00:12:46.040
Folge machen, die sich jetzt, die dann im Detail auch nochmal so auf Deep Learning-Geschichten eingeht.

00:12:46.040 --> 00:12:54.200
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,

00:12:54.200 --> 00:12:57.500
da nochmal ein bisschen drauf einzugehen.

00:12:57.500 --> 00:13:08.500
Da ist es halt so, dass viele Tasks, die vorher schwer waren, also eben im Bereich Bilderkennung oder Speech-to-Text,

00:13:11.780 --> 00:13:19.560
wo es darum geht, ja, so ein Signal, wo die Features nicht so richtig offensichtlich sind, also man hat die Daten nicht strukturiert,

00:13:19.560 --> 00:13:30.580
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,

00:13:30.580 --> 00:13:41.660
also so Supervised Machine Learning machen, dann war das pro Domain früher immer sehr aufwendig, weil man dann halt domainspezifische Features erstmal extra,

00:13:41.740 --> 00:13:54.500
also das heißt irgendwie bei Bildern sowas, diese Scale-Invariant-Feature-Geschichten und bei Audio dann wiederum andere und so,

00:13:54.500 --> 00:14:00.400
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,

00:14:00.400 --> 00:14:06.360
weil man kann halt sozusagen die Erfahrungen, die man im einen Gebiet gesammelt hat, nicht so richtig gut in ein anderes Gebiet mitnehmen

00:14:06.360 --> 00:14:10.360
und das hat auch nicht wirklich gut funktioniert, also, ähm,

00:14:11.700 --> 00:14:15.540
wenn man jetzt nicht Texte, äh, äh, klassifizieren möchte, das hat halt auch mit den,

00:14:15.540 --> 00:14:21.020
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,

00:14:21.020 --> 00:14:26.740
das ist schon ziemlich, äh, ziemlich klasse, ähm, aber, äh,

00:14:26.740 --> 00:14:32.840
ähm, wenn man jetzt Bilder zum Beispiel klassifizieren möchte in sowas wie Hundekatzen oder, äh, Elefanten, äh, Eichhörnchen,

00:14:32.840 --> 00:14:39.980
ähm, das hat nie wirklich gut funktioniert, es gibt da so ein klassisches Dataset, äh, namens Image, äh, äh, ImageNet,

00:14:41.660 --> 00:14:48.320
da drin ungefähr tausend Klassen und, ähm, ja, das ist manchmal so ein bisschen, das ist manchmal so ein bisschen eigen, dieses, äh,

00:14:48.320 --> 00:14:55.260
dieses Dataset, so, äh, jemand hat mal, ach, ich glaub, das war André Capaci oder so, der jetzt irgendwie, äh,

00:14:55.260 --> 00:15:04.620
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,

00:15:04.620 --> 00:15:11.620
äh, äh, selber sich so ein Amputationstool in JavaScript gebastelt, äh, und, ähm, ja,

00:15:11.620 --> 00:15:23.620
ä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,

00:15:23.620 --> 00:15:41.600
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,

00:15:41.600 --> 00:16:11.580
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,

00:16:11.580 --> 00:16:41.560
ä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,

00:16:41.560 --> 00:16:49.420
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.

00:16:49.420 --> 00:16:53.760
Und ich gucke gerade nochmal nach, wann das genau war.

00:16:53.760 --> 00:16:59.920
Ah ja, das ist genau, es gibt halt diese ImageNet Large-Scale Visual Recognition Challenge.

00:16:59.920 --> 00:17:14.260
Und genau, 2012, also nicht 2011, hat das Ding halt gewonnen und hat halt den Fehler um mehr als 10% irgendwie reduziert.

00:17:14.260 --> 00:17:17.740
Und das war halt irgendwie ein gewaltiger Schritt.

00:17:17.740 --> 00:17:28.400
Also es war halt so, das hat mal, wie ich meine, ein Interview mit Jeffrey Hinton, glaube ich, nee, das war Jan de Kuhn,

00:17:28.400 --> 00:17:29.740
hat das irgendwie mal...

00:17:30.440 --> 00:17:32.820
in einem Interview erzählt, er meinte halt, vorher war es so.

00:17:32.820 --> 00:17:38.880
Es gab diese Convolutional Neural Nets, die da verwendet wurden, ja auch schon lange vorher,

00:17:38.880 --> 00:17:41.380
aber das hat niemand so wirklich ernst genommen.

00:17:41.380 --> 00:17:42.620
Die waren so ein bisschen esoterisch.

00:17:42.620 --> 00:17:48.400
Und es war bis zu dem Zeitpunkt, die waren auch lange Zeit nicht so wirklich en vogue.

00:17:48.400 --> 00:17:53.840
Und es war sehr schwierig, irgendwie ein Paper durchzukriegen, also in einer Zeitschrift veröffentlicht zu bekommen,

00:17:53.840 --> 00:17:59.660
wenn man da irgendwie sich mit Convolutional Neural Nets beschäftigt hat.

00:18:00.600 --> 00:18:08.240
Und nach dieser, nach diesem Erfolg von Alex Nett, irgendwie so 2014, war es praktisch unmöglich,

00:18:08.240 --> 00:18:12.640
ein Paper, was sich irgendwie mit Bildern oder Vision oder so beschäftigt hat, irgendwo unterzubekommen,

00:18:12.640 --> 00:18:16.360
dass sich nicht mit Convolutional Neural Nets beschäftigt hat.

00:18:16.360 --> 00:18:20.640
Das heißt, in zwei Jahren hat sich das irgendwie, es gab so einen kompletten Paradigmenwechsel in diesem Bereich.

00:18:20.640 --> 00:18:22.180
Und das ist natürlich schon sehr erstaunlich.

00:18:22.180 --> 00:18:27.020
Und ja, es sind also dramatische Verbesserungen irgendwie eingetreten.

00:18:27.020 --> 00:18:29.800
Und das ist halt auch nicht nur in dem einen Bereich.

00:18:29.800 --> 00:18:29.900
Und das ist auch nicht nur in dem einen Bereich.

00:18:29.900 --> 00:18:32.000
Das ist nicht nur in dem einen Bereich passiert, sondern bei Spracherkennung halt auch.

00:18:32.000 --> 00:18:36.380
Und du musst ja vielleicht da ja nochmal die Basis erklären, die hatten wir nämlich gestern alle nicht.

00:18:36.380 --> 00:18:38.820
Also was ist jetzt überhaupt ein Convolutional Neural Network?

00:18:38.820 --> 00:18:40.780
Vielleicht auch nochmal kurz, was ist überhaupt ein Neural Network?

00:18:40.780 --> 00:18:43.300
Das haben wir nämlich gestern einfach alles so vorausgesetzt.

00:18:43.300 --> 00:18:47.920
Aber für jetzt Menschen, die jetzt noch nicht so tief in dem Thema drin sind, sollte man kurz erklären, worum es geht.

00:18:47.920 --> 00:18:51.060
Sollte man, ist aber auch schwierig, wirklich zu erklären, was es ist.

00:18:51.060 --> 00:18:58.960
Also man, was man immer so, wenn man jetzt das aus Medien mitbekommt, was es darum geht,

00:18:59.880 --> 00:19:03.780
dann meistens ist es so dargestellt, wie, naja, das ist ein Vorbild des Gehirns modelliert oder so.

00:19:03.780 --> 00:19:04.640
Weiß ich nicht.

00:19:04.640 --> 00:19:08.180
Ich finde, das ist alles immer sehr irreführend, weil wie das Gehirn funktioniert, weiß niemand so richtig.

00:19:08.180 --> 00:19:16.020
Und im Grunde, ja, man könnte sagen, es ist irgendwie inspiriert von Neuronen, aber es ist auch mehr auch nicht.

00:19:16.020 --> 00:19:20.700
Und mittlerweile hat das, was man da macht, nicht mehr viel zu tun mit dem, was man mal angefangen hat.

00:19:20.700 --> 00:19:23.700
Einfach irgendwie so ein paar leuchtende Punkte auf so einer Karte, die dann irgendwie aufleuchten,

00:19:23.700 --> 00:19:27.840
die dann irgendwie eine kryptische Verbindung haben, weil da irgendwie Strom von A nach B fließt oder so.

00:19:27.840 --> 00:19:29.840
Und dann halt irgendwie eine Beziehung dargestellt.

00:19:29.840 --> 00:19:31.540
Vielleicht meint Neuron irgendwie sowas.

00:19:31.540 --> 00:19:39.840
Naja, also eine passendere Bezeichnung fände ich jetzt irgendwie, das sind so gestapelte Funktionsapproximatoren.

00:19:39.840 --> 00:19:43.060
Also im Grunde geht es darum, halt Funktionen zu approximieren.

00:19:43.060 --> 00:19:48.560
Und man hat halt irgendwie rausgefunden, dass das super geht, wenn man das in Schichten organisiert.

00:19:48.560 --> 00:19:53.680
Und wenn man sozusagen da bestimmte Aktivierungsfunktionen verwendet, da hat sich auch viel getan.

00:19:53.680 --> 00:19:59.820
Und ja, man kann.

00:19:59.820 --> 00:20:08.820
Man kann sich das ungefähr so vorstellen, dass man hat halt Schichten von...

00:20:08.820 --> 00:20:19.100
und von so parametrisierten Dingen, die halt irgendwie etwas machen mit einer Eingabe.

00:20:19.100 --> 00:20:28.480
Es kommt halt eine Eingabe rein und dann wird das von sehr, sehr basalen oder sehr, sehr konkreten Dingen,

00:20:28.480 --> 00:20:32.320
die da detektiert werden, immer zu immer abstrakteren Geschichten, je tiefer das durch das Netz durchgeht.

00:20:32.320 --> 00:20:35.860
Vielleicht machen wir das einmal so kurz als Beispiel anhand von so einem runden Bild.

00:20:36.260 --> 00:20:41.320
Also ich habe jetzt vielleicht als erste Information die Bildpixel irgendwie in verschiedene Sektoren unterteilt.

00:20:41.320 --> 00:20:45.180
Dann vielleicht sowas wie eine Abstraktionsschiebene als die Helligkeit des Bildes oder so.

00:20:45.180 --> 00:20:49.000
Oder andere Dinge, vielleicht dann noch grobe Strukturen unterteilt.

00:20:49.000 --> 00:20:55.620
Kanten, Kanten, genau. Wo ist hier eine Kante, wo ist eine Ecke, was sind helle Flecken in dem Bild und so.

00:20:55.620 --> 00:20:57.760
Und jetzt hast du eine Neuronenschicht.

00:20:57.760 --> 00:20:59.980
Ja, oder mehrere Schichten.

00:20:59.980 --> 00:21:06.240
Und das, was da passiert im Grunde, ist halt das, was die Konvolution gilt.

00:21:06.260 --> 00:21:10.320
Ich will es gar nicht mehr so ausführlich beschreiben, was da für eine mathematische Operation ist.

00:21:10.320 --> 00:21:12.040
Das ist eigentlich relativ simpel passiert.

00:21:12.040 --> 00:21:20.940
Aber was das macht, ist, dass es dafür sorgt, dass Dinge, die nah beieinander sind, halt irgendwie auch zusammenbleiben, sozusagen.

00:21:20.940 --> 00:21:28.260
Weil man hat sonst immer das Problem, oder das hatte man bei den anderen Verfahren, mit denen man da angefangen hat,

00:21:28.260 --> 00:21:31.960
hat halt auch, dass sobald sich irgendwas so ein bisschen geändert hat,

00:21:31.960 --> 00:21:35.880
also wenn der Hund in einem Trainingsbeispiel, in einem ersten Trainingsbeispiel,

00:21:36.260 --> 00:21:37.920
in einer gleichen Stelle ist wie im zweiten Trainingsbeispiel,

00:21:37.920 --> 00:21:44.540
dann wurde das schon nicht mehr erkannt, weil, naja, sozusagen, wenn man einfach ein Bild einfach so als Vektor auffasst,

00:21:44.540 --> 00:21:50.020
dann, wenn sich da drin sozusagen räumlich irgendetwas bewegt, dann ist das halt an einer ganz anderen Stelle.

00:21:50.020 --> 00:21:52.600
Da werden halt ganz andere Features sozusagen aktiviert.

00:21:52.600 --> 00:21:58.320
Man könnte ja sagen, naiv, ein Bild ist einfach nur, irgendwie hat so viele Dimensionen wie Pixel,

00:21:58.320 --> 00:22:05.360
oder so viele Dimensionen wie Pixel mal drei, und man hat für jeden Kanal halt noch eine Dimension.

00:22:06.260 --> 00:22:10.480
Aber dann hat man eben dieses Problem, was passiert, wenn sich Dinge in dem Bild bewegen?

00:22:10.480 --> 00:22:14.200
Und dann wird es halt ätzend und funktioniert einfach auch nicht mehr.

00:22:14.200 --> 00:22:23.540
Und dafür, da helfen diese Convolutional-Geschichten halt stark, weil die dafür sorgen, dass Dinge halt sozusagen unabhängig davon,

00:22:23.540 --> 00:22:27.460
wo sie passieren, irgendwie detektiert werden können.

00:22:27.460 --> 00:22:33.280
Und ja, man fängt halt mit sowas an, wie eben Kantenhelligkeiten in ganz einfachen Formen,

00:22:33.280 --> 00:22:38.120
und die werden dann sozusagen in den Schichten halt immer weiter abstrahiert.

00:22:38.120 --> 00:22:43.400
Sodass halt man auf, wenn das jetzt durch mehrere Ebenen gegangen ist,

00:22:43.400 --> 00:22:49.200
hat man halt abstraktere Features, die halt weiter unten im Netz sozusagen detektiert werden.

00:22:49.200 --> 00:23:02.100
Also es gibt dann halt irgendwo sozusagen Teile, Layer, die detektieren dann Ohren, oder Augen, oder Haare, oder sowas.

00:23:02.100 --> 00:23:02.600
Oder...

00:23:03.280 --> 00:23:08.660
Vielleicht irgendwie ist da überhaupt ein Tier, oder ist das nicht eher Himmel, oder ist das irgendwie eine Wiese, oder so?

00:23:08.660 --> 00:23:14.860
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.

00:23:14.860 --> 00:23:19.460
Könnte natürlich passen, oder ist es ein Lebewesen, oder sowas, oder ist es überhaupt ein Bild, also...

00:23:19.460 --> 00:23:25.440
Ja, und ja, das passt halt super, weil irgendwie diese räumliche...

00:23:25.440 --> 00:23:31.400
Dinge haben halt eine räumliche Ordnung und sind halt irgendwie hierarchisch strukturiert, so ist halt unsere Welt irgendwie strukturiert, die wir wahrnehmen.

00:23:31.400 --> 00:23:32.100
Und wenn man das...

00:23:32.100 --> 00:23:33.040
Und ja...

00:23:33.040 --> 00:23:36.280
Diese Modelle sind halt...

00:23:36.280 --> 00:23:40.520
Bilden das halt sehr gut ab und repräsentieren darum halt das, was man da bekommt halt.

00:23:40.520 --> 00:23:42.800
Also sind halt in der Lage, das sehr, sehr gut zu repräsentieren.

00:23:42.800 --> 00:23:44.860
Ja, ist das ein Ölgemälde, ein Foto, oder eine Skizze?

00:23:44.860 --> 00:23:49.280
Ja, und genau, so alte solche Sachen, was ist die Textur von Dingen?

00:23:49.280 --> 00:23:53.240
Ja, und das hat halt super funktioniert.

00:23:53.240 --> 00:23:59.200
Und was halt auch total toll ist, ist, dass man im Grunde keine...

00:23:59.200 --> 00:24:00.900
Kein echtes...

00:24:00.900 --> 00:24:02.380
Kein Feature-Engineering mehr so macht.

00:24:02.380 --> 00:24:03.000
Mehr machen.

00:24:03.000 --> 00:24:03.700
Mehr machen muss, so wie früher.

00:24:03.700 --> 00:24:07.180
Sondern, dass das halt zum großen Teil automatisch passiert.

00:24:07.180 --> 00:24:12.720
Und gut, die Architektur des Modells ist natürlich noch so eine Sache.

00:24:12.720 --> 00:24:24.480
Aber das ist halt nicht mehr das Gleiche, als wenn man da jetzt von Hand irgendwelche Features rauszieht aus einem Bild.

00:24:24.480 --> 00:24:27.200
Sondern, das ist alles gelernt.

00:24:27.200 --> 00:24:32.200
Also das heißt tatsächlich, durch diese Bibliotheken weiß man halt dann direkt, hey...

00:24:32.840 --> 00:24:35.980
Der Bild hat diese verschiedenen Dinge, Netze, Schichten.

00:24:35.980 --> 00:24:38.900
Und durch die ich dann einfach durch iterieren kann und...

00:24:38.900 --> 00:24:41.800
Ja, also das Modell trainiert halt eben nicht nur...

00:24:41.800 --> 00:24:50.020
Passt sich nicht nur den vorher hartgecodeten Features an, sondern das Lernen, was sind eigentlich gute Features, ist halt mit dabei.

00:24:50.020 --> 00:24:52.580
Und das ist halt ein Riesenfortschritt.

00:24:52.580 --> 00:24:53.760
Schwarm-Intelligenz, schon wieder.

00:24:53.760 --> 00:24:55.000
Schwarm, naja.

00:24:55.000 --> 00:24:55.820
Ja.

00:24:55.820 --> 00:24:57.880
Aber ja.

00:24:57.880 --> 00:25:02.700
Es macht halt viel einfacher.

00:25:02.800 --> 00:25:07.140
Und man kann halt die gleichen Methoden verwenden, ob man jetzt auf Audiodaten arbeitet oder eben auf Bildern.

00:25:07.140 --> 00:25:10.200
Oder auf irgendwas völlig anderem.

00:25:10.200 --> 00:25:12.440
Und das ist natürlich auch total toll.

00:25:12.440 --> 00:25:18.140
Weil dann sozusagen Erfolge in einem Feld halt irgendwie in eine andere Domain transportieren kann.

00:25:18.140 --> 00:25:24.180
Ja, und das geht so weit, dass halt inzwischen man...

00:25:24.180 --> 00:25:26.860
Ja, es gibt immer so den Satz, Perception is solved.

00:25:26.860 --> 00:25:29.100
Ja, so irgendwie alles, was damit zu tun hat.

00:25:29.100 --> 00:25:32.680
Dinge zu erkennen, irgendwie Handschrift.

00:25:32.800 --> 00:25:46.460
Ziffern, Autokennzeichen, irgendwie Hausnummern, Straßenschilder oder eben auch Katzen, Hunde, irgendwelche Alltagsgegenstände.

00:25:46.460 --> 00:25:49.700
Das machen diese Dinger mittlerweile besser als Menschen.

00:25:49.700 --> 00:25:53.400
Also die haben da auch eigentlich überall super Human Performance erreicht.

00:25:53.400 --> 00:25:59.920
Also wenn man dann selber das von Hand labelt und dann guckt, wer macht mehr Fehler, dann machen Menschen üblicherweise mehr Fehler.

00:25:59.920 --> 00:26:02.780
Und das ist schon ganz erstaunlich.

00:26:02.780 --> 00:26:09.420
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...

00:26:09.420 --> 00:26:11.620
Oder ob es überhaupt jemals möglich sein wird, dass sowas passiert.

00:26:11.620 --> 00:26:13.660
Und dann ging es innerhalb von wenigen Jahren.

00:26:13.660 --> 00:26:16.860
Also das ist tatsächlich ein riesen Fortschritt passiert.

00:26:16.860 --> 00:26:21.300
Auf der anderen Seite muss man natürlich sagen, das heißt jetzt nicht, dass alles gelöst ist.

00:26:21.300 --> 00:26:23.200
Oder dann wird immer davon künstliche Intelligenz geredet.

00:26:23.200 --> 00:26:24.620
Und das ist schon irgendwie Quatsch.

00:26:24.620 --> 00:26:28.060
Weil, also ich meine, Machine Learning ist halt so ein Teilbereich der künstlichen Intelligenz.

00:26:28.060 --> 00:26:30.480
Und wahrscheinlich auch so der interessanteste zur Zeit.

00:26:30.480 --> 00:26:31.480
Aber äh...

00:26:32.760 --> 00:26:40.760
Die wirklich knackigen Probleme, wenn es darum geht, irgendwie wirklich intelligentes Verhalten oder...

00:26:40.760 --> 00:26:43.060
Was heißt also überhaupt, wie definiert man das?

00:26:43.060 --> 00:26:49.200
Also wenn ich jetzt tatsächlich als ein individuelles, autonomes Individuum hätte, das ich dann als intelligent definieren kann,

00:26:49.200 --> 00:26:55.520
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.

00:26:55.520 --> 00:26:56.980
Also das ist vielleicht so...

00:26:56.980 --> 00:26:59.860
Das ist auch überraschend, wie viel sich auf solche Entscheidungen reduzieren lässt.

00:26:59.860 --> 00:27:01.860
Also das ist tatsächlich, macht das schon viel aus, aber...

00:27:02.760 --> 00:27:04.760
Äh, diese, die, die, ähm...

00:27:04.760 --> 00:27:11.740
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.

00:27:11.740 --> 00:27:16.460
Die lassen sich auch alle sehr, diese Modelle lassen sich sehr leicht täuschen, weil sie eben fast nichts über die Welt wissen.

00:27:16.460 --> 00:27:17.840
Und, ähm...

00:27:17.840 --> 00:27:19.160
Also du fällst das alles nicht für intelligent.

00:27:19.160 --> 00:27:19.400
Nein, überhaupt nicht.

00:27:19.400 --> 00:27:21.760
Also ich finde das natürlich schon, äh, riesen...

00:27:21.760 --> 00:27:26.460
Also, um bei einem Griff zu bleiben, Intelligence, äh, die da irgendwo hinter steckt.

00:27:26.460 --> 00:27:29.060
Also man ist natürlich jetzt nicht ungefragt vernehmbar.

00:27:29.060 --> 00:27:32.720
Und die sticht natürlich an der Stelle noch kein Menschen aus, oder kann irgendwie Konkurrenz werden.

00:27:32.720 --> 00:27:37.880
Oder sowas wie vielleicht dann die Gefahren, die mit so einem AI-Ding da irgendwie verknüpft werden, auch noch hinzukämen.

00:27:37.880 --> 00:27:39.760
Aber ich finde das schon sehr beeindruckend.

00:27:39.760 --> 00:27:43.060
Also ich würde fast auch schon von Kunstintelligenz sprechen wollen, so aus dem Laienverständnis heraus.

00:27:43.060 --> 00:27:45.840
Selbst wenn es jetzt so eine richtige Intelligenz jetzt vielleicht noch nicht ist.

00:27:45.840 --> 00:27:51.960
Aber in gewisser Weise kann halt die Maschine tatsächlich, also das ist glaube ich der Fortschritt, mit neuen Dingen umgehen.

00:27:51.960 --> 00:27:54.000
Und das ist halt nicht das, was sie vorher gelernt hat.

00:27:54.000 --> 00:27:55.700
Und das ist ja das, was das Spannende daran ist.

00:27:55.700 --> 00:27:56.400
Ja, also ich...

00:27:56.400 --> 00:27:57.720
Und das ist vielleicht schon irgendwo Intelligenz.

00:27:57.720 --> 00:28:01.720
Ich denke, der, der, der, der große Unterschied zu früher ist halt, dass...

00:28:02.680 --> 00:28:10.260
In, muss man auch sagen, begrenzten Bereichen muss man halt nicht mehr wirklich explizit Sachen programmieren.

00:28:10.260 --> 00:28:15.400
Sondern man zeigt jetzt einer Maschine nur noch irgendwie Beispiele dafür, wie es richtig sein soll.

00:28:15.400 --> 00:28:19.140
Und dann kann sie das halt auch mehr oder weniger genauso gut machen.

00:28:19.140 --> 00:28:23.000
Das heißt, man muss in vielen Bereichen nicht mehr explizit programmieren.

00:28:23.000 --> 00:28:23.160
Das ist schon clever.

00:28:23.160 --> 00:28:27.880
Und das ist natürlich ein Riesenvorteil, weil das war bisher immer so ein Bottleneck für viele Anwendungen.

00:28:27.880 --> 00:28:31.940
Ja genau, also wenn man halt immer noch Menschen drauf gucken lassen muss, stimmt das jetzt alles oder nicht?

00:28:32.640 --> 00:28:34.440
Die müssen das halt irgendwie hinschreiben, die müssen das auch verstehen.

00:28:34.440 --> 00:28:36.440
Ja, klar.

00:28:36.440 --> 00:28:38.720
Also insofern ist das natürlich schon ein Riesenfortschritt.

00:28:38.720 --> 00:28:42.420
Aber es ist halt nicht auf alle Probleme anwendbar.

00:28:42.420 --> 00:28:45.320
Es gibt viele Probleme, bei denen das grundsätzlich nicht so gut funktioniert.

00:28:45.320 --> 00:28:55.400
Und ja, da kommen wir auch dann zu den Geschichten mit dem Unterschied zwischen Supervised an Supervised und Reinforcement Learning.

00:28:55.400 --> 00:28:58.000
Also Supervised geht.

00:28:58.000 --> 00:29:00.400
Also da sind wir mittlerweile ziemlich gut.

00:29:00.400 --> 00:29:02.600
Aber...

00:29:02.600 --> 00:29:04.900
Aber auch nur, wenn es um so ganz oberflächliche Geschichten geht.

00:29:04.900 --> 00:29:07.640
Also die Modelle wissen nicht, was sie da tun.

00:29:07.640 --> 00:29:10.100
Sie haben kein Verständnis dafür, was da passiert.

00:29:10.100 --> 00:29:16.380
Deswegen lassen sie sich auch eben sehr leicht täuschen, weil es muss halt nur irgendwie halbwegs oberflächlich so aussehen.

00:29:16.380 --> 00:29:17.420
Das reicht ja vollkommen.

00:29:17.420 --> 00:29:25.980
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.

00:29:25.980 --> 00:29:30.980
Ja, man könnte so ein paar lustige Surveillance-Aktionen machen, indem man irgendwie so Plakate hochhält mit gesuchten Persönlichkeiten oder...

00:29:32.560 --> 00:29:33.520
Mit irgendwelchen Dingen und dann...

00:29:33.520 --> 00:29:39.380
Aber gut, das sind ja noch so Machine Learning Security, das ist nochmal ein ganz eigenes Ding.

00:29:39.380 --> 00:29:43.940
Was aber jetzt zum Beispiel Menschen Tiere super können.

00:29:43.940 --> 00:29:50.640
Also einmal ist es halt total interessant, dass Menschen nicht so viele Trainingsbeispiele brauchen.

00:29:50.640 --> 00:30:01.220
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.

00:30:01.220 --> 00:30:02.520
Und man versteht überhaupt nicht...

00:30:02.520 --> 00:30:07.560
Wie das sein kann, dass man mit so wenig Trainingsbeispielen irgendwie auskommt, weil diese ganzen Deep Learning-Geschichten brauchen viel, viel mehr.

00:30:07.560 --> 00:30:11.280
Was jetzt nicht so ein Problem ist, wenn man inzwischen Internet und so...

00:30:11.280 --> 00:30:20.160
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.

00:30:20.160 --> 00:30:24.820
Und dann hat man genug, um halt mal große Modelle mit vielen, vielen Parametern zu fitten.

00:30:24.820 --> 00:30:26.380
Und dann funktioniert das auch.

00:30:26.380 --> 00:30:32.480
Aber es wäre natürlich schon interessant rauszukriegen, wie kommt es, dass Menschen das auch super hinkriegen, aber...

00:30:32.480 --> 00:30:33.180
Dass alles nicht...

00:30:33.180 --> 00:30:33.980
Diese Daten nicht brauchen.

00:30:33.980 --> 00:30:37.900
Und dann steht das an der Auflösung mit der Information, die die Menschen bekommen.

00:30:37.900 --> 00:30:46.720
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.

00:30:46.720 --> 00:30:47.780
Und man kann jetzt sagen...

00:30:47.780 --> 00:30:49.880
Und die Menschen lernen das dann anhand dieser Masse von Informationen so schnell doch.

00:30:49.880 --> 00:30:54.560
Ja, man kann jetzt sagen, also Menschen eben sehen auch Sachen, hören nicht nur Dinge und so.

00:30:54.560 --> 00:30:57.800
Aber ich glaube, das ist gar nicht so der Punkt, sondern...

00:30:57.800 --> 00:30:58.560
Oder das, was halt so der...

00:30:58.560 --> 00:31:00.240
Ja.

00:31:02.440 --> 00:31:06.520
Übliche Ansicht ist halt, dass Menschen halt und Tiere irgendwie super...

00:31:06.520 --> 00:31:08.880
An Supervised Learning halt wirklich, wirklich gut können.

00:31:08.880 --> 00:31:16.480
Wirklich gut in der Lage sind, einfach nur durch Beobachten super Repräsentationen der Welt irgendwie aufzubauen.

00:31:16.480 --> 00:31:20.480
Und das kann man halt mit...

00:31:20.480 --> 00:31:25.660
Ja, können halt die Modelle, die wir da verwenden, in Computern momentan nicht.

00:31:25.660 --> 00:31:27.960
Und es...

00:31:27.960 --> 00:31:32.320
Da kriegt man halt eben schon sowas nicht hin wie, was ist da überhaupt eine geeignete Vernunft?

00:31:32.400 --> 00:31:38.460
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.

00:31:38.460 --> 00:31:46.940
Also da, man sieht irgendwie, keine Ahnung, eine Savanne in Afrika oder laufen irgendwie Tiere durch die Kamera.

00:31:46.940 --> 00:31:50.380
Ja, irgendwie dieses Problem, was ist da für ein Tier, das ist sozusagen, das geht.

00:31:50.380 --> 00:31:53.620
Aber, ja, was passiert jetzt in fünf Minuten in diesem Film?

00:31:53.620 --> 00:31:55.380
Oder was passiert im nächsten Frame?

00:31:55.380 --> 00:31:58.740
Ja, wenn die Tiere von links nach rechts durchlaufen, sind dann plötzlich keine Tiere mehr drin?

00:31:58.740 --> 00:32:01.740
Oder so, das muss man natürlich noch in entsprechenden Experimenten...

00:32:02.360 --> 00:32:04.980
Irgend so einen exponentellen Aufbau übersetzen.

00:32:04.980 --> 00:32:07.660
Aber wenn man sich jetzt anguckt, können...

00:32:07.660 --> 00:32:09.460
Wie gut können Menschen das vorhersagen, was da passiert?

00:32:09.460 --> 00:32:10.160
Super, ja.

00:32:10.160 --> 00:32:11.220
Also das...

00:32:11.220 --> 00:32:13.900
Die verstehen auch, dass wenn die Sonne untergeht, dann wird es dunkel oder so.

00:32:13.900 --> 00:32:15.900
Für solche Maschinen oder Modelle sehr, sehr schwierig.

00:32:15.900 --> 00:32:17.660
Die kriegen halt den...

00:32:17.660 --> 00:32:21.160
Vielleicht einen Frame, vielleicht ein paar irgendwie auch ganz gut vorhergesagt.

00:32:21.160 --> 00:32:25.300
Aber je länger das wird, desto absurder wird das, was halt vorhergesagt wird.

00:32:25.300 --> 00:32:31.340
Und man weiß nicht mal, wie man jetzt da gut irgendwie eine Distanz ausrechnet zu dem, was sie hätten vorhersagen müssen.

00:32:31.340 --> 00:32:32.320
Das heißt...

00:32:32.320 --> 00:32:33.880
Man findet nicht mal eine Verlustfunktion, die man da...

00:32:33.880 --> 00:32:37.280
Das heißt, man kann das Optimierungsproblem nicht gut lösen, weil man gar nicht weiß, was man optimieren soll.

00:32:37.280 --> 00:32:42.840
Ja, das liegt auch genau an dem Problem, dass die Maschinen an der Stelle nicht diese Sinneswahrnehmung von einer echten Welt,

00:32:42.840 --> 00:32:49.580
in der Gänze der Erfahrungsmöglichkeiten, was hessofraktale, dimensionale Strukturen angeht, erfassen konnten.

00:32:49.580 --> 00:32:52.040
Und das dann nicht vorliegt in dem Datensatz.

00:32:52.040 --> 00:32:55.300
Möglicherweise wäre das eine Option, da irgendwie so ranzugehen.

00:32:55.300 --> 00:32:57.640
Jetzt wollen wir noch ein paar Fraktaltheorien...

00:32:57.640 --> 00:33:01.620
Naja, das ist ja wieder Hingespinze, aber ja.

00:33:01.620 --> 00:33:02.280
Vielleicht kann man das...

00:33:02.280 --> 00:33:05.880
Vielleicht kann man dadurch irgendwann sowas dann doch basteln und dann die KI für sich...

00:33:05.880 --> 00:33:08.540
Ja, kann man bestimmt, aber momentan wissen wir halt nicht, wie.

00:33:08.540 --> 00:33:11.960
Und ja, ist halt schwer.

00:33:11.960 --> 00:33:14.560
Und das ist sozusagen...

00:33:14.560 --> 00:33:21.200
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.

00:33:21.200 --> 00:33:22.060
Aber ist halt noch nicht so.

00:33:22.060 --> 00:33:23.600
Aber da arbeiten ganz viele Leute dran.

00:33:23.600 --> 00:33:26.000
Und Reinforcement Learning ist halt so ein Zwischending.

00:33:26.000 --> 00:33:31.740
Wenn man halt nicht zu allem, was man tut, jetzt ein Label hat oder eben ein Feedback,

00:33:32.240 --> 00:33:34.120
bekommt, war das jetzt richtig oder falsch,

00:33:34.120 --> 00:33:37.300
sondern man bekommt...

00:33:37.300 --> 00:33:38.520
Die Labels werden Spars.

00:33:38.520 --> 00:33:41.960
Also man bekommt halt nur ab und zu gesagt, ob jetzt was richtig war oder nicht.

00:33:41.960 --> 00:33:45.560
Und dann muss man das halt irgendwie verteilen auf das, was man getan hat.

00:33:45.560 --> 00:33:48.540
Also vielleicht ist da auch ein praktisches Beispiel irgendwie am besten.

00:33:48.540 --> 00:33:49.560
Also wenn man...

00:33:49.560 --> 00:33:51.540
Spielen funktioniert das halt super.

00:33:51.540 --> 00:33:53.500
Wenn man jetzt irgendwie Schach spielt oder Go oder sowas,

00:33:53.500 --> 00:33:57.960
dann spielt man halt eine ganze Zeit lang, macht viele Züge und dann am Schluss bekommt man halt gesagt,

00:33:57.960 --> 00:33:59.100
okay, du hast jetzt gewonnen oder verloren.

00:33:59.100 --> 00:34:01.560
Aber man bekommt keine Aussage...

00:34:02.240 --> 00:34:04.200
Wie gut war jetzt dieser Zug, den ich gemacht habe?

00:34:04.200 --> 00:34:06.360
Weil das weiß halt eh keiner so genau.

00:34:06.360 --> 00:34:08.240
Und die definitive Aussage ist ja,

00:34:08.240 --> 00:34:11.800
es kann ja auch sein, dass ein Zug, der irgendwie schlecht aussieht, eigentlich sehr gut war.

00:34:11.800 --> 00:34:14.280
Ja, es sei denn, du verdienst den nächsten Zug oder sowas.

00:34:14.280 --> 00:34:17.140
Ja, aber tatsächlich ist es halt so,

00:34:17.140 --> 00:34:19.620
wirklich definitiv weiß man es erst, wenn man gewonnen oder verloren hat.

00:34:19.620 --> 00:34:21.340
Und dann hat man das Problem,

00:34:21.340 --> 00:34:25.560
okay, jetzt muss ich irgendwie sozusagen diese Feedback irgendwie zurück assignen

00:34:25.560 --> 00:34:26.900
an alles, was ich irgendwie gemacht habe.

00:34:26.900 --> 00:34:29.300
Und das ist genau Reinforcement Learning.

00:34:29.300 --> 00:34:31.300
Und das ist halt sozusagen...

00:34:32.200 --> 00:34:34.440
Ja, so ein Zwischending zwischen überwacht und unüberwacht,

00:34:34.440 --> 00:34:36.060
weil halt da auch viel unüberwacht passiert.

00:34:36.060 --> 00:34:38.180
Aber ab und zu hat man ja doch so ein bisschen Feedback.

00:34:38.180 --> 00:34:39.820
Und das hat halt viele Anwendungen.

00:34:39.820 --> 00:34:42.280
So selbstfahrende Autos sind halt auch so ein...

00:34:42.280 --> 00:34:44.860
Oder überhaupt laufende Roboter und so, das ist alles Reinforcement Learning.

00:34:44.860 --> 00:34:46.560
Oh, laufende Roboter, schön.

00:34:46.560 --> 00:34:49.400
Hast du das gesehen von Boston Dynamics, das neue Ding?

00:34:49.400 --> 00:34:55.320
Da haben irgendwie 15 diese, weiß nicht, pferdeförmigen Hunderoboter so einen LKW getogen.

00:34:55.320 --> 00:34:56.680
So irgendwo irgendeine Straße.

00:34:56.680 --> 00:34:59.240
Ich finde diese Videos immer sehr beunruhigend.

00:34:59.240 --> 00:35:01.040
Ja, die sind etwas spooky jetzt tatsächlich.

00:35:02.040 --> 00:35:03.520
Die können ziemlich viel Militärtechnik.

00:35:03.520 --> 00:35:05.980
Wenn man sich da überlegt, da ist irgendwie so eine Wasser drauf oder sowas,

00:35:05.980 --> 00:35:07.280
dann hüpfen die durch den Wald und...

00:35:07.280 --> 00:35:10.140
Ja, und dann stürzen sich dabei die Türen aufzumachen und um die Ecke zu gucken.

00:35:10.140 --> 00:35:11.220
Ja, ja, das ist...

00:35:11.220 --> 00:35:12.480
Das ist dann ein bisschen spooky tatsächlich.

00:35:12.480 --> 00:35:13.860
Ja, creepy, ja.

00:35:13.860 --> 00:35:16.040
Ja, ist ja auch vom DARPA finanziert, ne?

00:35:16.040 --> 00:35:16.800
Ja, ja, ja.

00:35:16.800 --> 00:35:19.840
Ich glaube, die Firma selber ist gekauft worden von Google.

00:35:19.840 --> 00:35:21.040
Ja, ich glaube, die haben sie wieder verkauft.

00:35:21.040 --> 00:35:22.360
Haben sie wieder verkauft, aber kann auch sein.

00:35:22.360 --> 00:35:25.460
Aber ja, die war mitfinanziert vom DARPA vor allen Dingen und so.

00:35:25.460 --> 00:35:26.200
Ja.

00:35:26.200 --> 00:35:30.200
Mal gucken, was da so schönes für die Zivilgesellschaft noch bei raus springt.

00:35:30.200 --> 00:35:31.960
Ja, ja, auf jeden Fall.

00:35:32.040 --> 00:35:36.080
Weil irgendwie, das ist halt auch so ein hartes Problem.

00:35:36.080 --> 00:35:37.560
Auch da gibt es tolle Erfolge.

00:35:37.560 --> 00:35:41.900
Jetzt, wenn man sich anguckt, was AlphaGo Zero angeht und so.

00:35:41.900 --> 00:35:43.420
Das ist gar keine Frage.

00:35:43.420 --> 00:35:46.040
Das ist ein super toller Erfolg, weil irgendwie...

00:35:46.040 --> 00:35:49.500
Früher waren ja auch die Lösungen, also Schach sozusagen,

00:35:49.500 --> 00:35:54.000
das erste Mal, dass man Menschen keine Chance mehr hatten gegen Schachcomputer.

00:35:54.000 --> 00:35:57.180
Da war irgendwann 1998, als Kasparov gegen Diplu dann verloren hatte.

00:35:57.180 --> 00:35:58.720
Also ich habe schon als Kind immer gegen meinen Schachcomputer verloren.

00:35:58.720 --> 00:36:01.480
Ja, ja, aber nicht jeder Mensch hätte gegen seinen Schachcomputer verloren.

00:36:02.040 --> 00:36:04.100
Das wollen wir nochmal sehen.

00:36:04.100 --> 00:36:09.220
Ja, aber heute ist es so, dass kein Mensch mehr eine Chance hätte gegen einfach nur so ein blödes iPad.

00:36:09.220 --> 00:36:12.760
Weil das ist halt schon schnell genug, als dass man da irgendwie...

00:36:12.760 --> 00:36:13.640
Das ist völlig aussichtslos.

00:36:13.640 --> 00:36:18.620
Und das damals, ja, so nach 1998 war dann halt klar,

00:36:18.620 --> 00:36:20.660
okay, Menschen haben jetzt irgendwie hier keine Chance mehr.

00:36:20.660 --> 00:36:22.440
Aber...

00:36:22.440 --> 00:36:27.360
Wer gewinnt denn eigentlich, wenn ich das Spiel von einem anderen Rechner mitspielen lasse?

00:36:27.360 --> 00:36:27.920
Das wäre doch mal interessant.

00:36:27.920 --> 00:36:30.920
Also ich spiele auf dem einen Rechner manuell Schach gegen den...

00:36:32.040 --> 00:36:35.480
Und lass mir meinen Zug aber von einem anderen Bot prädikten.

00:36:35.480 --> 00:36:37.280
Also gewinnt dann der schnellere Bot?

00:36:37.280 --> 00:36:38.580
Oder was ist das, wenn der beide Bot gegeneinander spielt?

00:36:38.580 --> 00:36:39.280
Ist das dann zufällig?

00:36:39.280 --> 00:36:42.660
Ne, ne, üblicherweise kommt es halt darauf an, was das für Dinger sind.

00:36:42.660 --> 00:36:44.500
Wenn die gleich sind, dann ist es vielleicht Zufall.

00:36:44.500 --> 00:36:46.820
Oder dann soll es 50% 50-50 sein, aber...

00:36:46.820 --> 00:36:47.640
Aber vielleicht kommen dann Regen raus.

00:36:47.640 --> 00:36:48.440
Vielleicht geht immer Weiß.

00:36:48.440 --> 00:36:52.960
Ne, ja, ne, ist schon so, dass 70%, glaube ich, zwei Drittel ungefähr Weiß gewinnt.

00:36:52.960 --> 00:36:55.200
Also wenn es gewinnt...

00:36:55.200 --> 00:36:56.440
Also die meisten Spiele sind sowieso Remi.

00:36:56.440 --> 00:36:59.380
Aber wenn es eine Entscheidung gibt, dann gewinnt meistens Weiß.

00:36:59.380 --> 00:37:02.000
Weil Weiß ja schon einen leichten Vorteil hat durch den Anzug.

00:37:02.040 --> 00:37:08.540
Aber ja, trotzdem hättest du halt...

00:37:08.540 --> 00:37:12.140
Sagen wir mal so, auch ein schlechtes Schachprogramm hätte halt keine Chance gegen einen wirklich guten...

00:37:12.140 --> 00:37:15.640
Also eins von 98 oder so hätte halt keine Chance gegen eins der modernen.

00:37:15.640 --> 00:37:17.540
Auf einer modernen Hardware ist halt...

00:37:17.540 --> 00:37:18.560
Das ist so viel besser geworden.

00:37:18.560 --> 00:37:22.520
Aber eben auch in dem Ding, was halt 98 KSV aufgeschlagen hat,

00:37:22.520 --> 00:37:25.060
steckt da halt ganz viel domainspezifisches Wissen drin.

00:37:25.060 --> 00:37:26.580
Da steckt da halt viel Schachtheorie drin.

00:37:26.580 --> 00:37:27.880
Da war eine Endspieldatenbank dran.

00:37:27.880 --> 00:37:30.480
Da war viel...

00:37:30.480 --> 00:37:32.020
Ähm...

00:37:32.040 --> 00:37:33.200
Ähm...

00:37:33.200 --> 00:37:33.680
Äh...

00:37:33.680 --> 00:37:34.480
Blatter, Overhead.

00:37:34.480 --> 00:37:35.880
Brauchen wir heute alles nicht mehr wegschmeißen.

00:37:35.880 --> 00:37:36.640
Lernen von einer eine, fertig.

00:37:36.640 --> 00:37:39.300
Ja, also da steckt ja ganz, ganz viel menschliche Arbeit drin.

00:37:39.300 --> 00:37:40.020
Sozusagen.

00:37:40.020 --> 00:37:41.940
Äh...

00:37:41.940 --> 00:37:42.780
Und das...

00:37:42.780 --> 00:37:44.440
Also wenn man jetzt zum Beispiel sagt,

00:37:44.440 --> 00:37:47.160
okay, wir möchten jetzt nicht einen Schachcomputer bauen,

00:37:47.160 --> 00:37:48.300
der den Schachweltmeister schlägt,

00:37:48.300 --> 00:37:49.920
sondern wir möchten jetzt ein...

00:37:49.920 --> 00:37:50.320
Äh...

00:37:50.320 --> 00:37:52.040
Ähm...

00:37:52.040 --> 00:37:52.620
Ja, weiß ich nicht.

00:37:52.620 --> 00:37:54.580
Baggerfahrprogramm irgendwie bauen,

00:37:54.580 --> 00:37:56.920
das mit den besten Baggerfahrern mithalten kann oder so.

00:37:56.920 --> 00:38:01.220
Dann müsste man dafür genauso viel Zeit investieren,

00:38:01.220 --> 00:38:01.720
wie...

00:38:01.720 --> 00:38:01.920
Äh...

00:38:02.040 --> 00:38:03.560
Oder vielleicht noch mehr oder keine Ahnung.

00:38:03.560 --> 00:38:04.800
Auf jeden Fall sehr, sehr viel Zeit,

00:38:04.800 --> 00:38:06.080
um das halt...

00:38:06.080 --> 00:38:07.680
Diese Domäne genauso gut zu modellieren,

00:38:07.680 --> 00:38:09.040
wie man das damals mit Schach gemacht hat.

00:38:09.040 --> 00:38:10.680
Und das ist halt völlig aussichtslos.

00:38:10.680 --> 00:38:11.600
Würde sich niemals rechnen.

00:38:11.600 --> 00:38:12.840
Es gibt so viele Dinge,

00:38:12.840 --> 00:38:14.080
die man irgendwie gut können will,

00:38:14.080 --> 00:38:17.200
aber wo es absolut aussichtslos wäre...

00:38:17.200 --> 00:38:18.280
Mir fällt ja immer so das Erste ein,

00:38:18.280 --> 00:38:20.580
was ich für einen Roboter mir selber anschaffen würde.

00:38:20.580 --> 00:38:22.640
Für jede Menge Geld wäre es so der Haushaltsroboter,

00:38:22.640 --> 00:38:25.120
der putzen kann und das ganze Haus in Ordnung hält.

00:38:25.120 --> 00:38:26.480
Vielleicht dann irgendwann auch ein bisschen kochen.

00:38:26.480 --> 00:38:28.380
Also dann habe ich natürlich meine eigenen Rezepte oder so.

00:38:28.380 --> 00:38:30.200
Aber das wäre natürlich toll,

00:38:30.200 --> 00:38:31.840
weil dann müsste man das nicht mehr...

00:38:31.840 --> 00:38:32.300
Nicht mehr machen.

00:38:32.300 --> 00:38:34.700
Ja, aber es ist schwierig.

00:38:34.700 --> 00:38:35.560
Also all diese Dinge,

00:38:35.560 --> 00:38:37.140
wo man mit der realen Welt interagiert,

00:38:37.140 --> 00:38:38.640
da komme ich auch gleich nochmal drauf.

00:38:38.640 --> 00:38:39.460
Das sind alles...

00:38:39.460 --> 00:38:40.520
Die sind alle leider nicht so leicht.

00:38:40.520 --> 00:38:42.860
Man hat das sofort immer irgendwie so Sicherheitsproblem.

00:38:42.860 --> 00:38:45.520
Äh...

00:38:45.520 --> 00:38:46.020
Also...

00:38:46.020 --> 00:38:47.300
Aber nochmal zu dem...

00:38:47.300 --> 00:38:49.100
Das grundsätzliche Problem wäre halt,

00:38:49.100 --> 00:38:50.060
das würde sich überhaupt nicht lohnen,

00:38:50.060 --> 00:38:52.060
für jeden Bereich, für jede Domäne,

00:38:52.060 --> 00:38:53.520
für jedes Problem, das man irgendwie hat,

00:38:53.520 --> 00:38:57.100
so viel Theorie und Wissen zu investieren,

00:38:57.100 --> 00:38:58.300
um das wirklich zu lösen.

00:38:58.300 --> 00:38:59.940
Auf diese Art.

00:38:59.940 --> 00:39:01.640
Deswegen ist das...

00:39:01.640 --> 00:39:03.880
Ja, ein netter Erfolg, so nach außen hin.

00:39:03.880 --> 00:39:05.620
Aber eigentlich ist es wertlos,

00:39:05.620 --> 00:39:08.100
weil man kann das zwar für Schach machen

00:39:08.100 --> 00:39:09.860
und bei Schach hat es halt

00:39:09.860 --> 00:39:11.280
einen so hohen symbolischen Wert,

00:39:11.280 --> 00:39:12.420
dass man es da tatsächlich gemacht hat.

00:39:12.420 --> 00:39:14.300
Aber es ist nicht...

00:39:14.300 --> 00:39:15.300
Keine praktische Lösung.

00:39:15.300 --> 00:39:17.520
Es ist nicht wirklich effizient.

00:39:17.520 --> 00:39:18.940
Und...

00:39:18.940 --> 00:39:20.020
Naja...

00:39:20.020 --> 00:39:21.860
Ja, für Schach, aber...

00:39:21.860 --> 00:39:23.260
In anderer...

00:39:23.260 --> 00:39:23.420
Ja.

00:39:23.420 --> 00:39:27.760
Aber jetzt irgendwie durch AlphaGo Zero und so,

00:39:27.760 --> 00:39:29.860
das sind Dinger, wo kein...

00:39:31.440 --> 00:39:32.980
äh, Domänenwissen mehr drinsteckt.

00:39:32.980 --> 00:39:35.380
Die, äh, sind, äh, also AlphaGo Zero

00:39:35.380 --> 00:39:37.360
ist, äh, von, also

00:39:37.360 --> 00:39:39.320
Null-Schachtheorie zu irgendwie

00:39:39.320 --> 00:39:41.400
superjungen Performance innerhalb von ein paar Stunden

00:39:41.400 --> 00:39:43.660
durch gegen sich selbst spielen, gut geworden.

00:39:43.660 --> 00:39:47.160
Ja, also der, der Worte, der dann, ähm,

00:39:47.160 --> 00:39:49.040
auch gegen Bo gespielt hat, hat ja irgendwelche völlig

00:39:49.040 --> 00:39:51.040
unkonventionellen Türen gespielt, wo keiner machte, was macht der denn da?

00:39:51.040 --> 00:39:53.160
Das würde ja ganz anders spielen und dann hat er ja trotzdem gewonnen.

00:39:53.160 --> 00:39:55.000
Das war schon ein bisschen spannend.

00:39:55.000 --> 00:39:57.360
Ja, ja, also das ist jetzt außerhalb von dem, was

00:39:57.360 --> 00:39:59.360
irgendwie, also wir haben ein paar hundert Jahre

00:39:59.360 --> 00:40:01.280
Schachtheorie, wir haben irgendwie, äh, ein paar

00:40:01.280 --> 00:40:03.000
tausend Jahre vielleicht, äh, Go-Theorie

00:40:03.000 --> 00:40:05.120
und da, jetzt

00:40:05.120 --> 00:40:07.240
sind wir halt viel weitergekommen in sehr, sehr kurzer

00:40:07.240 --> 00:40:09.240
Zeit und verstehen nicht mal mehr, was

00:40:09.240 --> 00:40:11.320
da passiert, weil, äh, es ist halt außerhalb

00:40:11.320 --> 00:40:13.160
von unseren, äh, ja,

00:40:13.160 --> 00:40:15.260
wir kriegen das nicht mehr, wir sind halt leider ein bisschen

00:40:15.260 --> 00:40:17.380
zu dumm dafür, offenbar, oder nicht gut genug

00:40:17.650 --> 00:40:19.670
Go oder Schach, um das noch nachvollziehen

00:40:19.670 --> 00:40:21.530
zu können, was die Dinger da machen.

00:40:21.530 --> 00:40:23.650
Aber es funktioniert, denn sie gewinnen immer.

00:40:23.650 --> 00:40:26.110
Und

00:40:26.110 --> 00:40:27.790
das ist halt deswegen

00:40:27.790 --> 00:40:29.610
so ein riesen Fortschritt,

00:40:29.610 --> 00:40:31.790
weil man jetzt

00:40:31.790 --> 00:40:33.810
da diese, also solche, auch diese

00:40:33.810 --> 00:40:35.730
Reinforcement-Learning-Geschichten sind jetzt nicht

00:40:35.730 --> 00:40:37.870
prinzipiell auf irgendein Problem

00:40:37.870 --> 00:40:38.610
geeicht. Also das

00:40:38.610 --> 00:40:41.650
heißt das Ding ja auch, dieses AlphaGo Zero

00:40:41.650 --> 00:40:43.850
Ding, das ist quasi das gleiche

00:40:43.850 --> 00:40:45.670
das gleiche Ding, was halt Schach

00:40:45.670 --> 00:40:47.710
Schoku, das ist dieses

00:40:47.710 --> 00:40:49.130
japanische Schach irgendwie, und Go

00:40:49.130 --> 00:40:51.650
irgendwie gelernt hat. Das heißt, es

00:40:51.650 --> 00:40:53.830
funktioniert über unterschiedliche Spiele hinweg.

00:40:53.830 --> 00:40:55.630
Das muss nicht unbedingt jetzt,

00:40:55.630 --> 00:40:57.150
also das ist halt,

00:40:57.150 --> 00:40:59.750
so jetzt kann man sich vorstellen, wenn man jetzt Probleme hat, die

00:40:59.750 --> 00:41:01.730
ähnlich sind, dann kann das möglicherweise auch

00:41:01.730 --> 00:41:03.690
relativ schnell so gut lernen, dass es halt

00:41:03.690 --> 00:41:04.550
besser ist als jeder Mensch.

00:41:04.550 --> 00:41:07.710
Und dann lohnt sich das plötzlich,

00:41:07.710 --> 00:41:09.530
das für diverse Bereiche einzusetzen,

00:41:09.530 --> 00:41:11.070
weil man gar kein Domain-Wissen mehr braucht.

00:41:11.070 --> 00:41:13.050
Also die sich das alles selber beibringen.

00:41:13.050 --> 00:41:15.650
Das klingt jetzt auch

00:41:15.650 --> 00:41:17.570
relativ erschreckend wahrscheinlich, aber so schlimm

00:41:17.570 --> 00:41:18.550
ist es auch wieder nicht, weil

00:41:18.550 --> 00:41:20.110
wir haben

00:41:20.110 --> 00:41:23.650
das funktioniert nur dann super, wenn man

00:41:23.650 --> 00:41:25.510
eben durch gegen sich selbst spielen oder

00:41:25.510 --> 00:41:27.390
super viele Spiele ausprobieren

00:41:27.390 --> 00:41:29.550
irgendwie lernen kann, was halt super

00:41:29.550 --> 00:41:31.690
geht in so Situationen,

00:41:31.690 --> 00:41:33.590
wo man die komplette Welt simulieren kann.

00:41:33.590 --> 00:41:35.570
Welcher Gott, das sind Werte mit Maschinen und Gebauen.

00:41:35.570 --> 00:41:41.550
Relativ unwahrscheinlich, dass so etwas funktioniert.

00:41:41.550 --> 00:41:43.790
Ja, es gibt da schöne Theorien zu

00:41:45.650 --> 00:41:46.230
Ja, das

00:41:46.230 --> 00:41:48.490
Ja, aber das

00:41:48.490 --> 00:41:55.390
Ich wollte das nur noch kurz zu Ende führen.

00:41:55.390 --> 00:41:56.770
Also wenn man das simulieren kann, ist super.

00:41:56.770 --> 00:41:59.750
Spiele sind halt, da hat man die Simulation

00:41:59.750 --> 00:42:01.770
halt schon. Genau, es gab da

00:42:01.770 --> 00:42:03.030
große Erfolge bei den Atari-Games.

00:42:03.030 --> 00:42:05.910
Voll toll, aber der Witz

00:42:05.910 --> 00:42:07.630
ist eigentlich, dass die Dinger sind halt super

00:42:07.630 --> 00:42:09.550
simulierbar, deswegen hat das da so gut funktioniert.

00:42:09.550 --> 00:42:12.050
So, die physische Realität

00:42:12.050 --> 00:42:13.770
ist nicht wirklich gut simulierbar.

00:42:13.770 --> 00:42:15.630
Ja, wir haben ja auch keine vernünftige Abbildung,

00:42:15.630 --> 00:42:17.790
von einem Modell der physischen

00:42:17.790 --> 00:42:19.790
Realität und den ganzen Variablen. Die kennen wir ja alle nicht.

00:42:19.790 --> 00:42:20.870
Alles viel zu viele Unbekannten.

00:42:20.870 --> 00:42:23.770
Das kennt man schon, aber das ist alles nicht so einfach

00:42:23.770 --> 00:42:25.030
umzusetzen.

00:42:25.030 --> 00:42:27.770
Und das Problem ist halt

00:42:27.770 --> 00:42:29.590
auch, du musstest ja nicht nur

00:42:29.590 --> 00:42:31.570
sozusagen so eine

00:42:31.570 --> 00:42:33.530
Physik-Engine, die relativ gut ist, haben.

00:42:33.530 --> 00:42:35.770
Das geht vielleicht noch, aber es passieren

00:42:35.770 --> 00:42:37.350
halt die ganze Zeit so Dinge,

00:42:37.350 --> 00:42:41.770
wo man nicht weiß,

00:42:41.770 --> 00:42:43.850
wie man das irgendwie simulieren soll.

00:42:43.850 --> 00:42:44.970
Ja, so, keine Ahnung.

00:42:45.610 --> 00:42:47.730
Außen rumläuft, da passiert so viel komischer Kram.

00:42:47.730 --> 00:42:52.050
Welche Sensorspektren endlich erweitern

00:42:52.050 --> 00:42:53.110
und die Maschinen damit füttern?

00:42:53.110 --> 00:42:54.890
Ja, nee, es ist eher,

00:42:54.890 --> 00:42:57.850
von der Sensor-Seite, das funktioniert eigentlich alles,

00:42:57.850 --> 00:42:59.230
aber was halt nicht funktioniert, ist

00:42:59.230 --> 00:43:02.330
alles Mögliche ausprobieren,

00:43:02.330 --> 00:43:03.430
um rauszukriegen, wie diese

00:43:03.430 --> 00:43:05.870
Realität dann funktioniert, weil das Problem ist,

00:43:05.870 --> 00:43:07.250
wenn man das jetzt mit einem selbstfahrenden Auto macht,

00:43:07.250 --> 00:43:08.610
dann macht man ganz schön viel kaputt

00:43:08.610 --> 00:43:11.530
und auch ganz schön viele selbstfahrende Autos kaputt,

00:43:11.530 --> 00:43:12.070
und die sind ja teuer.

00:43:12.070 --> 00:43:15.250
Und es ist ja, selbst wenn ich das alles simuliert mache,

00:43:15.250 --> 00:43:15.590
brauche ich nicht so viel.

00:43:15.590 --> 00:43:17.730
Ich brauche nicht sehr viel Rechenleistung und muss das ganz, ganz, ganz viel probieren.

00:43:17.730 --> 00:43:19.150
Wenn ich das, äh,

00:43:19.150 --> 00:43:21.650
ja, wenn ich das mit physischen Objekten

00:43:21.650 --> 00:43:23.490
da draußen machen muss, das funktioniert nicht.

00:43:23.490 --> 00:43:25.170
Das ist, äh, ja.

00:43:25.170 --> 00:43:27.730
Und, äh, daher

00:43:27.730 --> 00:43:29.590
wird das, also alles, was irgendwie

00:43:29.590 --> 00:43:31.570
mit physischen, also mit der Manipulation

00:43:31.570 --> 00:43:33.230
von irgendwelchen physischen Dingen zu tun hat,

00:43:33.230 --> 00:43:35.850
das ist alles noch nicht so richtig, äh,

00:43:35.850 --> 00:43:37.290
noch nicht so richtig im Griff

00:43:37.290 --> 00:43:39.710
und bleibt schwierig, jedenfalls solange man

00:43:39.710 --> 00:43:41.290
das nicht ordentlich simulieren kann.

00:43:41.290 --> 00:43:43.210
Und das ist momentan auch noch nicht gelöst.

00:43:43.210 --> 00:43:45.570
Aber, ja, ist natürlich schon

00:43:45.570 --> 00:43:47.450
interessant, was es da alles so an Fortschritten gibt.

00:43:47.450 --> 00:43:49.310
Ähm, ja.

00:43:49.310 --> 00:43:50.590
Ähm,

00:43:50.590 --> 00:43:53.330
genau, äh,

00:43:53.330 --> 00:43:55.090
ja, vielleicht machen wir jetzt doch noch ein Chapter.

00:43:55.090 --> 00:43:58.350
Ja, also,

00:43:58.350 --> 00:43:59.530
ein Chapter war auf jeden Fall

00:43:59.530 --> 00:44:01.330
Supervised Learning, Unsupervised Learning

00:44:01.330 --> 00:44:02.270
und Reinforced Learning.

00:44:02.270 --> 00:44:04.390
Und das war Convolutional Neuronetworks.

00:44:04.390 --> 00:44:07.250
Ähm, was ist das nächste Kapitel? Ist das, ähm,

00:44:07.250 --> 00:44:08.610
ähm,

00:44:08.610 --> 00:44:11.450
nochmal Fehler und wir wollten noch was über FITs

00:44:11.450 --> 00:44:13.110
machen. Achso, genau, wir wollten, wir wollten irgendwie was,

00:44:13.110 --> 00:44:15.550
äh, genau, dass das, äh, ja, ähm,

00:44:15.550 --> 00:44:31.050
Ä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?

00:44:31.050 --> 00:44:41.170
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.

00:44:42.370 --> 00:44:52.790
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.

00:44:52.790 --> 00:44:55.530
Am Schluss, am Ende willst du kurz einführen, wo, wo bist du gerade? Ich hab.

00:44:55.530 --> 00:45:01.790
Ja, ich überlege gerade, wie das mit dem praktischen Beispiel aussieht, weil wir wollten ja auch noch so, äh, Hunde versus Katzen machen.

00:45:01.790 --> 00:45:03.250
Ja.

00:45:03.250 --> 00:45:08.290
Und, äh, ähm, da könnte man das auch noch rein, aber, ja, egal, nein.

00:45:08.290 --> 00:45:12.010
Ja, aber ich fand das ganz gut, wie du das gemacht hast bei dem PiDD.

00:45:12.370 --> 00:45:18.050
11 Vortrag, da kann man dann hinterher tatsächlich ganz gut dahin, dass man sowas wie Oberfitting relativ gut da rein machen könnte.

00:45:18.050 --> 00:45:20.110
Und da müsste das mit den PiS versus Variants auch reinpassen.

00:45:20.110 --> 00:45:20.950
Ja, ja, stimmt, stimmt, stimmt.

00:45:20.950 --> 00:45:23.790
Also das ist ja, wir gehen vielleicht dann doch nochmal mit dem Beispiel an.

00:45:23.790 --> 00:45:25.590
Genau, dann, dann machen wir doch nochmal Beispiel hier.

00:45:25.590 --> 00:45:28.110
Und, ähm, genau, ich mach noch Kapitelmarke.

00:45:28.110 --> 00:45:31.410
Also wir erklären das jetzt kurz nochmal, wie man das macht, wenn man jetzt so Hunden- und Katzenbilder hat.

00:45:31.410 --> 00:45:36.390
Und, äh, ja, wie man die dann auch versuchen will, von einer Hand zu unterscheiden.

00:45:36.390 --> 00:45:39.450
Und wie man dann die Maschine dazu bringt, dass sie das versteht, was da passiert.

00:45:39.450 --> 00:45:42.010
Weil, ähm, wie man sich vielleicht vorstellen kann, Hunde und Katzen sind unterschiedliche.

00:45:42.730 --> 00:45:45.470
Tiere zwar, aber, ähm, die sehen vielleicht doch schon ganz schön ähnlich aus.

00:45:45.470 --> 00:45:49.290
Und vor allem, wenn die irgendwie halb verdeckt sind oder so von, ähm, gelangt oder in irgendeine Kiste reinhüpfen.

00:45:49.290 --> 00:45:56.490
Also wir nehmen das, das einfachste Problem sozusagen, ähm, was wir, äh, was wir haben.

00:45:56.490 --> 00:45:59.230
Nämlich binäre Klassifikationen, nur jetzt die Klassen sind Hunde und Katzen.

00:45:59.230 --> 00:46:06.950
Ähm, es gibt, ähm, so ein, so ein, so ein Dataset, äh, irgendwie das mal in der Kegel-Competition verwendet worden ist.

00:46:06.950 --> 00:46:12.170
Ähm, 20.000 Hunde, 20.000 Katzen oder 10.000 Hunde, 10.000 Katzen, ich weiß nicht genau.

00:46:12.710 --> 00:46:18.830
Aber wir nehmen nur, äh, 1.000 Hunde, 1.000 Katzen und nochmal 1.000, also 500 Hunde, 500 Katzen.

00:46:18.830 --> 00:46:24.010
Also ein, ein Trainingsset, ein Testset und ein Validationsset, äh, äh, daraus.

00:46:24.010 --> 00:46:27.430
Und das ist im gleichen, äh, äh, ja.

00:46:27.430 --> 00:46:29.330
Warum nehmen wir nicht dann alle 10.000, Jochen?

00:46:29.330 --> 00:46:32.470
Ja, weil das so lange dauern würde, das wäre irgendwie nicht, nicht gut.

00:46:32.470 --> 00:46:40.370
Ä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.

00:46:40.370 --> 00:46:41.730
Äh, das ist so ein bisschen blöd.

00:46:41.730 --> 00:46:42.350
Man braucht so ein bisschen Spaß.

00:46:42.370 --> 00:46:45.310
Also mit der 1.080 kann ich aber schon ein bisschen was rechnen.

00:46:45.310 --> 00:46:47.590
Jaja, also das, das wäre schon sehr gut.

00:46:47.590 --> 00:46:53.250
Aber viele Leute haben ja vielleicht auch jetzt keine, äh, keine GPU irgendwie, äh, zu Hause direkt.

00:46:53.250 --> 00:46:55.090
Glück, wenn man Computerspiele mag.

00:46:55.090 --> 00:46:59.890
Ja, aber da muss man auch immer diesen ganzen Kram installieren und so und das ist auch alles nicht so richtig einfach.

00:46:59.890 --> 00:47:09.050
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.

00:47:09.050 --> 00:47:10.890
Mit welchem Modul kann man die Grafikkarte benutzen?

00:47:11.810 --> 00:47:16.050
Jaja, das ist, äh, man muss erstmal das Betriebssystem dazu kriegen, dass das ordentlich funktioniert.

00:47:16.050 --> 00:47:23.710
Dann braucht man halt irgendwie, äh, die NVIDIA-Bibliotheken da unten drunter, also QDNN und, äh, CUDA und so.

00:47:23.710 --> 00:47:34.010
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.

00:47:34.450 --> 00:47:46.990
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?

00:47:46.990 --> 00:47:50.050
Also, äh, die, die diverse, diverse Geschichten.

00:47:50.050 --> 00:48:04.030
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.

00:48:04.130 --> 00:48:07.790
Hat die gleiche API wie, ähm, bei den anderen Scikit-Learn, äh, Modellen.

00:48:07.790 --> 00:48:10.030
Und, ähm.

00:48:10.030 --> 00:48:16.370
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.

00:48:16.370 --> 00:48:17.690
Mit oder bei SIX.

00:48:17.690 --> 00:48:22.610
Äh, aber das, äh, also kann ich vorwarnen, es wird böse Überraschungen geben, das ist nicht so einfach.

00:48:22.610 --> 00:48:24.390
Das ist alles ziemlich schwierig.

00:48:24.390 --> 00:48:26.110
Oder du kannst es ja mal bei dir ausprobieren.

00:48:26.110 --> 00:48:27.710
Ja, ich muss sagen, das werde ich auf jeden Fall tun.

00:48:27.710 --> 00:48:28.030
Ja.

00:48:28.030 --> 00:48:29.790
Und werde berichten.

00:48:29.790 --> 00:48:30.730
Genau.

00:48:30.730 --> 00:48:33.990
Ähm, äh, man kann das auch inzwischen, äh.

00:48:33.990 --> 00:48:34.110
Äh.

00:48:34.130 --> 00:48:37.030
Ich hab das auf meinem, ich hab so, äh, ich hab so ein Faible für Apple.

00:48:37.030 --> 00:48:37.970
Ich bin so ein Apple-Jünger.

00:48:37.970 --> 00:48:43.050
Äh, und, ähm, leider wird mir ja keine NVIDIA-GPUs mehr verbaut.

00:48:43.050 --> 00:48:44.330
Daher funktioniert das alles nicht mehr so richtig.

00:48:44.330 --> 00:48:49.790
Es gibt aber, ähm, da auch so ein Projekt ist, sollte man auch noch nie, muss ich auch noch nie Shownotes packen, äh, PlateML.

00:48:49.790 --> 00:48:55.810
Ähm, damit kann man, äh, die, die AMD-GPUs, die ja darin sind, äh, benutzen.

00:48:55.810 --> 00:49:01.530
Äh, äh, es gibt ja die Abstraktion von Apple selber, Metal heißt die irgendwie, wenn man die benutzt.

00:49:01.530 --> 00:49:03.330
Dann ist das auch schon recht schnell.

00:49:03.330 --> 00:49:04.110
Also, sozusagen die.

00:49:04.130 --> 00:49:19.430
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.

00:49:19.430 --> 00:49:20.510
Wusch.

00:49:20.510 --> 00:49:26.190
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.

00:49:26.190 --> 00:49:31.110
Äh, kommt halt drauf an, was man für CPUs und GPUs hat, aber so eine Größenordnung mindestens mal.

00:49:31.110 --> 00:49:34.110
Und, ähm, genau, wenn man jetzt keine GPU hat.

00:49:34.130 --> 00:49:41.310
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.

00:49:41.310 --> 00:49:47.090
Und das wäre dann jetzt, äh, wenn man eine CPU verwenden würde, so mindestens mal ungefähr eine Stunde.

00:49:47.090 --> 00:49:49.490
Ja, das ist halt, da macht das dann schon keinen Spaß mehr.

00:49:49.490 --> 00:49:57.050
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.

00:49:57.050 --> 00:49:58.610
Vielleicht irgendwie nicht jedermanns Sache.

00:49:58.610 --> 00:50:02.610
Ähm, und, ähm.

00:50:04.130 --> 00:50:26.430
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.

00:50:26.430 --> 00:50:33.430
Man kann bei, äh, Colab auch, äh, Notebooks direkt aus dem Git, GitHub, äh, irgendwie, äh.

00:50:34.130 --> 00:50:34.810
Äh, ausführen.

00:50:34.810 --> 00:50:37.030
Und das ist natürlich ganz praktisch.

00:50:37.030 --> 00:50:41.550
Man muss nur unter Edit, äh, äh, Notebook Settings, äh, GPU anwählen.

00:50:41.550 --> 00:50:51.450
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.

00:50:51.450 --> 00:50:52.730
Das liegt bei mir irgendwie auf dem S3-Ding.

00:50:52.730 --> 00:50:57.850
Und, ähm, ja, dann werden halt auch diese Samples da rausgezogen.

00:50:57.850 --> 00:51:03.970
Ähm, und wenn man das getan hat, das, da muss man auch schon die GPU aktivieren.

00:51:03.970 --> 00:51:05.210
Damit das auf der gleichen Maschine bleibt.

00:51:05.210 --> 00:51:14.890
Ä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.

00:51:14.890 --> 00:51:25.510
Und, ähm, ja, dann halt so ein kleines, äh, ja, convolutional Deep Learning, äh, Netz, äh, irgendwie trainieren.

00:51:26.930 --> 00:51:34.610
Ähm, ja, also das Beispiel ist auch aus dem Buch, äh, Deep Learning with Python von, äh, von, äh, François Collet.

00:51:34.610 --> 00:51:37.470
Das ist, äh, der Autor von Keras und, äh, wir arbeiten bei Google.

00:51:37.470 --> 00:51:42.830
Ähm, ja, das sind sehr, das sind sehr, sehr schöne Beispiele, die da drin sind.

00:51:42.830 --> 00:51:50.930
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.

00:51:50.930 --> 00:51:56.610
Ähm, und, ähm, ja.

00:51:56.770 --> 00:52:26.750
Ähm, ja, dann, äh, wir fangen halt an, das Modell wieder von Anfang an zu trainieren.

00:52:26.750 --> 00:52:31.570
Das ist halt schon so ein Bereich, wo das halt für, äh, mit CPU, äh, irgendwie zu trainieren schon relativ knackig wird.

00:52:31.570 --> 00:52:38.170
Ähm, dann nimmt man halt eben für, äh, dann legt man noch die, äh, die Verlustfunktion fest.

00:52:38.170 --> 00:52:40.430
Das wäre an der Stelle Binary Cross-Entropy.

00:52:40.430 --> 00:52:46.830
Das ist einfach nur Log-Loss, äh, kann man auch einfach nachgoogeln, dann weiß man, was das für eine Verlustfunktion ist.

00:52:46.830 --> 00:52:56.450
Ä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.

00:52:56.750 --> 00:53:02.630
Ähm, und, ähm, legt halt noch den, äh, äh, sozusagen Optimierungsalgorithmus fest.

00:53:02.630 --> 00:53:12.250
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.

00:53:12.250 --> 00:53:17.270
Ich weiß auch nicht, wie groß ImageNet ist, aber irgendwie so 140 Gigabyte oder ich weiß, das ist aber jedenfalls schon recht groß.

00:53:17.270 --> 00:53:19.050
Das kriegt man nicht mehr so...

00:53:19.050 --> 00:53:20.750
Im Hauptspeicher nicht über 140 Gigabyte groß?

00:53:20.750 --> 00:53:25.750
Doch, kriegt, gibt's schon, sind wahrscheinlich Maschinen, das, äh, hab ich das, äh, ähm, äh...

00:53:26.750 --> 00:53:31.290
Falsch, ich hab, kann sein, dass ich total einen Blödsinn gerade erzählt habe, wie groß ist ImageNet?

00:53:31.290 --> 00:53:32.370
Das müssen wir schnell kontrollieren.

00:53:32.370 --> 00:53:36.050
Das müssen wir gut, gut nachkontrollieren, äh...

00:53:36.050 --> 00:53:37.730
Größe, ImageNet-Size.

00:53:37.730 --> 00:53:42.390
Ja, hab ich grad nachgesucht, Google hat einen Wikipedia-Artikel gefunden, steht nicht drin.

00:53:42.390 --> 00:53:45.070
Hm.

00:53:45.070 --> 00:53:49.270
Ja, egal, also, äh, ist wahrscheinlich auf jeden Fall, äh, sehr, sehr groß.

00:53:49.270 --> 00:53:56.230
Und, ähm, äh, ja, man, man arbeitet halt dann bei Bildern meistens mit so, äh...

00:53:56.750 --> 00:53:59.310
Generatoren, das ist ja auch sowieso eine schöne Idee, wenn man...

00:53:59.310 --> 00:54:00.790
154 Gigabyte.

00:54:00.790 --> 00:54:06.190
Ah, ja, okay, also so schlimm ist es nicht, aber, äh, ja, hat man wahrscheinlich auch nicht unbedingt zu Hause.

00:54:06.190 --> 00:54:14.050
Und, ähm, diese, äh, äh, ImageDataGenerator-Klasse abstrahiert das sozusagen weg und man iteriert sozusagen über die Bilder,

00:54:14.050 --> 00:54:16.410
ohne dass man den ganzen Kram immer im Hauptspeicher halten muss.

00:54:16.410 --> 00:54:22.150
Ähm, und sagt dann halt, okay, hier sind Trainingsdaten, da sind die, äh, Validationsdaten.

00:54:22.150 --> 00:54:26.610
Validationsdaten, wer das benutzt, auch während der Trainingszeit schon anzuzeigen,

00:54:27.010 --> 00:54:31.210
wie gut das Modell momentan, äh, performt, sozusagen, auf Daten, die man halt noch nicht gesehen hat.

00:54:31.210 --> 00:54:34.830
Äh, und am Schluss rechnet man halt den Score aus auf dem Testset.

00:54:34.830 --> 00:54:39.010
Das ist auch so eine ganz wichtige Geschichte, das hatten wir gestern nicht, da haben wir einfach Training und Test genommen.

00:54:39.010 --> 00:54:45.070
Aber, ähm, eigentlich muss man noch eine dritte Kategorie haben, man muss halt, äh, irgendwie ein Trainingsset haben,

00:54:45.070 --> 00:54:52.230
man muss ein Set haben, auf dem man, äh, validiert, also vielleicht schon während man, äh, irgendwie ein Modell trainiert,

00:54:52.230 --> 00:54:54.070
sieht, äh, geht das jetzt in die richtige Richtung oder nicht.

00:54:54.070 --> 00:54:56.670
Und auf dem man halt auch Überparameter.

00:54:56.750 --> 00:55:01.410
Das kann man wieder, äh, über Optimierung machen, aber das sollte man eben nicht auf dem Testset machen, sonst overfittet man das Testset.

00:55:01.410 --> 00:55:07.610
Und man kann halt, äh, sehen, dass man overfittet, wenn man auf dem Validationsset immer bessere Resultate erreicht

00:55:07.610 --> 00:55:12.710
und dann aber das nicht, sozusagen, auf dem Testset reproduziert werden kann.

00:55:12.710 --> 00:55:16.970
Das kann man wieder, tatsächlich, am besten, wenn man das wieder visualisiert, also, wenn man irgendwie kurz und plottet.

00:55:16.970 --> 00:55:22.450
Also, wenn man, wenn man das jetzt hier, äh, mal fittet, das Modell, dann kriegt man eben viele progressbare Geschichten angezeigt,

00:55:22.450 --> 00:55:26.730
das sind, ähm, läuft über 30 Epochen, das bedeutet, 30 Mal geht man über das Modell.

00:55:26.750 --> 00:55:27.710
Das komplette Set drüber.

00:55:27.710 --> 00:55:30.110
Und, ähm, ja, man sieht dann halt...

00:55:30.110 --> 00:55:31.350
Oh, jetzt warst du wieder mit TQDM.

00:55:31.350 --> 00:55:33.350
Genau, äh, nee, das ist nicht TQDM.

00:55:33.350 --> 00:55:33.850
Nein, die ist mir nicht.

00:55:33.850 --> 00:55:35.030
Das ist irgendwie bei Keras eingebaut.

00:55:35.030 --> 00:55:35.530
Ach so.

00:55:35.530 --> 00:55:41.350
Aber man sieht halt, sozusagen, wie sich da, äh, die Accuracy, die hier als, äh, Maß für den Fehler genommen wird,

00:55:41.350 --> 00:55:46.730
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,

00:55:46.730 --> 00:55:53.350
glaube ich, gleich viele Elemente, dann weiß man halt, 50 Prozent ist halt Zufall und wenn man, äh, irgendwie da von Richtung Eins geht,

00:55:53.350 --> 00:55:55.270
dann ist das gut und je näher an Eins, desto besser.

00:55:55.270 --> 00:55:56.730
Ähm...

00:55:56.750 --> 00:56:02.370
Und man sieht auch, dass das auf den Trainingsdaten halt passiert und, äh, auf den Validationsdaten auch,

00:56:02.370 --> 00:56:05.610
die man halt eben nicht in den Trainingsdaten hat, aber halt nicht so stark.

00:56:05.610 --> 00:56:12.950
Und irgendwann geht der, äh, geht die Accuracy auf dem Validation-Set nicht mehr weiter hoch, auf dem Training-Set aber schon.

00:56:12.950 --> 00:56:17.590
Und, ähm, das kann man sich auch irgendwie dann, äh, mal rausplotten.

00:56:17.590 --> 00:56:23.690
Und man sieht dann halt, äh, irgendwie, sozusagen, ja, das als, äh, als...

00:56:23.690 --> 00:56:26.110
Eine lineare Kurve und eine, die fällt dann so irgendwann so ein bisschen ab.

00:56:26.110 --> 00:56:26.250
Ja.

00:56:26.750 --> 00:56:27.910
Auf der X-Achse sieht man halt, wie, wie, wie...

00:56:27.910 --> 00:56:29.310
Entfernen sich so ein bisschen voneinander.

00:56:29.310 --> 00:56:45.330
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.

00:56:45.330 --> 00:56:56.710
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...

00:56:56.710 --> 00:57:01.170
Auf den, äh, auf den, äh, Validationsdaten und der Grund dafür ist...

00:57:01.170 --> 00:57:05.630
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?

00:57:05.630 --> 00:57:18.770
Ä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.

00:57:20.070 --> 00:57:30.830
Ä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.

00:57:30.830 --> 00:57:50.030
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...

00:57:50.030 --> 00:57:54.170
Das hilft einem gar nicht bei neuen Daten, sondern macht das Ergebnis eigentlich nur noch schlechter.

00:57:54.170 --> 00:57:56.410
Weil man halt quasi die Trainingsdaten auswendig lernt.

00:57:56.410 --> 00:58:09.050
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.

00:58:09.050 --> 00:58:19.410
Es kann sein, dass, ähm, das Modell halt nicht, äh, äh, hinreichend, äh, quasi Maß, dass man da nicht hinreichend Regularisierungsmaßnahmen gegen Overfitting...

00:58:19.990 --> 00:58:27.410
...getroffen hat. Also bei neuronalen Netzen wäre das Dropout. Man kann aber auch irgendwie für die Parameter halt, äh, irgendwie sagen, dass...

00:58:27.410 --> 00:58:28.750
Entschuldigung, was ist Dropout?

00:58:28.750 --> 00:58:40.230
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.

00:58:40.230 --> 00:58:49.750
Äh, und, äh, zwingt damit sozusagen das Netz nicht nur, äh, also, ja, da, da schon generellere Geschichten...

00:58:49.950 --> 00:58:55.810
...gelernt zu haben, weil es muss halt auch funktionieren mit, wenn halt ein Teil davon nicht mehr funktioniert, sozusagen.

00:58:55.810 --> 00:59:05.830
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.

00:59:05.830 --> 00:59:16.230
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.

00:59:16.230 --> 00:59:19.910
Und in dem Sinne wirkt es halt, äh, äh, Overfitting entgegen.

00:59:19.910 --> 00:59:39.890
Ä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.

00:59:39.890 --> 00:59:41.930
Und, ähm, sagt halt, das ist nicht gut.

00:59:41.930 --> 00:59:49.290
Das sollten immer möglichst kleine Werte sein und, ähm, das regularisiert auch, es gibt halt die unterschiedlichsten Arten, wie man das hinkriegt.

00:59:49.870 --> 01:00:00.230
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.

01:00:00.230 --> 01:00:09.250
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.

01:00:09.950 --> 01:00:26.490
Ä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,

01:00:26.490 --> 01:00:30.660
dass man, dass der Training-Error halt irgendwie

01:00:30.660 --> 01:00:35.020
ja sozusagen

01:00:35.020 --> 01:00:38.660
und das Training-Error und Validation-Error

01:00:38.660 --> 01:00:41.780
beide noch relativ stark

01:00:41.780 --> 01:00:46.580
beieinander liegen, aber halt hoch sind und dann kann es halt sein, dass man

01:00:46.580 --> 01:00:51.020
underfittet, also das kann dann passieren, wenn das Modell zu einfach ist, was man benutzt

01:00:51.020 --> 01:00:53.860
also wenn zum Beispiel, wenn die Daten irgendwie

01:00:53.860 --> 01:00:58.560
verteilt sind in einer Parabel, aber man legt halt eine Gerade durch oder so, dann hat man

01:00:58.560 --> 01:01:02.460
einen zu großen Bias im Modell, dadurch, dass es halt vielleicht zu einfach ist

01:01:02.460 --> 01:01:06.660
man geht halt davon aus, dass es sich irgendwie durch eine Gerade darstellen lässt, das ist aber nicht so

01:01:06.660 --> 01:01:10.940
dann underfittet man halt, oder in dem Fall wäre das

01:01:10.940 --> 01:01:13.100
halt, ja

01:01:13.100 --> 01:01:17.480
wenn man jetzt

01:01:17.480 --> 01:01:21.760
sozusagen einfach zu wenig Trainingsepochen

01:01:21.760 --> 01:01:23.740
nehmen würde, man würde jetzt einfach nur einmal über die

01:01:23.740 --> 01:01:25.220
Training- oder zweimal über die Trainingsdaten gehen

01:01:25.220 --> 01:01:29.860
dann wäre zwar der Validation-Error nicht viel schlimmer

01:01:29.860 --> 01:01:31.640
als der Trainings-Error, aber

01:01:31.640 --> 01:01:33.900
man wäre nicht bei einem optimalen

01:01:33.900 --> 01:01:35.940
Ergebnis einfach deswegen, weil man noch nicht lange genug

01:01:35.940 --> 01:01:37.720
die Parameter optimiert hat und hätte

01:01:37.720 --> 01:01:38.800
sozusagen das

01:01:38.800 --> 01:01:40.900
Problem underfittet

01:01:40.900 --> 01:01:42.660
und zwischen

01:01:42.660 --> 01:01:45.780
underfitting und overfitting gibt es halt irgendwo

01:01:45.780 --> 01:01:47.440
einen Bereich, der optimal ist und man muss halt

01:01:47.440 --> 01:01:48.420
versuchen, den zu treffen

01:01:48.420 --> 01:01:51.820
und dann gibt es da auch immer noch so einen Unterschied

01:01:51.820 --> 01:01:53.620
zwischen Training

01:01:53.620 --> 01:01:55.460
Trainings- und Validation-Error

01:01:55.460 --> 01:01:57.800
den man nicht wegkriegt

01:01:57.800 --> 01:01:59.540
das ist so ein

01:01:59.540 --> 01:02:03.000
irreduzierbarer

01:02:03.000 --> 01:02:05.920
Fehler, der halt vielleicht daherkommt, dass es da Rauschen gibt

01:02:05.920 --> 01:02:07.620
vielleicht, dass es irgendwie nicht geht

01:02:07.620 --> 01:02:10.820
ja, also

01:02:10.820 --> 01:02:13.660
die overfitting und underfitting

01:02:13.660 --> 01:02:15.600
Geschichten bekommt man halt irgendwie, wenn man das

01:02:15.600 --> 01:02:17.600
richtig macht, in den Griff, aber es gibt halt

01:02:17.600 --> 01:02:19.740
auch immer einen Unterschied zwischen Trainings-

01:02:19.740 --> 01:02:21.560
und Validations-Error, den man nicht wegbekommt

01:02:21.560 --> 01:02:23.500
ja

01:02:23.500 --> 01:02:25.420
aber das halt voneinander unterscheiden zu können

01:02:25.420 --> 01:02:27.360
ist relativ wichtig, weil wenn man sich jetzt an dem Fehler

01:02:27.360 --> 01:02:29.340
abarbeitet, den man nicht wegbekommt, dann ist das halt sinnlos

01:02:29.340 --> 01:02:31.700
und wenn man irgendwie

01:02:31.700 --> 01:02:33.400
denkt, man ist fertig

01:02:33.400 --> 01:02:35.600
und hat aber einen der Fehler, die man eigentlich noch

01:02:35.600 --> 01:02:37.160
wegoptimieren kann, dann

01:02:37.160 --> 01:02:39.280
kommt man halt auch nicht zum

01:02:39.280 --> 01:02:41.900
bestmöglichen Ergebnis

01:02:41.900 --> 01:02:42.220
genau

01:02:42.220 --> 01:02:43.800
ja

01:02:43.800 --> 01:02:49.580
genau, damit haben wir das eigentlich im Grunde

01:02:49.580 --> 01:02:51.280
schon so halbwegs

01:02:51.280 --> 01:02:53.380
ja, also ich glaube, das wäre dann

01:02:53.380 --> 01:02:55.300
dann wieder Zeit für einen Chat von Marc, weil die Frage ist, was

01:02:55.300 --> 01:02:57.440
fällt dir denn noch so ein, außer dem Deep Learning

01:02:57.440 --> 01:02:59.300
was wir auf jeden Fall nochmal machen wollen, aber was wir wahrscheinlich in der

01:02:59.300 --> 01:03:00.340
eigenen Folge irgendwie besprechen

01:03:00.340 --> 01:03:02.460
ja, also

01:03:02.460 --> 01:03:05.360
was ich

01:03:05.360 --> 01:03:06.680
noch, genau

01:03:06.680 --> 01:03:13.340
ja genau, was ich auf jeden Fall noch

01:03:13.340 --> 01:03:15.480
erzählen würde, nach dem Beispiel

01:03:15.480 --> 01:03:17.060
ist, warum

01:03:17.060 --> 01:03:18.920
Deep

01:03:18.920 --> 01:03:20.180
Learning

01:03:20.180 --> 01:03:23.260
auch auf

01:03:23.260 --> 01:03:24.620
kleineren Datensätzen funktioniert

01:03:24.620 --> 01:03:27.240
ok

01:03:27.240 --> 01:03:28.960
ja, was sind

01:03:28.960 --> 01:03:30.640
dann da kleinere Datensätze?

01:03:30.640 --> 01:03:33.060
ja, eben sowas wie das, was wir hier haben

01:03:33.060 --> 01:03:35.200
also tausend, zehntausend

01:03:35.200 --> 01:03:36.940
bis tausend Datensätze, ja genau, also

01:03:36.940 --> 01:03:39.400
groß ist halt sowas, also da funktioniert es ja gut

01:03:39.400 --> 01:03:41.120
das weiß man ja, ImageNet, aber das sind

01:03:41.120 --> 01:03:42.780
anderthalb Millionen Bilder, jetzt könnte man auf die Idee kommen

01:03:42.780 --> 01:03:43.860
so sagen, ok

01:03:43.860 --> 01:03:47.300
so viele Bilder habe ich leider

01:03:47.300 --> 01:03:48.920
nicht für mein Problem, ja, ich möchte jetzt irgendwie

01:03:48.920 --> 01:03:51.080
keine Ahnung, irgendwie das praktisch

01:03:51.080 --> 01:03:52.180
anwenden und

01:03:52.180 --> 01:03:53.140
ähm

01:03:53.140 --> 01:03:54.960
ich möchte jetzt aber nicht Hunde von Katzen

01:03:54.960 --> 01:03:56.080
unterscheiden, oder

01:03:56.080 --> 01:03:58.960
irgendwie Tische

01:03:58.960 --> 01:04:00.100
in Bildern finden, sondern

01:04:00.100 --> 01:04:02.900
ich habe das Problem, ich

01:04:02.900 --> 01:04:05.140
mache jetzt, weiß ich nicht

01:04:05.140 --> 01:04:06.920
äh

01:04:06.920 --> 01:04:08.660
bin in einer Müllverbrennungsanlage, oder so

01:04:08.660 --> 01:04:10.880
an einem Platz, wo ganz viel Müll angeliefert wird, und ich möchte jetzt

01:04:10.880 --> 01:04:12.300
irgendwie den Müll auseinandersortieren

01:04:12.300 --> 01:04:14.900
und das sind halt alles Klassen, also ich möchte jetzt

01:04:14.900 --> 01:04:16.840
zum Beispiel feststellen, ist das eine Plastikflasche, oder

01:04:16.840 --> 01:04:18.340
ist das halt irgendwie was anderes, ist Glas

01:04:18.340 --> 01:04:19.500
Plastikflasche mit einem Hundeetikett

01:04:19.500 --> 01:04:22.980
ja, also meine Klassen sind halt anders, die sind in dem ImageNet

01:04:22.980 --> 01:04:24.180
Dataset so nicht drin

01:04:24.180 --> 01:04:26.920
äh, und dann kann ich denken, ok, dann muss ich

01:04:26.920 --> 01:04:28.740
jetzt erst anderthalb Millionen Bilder sammeln, hm

01:04:28.740 --> 01:04:30.820
blöd, das kriege ich vielleicht nicht hin, und ich kann die auch nicht

01:04:30.820 --> 01:04:32.220
labeln, das ist alles irgendwie

01:04:32.220 --> 01:04:34.000
nicht wirklich handhabbar für mich

01:04:34.000 --> 01:04:36.900
ähm, dann kann ich halt denken, ok

01:04:36.900 --> 01:04:38.780
Deep Learning ist nichts für mich, das funktioniert alles nicht

01:04:38.780 --> 01:04:40.600
äh, ich lasse weiter, dass irgendwie

01:04:40.600 --> 01:04:42.860
äh, ein Eurojobber

01:04:42.860 --> 01:04:44.680
und die sortieren das dann von Hand, oder so

01:04:44.680 --> 01:04:46.780
ähm, aber

01:04:46.780 --> 01:04:48.840
nein, man kann tatsächlich da was machen

01:04:48.840 --> 01:04:50.780
und zwar, äh

01:04:50.780 --> 01:04:52.860
braucht man gar nicht so viel

01:04:52.860 --> 01:04:54.600
Beispiele, man kann nämlich

01:04:54.600 --> 01:04:56.620
die, äh, vortrainierten

01:04:56.620 --> 01:04:58.320
Modelle, äh, einfach benutzen

01:04:58.320 --> 01:05:00.520
so, die wurden dann halt auf ImageNet

01:05:00.520 --> 01:05:02.540
äh, äh, trainiert

01:05:02.540 --> 01:05:04.660
und geht halt dann davon aus,

01:05:04.660 --> 01:05:06.540
dass, äh, sozusagen ein Großteil

01:05:06.540 --> 01:05:08.500
von dem, was unsere, ja, visuelle

01:05:08.500 --> 01:05:10.840
Realität ausmacht, dann da schon

01:05:10.840 --> 01:05:12.120
irgendwie

01:05:12.120 --> 01:05:14.740
ordentlich trainiert worden ist, äh, sozusagen

01:05:14.740 --> 01:05:16.480
also, Feature-Extraktion

01:05:16.480 --> 01:05:18.340
aus Bildern hat dann

01:05:18.340 --> 01:05:20.700
funktioniert damit halt schon ziemlich gut, und das, äh

01:05:20.700 --> 01:05:22.060
diese Annahme wird wahrscheinlich halten

01:05:22.740 --> 01:05:24.580
und dann, ähm

01:05:24.580 --> 01:05:26.860
trainiert man halt ein eigenes Modell

01:05:26.860 --> 01:05:29.060
was aber nur die von

01:05:29.060 --> 01:05:30.220
einem

01:05:30.220 --> 01:05:32.860
Deep Learning Modell, das auf ImageNet trainiert wurde

01:05:32.860 --> 01:05:35.040
äh, äh, generiert worden, also man

01:05:35.040 --> 01:05:36.800
man nimmt sozusagen, also bei den

01:05:36.800 --> 01:05:39.300
Deep Learning Modellen, die auf ImageNet

01:05:39.300 --> 01:05:40.860
trainiert wurden, ist halt so der Let's Layer, zum Beispiel der

01:05:40.860 --> 01:05:42.840
Klassifikationslayer, der da sind halt in die tausend

01:05:42.840 --> 01:05:45.080
das ist halt nochmal ein dichter Layer, und danach

01:05:45.080 --> 01:05:46.920
sind nochmal tausend Ausgabeneuronen, die halt

01:05:46.920 --> 01:05:48.960
dann die tausend Klassen von ImageNet darstellen

01:05:48.960 --> 01:05:51.080
und dann bei jedem Ding kommt halt

01:05:51.080 --> 01:05:53.180
eine Wahrscheinlichkeit raus, sozusagen, dafür, dass es in der Klasse

01:05:53.180 --> 01:05:53.400
liegt

01:05:53.400 --> 01:05:57.100
und diese beiden Dinger nimmt man einfach weg, also den

01:05:57.100 --> 01:05:59.180
Klassifikationslayer, äh, und

01:05:59.180 --> 01:06:01.160
ähm, nimmt nur das, was dabei

01:06:01.160 --> 01:06:03.220
rauskommt, wenn man jetzt, jetzt wirft man halt ein Bild

01:06:03.220 --> 01:06:04.920
von einer Plastikflasche oben rein, und dann

01:06:04.920 --> 01:06:07.120
kommt halt das raus, was jetzt normalerweise dann als

01:06:07.120 --> 01:06:09.080
Elefant oder Hund klassifiziert würde

01:06:09.080 --> 01:06:10.320
so, ein, ein

01:06:10.320 --> 01:06:13.140
Feature-Vector, das ist an der Stelle noch nicht ein Vector, das ist halt ein Tensor

01:06:13.140 --> 01:06:15.240
der irgendwie so ein bisschen anders aussieht, den klopft man dann halt

01:06:15.240 --> 01:06:17.240
flach, irgendwie so in einen Vector

01:06:17.240 --> 01:06:19.280
einmal mit der großen Küchenrolle drüber

01:06:19.280 --> 01:06:20.960
genau, und dann hat man halt so einen

01:06:20.960 --> 01:06:23.260
Feature-Vector extrahiert, und das

01:06:23.260 --> 01:06:25.240
macht man halt mit allen Bildern, die man hat, vielleicht hat man halt nur so

01:06:25.240 --> 01:06:27.360
tausend, aber tausend kann man durchaus sammeln, das, das geht

01:06:27.360 --> 01:06:29.200
äh, und halt

01:06:29.200 --> 01:06:31.200
oder tausend für jede Klasse,

01:06:31.200 --> 01:06:31.840
die man halt hat

01:06:31.840 --> 01:06:35.320
und, ähm, dann trainiert man einen eigenen

01:06:35.320 --> 01:06:37.320
Klassifikationslayer, sozusagen

01:06:37.320 --> 01:06:38.900
ein eigenes Modell auf diesen Features

01:06:38.900 --> 01:06:40.300
mhm, mhm

01:06:40.300 --> 01:06:43.260
und dann, äh, kommt man

01:06:43.260 --> 01:06:45.220
damit auf, auch gar nicht

01:06:45.220 --> 01:06:47.080
so schlechte Ergebnisse, äh,

01:06:47.080 --> 01:06:48.740
und hat sozusagen das Deep-Learning

01:06:48.740 --> 01:06:50.840
äh, äh, Modell nur zur Feature-Extraktion

01:06:50.840 --> 01:06:53.020
benutzt, also das ist halt ein, das ist ein super

01:06:53.020 --> 01:06:55.040
billiges Verfahren, also das, damit

01:06:55.040 --> 01:06:57.020
kommt man schon in Bereiche, in die man früher nie gekommen wäre

01:06:57.020 --> 01:06:59.360
ähm, mit wenig Trainingsdaten

01:06:59.360 --> 01:07:01.060
einfach deswegen, weil man sich halt viel

01:07:01.060 --> 01:07:02.120
viel von dem

01:07:02.120 --> 01:07:05.180
von der Generalisierungs-Power oder der Fischer-Extraktions

01:07:05.180 --> 01:07:06.980
äh, äh, Geschichte, die halt, äh,

01:07:06.980 --> 01:07:09.240
auf einem Image-netrainierten Modell, was da halt drinsteckt

01:07:09.240 --> 01:07:11.020
irgendwie sozusagen transferieren kann auf das Problem,

01:07:11.020 --> 01:07:12.880
was man hat. Ja, also ich denke mal, diese Daten können wir relativ

01:07:12.880 --> 01:07:14.960
einfach sammeln, ihr stellt euch einfach mal eure Kamera da zu dem

01:07:14.960 --> 01:07:17.200
Unternehmen, wo ihr das einführen wollt, müsst halt pro Kategorie

01:07:17.200 --> 01:07:18.920
tausend Fotos aus verschiedenen, äh,

01:07:18.920 --> 01:07:20.600
Perspektiven schießen und schon wisst ihr, was da passiert.

01:07:20.720 --> 01:07:23.680
Ja, genau, genau, also

01:07:23.680 --> 01:07:24.800
das ist immer noch nicht einfach.

01:07:24.800 --> 01:07:25.780
Ja, aber das ist halt, ne?

01:07:25.780 --> 01:07:29.140
Aber das wird dann alles, kommt in den

01:07:29.140 --> 01:07:30.920
machbaren Bereich. Ein Verfahren, was noch

01:07:30.920 --> 01:07:33.200
besser funktioniert, ist, äh,

01:07:33.200 --> 01:07:34.860
ähm, das nennt sich

01:07:34.860 --> 01:07:37.040
Feintuning, da nimmt man halt so ein Modell,

01:07:37.040 --> 01:07:38.800
äh, so ein Deep Learning-Modell und sagt halt,

01:07:38.800 --> 01:07:40.220
okay, ähm,

01:07:40.220 --> 01:07:43.020
ich nehme jetzt den obersten Klassifikations-Layer

01:07:43.020 --> 01:07:44.820
oder vielleicht noch ein paar von den Layern

01:07:44.820 --> 01:07:46.520
mit den abstraktesten Features, vielleicht ist, wenn ich

01:07:46.520 --> 01:07:47.680
Plastikflaschen erkennen will,

01:07:47.680 --> 01:07:50.520
gar nicht so relevant, ob da jetzt Fell drauf ist,

01:07:50.600 --> 01:07:52.320
oder nicht, ja, weil die haben halt kein Fell,

01:07:52.320 --> 01:07:54.400
aber ich möchte jetzt zwei Arten von Plastikflaschen

01:07:54.400 --> 01:07:56.160
unterscheiden, da ist halt vielleicht was anderes wichtig.

01:07:56.160 --> 01:07:59.040
Das heißt, man nimmt einige der abstraktesten

01:07:59.040 --> 01:08:00.400
Layer, äh,

01:08:00.400 --> 01:08:02.560
oder Layer, die halt die abstraktesten Features detektieren,

01:08:02.560 --> 01:08:04.460
die, ähm,

01:08:04.460 --> 01:08:06.140
macht man trainierbar,

01:08:06.140 --> 01:08:07.840
den Rest von dem Modell, also die ganzen

01:08:07.840 --> 01:08:10.600
Layer, die halt so eher einfache

01:08:10.600 --> 01:08:12.560
Sachen, äh, detektieren,

01:08:12.560 --> 01:08:14.100
die friert man ein.

01:08:14.100 --> 01:08:16.420
Dann kann man in Keras einfach sagen, so, diese

01:08:16.420 --> 01:08:18.360
Layer sind alle eingefroren, die ändern sich beim Training

01:08:18.360 --> 01:08:20.480
nicht, und nur die obersten paar

01:08:20.480 --> 01:08:21.640
Layer dürfen sich halt ändern.

01:08:21.640 --> 01:08:23.700
Und dann trainiert man neu.

01:08:23.700 --> 01:08:26.220
Das ist halt wieder ein bisschen aufwendiger, weil man halt

01:08:26.220 --> 01:08:28.260
viel mehr Parameter halt finden muss.

01:08:28.260 --> 01:08:30.420
Aber das funktioniert dann noch viel

01:08:30.420 --> 01:08:32.420
besser, und damit kommt man dann schon so in die Region von

01:08:32.420 --> 01:08:34.360
dem, was ImageNet halt auch, äh, was

01:08:34.360 --> 01:08:36.140
diese Modelle halt auch auf ImageNet für eine

01:08:36.140 --> 01:08:37.460
Genauigkeit haben.

01:08:37.460 --> 01:08:40.420
Und, also, da kommt man, ja, vielleicht nicht

01:08:40.420 --> 01:08:42.380
ganz Richtung menschliche Performance, also, aber schon

01:08:42.380 --> 01:08:44.580
sehr, sehr, also, es ist dann schon sehr, sehr gut.

01:08:44.580 --> 01:08:46.240
Also, Feintuning heißt die Methode,

01:08:46.240 --> 01:08:48.340
funktioniert ziemlich

01:08:48.340 --> 01:08:50.460
klasse, und, äh, damit kriegt man so,

01:08:50.460 --> 01:08:52.680
sozusagen, äh, Probleme,

01:08:52.680 --> 01:08:54.520
wo man früher gedacht hätte, das geht gar nicht, kriegt man

01:08:54.520 --> 01:08:56.480
nicht in den Griff, und wenn man jetzt so ein bisschen was von

01:08:56.480 --> 01:08:58.200
Deep Learning gehört hat, dann denkt man sich vielleicht so, oh, so viele

01:08:58.200 --> 01:09:00.480
Trainingsbeispiele hab ich gar nicht, wär schön, ich krieg

01:09:00.480 --> 01:09:02.400
das vielleicht theoretisch in den Griff, aber praktisch kann ich's auch nicht

01:09:02.400 --> 01:09:04.560
machen. Man kriegt die Dinge auch tatsächlich

01:09:04.560 --> 01:09:06.520
praktisch in den Griff. Also, das ist, äh,

01:09:06.520 --> 01:09:08.360
das ist schon, das sollte man vielleicht wissen, dass

01:09:08.360 --> 01:09:09.940
das möglich ist, und wie man das machen kann.

01:09:09.940 --> 01:09:12.440
Und man muss alles ausprobieren. Ich bin da

01:09:12.440 --> 01:09:14.400
total neugierig drauf, ich muss mal ein, zwei Leute finden, die

01:09:14.400 --> 01:09:16.020
Lust haben, dass man bei denen mal so ein Projekt baut.

01:09:16.020 --> 01:09:18.380
Ja, und, äh, ja, das,

01:09:18.380 --> 01:09:20.740
das, äh, damit kann man dann auf jeden Fall schon so richtige...

01:09:20.740 --> 01:09:22.500
Also, wenn ihr Lust habt, dass wir so ein Maschinen-Learning-Projekt

01:09:22.500 --> 01:09:24.780
baut, ich mach den dann, sagt auch mal Bescheid, ne, das ist natürlich...

01:09:24.780 --> 01:09:26.760
Ja. Ähm,

01:09:26.760 --> 01:09:28.840
muss man schon einen rechten, rechten, rechten, äh,

01:09:28.840 --> 01:09:30.760
starken Wow-Effekt, äh, mit erzeugen.

01:09:30.760 --> 01:09:31.980
Ähm,

01:09:31.980 --> 01:09:34.440
ja, das, das wollte ich auf jeden Fall noch, äh,

01:09:34.440 --> 01:09:36.260
erwähnen, deswegen ist das auch so, so interessant.

01:09:36.260 --> 01:09:38.480
Und, äh, ich bin auch gespannt, aber das ist halt

01:09:38.480 --> 01:09:40.420
in den nächsten Jahren, das dauert natürlich jetzt, äh, sehr lange.

01:09:40.420 --> 01:09:42.440
Also, es gibt halt viele Dinge, die so theoretisch gelöst sind,

01:09:42.440 --> 01:09:44.340
und, äh, ImageNet ist natürlich

01:09:44.340 --> 01:09:45.460
so ein, so ein Dataset, das

01:09:45.460 --> 01:09:48.320
kann man jetzt für, man, viele Sachen in der, in der

01:09:48.320 --> 01:09:50.200
Praxis geht das, aber für andere Sachen geht das noch nicht.

01:09:50.200 --> 01:09:52.140
Für andere, viele andere Sachen gibt's noch keine tollen Datasets.

01:09:52.140 --> 01:09:54.180
Ähm, aber

01:09:54.180 --> 01:09:56.360
bis das jetzt sozusagen, also viele, viele

01:09:56.360 --> 01:09:58.380
dieser Probleme, mit denen man in der Praxis was anfangen

01:09:58.380 --> 01:10:00.260
könnte, sind jetzt theoretisch im Griff, und man muss

01:10:00.260 --> 01:10:02.320
es halt nicht nur praktisch umsetzen. Das wird

01:10:02.320 --> 01:10:04.000
aber wahrscheinlich noch irgendwie lange dauern.

01:10:04.000 --> 01:10:06.300
Wahrscheinlich wird es die nächsten zehn Jahre dauern, bis man das in Produkten

01:10:06.300 --> 01:10:08.260
im Alltag sieht, dass, äh, die das

01:10:08.260 --> 01:10:09.720
wirklich benutzen, auch richtig benutzen.

01:10:09.720 --> 01:10:12.300
Weil am Anfang, jetzt müssen die Leute erstmal lernen, wie das geht.

01:10:12.300 --> 01:10:14.120
Die werden erstmal Fehler machen, das wird

01:10:14.120 --> 01:10:15.380
erstmal, wird man

01:10:15.380 --> 01:10:17.380
viele Dinge komplett falsch machen, und dann

01:10:17.380 --> 01:10:19.260
dauert das halt irgendwie ein paar Jahre, bis die Leute anfangen, das

01:10:19.260 --> 01:10:21.220
richtig, äh, hinzubekommen.

01:10:21.220 --> 01:10:23.060
Und, äh, dann dauert es nochmal ein paar Jahre,

01:10:23.060 --> 01:10:25.300
äh, bis man, bis die Daten ordentlich sind, und

01:10:25.300 --> 01:10:27.080
ja, so wie das halt so ist.

01:10:27.080 --> 01:10:30.360
Also, alles sehr langsam, ja.

01:10:30.360 --> 01:10:31.020
Ist leider so.

01:10:31.020 --> 01:10:33.540
Ja. Aber, äh,

01:10:33.540 --> 01:10:35.220
ist, wahrscheinlich wird, wird,

01:10:35.220 --> 01:10:37.480
wird man da in vielen Bereichen, äh,

01:10:37.480 --> 01:10:39.060
äh, tolle Verbesserungen sehen.

01:10:39.060 --> 01:10:41.120
Und mir wird das ja schon reichen, wenn ich im Supermarkt nicht immer

01:10:41.120 --> 01:10:43.020
irgendwie fluchend vor dem Pfandautomaten stehen muss.

01:10:43.020 --> 01:10:45.300
Wobei ich, wahrscheinlich braucht man ja nicht schon

01:10:45.300 --> 01:10:47.340
nicht mal Deep Learning, das ist einfach nur kaputt.

01:10:47.340 --> 01:10:48.760
Ach, na, vielleicht gibt's doch nicht.

01:10:48.760 --> 01:10:51.100
Das ist einfach ein Problem, schon nicht geht. Äh, naja.

01:10:51.100 --> 01:10:52.920
Ich geb die Hoffnung nicht auf.

01:10:52.920 --> 01:10:54.900
Ja, ja, genau, das wollte ich grad sagen. Also, eben mal so.

01:10:54.900 --> 01:10:57.400
Ja, die Kunstintelligenz, die AGI

01:10:57.400 --> 01:10:59.260
kriegen wir alle nicht hin, und die ganzen Roboter und so,

01:10:59.260 --> 01:11:01.020
aber, ja, vielleicht ist es auch cool. Also,

01:11:01.020 --> 01:11:02.940
ja, nützlich.

01:11:02.940 --> 01:11:05.380
Gut, äh,

01:11:05.380 --> 01:11:07.140
ja, also ein praktisches Beispiel hatten wir, hatten wir

01:11:07.140 --> 01:11:09.440
eine Zeit, warum, genau, was wir vielleicht noch ein bisschen, äh,

01:11:09.440 --> 01:11:11.580
uns angucken können, ist das Visualisierungs-

01:11:11.580 --> 01:11:12.160
äh, Notebook.

01:11:15.220 --> 01:11:17.060
Ja.

01:11:17.060 --> 01:11:18.480
Ja.

01:11:18.480 --> 01:11:20.080
Weil,

01:11:20.080 --> 01:11:21.720
ja,

01:11:21.720 --> 01:11:26.200
da bekommt jemand nicht, was er möchte.

01:11:26.200 --> 01:11:26.800
Ja, immerhin.

01:11:26.800 --> 01:11:30.720
Ja.

01:11:30.720 --> 01:11:32.440
Hm.

01:11:32.440 --> 01:11:36.100
Äh, genau, ähm,

01:11:36.100 --> 01:11:40.300
da, äh,

01:11:40.300 --> 01:11:42.100
sind sozusagen die, wenn man die ganzen Notebooks

01:11:42.100 --> 01:11:44.000
halt ausgeführt hat, dann, äh, werden die Modelle

01:11:44.000 --> 01:11:45.140
halt auch gespeichert, äh,

01:11:45.140 --> 01:11:47.360
äh, äh, äh, und hier werden sie halt

01:11:47.360 --> 01:11:49.480
immer reingeladen. Da werden auch die, äh,

01:11:49.480 --> 01:11:51.040
die, die quasi endgültigen

01:11:51.040 --> 01:11:52.780
Scores auf den Testdaten

01:11:52.780 --> 01:11:55.300
ermittelt, äh, sozusagen, und man kann halt

01:11:55.300 --> 01:11:57.460
so ein bisschen sich angucken, äh,

01:11:57.460 --> 01:11:59.200
ja, wie, wie, äh,

01:11:59.200 --> 01:12:01.160
welche Features werden eigentlich so aktiviert, wenn man jetzt

01:12:01.160 --> 01:12:02.860
so ein Bild von einer Katze zum Beispiel da reinwirft.

01:12:02.860 --> 01:12:04.600
Und, ähm,

01:12:04.600 --> 01:12:07.300
ja, da gibt's auch ein, ein Ding, was hier so ein bisschen,

01:12:07.300 --> 01:12:09.140
was so ein bisschen zeigt, äh,

01:12:09.140 --> 01:12:11.100
ach, jetzt, das

01:12:11.100 --> 01:12:13.200
Visualisierungs-Notebook stimmt, da, da, da ist auch

01:12:13.200 --> 01:12:15.060
das tatsächlich, ähm, eher so,

01:12:15.060 --> 01:12:17.140
wo, das zeigt, ja, da sind ein paar kaputte Sachen

01:12:17.140 --> 01:12:18.920
dabei, und das zeigt tatsächlich eher so,

01:12:18.920 --> 01:12:21.000
wo, äh, wie funktioniert das mit

01:12:21.000 --> 01:12:23.040
den, den Controllers und so, das wollte ich aber

01:12:23.040 --> 01:12:25.060
gar nicht zeigen. Das ist ein anderes Notebook, was ich

01:12:25.060 --> 01:12:26.560
zeigen wollte. Ja, du hast gesagt, dass du das zeigen wolltest.

01:12:26.560 --> 01:12:28.600
Ja, hab ich vertan.

01:12:28.600 --> 01:12:31.120
Äh, Evaluation-Notebook,

01:12:31.120 --> 01:12:32.900
das war das. Ah! Äh, genau.

01:12:32.900 --> 01:12:35.180
Das ist das, wo die Modelle geladen

01:12:35.180 --> 01:12:37.220
werden, die jetzt irgendwie gespeichert wurden auf der Platte.

01:12:37.220 --> 01:12:38.820
Und, ähm.

01:12:38.820 --> 01:12:40.980
Und was hast du gespeichert? Das Pickel? Äh, nee,

01:12:40.980 --> 01:12:42.900
ähm, HDF5. HDF5.

01:12:42.900 --> 01:12:44.980
Ja, es, äh,

01:12:44.980 --> 01:12:45.160
was ist das?

01:12:45.160 --> 01:12:48.880
Äh, es war

01:12:48.880 --> 01:12:50.860
Vorläufer von NetCDF, oder ich weiß es nicht so genau.

01:12:50.860 --> 01:12:52.820
Äh, es ist auch so in so einem wissenschaftlichen Bereich

01:12:52.820 --> 01:12:54.520
übliches Format, äh, irgendwie

01:12:54.520 --> 01:12:55.620
Daten zu speichern.

01:12:55.620 --> 01:12:57.960
Ja, äh,

01:12:57.960 --> 01:13:00.860
im Grunde stehen da halt die Parameter vom Netz drin.

01:13:00.860 --> 01:13:02.720
Und, ähm, ja.

01:13:02.720 --> 01:13:04.800
Man könnte die auch irgendwie anders speichern. Man könnte es

01:13:04.800 --> 01:13:06.660
wahrscheinlich auch pickeln, aber, äh, ja.

01:13:06.660 --> 01:13:08.680
Ähm.

01:13:08.680 --> 01:13:12.900
Genau. Ja, äh,

01:13:12.900 --> 01:13:14.740
und da kann man halt mal vergleichen, ob die, äh,

01:13:14.900 --> 01:13:16.720
sowas, die man auf den Testdaten bekommt, halt auch

01:13:16.720 --> 01:13:18.740
das sind, was man jetzt erwarten würde, nachdem man

01:13:18.740 --> 01:13:21.100
das, äh, äh, äh,

01:13:21.100 --> 01:13:23.260
Modell auf den Validationsdaten, äh,

01:13:23.260 --> 01:13:24.700
irgendwie, äh, getestet hat.

01:13:24.700 --> 01:13:26.600
Und das sieht eigentlich alles so aus, als ob das halbwegs stimmt.

01:13:26.600 --> 01:13:28.420
Und, ähm,

01:13:28.420 --> 01:13:30.720
dann kann man da so Dinge tun, wie,

01:13:30.720 --> 01:13:32.800
man nimmt einfach mal Beispiels, Beispielbilder,

01:13:32.800 --> 01:13:34.920
die man da reinwirft. Äh, ich glaub, ich weiß gar nicht,

01:13:34.920 --> 01:13:35.920
ob ich die mit eingecheckt hab.

01:13:35.920 --> 01:13:37.340
Ähm,

01:13:37.340 --> 01:13:40.800
äh, wenn ja, dann

01:13:40.800 --> 01:13:42.680
kann man einfach die, die da auskommentiert sind,

01:13:42.680 --> 01:13:44.620
äh, probieren. Man kann aber auch eigene Bilder, äh,

01:13:44.620 --> 01:13:46.180
nehmen, äh, muss sie halt da in den...

01:13:46.180 --> 01:13:48.160
Fotografiert ihr eure Katze, fotografiert ihr euren Hund?

01:13:48.160 --> 01:13:48.720
Ja, genau.

01:13:48.720 --> 01:13:52.920
Ob das eine wirkliche Katze oder ein Hund ist, also zumindest nach der Meinung von dem Algorithmus.

01:13:52.920 --> 01:13:54.700
Ja, wird man das natürlich auch irgendwie,

01:13:54.700 --> 01:13:56.520
äh, äh,

01:13:56.520 --> 01:13:58.360
wahrscheinlich sowas schon irgendwie so haben.

01:13:58.360 --> 01:14:00.780
Ihr könnt auch was ganz anderes fotografieren

01:14:00.780 --> 01:14:02.820
und fragen, ob es eine Katze oder ein Hund ist und gucken, was rauskommt.

01:14:02.820 --> 01:14:03.420
Ja.

01:14:03.420 --> 01:14:06.640
Äh,

01:14:06.640 --> 01:14:08.180
ja, egal. Ähm,

01:14:08.180 --> 01:14:10.660
genau, und dann wird das halt so unterskaliert,

01:14:10.660 --> 01:14:12.580
das ist auch ein bisschen, sieht dann

01:14:12.580 --> 01:14:14.540
ein bisschen deprimierend aus, weil man sieht nicht mehr so viel auf dem

01:14:14.540 --> 01:14:16.580
Bild. Das sind halt immer so 150 mal 150

01:14:16.580 --> 01:14:18.400
Pixel, äh, Bilder,

01:14:18.400 --> 01:14:19.560
die da reingehen.

01:14:19.560 --> 01:14:22.460
Ähm, und dann kann man halt mal die Modelle,

01:14:22.460 --> 01:14:24.540
die man da hat, äh, äh, hernehmen

01:14:24.540 --> 01:14:26.520
und, äh, die einfach klassifizieren lassen, was sie

01:14:26.520 --> 01:14:28.360
dann darauf sehen und dann, äh,

01:14:28.360 --> 01:14:30.640
sieht man schon, dass das vom Scratch-Model halt nicht so richtig

01:14:30.640 --> 01:14:32.620
toll funktioniert vielleicht. Das sagt bei einem Hund

01:14:32.620 --> 01:14:34.580
dann irgendwie mit einer 80-prozentigen Wahrscheinlichkeit,

01:14:34.580 --> 01:14:36.000
oh, das ist eine Katze und, ähm,

01:14:36.000 --> 01:14:38.380
oh. Ja, äh,

01:14:38.380 --> 01:14:40.780
das mit Data-Augmentation

01:14:40.780 --> 01:14:41.600
ist so ein bisschen, um

01:14:41.600 --> 01:14:44.380
Overfitting zu reduzieren, ist halt schon so ein bisschen

01:14:44.380 --> 01:14:46.040
besser, aber das

01:14:46.040 --> 01:14:48.220
Feature-Extraction-Modell, das sagt dann schon, oh,

01:14:48.220 --> 01:14:50.920
das sieht aber eher wie ein Hund aus und dann, äh,

01:14:50.920 --> 01:14:53.640
ja, das, äh,

01:14:53.640 --> 01:14:54.740
äh, äh,

01:14:54.740 --> 01:14:56.340
Feintuning ist halt nochmal

01:14:56.340 --> 01:14:58.460
deutlich besser. Und, ähm,

01:14:58.460 --> 01:15:00.320
das kann man dann auch nochmal auf

01:15:00.320 --> 01:15:02.200
mehreren Bildern machen und das ist vielleicht auch mal ganz

01:15:02.200 --> 01:15:04.420
interessant zu sehen, welche Bilder halt in dem,

01:15:04.420 --> 01:15:05.800
äh,

01:15:05.800 --> 01:15:08.360
äh, Beispiel-Dataset da so drin sind

01:15:08.360 --> 01:15:10.300
und, äh, man kann sich das Ganze

01:15:10.300 --> 01:15:12.220
nochmal so als Tabelle ausgucken. Ich hab übrigens, äh,

01:15:12.220 --> 01:15:14.220
das war bei der letzten, äh,

01:15:14.220 --> 01:15:16.280
äh, beim letzten

01:15:16.280 --> 01:15:18.180
Treffen der Python-User-Group hab ich das auch irgendwie mal so ein bisschen

01:15:18.180 --> 01:15:20.100
vorgestellt und da war das irgendwie,

01:15:20.100 --> 01:15:21.940
sah das nicht gut aus, weil dann stand da irgendwie

01:15:21.940 --> 01:15:24.100
Cat 0% oder sowas, aber das, äh,

01:15:24.100 --> 01:15:26.240
hab ich jetzt hier mal gefixt. Das war einfach nur

01:15:26.240 --> 01:15:28.260
so, dass das, äh, der Klassenname war immer Cat

01:15:28.260 --> 01:15:29.960
und 0% bedeutete einfach, es ist ein Hund.

01:15:29.960 --> 01:15:32.120
Oh. Also, es war schon richtig,

01:15:32.120 --> 01:15:34.180
es war nur blöd dargestellt, das hab ich jetzt nochmal

01:15:34.180 --> 01:15:35.940
geändert, dass dann, wenn es irgendwie kleiner

01:15:35.940 --> 01:15:38.060
50% ist, äh,

01:15:38.060 --> 01:15:39.980
dass dann, dass dann Hund, äh,

01:15:39.980 --> 01:15:41.800
als Klasse dasteht. Ja.

01:15:41.800 --> 01:15:43.000
Ähm,

01:15:44.060 --> 01:15:45.880
ja, ist auf jeden Fall, äh,

01:15:45.880 --> 01:15:47.920
superschön zum Anteilen und ich glaube auch so zum Visualisieren von

01:15:47.920 --> 01:15:49.880
so den ersten Tests. Solltet ihr es auf jeden Fall

01:15:49.880 --> 01:15:51.400
auch mal ausprobieren. Ja.

01:15:51.400 --> 01:15:53.320
Genau, und dann, ja,

01:15:53.320 --> 01:15:55.120
äh,

01:15:55.120 --> 01:15:57.980
und ich glaube, so von dem

01:15:57.980 --> 01:15:59.700
ganzen theoretischen Überbau haben wir es schon so ziemlich viel

01:15:59.700 --> 01:16:01.840
geschafft heute, würde ich sagen. Ja. Ich, ich

01:16:01.840 --> 01:16:03.440
guck nochmal grad, ob es noch irgendwas gibt, was,

01:16:03.440 --> 01:16:05.800
äh, hast du noch einen letzten

01:16:05.800 --> 01:16:07.540
kleinen Punkt? Nö.

01:16:07.540 --> 01:16:09.620
Nö, das ist, äh,

01:16:09.620 --> 01:16:11.780
ich glaube, wir sind tatsächlich irgendwie so halbwegs durch.

01:16:11.780 --> 01:16:13.900
Dann würde jetzt ja die nächste Chapter mal kommen und wir

01:16:13.900 --> 01:16:15.820
würden vielleicht noch einfach kurz die, die Picks nehmen, die wir

01:16:15.820 --> 01:16:17.220
immer so gerne noch wieder eingeführt hatten.

01:16:17.220 --> 01:16:18.840
Ich glaube, die gefielen euch auch ganz gut.

01:16:18.840 --> 01:16:21.800
Welches, äh, Modul pickst du

01:16:21.800 --> 01:16:23.720
diese Woche, Jochen? Äh,

01:16:23.720 --> 01:16:25.720
ja, hab ich auch in einem Podcast von gehört. Ich weiß

01:16:25.720 --> 01:16:27.800
jetzt gar nicht mehr, ob es Python Bytes war. Doch, ich meine.

01:16:27.800 --> 01:16:28.960
Aber, ähm,

01:16:28.960 --> 01:16:31.760
und zwar, äh, gibt's da ein sehr

01:16:31.760 --> 01:16:33.540
schönes, äh, Modul namens

01:16:33.540 --> 01:16:35.860
MatMat. Ähm,

01:16:35.860 --> 01:16:37.520
äh,

01:16:37.520 --> 01:16:39.800
was das tut ist, äh, also es gibt,

01:16:39.800 --> 01:16:41.540
es gibt ja, also testen ist ganz wichtig und so,

01:16:41.540 --> 01:16:43.620
äh, und, ähm,

01:16:43.740 --> 01:16:45.820
es gibt halt auch so Ansätze, irgendwie Tests

01:16:45.820 --> 01:16:47.520
vielleicht zu automatisieren.

01:16:47.520 --> 01:16:49.460
Ein, ein interessanter ist Hypothesis.

01:16:49.460 --> 01:16:51.780
Das ist vielleicht dann auch irgendwie, äh, auch ein,

01:16:51.780 --> 01:16:53.980
auch ein Pick. Äh, das Ding

01:16:53.980 --> 01:16:55.740
generiert halt mögliche

01:16:55.740 --> 01:16:57.540
Eingaben für Funktionen so und, äh,

01:16:57.540 --> 01:16:59.640
probiert die halt alle durch und sagt einem Bescheid, wenn es irgendwo

01:16:59.640 --> 01:17:00.520
Probleme gab.

01:17:00.520 --> 01:17:03.740
Äh, das ist aber nur ein Ansatz und MatMat verfolgt

01:17:03.740 --> 01:17:05.460
einen anderen und den finde ich eigentlich ziemlich cool.

01:17:05.460 --> 01:17:07.780
Ähm, man kann sich natürlich

01:17:07.780 --> 01:17:09.720
sowas ausgeben lassen wie Coverage, also sozusagen

01:17:09.720 --> 01:17:11.260
wie viel Prozent von den

01:17:11.260 --> 01:17:12.940
Zeilen, die man jetzt irgendwie hat,

01:17:13.580 --> 01:17:15.900
äh, ist eigentlich quasi, äh,

01:17:15.900 --> 01:17:17.620
mal durchlaufen worden, äh, wenn man

01:17:17.620 --> 01:17:18.800
jetzt die Tests wie durchläuft.

01:17:18.800 --> 01:17:21.420
Das gibt einem so einen ganz guten Anhaltspunkt dafür,

01:17:21.420 --> 01:17:23.180
wie vollständig die Tests sind, aber

01:17:23.180 --> 01:17:25.540
naja, das heißt ja jetzt nicht, dass das

01:17:25.540 --> 01:17:27.700
wirklich funktioniert, dass wirklich, wenn etwas kaputt geht,

01:17:27.700 --> 01:17:29.820
ähm, man das halt auch, äh,

01:17:29.820 --> 01:17:30.920
tatsächlich bemerken würde.

01:17:30.920 --> 01:17:34.140
Es könnte sein,

01:17:34.140 --> 01:17:35.520
aber es kann halt auch Fälle geben, wo

01:17:35.520 --> 01:17:37.440
das dann nicht passiert und MatMat setzt da

01:17:37.440 --> 01:17:38.900
irgendwie so ein bisschen an und, ähm,

01:17:38.900 --> 01:17:41.360
macht etwas sehr Interessantes und zwar ändert es halt

01:17:41.360 --> 01:17:43.420
zufällig, äh, irgendwie Dinge im Code.

01:17:43.420 --> 01:17:45.440
So irgendwelche Datentypen oder sowas.

01:17:45.440 --> 01:17:47.240
Ja, also es macht zum Beispiel, äh,

01:17:47.240 --> 01:17:49.460
größer in kleiner Zeichen oder sowas,

01:17:49.460 --> 01:17:51.380
ändert Bedingungen, fügt

01:17:51.380 --> 01:17:53.320
irgendwie was hinzu oder so und guckt, ob

01:17:53.320 --> 01:17:54.260
Tests viel schlagen.

01:17:54.260 --> 01:17:57.320
Und das ist natürlich irgendwie

01:17:57.320 --> 01:17:59.440
echt nett. Also sozusagen, es macht halt irgendwie

01:17:59.440 --> 01:18:01.360
zufällige Änderungen an einem Code und guckt dann

01:18:01.360 --> 01:18:03.320
halt irgendwie... Ist dann dein Test gut genug, um das

01:18:03.320 --> 01:18:05.400
zu entdecken? Ist deine Test viel gut genug zu finden,

01:18:05.400 --> 01:18:07.440
äh, gut genug, äh, ist deine Testabdeckung

01:18:07.440 --> 01:18:09.280
gut genug, um rauszufinden, dass jetzt

01:18:09.280 --> 01:18:10.680
irgendwie hier was zufällig geändert wurde.

01:18:10.680 --> 01:18:13.380
Und das ist natürlich schon, äh, schon echt ein, äh,

01:18:13.380 --> 01:18:15.300
sehr interessanter Ansatz. Sehr, sehr gut. Also gerade, wenn man

01:18:15.300 --> 01:18:17.120
sowas nicht richtig mal bauen möchte, oder? Ja.

01:18:17.120 --> 01:18:19.340
Äh, genau. Das wäre halt so mein Pick für, für, für,

01:18:19.340 --> 01:18:20.520
für, äh, ja.

01:18:20.520 --> 01:18:23.360
Diese Episode. Ja. Ja, also ich würde tatsächlich

01:18:23.360 --> 01:18:25.180
auch nochmal, äh, Seaborn, äh, kurz

01:18:25.180 --> 01:18:27.380
auswählen. Das hatten wir zwar schon in der Pandas-Episode, glaube ich,

01:18:27.380 --> 01:18:29.100
kurz vorgestellt, aber, ähm, das einfach, wenn man

01:18:29.100 --> 01:18:31.240
Matplotlib so kennt, ähm, einfach die

01:18:31.240 --> 01:18:33.340
totale, tolle grafische Erweiterung, dass alles ein bisschen

01:18:33.340 --> 01:18:35.340
schicker aussieht und mit, äh, mit dem das einfach

01:18:35.340 --> 01:18:37.600
auf Matplotlib draufpackt und dann Seaborn reinbaut.

01:18:37.600 --> 01:18:39.360
Und ich würde auch gerne irgendwie so

01:18:39.360 --> 01:18:41.400
drei Kleinigkeiten aus der Standard-Bibliothek, aber die ich jetzt so

01:18:41.400 --> 01:18:43.440
ein bisschen mehr drin bewahre, weil ich was

01:18:43.440 --> 01:18:45.240
dazu geschrieben hatte, nur kurz vorstellen.

01:18:45.240 --> 01:18:47.380
Ist natürlich jetzt wieder der, äh, NubPick, aber das ist da trotzdem

01:18:47.380 --> 01:18:49.140
vielleicht für einige interessant. Und zwar

01:18:49.140 --> 01:18:51.280
kennt ihr hoffentlich ArcPath, also mit dem man vernünftig,

01:18:51.280 --> 01:18:52.720
ähm, so die,

01:18:52.720 --> 01:18:55.180
ja, Parameter zu, ähm,

01:18:55.180 --> 01:18:56.900
Skripten übergeben kann. Ähm,

01:18:56.900 --> 01:18:59.080
kennst du, da, äh, gibt's irgendwie von, ähm,

01:18:59.080 --> 01:19:01.180
na, wie heißt das von Google, äh, gibt's

01:19:01.180 --> 01:19:03.220
eine Bibliothek? Es gibt noch Click.

01:19:03.220 --> 01:19:05.340
Click, genau, ja. Und, genau, und,

01:19:05.340 --> 01:19:07.060
ähm, ja, natürlich dann die Standard, äh,

01:19:07.060 --> 01:19:09.160
Variante. Ähm,

01:19:09.320 --> 01:19:11.220
aber ich find ArcPath ja ziemlich cool. Also ich find's

01:19:11.220 --> 01:19:13.560
auch besser als Click. Also Click, das sind halt irgendwie so Dekoratoren,

01:19:13.560 --> 01:19:15.300
um das irgendwie zu machen. Ja. Und,

01:19:15.300 --> 01:19:16.940
äh, ja, weiß nicht, fand ich nicht,

01:19:16.940 --> 01:19:19.160
nicht so toll, aber obwohl die Gesundheit auch ganz nett ist, aber

01:19:19.160 --> 01:19:20.520
ArcPath fand ich auch irgendwie ganz nice.

01:19:20.520 --> 01:19:22.320
Und dann, ja,

01:19:22.320 --> 01:19:25.180
GetPath natürlich, um da irgendwie so Passwörter reinzubekommen,

01:19:25.180 --> 01:19:27.280
irgendwie als verschlüsselten Text, dass man nicht direkt sieht, was eingegeben

01:19:27.280 --> 01:19:29.020
wird. Ja. Auch immer gut, wenn man sich irgendwo

01:19:29.020 --> 01:19:31.120
einloggt, braucht man das vielleicht. Ja, das ist tatsächlich super.

01:19:31.120 --> 01:19:33.260
Das ist vor allen Dingen auch schön in, in, in Notebooks.

01:19:33.260 --> 01:19:35.380
Weil ansonsten,

01:19:35.380 --> 01:19:37.380
ja, schreibt man das ja auch irgendwie,

01:19:37.380 --> 01:19:39.280
äh, mit in die Notebooks rein

01:19:39.280 --> 01:19:41.120
und checkt das vielleicht irgendwo ein oder so, das wäre ja irgendwie

01:19:41.120 --> 01:19:43.340
gut. Genau. Und, ja, ich hab

01:19:43.340 --> 01:19:45.380
ab und zu noch den Textwrap, äh, das Textwrap-Modul

01:19:45.380 --> 01:19:47.280
benutzt, ähm, einfach nur zum Didenten

01:19:47.280 --> 01:19:49.340
meistens von irgendwelchen mehrzeiligen

01:19:49.340 --> 01:19:51.300
Docs, die sonst irgendwie verrutscht wären,

01:19:51.300 --> 01:19:53.520
irgendwie einfach in meinen, äh,

01:19:53.520 --> 01:19:54.980
ja, in meiner Struktur, in meinen Files.

01:19:54.980 --> 01:19:57.460
Mhm. Konnte man

01:19:57.460 --> 01:19:59.220
so ganz gut darstellen. Also, falls ihr das Problem

01:19:59.220 --> 01:20:01.300
habt, Textwrap. Ja, das

01:20:01.300 --> 01:20:03.440
war's eigentlich schon so mit den, mit den Modulen und, ähm,

01:20:03.440 --> 01:20:05.340
ich hoffe, euch hat die Folge jetzt wieder gefallen, Machine Learning.

01:20:05.340 --> 01:20:07.200
Mhm. Ähm,

01:20:07.200 --> 01:20:09.240
egal, wo ihr die

01:20:09.240 --> 01:20:10.920
gehört habt gerade. Also, wir haben jetzt gerade

01:20:10.920 --> 01:20:12.960
ausnahmsweise mal Nachmittag, sonst nehmen wir ja immer abends auf,

01:20:12.960 --> 01:20:15.220
gerade relativ gutes Wetter. Ich hab schon fast

01:20:15.220 --> 01:20:17.160
überlegt, ob man rausgehen soll. Ja. Ja.

01:20:17.160 --> 01:20:19.200
Stimmt, könnte man eigentlich auch. Es ist wirklich, äh,

01:20:19.200 --> 01:20:20.340
ja, Wetter ist momentan super.

01:20:20.340 --> 01:20:23.140
Frühling, voll gut. Ja,

01:20:23.140 --> 01:20:25.000
äh, aber ansonsten, äh, genau.

01:20:25.000 --> 01:20:26.840
Hört, wo immer ihr möchtet. Ähm,

01:20:26.840 --> 01:20:28.980
bleibt uns gewogen und schreibt uns euer Feedback an

01:20:28.980 --> 01:20:31.220
hallo-at-pison-podcast.de. Ähm,

01:20:31.220 --> 01:20:33.200
ja, wir hören uns. Oh, ja. Bis zum nächsten Mal.

01:20:33.200 --> 01:20:34.360
Bis zum nächsten Mal. Tschüss. Tschüss.
