WEBVTT

00:00:00.000 --> 00:00:05.400
Ja, hallo liebe Hörerinnen und Hörer. Willkommen zum Python-Podcast in der achten Episode.

00:00:06.300 --> 00:00:10.900
Wir sind direkt wieder da. Es ist noch gar nicht lange Zeit vergangen, nachdem wir gestern eine Episode über Machine Learning aufgenommen haben.

00:00:11.640 --> 00:00:17.140
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.700 --> 00:00:19.680
Wir sind im Wintergarten bei Jochen, mit Jochen.

00:00:20.740 --> 00:00:26.300
Ja, wenn ihr Fragen, Anmerkungen, Kommentare, alles so andere, was ihr loswerden wollt, schickt eine E-Mail an unseren hallo-at-python-podcast.de.

00:00:26.880 --> 00:00:28.640
Könnt ihr uns eigentlich relativ fix erreichen.

00:00:29.440 --> 00:00:31.060
Links und zusätzliche Infos findet ihr wie immer

00:00:31.060 --> 00:00:32.220
unten in den Shownotes.

00:00:32.820 --> 00:00:35.380
Ja, was machen wir denn heute? Wir gehen noch mal ein bisschen auf die Grundlage von Machine Learning

00:00:35.380 --> 00:00:37.360
ein und wollen

00:00:37.360 --> 00:00:39.140
euch aber erstmal kurz ein bisschen vorstellen, wo wir

00:00:39.140 --> 00:00:41.120
in letzter Zeit noch waren. Und zwar waren wir

00:00:41.120 --> 00:00:43.340
auf der Subscribe, wo wir gestern schon drüber geredet hatten,

00:00:43.820 --> 00:00:44.460
noch auf dem

00:00:44.460 --> 00:00:45.880
PyCamp Cologne,

00:00:46.740 --> 00:00:48.960
einem Python-Treffen für die

00:00:48.960 --> 00:00:51.040
Python-Community. Ja, Moment, ich mach hier

00:00:51.040 --> 00:00:53.020
gerade mal eine Kapitelmarke, weil das können wir nämlich jetzt seit

00:00:53.020 --> 00:00:55.120
neuestem auch. Und sag mal, wir

00:00:55.120 --> 00:00:57.120
nennen jetzt mal

00:00:57.120 --> 00:00:58.320
wo waren

00:00:58.320 --> 00:00:59.920
hier so

00:00:59.920 --> 00:01:01.500
in letzter Zeit.

00:01:02.060 --> 00:01:03.820
Ja, also wir können jetzt tatsächlich Kapitelmarken

00:01:03.820 --> 00:01:05.500
in unserer eigenen Software DangoCast.

00:01:05.620 --> 00:01:07.740
Das heißt, auch wenn ihr die benutzen wollt für euren eigenen Podcast,

00:01:08.460 --> 00:01:09.580
könnt ihr sowas wie Kapitelmarken machen.

00:01:09.660 --> 00:01:12.020
Und vielleicht könnt ihr das nächste Mal, wenn ihr uns hört, dann auch das skippen,

00:01:12.080 --> 00:01:14.140
was euch nicht interessiert und wisst direkt, worum es geht.

00:01:14.720 --> 00:01:15.860
Ja, das war, also genau,

00:01:15.920 --> 00:01:17.920
wir waren eben auf so einer Podcaster-Konferenz

00:01:17.920 --> 00:01:19.940
in Köln. Wir dachten uns, wenn die schon mal

00:01:19.940 --> 00:01:22.260
hier in der Gegend ist, dann kann man da ja mal hingehen,

00:01:22.620 --> 00:01:23.760
wenn man jetzt auch schon

00:01:23.760 --> 00:01:25.100
mit den Podcasten mal angefangen hat.

00:01:25.860 --> 00:01:27.560
Und das war eine tolle Konferenz.

00:01:27.680 --> 00:01:40.500
Und wir haben da halt auch mal versucht mitzubekommen, was die Leute denn so haben wollen, von so einer, erwarten, an Features erwarten, von so einer Podcast-Publishing-Lösung.

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

00:01:46.880 --> 00:01:53.100
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.

00:01:53.540 --> 00:01:58.400
weil ich höre das immer in einem sehr wenig interaktiven Setting, ehrlich gesagt.

00:01:58.680 --> 00:02:01.360
Also das läuft halt auf meinem Telefon und ich habe Kopfhörer drin

00:02:01.360 --> 00:02:03.980
und ich kann da nicht viel tun, ich kann da nicht auf irgendwelche Kapitel,

00:02:04.280 --> 00:02:06.700
weil selbst wenn ich, also ich möchte mich ja eigentlich gar nicht darum kümmern,

00:02:06.820 --> 00:02:10.180
sondern das soll halt laufen, das soll halt auch gern sehr lang laufen,

00:02:10.400 --> 00:02:11.740
also ich mag auch längere Podcasts lieber.

00:02:11.760 --> 00:02:14.620
Ich habe gerne beim Cars-Radio immer die Werbeunterbrechung und die Nachrichten geskippt.

00:02:14.620 --> 00:02:16.840
Okay, gut, da macht das schon irgendwie Sinn.

00:02:17.580 --> 00:02:20.400
Aber die meisten, also eigentlich alle Podcasts, die ich höre, haben keine,

00:02:20.860 --> 00:02:22.500
Doch, es gibt sogar welche mit Werbung, aber

00:02:22.500 --> 00:02:24.860
ja, das kippe ich dann

00:02:24.860 --> 00:02:26.720
eher so von Hand. Stimmt.

00:02:27.220 --> 00:02:28.780
Ja, aber Kapitelmarken wären dafür natürlich

00:02:28.780 --> 00:02:30.880
auch recht praktisch. Ja, ich benutze die eigentlich auch tatsächlich

00:02:30.880 --> 00:02:32.200
nicht. Also entweder höre ich halt oder nicht.

00:02:32.700 --> 00:02:34.800
Plus, Minus, Stopp. Aber gut,

00:02:34.860 --> 00:02:36.380
für euch jetzt, da ist dann natürlich trotzdem da.

00:02:36.720 --> 00:02:38.460
Ja, aber nachdem das irgendwie alle

00:02:38.460 --> 00:02:40.720
irgendwie angemerkt haben, dass sie das doch gut

00:02:40.720 --> 00:02:42.160
fänden, wenn das da drin ist. Und

00:02:42.160 --> 00:02:44.560
natürlich ist es schon irgendwie auch natürlich sinnvoll,

00:02:44.660 --> 00:02:46.020
da eine gewisse Struktur

00:02:46.020 --> 00:02:48.700
drin zu haben, haben wir dann halt mal geguckt, ob sich

00:02:48.700 --> 00:02:50.660
das irgendwie einbauen lässt. Und das

00:02:50.660 --> 00:02:51.760
war nicht so schwer.

00:02:53.400 --> 00:02:54.320
Und jetzt sind sie

00:02:54.320 --> 00:02:56.840
drin, also gut in einer etwas vereinfachten

00:02:56.840 --> 00:02:58.580
Form. Also

00:02:58.580 --> 00:03:00.640
was halt momentan noch nicht geht,

00:03:01.540 --> 00:03:02.140
sind halt

00:03:02.140 --> 00:03:03.280
sowas wie

00:03:03.280 --> 00:03:06.780
das Links und Bilder, die ja

00:03:06.780 --> 00:03:08.380
auch in Kapitelmarken enthalten sein können,

00:03:08.480 --> 00:03:10.720
automatisch mit drin sind, wenn man

00:03:10.720 --> 00:03:12.480
da jetzt den Text, der bei

00:03:12.480 --> 00:03:14.560
Ultraschall beispielsweise, wenn man sagt, exportiere

00:03:14.560 --> 00:03:16.180
Kapitelmarken, dann fällt da raus

00:03:16.180 --> 00:03:18.640
halt so eine Textdatei,

00:03:18.720 --> 00:03:20.600
wo die erste Spalte ist halt irgendwie so ein

00:03:20.600 --> 00:03:22.960
Zeitstempel oder ein Startzeitpunkt

00:03:22.960 --> 00:03:24.840
und die zweite Spalte ist halt irgendwie ein Titel.

00:03:25.040 --> 00:03:26.540
Ich glaube, jetzt haben schon einige Leute, die

00:03:26.540 --> 00:03:27.580
diese Kapitelmark übersprungen.

00:03:28.600 --> 00:03:31.280
Ja, dafür sind sie da.

00:03:31.900 --> 00:03:32.760
Genau, man

00:03:32.760 --> 00:03:34.680
kann jetzt aber zum Beispiel

00:03:34.680 --> 00:03:36.760
auch noch da Links reinschreiben, wenn man die in spitze Klammern

00:03:36.760 --> 00:03:38.520
setzt und man könnte auch noch Bilder

00:03:38.520 --> 00:03:40.600
hinzufügen. Jedenfalls kann man das, wenn man

00:03:40.600 --> 00:03:42.500
die jetzt, was man natürlich tun sollte, bei Auphonic

00:03:42.500 --> 00:03:44.340
auch noch mit reintut, damit die halt

00:03:44.340 --> 00:03:46.620
in der Audiodatei auch

00:03:46.620 --> 00:03:48.120
mit drin sind, damit man die auch im Player hat.

00:03:48.560 --> 00:03:50.500
Wir haben noch gar nicht so perspektiv gesagt, also wie man das

00:03:50.500 --> 00:03:52.920
macht, also den Podcast aufnehmen mit Ultraschall

00:03:52.920 --> 00:03:54.840
und das dann auf Hornig reinpumpen

00:03:54.840 --> 00:03:56.160
und dann halt unserem Cast hosen.

00:03:56.500 --> 00:03:58.660
Ja, wir wollten eigentlich über das Python Camp, glaube ich, noch mal

00:03:58.660 --> 00:04:00.320
reden. Also wir haben jetzt schon viel über die

00:04:00.320 --> 00:04:02.760
Kapitel mal gesagt. Ihr habt die jetzt bei uns mit

00:04:02.760 --> 00:04:04.240
im Django-Cast.

00:04:04.560 --> 00:04:06.260
Findet ihr auf PyPy und auf

00:04:06.260 --> 00:04:08.140
Jochen's Repo. Genau.

00:04:08.720 --> 00:04:10.480
Ja. Ja, genau.

00:04:10.560 --> 00:04:12.260
Eine weitere Veranstaltung, auf der wir waren,

00:04:12.380 --> 00:04:13.860
ist jetzt letzte Woche, letzte Wochenende

00:04:13.860 --> 00:04:16.560
das Python Camp. Das war richtig cool. Also richtig

00:04:16.560 --> 00:04:18.820
tolles Community-Treffen und gab leckeres

00:04:18.820 --> 00:04:20.640
Grillen am Abend und so und ganz

00:04:20.640 --> 00:04:22.020
viele tolle Talks und

00:04:22.020 --> 00:04:24.600
ja, also kleine Riding-Talks und verschiedene

00:04:24.600 --> 00:04:26.620
kleine Projekte vorzustellen

00:04:26.620 --> 00:04:27.460
und richtig gute Sessions.

00:04:28.960 --> 00:04:30.660
Jochen hat selber eins gemacht über Machine Learning

00:04:30.660 --> 00:04:32.280
und dann hatten wir den Cast auch da.

00:04:32.680 --> 00:04:34.480
Ja, war ziemlich gut. Und genau,

00:04:34.620 --> 00:04:35.820
das war echt toll.

00:04:37.460 --> 00:04:37.860
Ja,

00:04:38.120 --> 00:04:40.500
ich weiß nicht genau, ob wir irgendwas darüber

00:04:40.500 --> 00:04:41.760
erzählen wollen, was wir uns da so

00:04:41.760 --> 00:04:43.920
angeguckt haben, aber ich glaube gleich.

00:04:44.140 --> 00:04:45.720
Man kann ja irgendwie bei Python

00:04:45.720 --> 00:04:48.040
BarkCamp.eu auf die Seite mal gehen,

00:04:48.120 --> 00:04:48.840
Kannst du dir das mal alles angucken.

00:04:48.920 --> 00:04:52.360
Da gibt es auch relativ gute Dokumentationen

00:04:52.360 --> 00:04:54.440
in den einzelnen Sessions jeweils,

00:04:54.480 --> 00:04:55.280
was da so gemacht worden ist.

00:04:55.400 --> 00:04:56.880
Zumindest haben ziemlich viele ein Protokoll gebaut.

00:04:57.920 --> 00:04:59.540
Ja, ich habe ein bisschen was zu Foxhut gemacht.

00:04:59.760 --> 00:05:01.180
Das ist so eine Musikbibliothek für Python.

00:05:02.280 --> 00:05:04.000
Ich habe noch ganz, ganz tolles von Oliver gesehen.

00:05:04.120 --> 00:05:06.300
Er hat irgendwie die Landtagsreden irgendwie alle gepasst.

00:05:06.380 --> 00:05:06.980
Das ist sehr spannend.

00:05:07.240 --> 00:05:08.800
Das ist eine super interessante Geschichte.

00:05:08.800 --> 00:05:13.800
Genau, die haben halt alle ihre Reden und Protokolle,

00:05:13.800 --> 00:05:16.820
Sitzungsprotokolle als PDF veröffentlicht.

00:05:17.200 --> 00:05:20.720
das wäre natürlich schon sehr praktisch, wenn man da irgendwie

00:05:20.720 --> 00:05:22.140
Statistiken drüber machen könnte oder so.

00:05:22.820 --> 00:05:24.660
Und genau, Oliver hat da versucht,

00:05:24.780 --> 00:05:26.720
das irgendwie alles mal so irgendwie

00:05:26.720 --> 00:05:27.860
zu parsen und

00:05:27.860 --> 00:05:30.220
in so einheitliches Format zu bringen.

00:05:30.820 --> 00:05:31.580
Ja, das ist auf jeden Fall sehr spannend.

00:05:31.580 --> 00:05:33.520
Ich bin total gespannt, wenn das weiter ist.

00:05:33.600 --> 00:05:35.140
Ein bisschen, was man damit alles so bauen kann.

00:05:36.240 --> 00:05:37.580
Ja, und dann ist es

00:05:37.580 --> 00:05:38.020
natürlich

00:05:38.020 --> 00:05:41.160
noch einige andere spannende Sachen.

00:05:41.500 --> 00:05:43.520
DevOps war noch ein ziemlich cooler Talk dabei,

00:05:43.700 --> 00:05:45.480
der mir gefallen hat und so wie man

00:05:45.480 --> 00:05:46.960
Kommentare in Python am besten schreibt.

00:05:47.200 --> 00:05:53.720
Und ja, also eine Menge andere Dinge, die spannend waren mit Geo-Python und ein bisschen Micro-Python-Bau und sowas.

00:05:54.060 --> 00:05:58.180
Ja, das war sowieso ein überraschender Trend.

00:05:58.400 --> 00:06:03.420
Also ich meine, dass irgendwie Machine Learning und so ein Thema ist, das war eigentlich in den letzten Jahren auch schon immer so.

00:06:03.580 --> 00:06:12.820
Aber es gab wirklich mehrere Sessions und damit halt auffällig viele für diesen ganzen Bereich Internet of Things.

00:06:13.140 --> 00:06:18.600
Ja gut, aber so Bastel gab es auch schon immer so dabei, bei den Sprints auch und so, da war doch immer mindestens ein, zwei Gruppen, die irgendwas gebastelt haben.

00:06:18.620 --> 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.520
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:43.140 --> 00:06:45.480
Ja, ich habe hier nette Menschen

00:06:45.480 --> 00:06:47.420
kennengelernt, also vielleicht bringen wir da auch noch die eine oder andere

00:06:47.420 --> 00:06:49.880
Folge mit zusammen und mal gucken, was da so rauskommt.

00:06:50.140 --> 00:06:51.400
Genau, wir haben auch kurz vergestellt, dass wir

00:06:51.400 --> 00:06:53.100
da so einen Podcast machen und

00:06:53.100 --> 00:06:55.460
da werden

00:06:55.460 --> 00:06:57.620
bestimmt noch einige interessante Gespräche

00:06:57.620 --> 00:06:59.340
daraus entstehen. Das klang

00:06:59.340 --> 00:07:01.440
alles sehr gut. Jetzt ist Zeit für eine Tepta-Marke.

00:07:01.540 --> 00:07:02.840
Was soll ich mal, hebe ich immer die Hand und winke?

00:07:03.160 --> 00:07:05.400
Genau, winke einfach mal. Was soll ich

00:07:05.400 --> 00:07:07.240
denn da reinschreiben? Veranstaltungshinweise.

00:07:07.340 --> 00:07:08.720
Ah, Veranstaltungshinweise, alles klar, okay.

00:07:12.020 --> 00:07:12.380
Veranstaltungshinweise.

00:07:13.140 --> 00:07:15.120
Ja, wir haben nämlich tatsächlich dann natürlich auch

00:07:15.120 --> 00:07:17.080
mit Leuten geredet, die ganz viele neue

00:07:17.080 --> 00:07:19.400
Veranstaltungen vorgestellt haben, wo man überall so hinfahren

00:07:19.400 --> 00:07:21.240
kann. Jetzt als nächstes, das ist ja

00:07:21.240 --> 00:07:23.300
schon nächste Woche, ist ja die PyConX in Florenz.

00:07:23.400 --> 00:07:25.280
Das ist ein internationales

00:07:25.280 --> 00:07:27.300
Event. Also warum man da hinfahren soll, das ist natürlich tolles Wetter

00:07:27.300 --> 00:07:28.560
jetzt gerade so in Tyskana.

00:07:28.800 --> 00:07:30.740
Man kann da so ein bisschen Urlaub machen, wenn man da Lust hat.

00:07:30.880 --> 00:07:32.760
Und dann so ein bisschen Paison machen, das ist bestimmt cool.

00:07:33.520 --> 00:07:35.060
Vom 2. bis 5. Mai

00:07:35.060 --> 00:07:36.620
Florenz.

00:07:37.080 --> 00:07:39.220
Ja, dann geht's weiter. Ich weiß nicht, das ist jetzt gerade

00:07:39.220 --> 00:07:41.220
gar nicht so geordnet. Ich muss jetzt mal gucken.

00:07:42.200 --> 00:07:42.560
Juni.

00:07:43.140 --> 00:07:44.600
Geht es weiter mit der GeoPython in Basel?

00:07:45.080 --> 00:07:45.260
Ja.

00:07:45.820 --> 00:07:47.420
In Basel, der Martin hat da so ein paar Sachen erzählt,

00:07:47.480 --> 00:07:48.200
der macht da ziemlich viel

00:07:48.200 --> 00:07:50.220
und der hat im Juli direkt das Nächste

00:07:50.220 --> 00:07:52.800
und zwar ist dann nämlich die...

00:07:52.800 --> 00:07:53.760
Ja, EuroPython.

00:07:54.040 --> 00:07:54.400
EuroPython.

00:07:54.500 --> 00:07:56.820
Ist auch in Basel irgendwie im gleichen Gebäude, denke ich mal.

00:07:57.440 --> 00:07:59.100
Das haben sie extra dafür gebaut, hat er jetzt gesagt.

00:07:59.100 --> 00:07:59.700
Ja, genau.

00:08:01.740 --> 00:08:02.840
Schönes neues Gebäude, ja.

00:08:03.460 --> 00:08:05.900
Teilweise jedenfalls für diese Veranstaltung.

00:08:06.740 --> 00:08:09.280
Ja, EuroPython ist eigentlich immer toll

00:08:09.280 --> 00:08:11.680
und ehrlich gesagt, ich war aber noch nie da.

00:08:12.680 --> 00:08:14.320
Ich habe immer nur gehört, dass es super sein soll.

00:08:14.480 --> 00:08:16.060
Und gehst du nach Basel in die Schweiz?

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

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

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

00:08:22.740 --> 00:08:23.140
Also ist es entweder Frühjahr...

00:08:23.140 --> 00:08:25.540
Meinst du Juli, Juni, Oktober, Frühjahr?

00:08:26.420 --> 00:08:27.600
Naja, Conference Season.

00:08:28.420 --> 00:08:28.880
Ja, okay.

00:08:29.580 --> 00:08:31.760
Ja, also danach, im September geht es nach Bilbao.

00:08:31.900 --> 00:08:34.940
Am 2. bis 6. ist in Bilbao die EuroSciPy.

00:08:35.840 --> 00:08:37.300
Das ist in wissenschaftlichen Sachen auch sehr interessant.

00:08:37.700 --> 00:08:40.440
Und wir haben die PiData in Berlin vom 9. bis 13. Oktober.

00:08:40.440 --> 00:08:42.720
PyCon.de beziehungsweise PyData

00:08:42.720 --> 00:08:44.200
kombiniert in Berlin

00:08:44.200 --> 00:08:46.860
und also zumindest ich werde auf jeden Fall

00:08:46.860 --> 00:08:47.640
da auch sein.

00:08:49.200 --> 00:08:50.700
Da bin ich nicht da, da bin ich

00:08:50.700 --> 00:08:51.340
in Prag.

00:08:53.420 --> 00:08:54.220
Chicago Blackhawks.

00:08:55.520 --> 00:08:56.740
Ja, ja, und

00:08:56.740 --> 00:08:57.880
genau, damit haben wir

00:08:57.880 --> 00:09:00.280
ja schon fast alle, müssen wir dieses mit

00:09:00.280 --> 00:09:02.600
diese Veranstaltungshinweise auch nie wieder machen, dieses Jahr,

00:09:02.720 --> 00:09:04.040
weil damit haben wir alles Richtige durch, oder?

00:09:04.760 --> 00:09:06.460
Ja, vielleicht kommt noch den MP Sprint erwähnen, den es gibt,

00:09:06.500 --> 00:09:08.340
den haben wir glaube ich schon vergessen. Oh, achso, richtig, stimmt.

00:09:09.680 --> 00:09:11.740
genau, Pi-DDF-Sprint, wann war

00:09:11.740 --> 00:09:13.960
denn der nochmal? Im 4., 5.,

00:09:13.960 --> 00:09:14.900
Mai? Ja.

00:09:15.720 --> 00:09:17.140
Ich glaube schon. Ja.

00:09:19.960 --> 00:09:21.100
4., 5. Mai.

00:09:21.560 --> 00:09:23.760
Tatsächlich bei Trivago, wieder hier im Medienhafen

00:09:23.760 --> 00:09:25.640
in Düsseldorf. Ja. Genau.

00:09:25.880 --> 00:09:27.700
Das ist auch immer eine tolle Veranstaltung. Gut, macht natürlich

00:09:27.700 --> 00:09:29.300
nur wirklich Sinn, wenn man

00:09:29.300 --> 00:09:30.960
so ein bisschen aus der Gegend kommt, aber

00:09:30.960 --> 00:09:33.540
da ist das wirklich dann auch

00:09:33.540 --> 00:09:35.460
immer sehr, sehr nett. Genau, da bilden sich

00:09:35.460 --> 00:09:37.380
ein paar Grüppchen und programmieren an irgendwelchen Projekten rum

00:09:37.380 --> 00:09:39.620
und da ist es immer sehr lustig, hat Spaß zusammen,

00:09:39.680 --> 00:09:40.340
lernt sich ein bisschen kennen.

00:09:41.480 --> 00:09:43.120
Sollte ich euch für anmelden beim Meetup?

00:09:43.820 --> 00:09:44.200
Und ja.

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

00:09:48.860 --> 00:09:49.720
Ja, ich glaube, das war's

00:09:49.720 --> 00:09:50.840
für das nächste Mal hier so in der Gegend.

00:09:52.980 --> 00:09:53.340
Ja,

00:09:53.720 --> 00:09:56.020
okay, dann haben wir damit die Veranstaltungshinweise

00:09:56.020 --> 00:09:57.140
auch irgendwie durch.

00:09:57.280 --> 00:09:58.700
Dann wäre es wieder Zeit für den Chapter-Markt.

00:09:58.840 --> 00:10:00.180
Ach, ich winke übrigens hinter dir jetzt ein bisschen.

00:10:00.180 --> 00:10:00.400
Ach so.

00:10:01.780 --> 00:10:04.060
Wenn du gerade dein Bild im Kopf

00:10:04.060 --> 00:10:04.880
manchmal und ja.

00:10:05.980 --> 00:10:07.300
Gut, okay, dann

00:10:07.300 --> 00:10:11.360
ja, und danach gehen wir einfach so

00:10:11.360 --> 00:10:13.420
quasi. Ja, ich würde sagen, dass du

00:10:13.420 --> 00:10:15.300
wieder, genau. Alles klar. Wir fangen jetzt mit der

00:10:15.300 --> 00:10:16.880
Einführung in Machine Learning nochmal so ein bisschen an.

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

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

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

00:10:25.380 --> 00:10:27.280
Ja, also wir haben da auf jeden Fall verschiedene Unterthemen

00:10:27.280 --> 00:10:29.600
und sonst setzen wir die Chapter Marks

00:10:29.600 --> 00:10:31.280
also da später ein. Kannst du da irgendwie so einen anonymen

00:10:31.280 --> 00:10:33.300
Chapter Mark setzen, dass man einfach

00:10:33.300 --> 00:10:34.760
dann später den benennt, dann

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

00:10:37.200 --> 00:10:39.140
Das geht natürlich auch. Ich brauche da eigentlich

00:10:39.140 --> 00:10:41.200
nur... Also ich brauche so einen Buzzer in der Hand

00:10:41.200 --> 00:10:43.180
zu drücken. Selbstauslöser von

00:10:43.180 --> 00:10:45.080
so einer Kamera. Das wäre tatsächlich nochmal

00:10:45.080 --> 00:10:47.460
toll, wenn man irgendwie so einen Bluetooth-Buzzer

00:10:47.460 --> 00:10:48.500
oder sowas hätte, der das

00:10:48.500 --> 00:10:51.140
irgendwie dann eine Capital-Marke setzt.

00:10:51.980 --> 00:10:53.380
Naja, da müssen wir halt

00:10:53.380 --> 00:10:55.040
hardware-technisch noch so ein bisschen aufrüsten, aber

00:10:55.040 --> 00:10:57.400
ja. Du hast doch irgendwo ein Raspberry stehen,

00:10:57.460 --> 00:10:59.060
den können wir über das Netzwerk anschächen und dann schenken wir

00:10:59.060 --> 00:11:01.120
den per Bluetooth ans Raspberry und dann drückt der einfach

00:11:01.120 --> 00:11:02.560
Signal und dann sagt der Chapter-Markt Boben.

00:11:02.900 --> 00:11:05.020
Ja, genau. Das brauchen wir in Python.

00:11:05.600 --> 00:11:06.900
Okay. Ja.

00:11:07.140 --> 00:11:08.620
Nächstes Mal. Ja, also

00:11:08.620 --> 00:11:10.740
Machine Learning. Ja, was hatten wir gestern

00:11:10.740 --> 00:11:12.620
ja gerade die Folge gemacht, wo wir so ein bisschen die

00:11:12.620 --> 00:11:14.600
Einführung besprochen hatten.

00:11:14.940 --> 00:11:15.780
Was ist das und so?

00:11:15.980 --> 00:11:18.120
Menge zu erzählt und

00:11:18.120 --> 00:11:20.260
die Teile

00:11:20.260 --> 00:11:22.560
versuchen wir jetzt auch mal nicht zu wiederholen.

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

00:11:24.520 --> 00:11:26.660
Aber es ist natürlich irgendwie ein weites Feld

00:11:26.660 --> 00:11:28.580
und man kann da irgendwie ganz

00:11:28.580 --> 00:11:30.000
viel zu erzählen und

00:11:30.000 --> 00:11:32.440
wenn ich mich

00:11:32.440 --> 00:11:34.340
richtig erinnere, also Dinge, die wir gestern

00:11:34.340 --> 00:11:36.340
dann noch nicht so wirklich erzählt hatten,

00:11:36.660 --> 00:11:38.440
aber die auch irgendwie wichtig sind, ist halt,

00:11:38.840 --> 00:11:40.320
ich würde mal sagen, so eine grundsätzliche

00:11:40.320 --> 00:11:42.440
Einteilung, was hat man da

00:11:42.440 --> 00:11:44.280
irgendwie an groben

00:11:44.280 --> 00:11:46.540
Geschichten, die wichtig

00:11:46.540 --> 00:11:47.900
sind, ja,

00:11:48.600 --> 00:11:50.780
supervised learning, unsupervised

00:11:50.780 --> 00:11:52.540
learning, reinforcement learning. Wir hatten

00:11:52.540 --> 00:11:54.360
gestern das Beispiel supervised

00:11:54.360 --> 00:11:56.920
learning, also sozusagen Textklassifikation,

00:11:57.000 --> 00:11:58.180
das ist ein klassisches Beispiel,

00:11:58.420 --> 00:12:00.420
das allereinfachste, das binäre. Genau, wir hatten

00:12:00.420 --> 00:12:02.540
Reuters Text, da ist ein Satz und der wurde dann gemeinsam

00:12:02.540 --> 00:12:04.520
analysiert mit dem Jupiter Notebook, was

00:12:04.520 --> 00:12:05.860
der Jochen auch veröffentlicht hat,

00:12:06.340 --> 00:12:07.780
Da kann man das alles so ein bisschen nachvollziehen

00:12:07.780 --> 00:12:10.820
und daran auch so ein bisschen die Praxis vielleicht lernen.

00:12:11.960 --> 00:12:13.220
Ja, vielleicht aus dem theoretischen Background

00:12:13.220 --> 00:12:14.280
dann jetzt nochmal Details.

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

00:12:17.920 --> 00:12:21.260
Naja, dass man halt sozusagen zu jedem Beispiel weiß,

00:12:21.340 --> 00:12:22.100
was rauskommen soll.

00:12:22.180 --> 00:12:24.400
Dass man halt nur das, in Anführungsstrichen,

00:12:24.500 --> 00:12:25.080
nur das Problem hat,

00:12:25.160 --> 00:12:29.680
dass man irgendwelchen Eingaben, halt Ausgaben zuordnen muss

00:12:29.680 --> 00:12:32.000
und das halt anhand von Beispielen tut, die man schon kennt.

00:12:33.620 --> 00:12:46.040
Und der Bereich ist auch, also wenn man jetzt, das hatten wir gestern auch nicht so wirklich viel davon drin, wir werden wahrscheinlich auch nochmal eine eigene Folge machen, die sich jetzt, die dann im Detail auch nochmal so auf Deep-Learning-Geschichten eingeht.

00:12:46.040 --> 00:12:57.500
Aber ich denke schon, dass auch ganz interessant wäre, mal eben den Bereich, der halt auch in den letzten Jahren so wichtig geworden ist, nämlich Deep-Learning, doch nochmal ein bisschen darauf einzugehen.

00:13:00.340 --> 00:13:18.240
Und es ist halt so, dass viele Tasks, die vorher schwer waren, also eben im Bereich Bilderkennung oder Speech-to-Text, alles was irgendwie, worum es geht, so ein Signal, wo die Features nicht so richtig offensichtlich sind.

00:13:18.240 --> 00:13:33.660
Also man hat die Daten nicht strukturiert, sondern man hat halt irgendwie ein Bild, also Pixel oder man hat halt irgendwie ein Audiosignal oder so und man möchte damit halt überwachte, also supervised Machine Learning machen.

00:13:35.140 --> 00:13:37.740
war das pro Domain

00:13:37.740 --> 00:13:39.800
früher immer sehr aufwendig, weil man dann halt

00:13:39.800 --> 00:13:41.860
Domain-spezifische Features erstmal extrahiert

00:13:41.860 --> 00:13:43.740
hat. Also das

00:13:43.740 --> 00:13:45.520
heißt irgendwie bei Bildern

00:13:45.520 --> 00:13:48.020
sowas, diese Scale-Invariant

00:13:48.020 --> 00:13:49.380
Feature-Geschichten

00:13:49.380 --> 00:13:53.740
und bei Audio dann wiederum

00:13:53.740 --> 00:13:55.860
andere und so, sodass es halt eine große Rolle spielt,

00:13:55.940 --> 00:13:57.580
in welcher Domain man da unterwegs war

00:13:57.580 --> 00:13:59.600
und das ist natürlich eine sehr

00:13:59.600 --> 00:14:01.760
unschöne Geschichte, weil man kann

00:14:01.760 --> 00:14:03.500
halt sozusagen die Erfahrungen, die man im einen Gebiet

00:14:03.500 --> 00:14:05.520
gesammelt hat, nicht so richtig gut in ein anderes

00:14:05.520 --> 00:14:06.360
Gebiet mitnehmen.

00:14:07.760 --> 00:14:09.420
Und das hat auch nicht wirklich gut funktioniert.

00:14:09.840 --> 00:14:12.660
wenn man jetzt nicht Texte

00:14:12.660 --> 00:14:15.160
klassifizieren möchte, das hat halt auch mit

00:14:15.160 --> 00:14:17.540
diesem Backup-Words-Ansatz, den wir gestern

00:14:17.540 --> 00:14:19.500
auch schon hatten und TF-EDF, funktioniert das

00:14:19.500 --> 00:14:20.420
schon halbwegs gut.

00:14:21.060 --> 00:14:23.220
Das ist schon ziemlich klasse.

00:14:24.880 --> 00:14:25.280
Aber

00:14:25.280 --> 00:14:27.520
wenn man

00:14:27.520 --> 00:14:29.400
jetzt Bilder zum Beispiel klassifizieren möchte

00:14:29.400 --> 00:14:31.040
in sowas wie Hundekatzen oder

00:14:31.040 --> 00:14:32.840
Elefanten, Eichhörnchen,

00:14:33.500 --> 00:14:35.860
das hat nie wirklich gut

00:14:35.860 --> 00:14:37.460
funktioniert. Es gibt da so ein klassisches Dataset

00:14:37.460 --> 00:14:39.980
namens ImageNet.

00:14:40.480 --> 00:14:41.940
Da sind eineinhalb Millionen Bilder drin,

00:14:42.020 --> 00:14:42.820
ungefähr tausend Klassen.

00:14:44.220 --> 00:14:45.800
Und ja, das ist manchmal

00:14:45.800 --> 00:14:47.540
so ein bisschen eigen,

00:14:47.780 --> 00:14:49.620
dieses Dataset.

00:14:50.720 --> 00:14:51.480
Jemand hat mal,

00:14:52.080 --> 00:14:53.740
ich glaube, das war André Carpathy

00:14:53.740 --> 00:14:54.960
oder so, der jetzt irgendwie

00:14:54.960 --> 00:14:57.920
Data Science Chef von Tesla ist.

00:14:59.000 --> 00:14:59.600
Der hat

00:14:59.600 --> 00:15:01.720
irgendwann mal, weil er

00:15:01.720 --> 00:15:03.660
wissen wollte, wie ist eigentlich der Fehler von

00:15:03.660 --> 00:15:04.620
Menschen auf diesem Set,

00:15:05.280 --> 00:15:07.500
selber sich so ein Annotationstool in JavaScript

00:15:07.500 --> 00:15:09.540
gebastelt und

00:15:09.540 --> 00:15:11.640
ja,

00:15:12.860 --> 00:15:15.480
dabei halt irgendwie eine

00:15:15.480 --> 00:15:17.560
der Sachen, die er gelernt hat, die für ihn überraschend waren, ist

00:15:17.560 --> 00:15:19.380
das halt ein Drittel der

00:15:19.380 --> 00:15:21.620
Bilder

00:15:21.620 --> 00:15:23.620
sind halt irgendwie irgendwelche Hunde oder Hunderassen

00:15:23.620 --> 00:15:25.300
und das ist natürlich total auch für Menschen super

00:15:25.300 --> 00:15:27.300
ätzend schwierig, irgendwie

00:15:27.300 --> 00:15:29.080
genau rauszukriegen, wenn man jetzt ein Bild

00:15:29.080 --> 00:15:31.340
und die sind dann, werden alle relativ klein gerechnet,

00:15:31.420 --> 00:15:33.180
Bilder. Also man hat da irgendwie so

00:15:33.180 --> 00:15:35.420
150x150 Pixel Ding, wo man

00:15:35.420 --> 00:15:37.440
nicht viel drauf erkennt, wenn das ein großes Bild

00:15:37.440 --> 00:15:39.420
war und man hat das so runterskaliert. Und man sieht da

00:15:39.420 --> 00:15:41.320
irgendwas Wuscheliges und dann muss man sagen, ist das

00:15:41.320 --> 00:15:42.380
jetzt irgendwie, keine Ahnung,

00:15:42.880 --> 00:15:45.220
ein Dackel oder

00:15:45.220 --> 00:15:46.760
ein, weiß ich nicht,

00:15:47.700 --> 00:15:48.920
Spezialdackel.

00:15:50.660 --> 00:15:51.400
Ich kenn mich jetzt

00:15:51.400 --> 00:15:52.700
auch damit nicht aus und er auch nicht.

00:15:52.700 --> 00:15:54.620
Und dann hat er ganz schön geflucht

00:15:54.620 --> 00:15:56.440
und hat dann irgendwie daneben

00:15:56.440 --> 00:15:58.660
sich Bilder von den einzelnen

00:15:58.660 --> 00:16:00.540
Hunderassen hingelegt und dann

00:16:00.540 --> 00:16:01.840
irgendwie das und ja,

00:16:02.500 --> 00:16:04.120
hatte doch erstaunlich viele Fehler dabei

00:16:04.120 --> 00:16:06.680
und das war

00:16:06.680 --> 00:16:08.580
auch mit den klassischen Ansätzen

00:16:08.580 --> 00:16:10.500
war dieses Problem furchtbar schwierig

00:16:10.500 --> 00:16:12.600
für Computer, bis dann halt

00:16:12.600 --> 00:16:14.360
irgendwann 2011, glaube ich, war das mit

00:16:14.360 --> 00:16:14.800
AlexNet.

00:16:16.080 --> 00:16:18.340
Ja, also nochmal ganz kurz, ImageNet ist irgendwie von

00:16:18.340 --> 00:16:20.680
Princeton und Stanford so eine Gemeinschaftsproduktion,

00:16:20.680 --> 00:16:22.580
die auch jeder frei benutzen kann, wo halt tatsächlich

00:16:22.580 --> 00:16:24.600
diese Datenbanken mit den Labels

00:16:24.600 --> 00:16:25.820
verfügbar sind für alle Bilder.

00:16:27.840 --> 00:16:29.180
Und AlexNet

00:16:29.180 --> 00:16:30.940
ist jetzt das nächste.

00:16:32.040 --> 00:16:32.380
Genau.

00:16:33.920 --> 00:16:34.940
Ich gucke gerade noch mal nach,

00:16:35.000 --> 00:16:36.700
wann das genau sozusagen

00:16:36.700 --> 00:16:38.360
diese, es gibt da eine Challenge zu

00:16:38.360 --> 00:16:40.020
diesem Dataset

00:16:40.020 --> 00:16:42.800
und da gibt es dann so etwas wie

00:16:42.800 --> 00:16:44.760
Top 5 Fehler, also wie viele von den

00:16:44.760 --> 00:16:46.840
Top 5 Klassen, die man halt für ein

00:16:46.840 --> 00:16:48.800
Bild ausgespuckt hat, waren halt

00:16:48.800 --> 00:16:49.420
falsch oder so.

00:16:50.820 --> 00:16:52.880
Und ich gucke gerade noch mal

00:16:52.880 --> 00:16:53.760
nach, wann das genau war.

00:16:54.600 --> 00:16:56.480
Ah ja, das ist genau, es gibt halt diese Image

00:16:56.480 --> 00:16:58.720
Net Large Scale Visual

00:16:58.720 --> 00:17:00.420
Recognition Challenge und

00:17:00.420 --> 00:17:02.680
genau 2012, also nicht 2011,

00:17:02.800 --> 00:17:04.140
hat das Ding halt

00:17:04.140 --> 00:17:06.620
gewonnen

00:17:06.620 --> 00:17:08.760
und hat halt den Fehler

00:17:08.760 --> 00:17:09.080
um

00:17:09.080 --> 00:17:12.600
mehr als

00:17:12.600 --> 00:17:14.580
10% irgendwie reduziert und das

00:17:14.580 --> 00:17:16.720
war halt irgendwie gewaltiger

00:17:16.720 --> 00:17:18.740
Schritt. Also es war halt so

00:17:18.740 --> 00:17:22.300
das hat mal

00:17:22.300 --> 00:17:23.880
in einem Interview mit

00:17:23.880 --> 00:17:25.360
Jeffrey Hinton, glaube ich,

00:17:25.360 --> 00:17:27.760
nee, das war

00:17:27.760 --> 00:17:30.040
Jan de Kuhn hat das irgendwie mal

00:17:30.040 --> 00:17:31.980
in einem Interview erzählt, der meinte halt

00:17:31.980 --> 00:17:34.040
vorher war es so. Es gab

00:17:34.040 --> 00:17:35.920
diese Convolutional Neural Nets,

00:17:36.000 --> 00:17:37.440
die da verwendet wurden, ja auch schon lange

00:17:37.440 --> 00:17:39.980
vorher, aber das hat niemand

00:17:39.980 --> 00:17:41.940
so wirklich ernst genommen. Die waren so ein bisschen

00:17:41.940 --> 00:17:42.620
esoterisch

00:17:42.620 --> 00:17:46.060
und es war bis zu dem

00:17:46.060 --> 00:17:48.000
Zeitpunkt, die waren auch lange Zeit nicht so wirklich

00:17:48.000 --> 00:17:49.820
en vogue und es war sehr schwierig

00:17:49.820 --> 00:17:51.220
irgendwie ein Paper durchzukriegen,

00:17:52.340 --> 00:17:53.840
also in der Zeitschrift veröffentlicht zu bekommen,

00:17:53.840 --> 00:17:54.460
wenn man

00:17:54.460 --> 00:17:57.720
da irgendwie Convolutional

00:17:57.720 --> 00:17:59.660
sich mit Convolutional Neural Nets beschäftigt hat.

00:18:00.620 --> 00:18:00.940
Und

00:18:00.940 --> 00:18:03.040
nach dieser,

00:18:03.380 --> 00:18:05.480
nach diesem Erfolg von AlexNet

00:18:05.480 --> 00:18:07.840
irgendwie so 2014 war es praktisch

00:18:07.840 --> 00:18:09.800
unmöglich, ein Paper, was sich irgendwie mit Bildern

00:18:09.800 --> 00:18:11.380
oder Vision oder so beschäftigt hat,

00:18:11.840 --> 00:18:13.640
irgendwo unterzubekommen, dass sich nicht

00:18:13.640 --> 00:18:15.840
mit Convolutional Neural Nets

00:18:15.840 --> 00:18:17.680
beschäftigt hat. Das heißt, in zwei Jahren hat sich das

00:18:17.680 --> 00:18:19.880
irgendwie, es gab so einen kompletten Paradigmenwechsel

00:18:19.880 --> 00:18:21.740
in diesem Bereich und das ist natürlich schon sehr

00:18:21.740 --> 00:18:23.540
erstaunlich. Also, und

00:18:23.540 --> 00:18:25.900
ja, es sind also dramatische Verbesserungen

00:18:25.900 --> 00:18:27.000
irgendwie eingetreten.

00:18:27.720 --> 00:18:29.400
Und das ist halt auch nicht nur in dem

00:18:29.400 --> 00:18:31.480
einen Bereich passiert, sondern bei Spracherkennung

00:18:31.480 --> 00:18:31.980
halt auch.

00:18:33.680 --> 00:18:35.500
Du musst ja vielleicht da ja nochmal die Basis erklären,

00:18:35.560 --> 00:18:37.220
die hatten wir nämlich gestern alle nicht. Also was ist jetzt überhaupt

00:18:37.220 --> 00:18:39.480
ein Convolution Neural Network? Vielleicht auch nochmal kurz,

00:18:39.540 --> 00:18:40.760
was ist überhaupt ein Neural Network?

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

00:18:43.420 --> 00:18:45.460
aber für jetzt Menschen, die jetzt noch nicht so tief in dem Thema

00:18:45.460 --> 00:18:47.140
drin sind, sollte man kurz erklären.

00:18:48.000 --> 00:18:49.580
Sollte man, ist aber auch schwierig

00:18:49.580 --> 00:18:51.060
wirklich zu erklären, was es ist.

00:18:53.220 --> 00:18:54.520
Was man immer so, wenn man jetzt

00:18:54.520 --> 00:18:55.940
das aus Medien

00:18:55.940 --> 00:18:58.180
mitbekommt,

00:18:58.280 --> 00:19:00.420
worum es da geht, da wird dann meistens

00:19:00.420 --> 00:19:02.320
das so dargestellt, wie, naja, das ist

00:19:02.320 --> 00:19:03.800
ein Vorbild des Gehirns modelliert oder so.

00:19:04.220 --> 00:19:06.320
Weiß ich nicht. Ich finde, das ist alles immer sehr irreführend,

00:19:06.420 --> 00:19:08.160
weil wie das Gehirn funktioniert, weiß nicht mal so richtig.

00:19:09.660 --> 00:19:09.980
Und

00:19:09.980 --> 00:19:12.460
im Grunde, ja,

00:19:12.460 --> 00:19:14.440
man könnte sagen, es ist irgendwie inspiriert von Neuronen,

00:19:14.540 --> 00:19:16.020
aber es ist auch mehr auch nicht.

00:19:16.400 --> 00:19:18.460
Und mittlerweile hat das, was man da macht, nicht mehr viel zu tun

00:19:18.460 --> 00:19:20.400
mit dem, was man mal angefangen hat.

00:19:20.400 --> 00:19:22.380
Einfach irgendwie so ein paar leuchtende Punkte auf so einer

00:19:22.380 --> 00:19:24.160
Karte, die dann irgendwie aufleuchten, mit irgendeiner

00:19:24.160 --> 00:19:26.480
kryptische Verbindungen haben, weil da irgendwie Strom

00:19:26.480 --> 00:19:27.840
von A nach B fließt oder so

00:19:27.840 --> 00:19:30.300
und dann halt irgendwie eine Beziehung dargestellt werden kann.

00:19:30.400 --> 00:19:31.540
Vielleicht meinten Neuron irgendwie sowas?

00:19:32.820 --> 00:19:34.660
Naja, also eine passendere

00:19:34.660 --> 00:19:36.440
Bezeichnung fände ich jetzt

00:19:36.440 --> 00:19:37.440
irgendwie, das sind so

00:19:37.440 --> 00:19:40.500
gestapelte Funktionsapproximatoren.

00:19:40.760 --> 00:19:42.400
Also im Grunde geht es darum, halt Funktionen

00:19:42.400 --> 00:19:44.400
zu approximieren und man hat

00:19:44.400 --> 00:19:46.220
halt irgendwie rausgefunden, dass das super geht,

00:19:46.220 --> 00:19:47.880
wenn man das in Schichten

00:19:47.880 --> 00:19:49.400
organisiert und wenn man

00:19:49.400 --> 00:19:51.820
sozusagen da bestimmte Aktivierungsfunktionen

00:19:51.820 --> 00:19:53.720
verwendet, da hat sich auch viel getan.

00:19:54.160 --> 00:20:08.840
Und, ähm, ja, äh, man kann sich das ungefähr so vorstellen, dass, also man hat halt, äh, ja, sozusagen Schichten von, äh,

00:20:08.840 --> 00:20:14.340
von so

00:20:14.340 --> 00:20:16.520
Parameter, parametrisierten

00:20:16.520 --> 00:20:18.540
Dingen, die halt irgendwie etwas machen

00:20:18.540 --> 00:20:20.080
mit einer Eingabe. Es kommt halt eine Eingabe rein

00:20:20.080 --> 00:20:22.380
und dann

00:20:22.380 --> 00:20:24.240
wird das von sehr, sehr

00:20:24.240 --> 00:20:26.500
basalen oder

00:20:26.500 --> 00:20:28.480
sehr, sehr konkreten Dingen,

00:20:28.500 --> 00:20:30.620
die da detektiert werden, immer zu immer abstrakteren

00:20:30.620 --> 00:20:32.280
Geschichten, je tiefer das durch das Netz durchgeht.

00:20:32.300 --> 00:20:34.400
Vielleicht machen wir das einmal so kurz als Beispiel

00:20:34.400 --> 00:20:35.860
anhand von so einem runden Bild.

00:20:36.280 --> 00:20:37.860
Also ich habe jetzt vielleicht als erste Information

00:20:37.860 --> 00:20:39.940
die Bildpixel irgendwie

00:20:39.940 --> 00:20:41.780
in verschiedene Sektoren unterteilt. Dann vielleicht

00:20:41.780 --> 00:20:44.080
sowas wie eine Abstraktionsschiebende als die Helligkeit

00:20:44.080 --> 00:20:45.680
des Bildes oder so. Oder

00:20:45.680 --> 00:20:48.060
andere Dinge. Vielleicht dann noch grobe

00:20:48.060 --> 00:20:49.380
Strukturen unterteilt. Kanten.

00:20:49.380 --> 00:20:51.640
Mit Hültern oder so. Kanten. Genau.

00:20:51.820 --> 00:20:53.260
Wo ist hier eine Kante? Wo ist eine Ecke?

00:20:53.920 --> 00:20:55.380
Was sind helle Flecken in dem Bild?

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

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

00:21:00.440 --> 00:21:01.200
Also, genau.

00:21:02.340 --> 00:21:03.880
Und das, was da

00:21:03.880 --> 00:21:05.560
passiert im Grunde, ist halt das, was die

00:21:05.560 --> 00:21:07.020
Convolutional-Geschichte, ich will es gar nicht

00:21:07.020 --> 00:21:09.440
mehr so ausführlich beschreiben, was da für eine

00:21:09.440 --> 00:21:11.340
mathematische Operation ist, das ist eigentlich relativ simpel

00:21:11.340 --> 00:21:13.620
passiert, aber was das

00:21:13.620 --> 00:21:15.580
macht, ist, dass es dafür sorgt,

00:21:15.660 --> 00:21:17.360
dass Dinge, die nah beieinander sind, halt

00:21:17.360 --> 00:21:18.160
irgendwie auch

00:21:18.160 --> 00:21:21.420
zusammenbleiben, sozusagen, weil man hat

00:21:21.420 --> 00:21:23.780
sonst immer das Problem, oder das hatte man bei den

00:21:23.780 --> 00:21:27.500
anderen Verfahren, mit denen man da

00:21:27.500 --> 00:21:29.360
angefangen hat, halt auch,

00:21:29.880 --> 00:21:31.520
dass sobald sich irgendwas so ein bisschen

00:21:31.520 --> 00:21:33.000
geändert hat, also wenn der Hund

00:21:33.000 --> 00:21:35.340
im Trainingsbeispiel, im ersten

00:21:35.340 --> 00:21:37.320
Trainingsbeispiel nicht an der gleichen Stelle ist wie im zweiten

00:21:37.320 --> 00:21:39.380
Trainingsbeispiel, dann wurde

00:21:39.380 --> 00:21:41.260
das schon nicht mehr erkannt, weil, naja,

00:21:41.620 --> 00:21:42.780
sozusagen, wenn man einfach ein Bild

00:21:42.780 --> 00:21:44.880
einfach so als Vektor auffasst, dann

00:21:44.880 --> 00:21:47.240
wenn sich da drin

00:21:47.240 --> 00:21:49.220
sozusagen räumlich irgendetwas bewegt, dann ist das halt

00:21:49.220 --> 00:21:50.920
an einer ganz anderen Stelle. Da werden halt ganz andere

00:21:50.920 --> 00:21:53.000
Features sozusagen aktiviert. Man könnte ja

00:21:53.000 --> 00:21:54.560
sagen, naiv, ein Bild ist einfach nur

00:21:54.560 --> 00:21:57.160
irgendwie, hat so viele Dimensionen wie

00:21:57.160 --> 00:21:59.400
Pixel oder so viele Dimensionen

00:21:59.400 --> 00:22:01.240
wie Pixel mal drei, wenn man halt für jeden Kanal

00:22:01.240 --> 00:22:02.920
halt noch ein... RGB, ja,

00:22:03.000 --> 00:22:05.320
noch eine Dimension.

00:22:06.600 --> 00:22:08.180
Aber dann hat man eben

00:22:08.180 --> 00:22:10.080
dieses Problem, was passiert, wenn sich Dinge in dem Bild

00:22:10.080 --> 00:22:12.340
bewegen und dann wird es halt ätzend

00:22:12.340 --> 00:22:13.980
und funktioniert einfach auch nicht mehr.

00:22:14.640 --> 00:22:15.980
Und dafür, dass

00:22:15.980 --> 00:22:17.960
da helfen diese Convolutional

00:22:17.960 --> 00:22:19.620
Geschichten halt

00:22:19.620 --> 00:22:21.820
stark, weil die dafür sorgen, dass

00:22:21.820 --> 00:22:24.080
Dinge halt sozusagen unabhängig davon, wo sie

00:22:24.080 --> 00:22:25.780
passieren, irgendwie

00:22:25.780 --> 00:22:27.200
detektiert werden können.

00:22:27.820 --> 00:22:30.140
Und ja, man fängt halt mit sowas an,

00:22:30.260 --> 00:22:31.680
wie eben Kantenhelligkeiten

00:22:31.680 --> 00:22:33.920
in ganz einfachen Formen

00:22:33.920 --> 00:22:35.540
und die werden dann sozusagen

00:22:35.540 --> 00:22:38.000
in den Schichten halt immer weiter abstrahiert,

00:22:38.520 --> 00:22:39.780
sodass halt man

00:22:39.780 --> 00:22:41.400
auf, wenn das jetzt

00:22:41.400 --> 00:22:43.780
durch mehrere Ebenen gegangen ist, hat man halt

00:22:43.780 --> 00:22:45.500
abstraktere Features, die halt

00:22:45.500 --> 00:22:47.640
weiter unten im Netz sozusagen

00:22:47.640 --> 00:22:49.700
detektiert werden. Also es gibt

00:22:49.700 --> 00:22:50.580
dann halt irgendwo

00:22:50.580 --> 00:22:53.560
sozusagen Teile,

00:22:54.220 --> 00:22:55.000
Layer,

00:22:55.720 --> 00:22:57.120
die detektieren dann

00:22:57.120 --> 00:23:00.000
Ohren oder Augen oder Haare

00:23:00.000 --> 00:23:01.780
oder sowas.

00:23:02.120 --> 00:23:04.160
Oder vielleicht irgendwie

00:23:04.160 --> 00:23:05.820
ist da überhaupt ein Tier oder ist das nicht eher

00:23:05.820 --> 00:23:06.960
Himmel oder ist das irgendwie

00:23:06.960 --> 00:23:09.660
eine Wiese oder so? Ja, also auch

00:23:09.660 --> 00:23:11.640
Masterklassen und sowas. Also ein Tier, wenn es

00:23:11.640 --> 00:23:13.860
guckt, ist ein Hund, guckt dann erstmal jemand drüber, ist das überhaupt ein Tier

00:23:13.860 --> 00:23:15.600
oder sowas? Könnte natürlich passen.

00:23:15.720 --> 00:23:17.240
Oder ist das ein Lebewesen oder sowas?

00:23:17.400 --> 00:23:18.700
Oder ist das überhaupt ein Bild?

00:23:19.560 --> 00:23:21.920
Und ja, das passt halt

00:23:21.920 --> 00:23:22.860
super,

00:23:23.740 --> 00:23:25.620
weil irgendwie diese räumliche Dinge

00:23:25.620 --> 00:23:27.900
haben halt eine räumliche Ordnung und sind halt irgendwie hierarchisch

00:23:27.900 --> 00:23:29.760
strukturiert. So ist halt unsere Welt

00:23:29.760 --> 00:23:31.480
irgendwie strukturiert, die wir wahrnehmen und

00:23:31.480 --> 00:23:33.600
wenn man das, ja, diese

00:23:33.600 --> 00:23:35.520
Modelle sind halt,

00:23:36.320 --> 00:23:37.620
bilden das halt sehr gut ab

00:23:37.620 --> 00:23:39.620
und repräsentieren darum halt das, was man

00:23:39.620 --> 00:23:41.700
da bekommt halt, sind halt in der Lage

00:23:41.700 --> 00:23:43.700
das sehr, sehr gut zu repräsentieren. Ja, ist das ein Ölgemälde,

00:23:43.740 --> 00:23:44.880
ein Foto oder eine Skizze?

00:23:45.480 --> 00:23:47.480
Ja, und genau, so

00:23:47.480 --> 00:23:49.280
all solche Sachen, was ist die Textur von Dingen?

00:23:51.280 --> 00:23:51.680
Ja,

00:23:51.840 --> 00:23:53.240
und das hat halt super funktioniert

00:23:53.240 --> 00:23:55.540
und was halt auch

00:23:55.540 --> 00:23:56.940
total toll ist, ist, dass man

00:23:56.940 --> 00:23:58.780
im Grunde keine,

00:23:58.940 --> 00:24:01.880
kein echtes Feature-Engineering

00:24:01.880 --> 00:24:03.700
mehr machen muss, so wie früher.

00:24:04.600 --> 00:24:05.500
Sondern dass das halt

00:24:05.500 --> 00:24:07.180
zum großen Teil automatisch passiert.

00:24:09.880 --> 00:24:11.760
Und gut, die Architektur des Modells

00:24:11.760 --> 00:24:13.700
ist natürlich noch so eine Sache, aber

00:24:13.700 --> 00:24:14.740
das ist

00:24:14.740 --> 00:24:16.980
halt nicht mehr das Gleiche,

00:24:17.460 --> 00:24:19.740
als wenn man da jetzt von Hand

00:24:19.740 --> 00:24:21.780
irgendwelche

00:24:21.780 --> 00:24:24.020
Features rauszieht

00:24:24.020 --> 00:24:25.260
aus einem Bild, sondern

00:24:25.260 --> 00:24:27.200
das ist alles gelernt.

00:24:28.720 --> 00:24:38.100
Also das heißt tatsächlich, durch diese Bibliotheken weiß man halt dann direkt, hey, ein Bild hat diese verschiedenen Dinge, Netze, Schichten und durch die ich dann einfach durch iterieren kann.

00:24:38.640 --> 00:24:50.040
Ja, also das Modell trainiert halt eben nicht nur, passt sich nicht nur den vorher hartgecodeten Features an, sondern das Lernen, was sind eigentlich gute Features, ist halt mit dabei.

00:24:50.580 --> 00:24:52.560
Und das ist halt ein riesen Fortschritt.

00:24:52.600 --> 00:24:53.780
Schwarmintelligenz, schon wieder.

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

00:24:55.560 --> 00:24:55.840
Ja.

00:24:57.100 --> 00:25:18.160
Aber ja, es macht das halt viel einfacher und man kann halt die gleichen Methoden verwenden, ob man jetzt auf Audiodaten arbeitet oder eben auf Bildern oder auf irgendwas völlig anderem. Und das ist natürlich auch total toll, weil dann sozusagen Erfolge in einem Feld halt irgendwie in eine andere Domäne transportieren kann.

00:25:19.720 --> 00:25:46.460
Ja, und das geht so weit, dass halt inzwischen man, ja, es gibt immer so den Satz, Perception is solved. Ja, so irgendwie alles, was damit zu tun hat, Dinge zu erkennen, irgendwie Handschrift, Ziffern, Autokennzeichen, irgendwie Hausnummern, Straßenschilder oder eben auch Katzen, Hunde, irgendwelche Alltagsgegenstände.

00:25:46.460 --> 00:25:48.380
das machen diese Dinger mittlerweile

00:25:48.380 --> 00:25:50.360
besser als Menschen. Also die haben da

00:25:50.360 --> 00:25:52.240
auch eigentlich überall super

00:25:52.240 --> 00:25:54.260
Human Performance erreicht. Also wenn man

00:25:54.260 --> 00:25:56.400
dann selber das von Hand

00:25:56.400 --> 00:25:58.180
labelt und dann guckt, wer macht mehr Fehler, dann

00:25:58.180 --> 00:25:59.920
machen Menschen üblicherweise mehr Fehler.

00:26:00.560 --> 00:26:02.040
Und das ist schon

00:26:02.040 --> 00:26:03.840
ganz erstaunlich. Das wäre

00:26:03.840 --> 00:26:06.140
zu dem Zeitpunkt, wo man das halt noch nicht wusste,

00:26:06.200 --> 00:26:08.260
dass das geht, hätten viele gesagt, das ist völlig

00:26:08.260 --> 00:26:10.160
unabsehbar, wann das jemals, oder ob es überhaupt

00:26:10.160 --> 00:26:11.620
jemals möglich sein wird, dass sowas passiert.

00:26:12.100 --> 00:26:13.980
Und dann ging es innerhalb von wenigen Jahren. Also

00:26:13.980 --> 00:26:16.220
das ist tatsächlich ein riesen

00:26:16.220 --> 00:26:18.360
Fortschritt passiert. Auf der anderen Seite

00:26:18.360 --> 00:26:20.280
muss man natürlich sagen, das heißt jetzt nicht,

00:26:20.420 --> 00:26:22.020
dass alles gelöst ist oder dann wird immer

00:26:22.020 --> 00:26:24.080
davon künstliche Intelligenz geredet und das ist schon

00:26:24.080 --> 00:26:25.920
irgendwie Quatsch, weil, also ich meine,

00:26:26.000 --> 00:26:28.060
Machine Learning ist halt so ein Teilbereich der künstlichen Intelligenz

00:26:28.060 --> 00:26:30.120
und wahrscheinlich auch so der interessanteste

00:26:30.120 --> 00:26:30.760
zur Zeit, aber

00:26:30.760 --> 00:26:33.740
die wirklich

00:26:33.740 --> 00:26:35.740
knackigen Probleme,

00:26:36.460 --> 00:26:38.280
wenn es darum geht,

00:26:38.560 --> 00:26:40.140
irgendwie wirklich intelligentes Verhalten

00:26:40.140 --> 00:26:41.160
oder...

00:26:41.160 --> 00:26:44.000
Wie definiert man das? Ja, also wenn man jetzt tatsächlich

00:26:44.000 --> 00:26:46.380
als ein individuelles, autonomes

00:26:46.380 --> 00:26:48.040
Individuum hätte, das ich dann

00:26:48.040 --> 00:26:50.120
als intelligent definieren kann, da ist natürlich was anderes

00:26:50.120 --> 00:26:51.880
als wenn ich jetzt eine Maschine habe, die

00:26:51.880 --> 00:26:53.980
immerhin binäre Entscheidungen treffen kann oder

00:26:53.980 --> 00:26:55.540
sowas, die einigermaßen richtig sind.

00:26:56.000 --> 00:26:58.080
Das ist auch überraschend,

00:26:58.160 --> 00:26:59.860
wie viel sich auf solche Entscheidungen reduzieren lässt.

00:27:00.060 --> 00:27:02.000
Also das ist tatsächlich, macht das schon viel aus, aber

00:27:02.000 --> 00:27:03.660
diese,

00:27:04.100 --> 00:27:06.260
die Welt

00:27:06.260 --> 00:27:07.760
sozusagen

00:27:07.760 --> 00:27:09.780
gesehen aus der Sicht von so einem Netz ist halt

00:27:09.780 --> 00:27:11.740
eine sehr, sehr oberflächliche Sicht der Welt.

00:27:12.460 --> 00:27:14.940
diese Modelle lassen sich sehr leicht täuschen,

00:27:15.000 --> 00:27:16.460
weil sie eben fast nichts über die Welt wissen.

00:27:17.820 --> 00:27:18.880
Also du verhältst das alles nicht für

00:27:18.880 --> 00:27:20.460
intelligent. Also ich finde das natürlich schon

00:27:20.460 --> 00:27:22.620
riesen,

00:27:22.680 --> 00:27:24.920
also um bei einem Griff zu bleiben, Intelligence,

00:27:25.220 --> 00:27:26.700
die da irgendwo hinter steckt. Also

00:27:26.700 --> 00:27:28.640
man ist natürlich jetzt nicht ungefragt

00:27:28.640 --> 00:27:30.640
hinnehmbar und die sticht natürlich in der

00:27:30.640 --> 00:27:32.540
Stelle noch kein Menschen aus oder kann irgendwie Konkurrenz

00:27:32.540 --> 00:27:34.740
werden oder sowas, wie vielleicht dann die Gefahren,

00:27:34.840 --> 00:27:36.620
die mit so einem AI-Ding da irgendwie verknüpft

00:27:36.620 --> 00:27:38.120
werden, auch noch hinzukämen. Aber

00:27:38.120 --> 00:27:40.640
ich finde das schon sehr beeindruckend. Also ich würde fast auch schon

00:27:40.640 --> 00:27:42.200
von Kunstintelligenz sprechen wollen, so aus dem

00:27:42.200 --> 00:27:44.480
Laienverständnis heraus, als wenn es jetzt so eine richtige

00:27:44.480 --> 00:27:45.840
Intelligenz jetzt vielleicht noch nicht ist.

00:27:46.680 --> 00:27:48.360
Aber in gewisser Weise kann halt die Maschine

00:27:48.360 --> 00:27:50.460
tatsächlich, also das ist glaube ich der Fortschritt,

00:27:50.680 --> 00:27:52.560
mit neuen Dingen umgehen. Und das ist

00:27:52.560 --> 00:27:54.420
halt nicht das, was sie vorher gelernt hat. Und das ist ja

00:27:54.420 --> 00:27:55.700
das, was das Spannende daran ist.

00:27:56.200 --> 00:27:58.440
Und das ist vielleicht schon irgendwo Intelligenz.

00:27:58.440 --> 00:28:00.060
Ich denke, der große

00:28:00.060 --> 00:28:01.920
Unterschied zu früher ist halt, dass

00:28:01.920 --> 00:28:04.500
in, muss man auch sagen, begrenzten

00:28:04.500 --> 00:28:05.320
Bereichen

00:28:05.320 --> 00:28:07.700
muss man halt nicht mehr

00:28:07.700 --> 00:28:10.260
wirklich explizit Sachen programmieren,

00:28:10.400 --> 00:28:14.200
sondern man zeigt jetzt einer Maschine nur noch Beispiele dafür,

00:28:14.260 --> 00:28:15.400
wie es richtig sein soll.

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

00:28:20.240 --> 00:28:22.920
Das heißt, man muss in vielen Bereichen nicht mehr explizit shoppern.

00:28:23.400 --> 00:28:25.100
Und das ist natürlich ein Riesenvorteil,

00:28:25.180 --> 00:28:27.880
weil das war bisher immer so ein Bottleneck für viele Anwendungen.

00:28:28.700 --> 00:28:28.940
Ja, genau.

00:28:29.060 --> 00:28:31.020
Also wenn man halt immer noch Menschen drauf gucken lassen muss,

00:28:31.040 --> 00:28:31.960
stimmt das jetzt alles oder nicht?

00:28:32.140 --> 00:28:33.620
Ja, vor allem, die müssen das halt irgendwie hinschreiben,

00:28:33.700 --> 00:28:34.440
die müssen das auch verstehen.

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

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

00:28:38.980 --> 00:28:41.100
es ist halt nicht auf

00:28:41.100 --> 00:28:42.960
alle Probleme anwendbar. Es gibt

00:28:42.960 --> 00:28:44.940
viele Probleme, wenn das grundsätzlich nicht so gut

00:28:44.940 --> 00:28:47.020
funktioniert und

00:28:47.020 --> 00:28:48.240
ja,

00:28:48.960 --> 00:28:50.980
da kommen wir auch dann zu den Geschichten mit

00:28:50.980 --> 00:28:53.120
dem Unterschied zwischen Supervised an Supervised

00:28:53.120 --> 00:28:55.020
und Reinforcement

00:28:55.020 --> 00:28:57.060
Learning. Also

00:28:57.060 --> 00:28:58.860
Supervised geht, also da

00:28:58.860 --> 00:29:00.400
ist es mittlerweile ziemlich gut,

00:29:01.460 --> 00:29:03.000
aber auch

00:29:03.000 --> 00:29:04.900
nur, wenn es um so ganz oberflächliche Geschichten geht,

00:29:05.080 --> 00:29:06.880
also die Modelle wissen

00:29:06.880 --> 00:29:08.840
nicht, was sie da tun, sie haben kein

00:29:08.840 --> 00:29:10.100
Verständnis dafür, was da passiert.

00:29:11.320 --> 00:29:12.860
Deswegen lassen sie sich auch eben sehr leicht

00:29:12.860 --> 00:29:14.300
täuschen, weil es muss halt nur irgendwie

00:29:14.300 --> 00:29:16.840
halbwegs oberflächlich so aussehen, das reicht ja

00:29:16.840 --> 00:29:17.420
vollkommen.

00:29:19.720 --> 00:29:21.000
Wenn da irgendwas sozusagen

00:29:21.000 --> 00:29:22.800
physisch unmöglich wäre oder so, wo ein Mensch

00:29:22.800 --> 00:29:24.340
sofort erkennt, das kann ja gar nicht sein,

00:29:24.700 --> 00:29:25.980
ist es für so ein Modell völlig unmöglich.

00:29:26.100 --> 00:29:28.760
Ja, man könnte so ein paar lustige Surveillance-Aktionen machen, indem man irgendwie so

00:29:28.760 --> 00:29:30.820
Plakate hochhält mit gesuchten Persönlichkeiten

00:29:30.820 --> 00:29:32.920
oder bedrohlichen Dingen

00:29:32.920 --> 00:29:34.400
und dann Leute trollt oder so.

00:29:34.560 --> 00:29:36.760
Aber gut, das sind ja noch so Machine Learning Security,

00:29:36.760 --> 00:29:39.380
Hier ist nochmal ein ganz eigenes Ding.

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

00:29:45.820 --> 00:29:47.940
Also einmal ist es halt total interessant,

00:29:48.200 --> 00:29:50.640
dass Menschen nicht so viele Trainingsbeispiele brauchen.

00:29:51.100 --> 00:29:51.960
Also wenn man sich zum Beispiel anguckt,

00:29:52.120 --> 00:29:57.260
wie viele gelabelte Daten sieht so irgendwie ein Kind von null bis,

00:29:57.380 --> 00:29:59.560
es kann irgendwie sprechen und verstehen,

00:30:00.240 --> 00:30:01.220
dann ist das sehr, sehr wenig.

00:30:01.560 --> 00:30:03.100
Und man versteht überhaupt nicht, wie das sein kann,

00:30:03.180 --> 00:30:05.140
dass man mit so wenig Trainingsbeispielen irgendwie auskommt,

00:30:05.560 --> 00:30:07.160
weil diese ganzen Deep Learning-Geschichten brauchen

00:30:07.160 --> 00:30:09.240
viel, viel mehr. Was jetzt nicht so ein Problem

00:30:09.240 --> 00:30:11.140
ist, weil man inzwischen Internet und so,

00:30:11.260 --> 00:30:13.040
man hat die Daten und

00:30:13.040 --> 00:30:15.080
wenn da alle Leute sprechen, dann irgendwie in ihre Telefone

00:30:15.080 --> 00:30:17.020
und dann sammelt man davon

00:30:17.020 --> 00:30:19.080
halt irgendwie tausend Stunden, Millionen,

00:30:19.360 --> 00:30:20.700
Milliarden, keine Ahnung und dann

00:30:20.700 --> 00:30:22.020
hat man genug, um halt

00:30:22.020 --> 00:30:24.840
große Modelle mit vielen, vielen Parametern zu fitten

00:30:24.840 --> 00:30:26.820
und dann funktioniert das auch, aber

00:30:26.820 --> 00:30:28.700
es wäre natürlich schon interessant rauszukriegen, wie

00:30:28.700 --> 00:30:31.060
kommt das, dass Menschen das auch super

00:30:31.060 --> 00:30:33.080
hinkriegen, aber das alles nicht,

00:30:33.200 --> 00:30:33.980
diese Daten nicht brauchen.

00:30:35.320 --> 00:30:49.880
Wahrscheinlich liegt das an der Auflösung mit der Information, die die Menschen bekommen. Die ist wahrscheinlich auch so hoch und so riesengroß und so polymorph und so fraktal, dass da dann doch wieder alles hinten rausfällt, was an Informationen wichtig wäre für so ein neueres Network. Und Menschen lernen das dann anhand dieser Masse von Informationen so schnell doch.

00:30:50.420 --> 00:31:08.880
Man kann jetzt sagen, Menschen sehen auch Sachen, hören nicht nur Dinge. Aber ich glaube, das ist gar nicht so sehr der Punkt. Oder das, was halt so die übliche Ansicht ist, dass Menschen und Tiere an Supervised Learning wirklich gut können.

00:31:08.880 --> 00:31:10.960
wirklich gut in der Lage sind, einfach nur

00:31:10.960 --> 00:31:11.620
durch Beobachten

00:31:11.620 --> 00:31:14.900
super Repräsentationen der Welt irgendwie

00:31:14.900 --> 00:31:16.480
aufzubauen.

00:31:17.260 --> 00:31:18.980
Und das kann man halt

00:31:18.980 --> 00:31:19.800
mit

00:31:19.800 --> 00:31:22.900
ja, können halt die Modelle,

00:31:23.000 --> 00:31:23.860
die wir da verwenden,

00:31:24.460 --> 00:31:25.660
im Computer momentan nicht.

00:31:26.580 --> 00:31:28.920
Und da kriegt man

00:31:28.920 --> 00:31:30.380
halt eben schon sowas nicht hin wie,

00:31:30.880 --> 00:31:32.540
was ist da überhaupt eine geeignete Verlustfunktion?

00:31:32.700 --> 00:31:34.640
Also wenn man zum Beispiel sich so ein Problem anguckt, wie

00:31:34.640 --> 00:31:37.040
man möchte vorhersagen, was als nächstes

00:31:37.040 --> 00:31:38.460
passiert in einem Film, den man sieht.

00:31:38.880 --> 00:32:08.860
Ja, also da, äh, man sieht irgendwie, keine Ahnung, eine Savanne in, äh, äh, in, in Afrika, oder laufen irgendwie Tiere durch die Kamera, ja, irgendwie dieses Problem, äh, was ist da für ein Tier, das ist, sozusagen, das geht, aber, ja, was passiert jetzt in fünf Minuten in diesem Film, oder was passiert, was passiert im nächsten Frame, ja, wenn die Tiere von links nach rechts durchlaufen, sind dann plötzlich keine Tiere mehr drin, oder, so, das muss man natürlich noch in entsprechenden Experiment, äh, in irgendeinem Experiment, äh, äh, Teilenaufbau übersetzen, aber wenn man sich jetzt anguckt, können, wie, wie gut können Menschen das vorhersagen,

00:32:08.880 --> 00:32:09.880
was da passiert, super.

00:32:11.260 --> 00:32:13.000
Die verstehen auch, dass wenn die Sonne untergeht,

00:32:13.100 --> 00:32:14.680
dann wird es dunkel oder so. Für solche

00:32:14.680 --> 00:32:15.900
Machine Learning Modelle sehr, sehr schwierig.

00:32:16.300 --> 00:32:18.980
Die kriegen halt vielleicht ein Frame, vielleicht ein paar

00:32:18.980 --> 00:32:21.160
irgendwie auch ganz gut vorhergesagt,

00:32:21.300 --> 00:32:22.880
aber je länger das wird,

00:32:23.020 --> 00:32:24.620
desto absurder wird das, was halt

00:32:24.620 --> 00:32:26.820
vorhergesagt wird. Und man weiß nicht mal,

00:32:26.900 --> 00:32:28.960
wie man jetzt da gut irgendwie eine Distanz

00:32:28.960 --> 00:32:30.620
ausrechnet zu dem, was sie hätten

00:32:30.620 --> 00:32:32.600
vorhersagen müssen. Das heißt, man kennt nicht mal

00:32:32.600 --> 00:32:34.420
eine Verlustfunktion, die man da, das heißt, man kann das

00:32:34.420 --> 00:32:36.480
Optimierungsproblem nicht gut lösen, weil man gar nicht weiß,

00:32:36.480 --> 00:32:37.280
was man optimieren soll.

00:32:37.340 --> 00:32:39.800
Das liegt aber auch an dem Problem, dass die Maschinen

00:32:39.800 --> 00:32:41.800
an der Stelle nicht diese Sinneswahrnehmung

00:32:41.800 --> 00:32:43.220
von einer echten Welt, in der

00:32:43.220 --> 00:32:45.720
Gänze der Erfahrungsmöglichkeiten,

00:32:45.840 --> 00:32:47.680
was jetzt fraktale, dimensionale

00:32:47.680 --> 00:32:49.600
Strukturen angeht, erfassen konnten.

00:32:50.020 --> 00:32:51.600
Und das dann nicht vorliegt in dem

00:32:51.600 --> 00:32:53.800
Datensatz. Möglicherweise

00:32:53.800 --> 00:32:55.320
wäre das eine Option, da irgendwie dran zu gehen.

00:32:55.620 --> 00:32:57.360
Jetzt haben wir noch ein paar Fraktaltheorien,

00:32:57.580 --> 00:32:58.140
wie Mendelbrot.

00:32:59.420 --> 00:33:01.280
Naja, das ist ja wieder Hirngespinze, aber

00:33:01.280 --> 00:33:03.180
vielleicht kann man dadurch irgendwann

00:33:03.180 --> 00:33:05.560
sowas dann doch basteln und dann die KI

00:33:05.560 --> 00:33:07.540
Ja, kann man bestimmt, aber

00:33:07.540 --> 00:33:08.540
momentan wissen wir halt nicht wie.

00:33:10.680 --> 00:33:11.240
Ist halt

00:33:11.240 --> 00:33:13.200
schwer. Und

00:33:13.200 --> 00:33:15.440
das ist sozusagen, wenn man es schaffen würde,

00:33:15.520 --> 00:33:17.120
den Erfolg, den man jetzt beim Supervised Learning

00:33:17.120 --> 00:33:18.980
hatte, irgendwie zu übertragen auf

00:33:18.980 --> 00:33:21.200
unsupervised, das wäre natürlich ganz, ganz toll,

00:33:21.300 --> 00:33:23.400
aber ist halt noch nicht so. Aber da arbeiten ganz viele Leute

00:33:23.400 --> 00:33:25.400
dran. Und Reinforcement Learning ist

00:33:25.400 --> 00:33:25.980
halt so ein Zwischending.

00:33:27.000 --> 00:33:29.120
Wenn man halt nicht zu allem, was man tut, jetzt

00:33:29.120 --> 00:33:30.860
ein Label hat oder eben

00:33:30.860 --> 00:33:32.980
ein Feedback bekommt,

00:33:32.980 --> 00:33:34.120
war das jetzt richtig oder falsch.

00:33:35.560 --> 00:33:38.520
Sondern man bekommt diese Labels, die Labels werden Spars.

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

00:33:42.440 --> 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.780 --> 00:33:51.540
Also wenn man spielen funktioniert das halt super.

00:33:51.660 --> 00:33:56.820
Wenn man jetzt irgendwie Schach spielt oder Go oder sowas, dann spielt man halt eine ganze Zeit lang, macht viele Züge.

00:33:56.940 --> 00:33:59.080
Und dann am Schluss bekommt man halt gesagt, okay, du hast jetzt gewonnen oder verloren.

00:34:00.460 --> 00:34:04.200
Aber man bekommt keine Aussage zu, wie gut war jetzt dieser Zug, den ich gemacht habe.

00:34:04.300 --> 00:34:06.340
weil das weiß halt eh keiner so genau

00:34:06.340 --> 00:34:08.260
und irgendwie die definitive Aussage ist ja,

00:34:09.140 --> 00:34:10.320
es kann ja auch sein, dass ein Zug, der irgendwie

00:34:10.320 --> 00:34:11.800
schlecht aussieht, eigentlich sehr gut war.

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

00:34:15.020 --> 00:34:15.940
Ja, aber

00:34:15.940 --> 00:34:18.280
tatsächlich ist es halt so, wirklich definitiv weiß man es

00:34:18.280 --> 00:34:19.620
erst, wenn man gewonnen oder verloren hat

00:34:19.620 --> 00:34:22.260
und dann hat man das Problem, okay, jetzt muss ich irgendwie

00:34:22.260 --> 00:34:24.360
sozusagen diese Feedback

00:34:24.360 --> 00:34:26.220
irgendwie zurück assignen an alles, was ich

00:34:26.220 --> 00:34:28.420
irgendwie gemacht habe und das ist genau

00:34:28.420 --> 00:34:30.200
Reinforcement Learning und das ist halt

00:34:30.200 --> 00:34:31.980
sozusagen

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

00:34:34.520 --> 00:34:36.480
weil halt da auch viel unüberwacht passiert, aber

00:34:36.480 --> 00:34:38.180
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:40.180 --> 00:34:42.260
Selbst fahrende Autos sind halt auch so ein,

00:34:42.260 --> 00:34:44.000
oder überhaupt laufende Roboter und so, das ist alles

00:34:44.000 --> 00:34:44.860
Reinforcement Learning.

00:34:45.660 --> 00:34:48.160
Das ist schön. Du hast was gesehen von

00:34:48.160 --> 00:34:50.220
Boston Dynamics, das neue Ding, da haben irgendwie

00:34:50.220 --> 00:34:52.220
15 diese,

00:34:52.340 --> 00:34:53.860
ich weiß nicht, Pferdeförderungen, Hunderoboter

00:34:53.860 --> 00:34:56.100
so einen LKW gezogen oder so, irgendwo

00:34:56.100 --> 00:34:57.920
irgendeine Straße. Ich finde diese

00:34:57.920 --> 00:35:00.100
Videos immer sehr beunruhigend. Ja, die sind etwas

00:35:00.100 --> 00:35:01.000
spooky tatsächlich.

00:35:01.980 --> 00:35:03.520
Die kürzen mich wie Militärtechnik.

00:35:03.620 --> 00:35:05.660
Wenn man sich da überlegt, da ist so eine Waffe drauf

00:35:05.660 --> 00:35:06.960
oder sowas, dann hüpfen die durch den Wald.

00:35:07.460 --> 00:35:09.300
Und dann schützen sie sich dabei, die Türen aufzumachen

00:35:09.300 --> 00:35:10.140
und um die Ecke zu gucken.

00:35:10.620 --> 00:35:12.420
Das ist schon ein bisschen spooky tatsächlich.

00:35:13.460 --> 00:35:15.860
Ja, ist ja auch vom DARPA finanziert.

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

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

00:35:19.960 --> 00:35:21.060
Ich glaube, die haben sie wieder verkauft.

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

00:35:23.160 --> 00:35:25.240
Aber ja, die war mitfinanziert vom DARPA vor allen Dingen.

00:35:25.840 --> 00:35:26.160
Ja.

00:35:27.160 --> 00:35:29.220
Mal gucken, was da Schönes für die Zivilgesellschaft

00:35:29.220 --> 00:35:30.880
noch bei raus springt.

00:35:31.040 --> 00:35:57.160
Ja, auf jeden Fall irgendwie, das ist halt auch so ein hartes Problem, auch da gibt es tolle Erfolge, jetzt wenn man sich anguckt, was AlphaGo Zero angeht und so, das ist gar keine Frage, das ist ein super toller Erfolg, weil irgendwie früher waren ja auch die Lösungen, also Schach sozusagen das erste Mal, dass man Menschen keine Chance mehr hatten gegen Schachcomputer, da war irgendwann 1998, als Kasparov gegen Diplu dann verloren hatte.

00:35:57.160 --> 00:35:58.760
Ich habe schon als Kind immer gegen meinen Schachcomputer verloren.

00:35:58.880 --> 00:36:01.460
Ja, ja, aber nicht jeder Mensch hätte gegen deinen Schachcomputer verloren.

00:36:03.060 --> 00:36:04.080
Das wollen wir nochmal sehen.

00:36:05.240 --> 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.660 --> 00:36:10.840
Weil das ist halt schon schnell genug.

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

00:36:14.600 --> 00:36:20.660
Und das damals, ja, so nach 98 war dann halt klar, okay, Menschen haben jetzt irgendwie hier keine Chance mehr.

00:36:22.080 --> 00:36:23.800
Wer gewinnt denn eigentlich, wenn ich

00:36:23.800 --> 00:36:26.360
das Spiel von einem anderen

00:36:26.360 --> 00:36:27.920
Rechner mitspielen lasse? Das wäre doch mal interessant.

00:36:28.100 --> 00:36:30.080
Also ich spiele auf dem einen Rechner manuell

00:36:30.080 --> 00:36:32.180
Schach gegen den Bot

00:36:32.180 --> 00:36:34.260
und lasse mir meinen Zug aber

00:36:34.260 --> 00:36:35.480
von einem anderen Bot predikten.

00:36:36.280 --> 00:36:38.160
Gewinnt dann der schnellere Bot oder was, wenn der beide Bot

00:36:38.160 --> 00:36:39.260
gegeneinander spielen? Ist das dann zufällig?

00:36:40.640 --> 00:36:42.260
Üblicherweise kommt es halt darauf an, was das

00:36:42.260 --> 00:36:44.200
für Dinger sind. Wenn die gleich sind, dann ist es vielleicht

00:36:44.200 --> 00:36:46.180
Zufall oder dann soll es 50% 50-50

00:36:46.180 --> 00:36:48.020
sein. Aber vielleicht kommt eine Regel raus, vielleicht geht es immer

00:36:48.020 --> 00:36:49.860
weiß. Ja, ist schon so, dass

00:36:49.860 --> 00:36:51.820
70% glaube ich, zwei Drittel

00:36:51.820 --> 00:36:52.980
ungefähr weiß gewinnt.

00:36:53.860 --> 00:36:55.560
Also wenn es gewinnt, also die meisten

00:36:55.560 --> 00:36:57.520
Spiele sind sowieso Remi, aber wenn es

00:36:57.520 --> 00:36:59.380
eine Entscheidung gibt, dann gewinnt meistens weiß.

00:36:59.880 --> 00:37:01.520
Weil weiß ja schon einen leichten Vorteil hat durch

00:37:01.520 --> 00:37:02.040
den Anzug.

00:37:03.960 --> 00:37:05.420
Aber ja,

00:37:06.700 --> 00:37:07.580
trotzdem hättest

00:37:07.580 --> 00:37:09.820
du halt, sagen wir mal so, auch ein schlechtes

00:37:09.820 --> 00:37:11.380
Schachprogramm hätte halt keine Chance gegen

00:37:11.380 --> 00:37:13.360
einen wirklich guten, also eins von 98 oder so

00:37:13.360 --> 00:37:15.640
hätte halt keine Chance gegen eins der modernen

00:37:15.640 --> 00:37:16.980
auf einer modernen Hardware ist halt

00:37:16.980 --> 00:37:18.580
das ist so viel besser geworden.

00:37:19.340 --> 00:37:21.560
Aber eben auch in dem Ding, was halt 98

00:37:21.560 --> 00:37:23.540
KSV aufgeschlagen hat, steckte halt ganz

00:37:23.540 --> 00:37:25.500
viel domainspezifisches Wissen drin, da steckte

00:37:25.500 --> 00:37:27.640
halt viel Schachttheorie drin, da war eine Endspieldatenbank

00:37:27.640 --> 00:37:29.620
dran, da war

00:37:29.620 --> 00:37:30.240
viel

00:37:30.240 --> 00:37:31.940
ähm

00:37:31.940 --> 00:37:35.440
Blatter, Overhead, brauchen wir heute alles nicht mehr

00:37:35.440 --> 00:37:36.660
wegschmeißen, lernen von einer Einheit fertig

00:37:36.660 --> 00:37:39.300
Also da steckte ganz, ganz viel menschliche Arbeit drin

00:37:39.300 --> 00:37:40.040
sozusagen

00:37:40.040 --> 00:37:43.440
und das, also wenn man

00:37:43.440 --> 00:37:45.360
jetzt zum Beispiel sagt, okay, wir möchten

00:37:45.360 --> 00:37:47.280
jetzt nicht einen Schachcomputer bauen, der

00:37:47.280 --> 00:37:49.020
den Schachweltmeister schlägt, sondern wir möchten jetzt

00:37:49.020 --> 00:37:53.900
Baggerfahrprogramm

00:37:53.900 --> 00:37:56.000
irgendwie bauen, das mit den besten Baggerfahrern

00:37:56.000 --> 00:37:56.940
mithalten kann oder so,

00:37:58.420 --> 00:37:59.980
dann müsste man dafür genauso

00:37:59.980 --> 00:38:01.520
viel Zeit investieren wie

00:38:01.520 --> 00:38:03.540
oder vielleicht noch mehr oder keine Ahnung,

00:38:03.880 --> 00:38:05.160
auf jeden Fall sehr, sehr viel Zeit, um

00:38:05.160 --> 00:38:08.000
diese Domäne genauso gut zu modellieren, wie man

00:38:08.000 --> 00:38:09.920
das damals mit Schach gemacht hat. Und das ist halt

00:38:09.920 --> 00:38:11.600
völlig aussichtslos, würde sich niemals rechnen.

00:38:12.060 --> 00:38:14.080
Es gibt so viele Dinge, die man irgendwie gut können will,

00:38:14.820 --> 00:38:15.960
aber wo es absolut

00:38:15.960 --> 00:38:17.920
aussichtslos wäre. Mir fällt ja immer so das

00:38:17.920 --> 00:38:19.980
erste eine, was ich für einen Roboter mir selber

00:38:19.980 --> 00:38:21.840
anschaffen würde, für jede Menge Geld, wäre

00:38:21.840 --> 00:38:23.520
so der Haushaltsroboter, der putzen kann

00:38:23.520 --> 00:38:25.880
und das ganze Haus in Ordnung hält. Vielleicht dann irgendwann

00:38:25.880 --> 00:38:27.820
auch ein bisschen kochen. Also dann habe ich natürlich meine eigenen

00:38:27.820 --> 00:38:29.840
Rezepte oder so. Aber das wäre natürlich

00:38:29.840 --> 00:38:31.800
toll, weil dann müsste man das nicht

00:38:31.800 --> 00:38:33.400
mehr machen. Ja, aber

00:38:33.400 --> 00:38:35.840
es ist schwierig. Also all diese Dinge, wo man

00:38:35.840 --> 00:38:37.520
mit der realen Welt interagiert, da komme ich

00:38:37.520 --> 00:38:39.660
auch gleich nochmal drauf. Das sind alles, die sind

00:38:39.660 --> 00:38:41.780
alle leider nicht so leicht. Man hat das sofort

00:38:41.780 --> 00:38:42.880
immer irgendwie so Sicherheitsproblem.

00:38:45.360 --> 00:38:45.720
Also

00:38:45.720 --> 00:38:46.820
aber nochmal zu dem,

00:38:47.360 --> 00:38:58.320
Das grundsätzliche Problem wäre halt, das würde sich überhaupt nicht lohnen für jeden Bereich, für jede Domäne, für jedes Problem, das man irgendwie hat, so viel Theorie und Wissen zu investieren, um das wirklich zu lösen.

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

00:39:00.540 --> 00:39:12.420
Deswegen ist das ja ein netter Erfolg, so nach außen hin, aber eigentlich ist es wertlos, weil man kann das zwar für Schach machen und bei Schach hat es halt einen so hohen symbolischen Wert, dass man es da tatsächlich gemacht hat.

00:39:12.940 --> 00:39:15.300
Aber es ist keine praktische Lösung.

00:39:15.500 --> 00:39:17.540
Es ist nicht wirklich effizient.

00:39:18.460 --> 00:39:21.440
Und na ja, für Schach.

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

00:39:28.900 --> 00:39:32.980
das sind Dinger, wo kein Domänenwissen mehr drinsteckt.

00:39:33.340 --> 00:39:38.340
Die sind, also AlphaGo Zero ist von null Schachtheorie

00:39:38.340 --> 00:39:41.420
zu irgendwie superjungen Performance innerhalb von ein paar Stunden

00:39:41.420 --> 00:39:42.520
durch gegen sich selbst spielen.

00:39:42.940 --> 00:39:43.680
gut geworden.

00:39:45.560 --> 00:39:46.960
Ja, also der Bot, der dann

00:39:46.960 --> 00:39:48.840
auch gegen Go gespielt hat, hat ja irgendwelche

00:39:48.840 --> 00:39:50.740
völlig unkonventionellen Züge gespielt, wo keiner warte, was macht

00:39:50.740 --> 00:39:52.660
er denn da? Das würde ja ganz anders spielen und dann hat er

00:39:52.660 --> 00:39:54.060
trotzdem gewonnen. Das war schon ein bisschen

00:39:54.060 --> 00:39:56.640
spannend. Ja, ja, also das ist jetzt außerhalb

00:39:56.640 --> 00:39:58.260
von dem, was irgendwie, also wir haben

00:39:58.260 --> 00:40:00.580
ein paar hundert Jahre Schachttheorie, wir haben irgendwie

00:40:00.580 --> 00:40:03.000
ein paar tausend Jahre vielleicht Go-Theorie

00:40:03.000 --> 00:40:04.520
und da

00:40:04.520 --> 00:40:06.640
jetzt sind wir halt viel weiter gekommen

00:40:06.640 --> 00:40:08.580
in sehr, sehr kurzer Zeit und verstehen

00:40:08.580 --> 00:40:10.040
nicht mal mehr, was da passiert, weil

00:40:10.040 --> 00:40:11.820
das ist halt außerhalb von unseren

00:40:11.820 --> 00:40:14.380
ja, wir kriegen das nicht mehr.

00:40:14.560 --> 00:40:16.260
Wir sind halt leider ein bisschen zu dumm dafür, offenbar.

00:40:16.540 --> 00:40:17.620
Oder nicht gut genug, jedenfalls.

00:40:17.650 --> 00:40:19.670
ein 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:22.030 --> 00:40:23.650
Aber es funktioniert, denn sie gewinnen immer.

00:40:25.770 --> 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.750 --> 00:40:31.810
weil man jetzt

00:40:31.810 --> 00:40:33.570
da diese, also solche, auch

00:40:33.570 --> 00:40:35.550
diese Reinforcement-Learning-Geschichten sind jetzt

00:40:35.550 --> 00:40:37.510
nicht prinzipiell auf irgendein

00:40:37.510 --> 00:40:38.270
Problem geeicht.

00:40:39.350 --> 00:40:41.650
Deswegen heißt das Ding ja auch AlphaGo Zero

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

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

00:40:46.690 --> 00:40:48.450
Shoku, das ist dieses japanische Schach

00:40:48.450 --> 00:40:50.710
und Go irgendwie gelernt

00:40:50.710 --> 00:40:52.130
hat. Das heißt, es funktioniert

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

00:40:54.390 --> 00:40:56.030
Das muss nicht unbedingt jetzt, also

00:40:56.030 --> 00:40:58.610
das ist halt, so jetzt kann man sich vorstellen,

00:40:58.670 --> 00:41:00.510
wenn man jetzt Probleme hat, die ähnlich sind, dann kann

00:41:00.510 --> 00:41:02.650
das möglicherweise auch relativ schnell

00:41:02.650 --> 00:41:04.550
so gut lernen, dass es halt besser ist als jeder Mensch.

00:41:05.610 --> 00:41:05.910
Und

00:41:05.910 --> 00:41:08.690
dann lohnt sich das plötzlich, das für diverse

00:41:08.690 --> 00:41:10.650
Bereiche einzusetzen, weil man gar kein Domain-Wissen

00:41:10.650 --> 00:41:12.570
mehr braucht, dass sie sich das alles selber

00:41:12.570 --> 00:41:13.050
beibringen.

00:41:14.670 --> 00:41:15.990
Das klingt jetzt auch relativ

00:41:15.990 --> 00:41:17.890
erschreckend wahrscheinlich, aber so schlimm ist es auch

00:41:17.890 --> 00:41:18.550
wieder nicht, weil

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

00:41:21.490 --> 00:41:23.890
das funktioniert nur dann super, wenn man eben

00:41:23.890 --> 00:41:25.510
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.870
irgendwie lernen kann, was halt super geht

00:41:29.870 --> 00:41:31.930
in so Situationen, wo man

00:41:31.930 --> 00:41:33.570
die komplette Welt simulieren kann.

00:41:33.950 --> 00:41:35.570
Welcher Gottes und wer hat denn mit Maschinen und Gebauen?

00:41:39.890 --> 00:41:41.790
Relativ unwahrscheinlich, dass sowas funktioniert, ja.

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

00:41:43.790 --> 00:41:46.210
ja, das

00:41:46.210 --> 00:41:48.490
ja, aber das

00:41:48.490 --> 00:41:49.510
Das war für den kleinen Exkurs.

00:41:49.910 --> 00:41:52.130
Ich wollte mit dir eine Zähne am Arsch setzen.

00:41:53.270 --> 00:41:54.510
Ja, ich wollte das nur noch

00:41:54.510 --> 00:41:56.430
kurz zu Ende führen. Also wenn man das simulieren kann,

00:41:56.490 --> 00:41:58.410
ist super. Spiele sind halt,

00:41:58.910 --> 00:42:00.130
da hat man die Simulation halt schon.

00:42:01.030 --> 00:42:02.410
Genau, es gab da große Erfolge bei den

00:42:02.410 --> 00:42:04.430
Atari Games. Voll toll,

00:42:04.670 --> 00:42:06.350
aber der Witz ist eigentlich,

00:42:06.510 --> 00:42:08.090
dass die Dinger sind halt super simulierbar,

00:42:08.190 --> 00:42:09.550
deswegen hat das da so gut funktioniert.

00:42:10.610 --> 00:42:12.310
So, die physische Realität ist

00:42:12.310 --> 00:42:13.750
nicht wirklich gut simulierbar.

00:42:13.910 --> 00:42:16.090
Ja, wir haben ja auch keine vernünftige Abbildung von

00:42:16.090 --> 00:42:18.230
einem Modell der physischen Realität

00:42:18.230 --> 00:42:19.790
in den ganzen Variablen. Die kennen wir ja alle nicht.

00:42:19.870 --> 00:42:20.870
Das sind alles viel zu viele Unbekannten.

00:42:21.250 --> 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:26.950 --> 00:42:28.010
Und das Problem ist halt auch,

00:42:28.330 --> 00:42:29.610
du müsstest ja nicht nur

00:42:29.610 --> 00:42:32.210
sozusagen so eine Physik-Engine,

00:42:32.210 --> 00:42:34.030
die relativ gut ist, haben. Das geht

00:42:34.030 --> 00:42:36.210
vielleicht noch. Aber es passieren halt die ganze

00:42:36.210 --> 00:42:37.330
Zeit so Dinge,

00:42:39.850 --> 00:42:42.250
wo man nicht weiß, wie man das

00:42:42.250 --> 00:42:44.250
irgendwie simulieren soll, ja, so

00:42:44.250 --> 00:42:46.370
keine Ahnung, wenn man draußen rumläuft, da passiert

00:42:46.370 --> 00:42:47.750
so viel komischer Kram

00:42:47.750 --> 00:42:49.330
und

00:42:49.330 --> 00:42:52.470
Vielleicht müssen wir unsere Sensorspektren endlich erweitern und die Maschinen

00:42:52.470 --> 00:42:53.130
damit füttern

00:42:53.130 --> 00:42:55.830
Nee, ist das eher, das ist nicht, also

00:42:55.830 --> 00:42:58.070
von der Sensorseite, das funktioniert eigentlich alles, aber

00:42:58.070 --> 00:42:59.250
was halt nicht funktioniert, ist

00:42:59.250 --> 00:43:02.330
alles mögliche ausprobieren,

00:43:02.390 --> 00:43:04.470
um rauszukriegen, wie diese Realität

00:43:04.470 --> 00:43:06.230
dann funktioniert, weil das Problem ist, wenn man das jetzt

00:43:06.230 --> 00:43:08.330
mit einem selbstfahrenden Auto macht, dann macht man ganz schön viel

00:43:08.330 --> 00:43:10.490
kaputt und auch ganz schön

00:43:10.490 --> 00:43:12.070
viele selbstfahrende Autos kaputt und die sind ja teuer

00:43:12.070 --> 00:43:14.470
und es ist ja, selbst wenn ich das

00:43:14.470 --> 00:43:16.430
alles simuliert mache, brauche ich sehr viel Rechenleistung

00:43:16.430 --> 00:43:17.730
und muss das ganz, ganz, ganz viel probieren.

00:43:18.310 --> 00:43:18.730
Wenn ich das

00:43:18.730 --> 00:43:22.430
mit physischen Objekten da draußen machen muss,

00:43:22.550 --> 00:43:23.490
das funktioniert nicht.

00:43:26.250 --> 00:43:28.450
Und daher wird das

00:43:28.450 --> 00:43:30.550
alles, was irgendwie mit physischen

00:43:30.550 --> 00:43:32.550
also mit der Manipulation von irgendwelchen physischen Dingen

00:43:32.550 --> 00:43:34.430
zu tun hat, das ist alles noch nicht so richtig

00:43:34.430 --> 00:43:36.790
noch nicht so richtig

00:43:36.790 --> 00:43:38.670
im Griff und bleibt schwierig

00:43:38.670 --> 00:43:40.690
jedenfalls, solange man das nicht ordentlich

00:43:40.690 --> 00:43:42.590
simulieren kann. Und das ist momentan

00:43:42.590 --> 00:43:44.230
auch noch nicht gelöst. Aber

00:43:44.230 --> 00:43:46.370
ja, ist natürlich schon interessant, was da alles

00:43:46.370 --> 00:43:47.450
an Fortschritten gibt.

00:43:49.210 --> 00:43:49.310
Ja.

00:43:51.630 --> 00:43:52.030
Genau.

00:43:53.730 --> 00:43:54.530
Ja, vielleicht machen wir

00:43:54.530 --> 00:43:55.090
jetzt doch noch ein Chapter.

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

00:43:58.350 --> 00:44:00.210
ein Chapter war auf jeden Fall Supervised Learning,

00:44:00.390 --> 00:44:02.270
Unsupervised Learning und Reinforced Learning.

00:44:02.650 --> 00:44:04.390
Und das ist jetzt über convolutional neural networks.

00:44:05.270 --> 00:44:06.190
Was ist das nächste Kapitel?

00:44:06.190 --> 00:44:06.630
Ist das

00:44:06.630 --> 00:44:09.790
nochmal Fehler?

00:44:10.370 --> 00:44:11.430
Und wir wollten auch was über FITs machen.

00:44:11.430 --> 00:44:11.810
Achso, genau.

00:44:12.010 --> 00:44:14.770
Wir wollten irgendwie was, genau, das, das, ja, ja.

00:44:18.690 --> 00:44:22.670
Das hatten wir gestern auch noch nicht so richtig drin.

00:44:23.010 --> 00:44:24.410
Wenn man jetzt so Modelle trainiert,

00:44:25.290 --> 00:44:29.450
was ist eigentlich, was passiert da eigentlich,

00:44:29.690 --> 00:44:31.030
was kann da eigentlich schiefgehen?

00:44:31.550 --> 00:44:32.510
Es gibt da Metriken und so,

00:44:32.530 --> 00:44:35.170
da hatten wir gestern auch schon so ein bisschen was erzählt,

00:44:35.170 --> 00:44:37.090
aber, oder beim letzten Mal was erzählt,

00:44:37.890 --> 00:44:39.990
aber es gibt da so prinzipielle Geschichten

00:44:39.990 --> 00:44:41.170
und die hatten wir irgendwie nicht mit drin.

00:44:42.710 --> 00:44:43.150
Und zwar,

00:44:45.130 --> 00:44:45.930
wenn man jetzt,

00:44:47.010 --> 00:44:48.110
oder das ist vielleicht sogar

00:44:48.110 --> 00:44:49.490
am einfachsten, wenn man das am

00:44:49.490 --> 00:44:53.930
Am Schluss, am Ende willst du kurz einführen,

00:44:54.330 --> 00:44:55.250
wo bist du gerade?

00:44:56.290 --> 00:44:57.930
Ja, ich überlege gerade, wie das mit dem

00:44:57.930 --> 00:44:59.990
praktischen Beispiel aussieht, weil wir wollten ja auch noch so

00:44:59.990 --> 00:45:01.810
Hunde versus Katzen machen.

00:45:03.450 --> 00:45:03.850
Und

00:45:03.850 --> 00:45:06.490
da könnte man

00:45:06.490 --> 00:45:08.310
das auch noch rein, aber egal, nein.

00:45:09.990 --> 00:45:11.490
Ich fand das ganz gut, wie ihr es gemacht habt bei dem

00:45:11.490 --> 00:45:13.750
PiDD11-Vortrag.

00:45:14.590 --> 00:45:16.170
Da kann man dann hinterher tatsächlich ganz gut dahin,

00:45:16.190 --> 00:45:18.050
dass man sowas wie Oberfitting relativ gut da reinkommen könnte.

00:45:18.110 --> 00:45:20.110
Und da müsste das mit den Pi Express Variants auch reinpassen.

00:45:20.230 --> 00:45:20.950
Ja, stimmt, stimmt, stimmt.

00:45:21.450 --> 00:45:23.790
Also deswegen fangen wir vielleicht dann doch nochmal mit dem Beispiel an.

00:45:23.870 --> 00:45:25.610
Genau, dann machen wir doch nochmal ein Beispiel hier.

00:45:26.190 --> 00:45:28.130
Und genau, ich mach noch Kapitelmarke.

00:45:28.550 --> 00:45:29.990
Also wir erklären das jetzt kurz nochmal, wie man das macht,

00:45:30.030 --> 00:45:31.410
wenn man jetzt so Hunden- und Katzenbilder hat.

00:45:32.430 --> 00:45:34.090
Und ja,

00:45:34.090 --> 00:45:36.390
wie man die dann versuchen will, von einander zu unterscheiden

00:45:36.390 --> 00:45:38.130
und wie man dann die Maschine dazu bringt,

00:45:38.230 --> 00:45:39.450
dass sie das versteht, was da passiert.

00:45:39.570 --> 00:45:40.790
weil, wie man sich vielleicht vorstellen kann,

00:45:40.850 --> 00:45:43.250
Hunde und Katzen sind unterschiedliche Tiere zwar,

00:45:43.490 --> 00:45:45.470
aber die sehen vielleicht doch schon ganz schön ähnlich aus

00:45:45.470 --> 00:45:46.870
und vor allem, wenn die irgendwie halb verdeckt sind

00:45:46.870 --> 00:45:49.310
oder so von einem Schrank oder in irgendeine Kiste reinhüpfen.

00:45:49.710 --> 00:45:52.170
Also wir nehmen das einfachste Problem sozusagen,

00:45:53.510 --> 00:45:57.850
was wir haben, nämlich binäre Klassifikationen,

00:45:57.930 --> 00:45:59.230
nur jetzt die Klassen sind Hunde und Katzen.

00:46:00.430 --> 00:46:04.250
Es gibt so ein Dataset,

00:46:04.650 --> 00:46:06.990
das mal in der Kegel-Competition verwendet worden ist,

00:46:07.730 --> 00:46:09.670
ich glaube 20.000 Hunde,

00:46:09.770 --> 00:46:11.550
20.000 Katzen oder 10.000 Hunde, 10.000 Katzen,

00:46:11.630 --> 00:46:13.650
ich weiß nicht mehr genau, aber wir nehmen nur

00:46:13.650 --> 00:46:15.530
1.000 Hunde,

00:46:15.610 --> 00:46:17.570
1.000 Katzen und nochmal 1.000, also

00:46:17.570 --> 00:46:19.570
500 Hunde, 500 Katzen, also

00:46:19.570 --> 00:46:21.950
ein Training-Set, ein Test-Set und ein Validations-Set

00:46:21.950 --> 00:46:24.010
daraus

00:46:24.010 --> 00:46:25.470
und das ist im gleichen

00:46:25.470 --> 00:46:27.590
Projekt.

00:46:27.590 --> 00:46:29.350
Warum nehmen wir nicht alle 10.000, Jochen?

00:46:29.770 --> 00:46:31.250
Ja, weil das so lange dauern würde, das wäre

00:46:31.250 --> 00:46:32.470
irgendwie nicht gut.

00:46:33.370 --> 00:46:34.750
Das ist sowieso schon auch, selbst mit

00:46:34.750 --> 00:46:36.990
1.000 Beispielen ist es schon so,

00:46:37.730 --> 00:46:39.710
dass man da ohne GPU nicht so richtig

00:46:39.710 --> 00:46:41.730
viel Spaß hat. Das ist so ein bisschen blöd,

00:46:41.810 --> 00:46:43.510
man braucht so ein bisschen Spezial-Hardware. Also mit der

00:46:43.510 --> 00:46:45.230
1080 kann ich aber schon ein bisschen was rechnen.

00:46:45.670 --> 00:46:47.590
Ja, ja, also das wäre schon sehr gut.

00:46:48.090 --> 00:46:49.630
Aber viele Leute haben ja vielleicht auch jetzt

00:46:49.630 --> 00:46:51.390
keine GPU irgendwie

00:46:51.390 --> 00:46:53.250
zu Hause direkt.

00:46:53.690 --> 00:46:55.070
Glück, wenn man Computerspiele mag.

00:46:55.710 --> 00:46:57.630
Ja, aber dann muss man auch mal diesen ganzen

00:46:57.630 --> 00:46:59.490
Kram installieren und so und das ist auch alles nicht so richtig

00:46:59.490 --> 00:47:01.130
einfach. Und

00:47:01.130 --> 00:47:03.390
ja, also in dem Data Science Projekt

00:47:03.390 --> 00:47:05.210
gibt es halt in dem Notebook-Verzeichnis

00:47:05.210 --> 00:47:06.030
auch so ein Ding,

00:47:07.270 --> 00:47:09.070
Hunde versus Katzen.

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

00:47:11.770 --> 00:47:13.110
Ja, das ist, ja,

00:47:13.190 --> 00:47:14.950
man muss erst mal das Betriebssystem dazu kriegen,

00:47:15.030 --> 00:47:16.950
dass das ordentlich funktioniert. Dann braucht man halt

00:47:16.950 --> 00:47:17.370
irgendwie

00:47:17.370 --> 00:47:20.770
die NVIDIA-Bibliotheken da unten drunter,

00:47:20.950 --> 00:47:22.130
also QDNN und

00:47:22.130 --> 00:47:23.710
CUDA und so.

00:47:24.650 --> 00:47:26.450
Und dann gibt es halt

00:47:26.450 --> 00:47:27.750
diverse

00:47:27.750 --> 00:47:31.090
Machine Learning-Bibliotheken, die das benutzen,

00:47:31.090 --> 00:47:32.130
um damit irgendwie

00:47:32.130 --> 00:47:35.110
Deep Learning-Netze zu bauen. Das ist dann halt

00:47:35.110 --> 00:47:36.810
sowas wie TensorFlow oder halt eben

00:47:36.810 --> 00:47:39.830
PyTorch

00:47:39.830 --> 00:47:40.830
oder

00:47:40.830 --> 00:47:43.610
ja,

00:47:44.150 --> 00:47:47.010
was gibt es denn da noch alles?

00:47:47.330 --> 00:47:49.190
Also, diverse

00:47:49.190 --> 00:47:50.030
Geschichten.

00:47:51.710 --> 00:47:51.890
Und

00:47:51.890 --> 00:47:55.110
das, was wir hier verwenden im Beispiel, ist Keras.

00:47:55.250 --> 00:47:56.010
Das ist sozusagen die Python

00:47:56.010 --> 00:47:58.670
Binding für TensorFlow.

00:48:01.310 --> 00:48:03.170
Die sind auch im TensorFlow-Projekt, ist das Ding

00:48:03.170 --> 00:48:05.030
mit drin enthalten, hat die gleiche API wie

00:48:05.030 --> 00:48:07.790
bei den anderen Scikit-Learn-Modellen.

00:48:10.550 --> 00:48:11.490
Also wenn ihr auf Windows

00:48:11.490 --> 00:48:13.270
das mussten wollt, dann könnt ihr es zum Beispiel einfach mit Choco

00:48:13.270 --> 00:48:15.610
im Paketmanager-Coder installieren

00:48:15.610 --> 00:48:16.390
und das dann ausprobieren.

00:48:18.310 --> 00:48:18.970
Aber das

00:48:18.970 --> 00:48:21.490
kann ich vorwarnen, es wird böse

00:48:21.490 --> 00:48:22.630
Überraschungen geben, das ist nicht so einfach.

00:48:23.610 --> 00:48:25.350
Das ist alles ziemlich schwierig. Oder du kannst es ja mal

00:48:25.350 --> 00:48:27.490
bei dir ausprobieren. Ja, ich wollte sagen, das werde ich auf jeden Fall

00:48:27.490 --> 00:48:29.450
tun und werde

00:48:29.450 --> 00:48:30.730
berichten. Genau.

00:48:31.950 --> 00:48:33.170
Man kann das auch inzwischen,

00:48:33.870 --> 00:48:35.930
Ich habe das auf meinem, ich habe so ein

00:48:35.930 --> 00:48:37.990
Faible für Apple, ich bin so ein Apple-Jünger

00:48:37.990 --> 00:48:39.670
und

00:48:39.670 --> 00:48:41.830
leider werden ja keine

00:48:41.830 --> 00:48:43.830
Nvidia-GPUs mehr verbaut, daher funktioniert das alles

00:48:43.830 --> 00:48:45.510
nicht mehr so richtig. Es gibt aber

00:48:45.510 --> 00:48:47.530
da auch so ein Projekt, das sollte man auch noch nie,

00:48:47.670 --> 00:48:49.790
muss ich auch noch nie Shownotes packen, PlateML.

00:48:51.190 --> 00:48:52.070
Damit kann man

00:48:52.070 --> 00:48:54.510
die AMD-GPUs,

00:48:54.510 --> 00:48:55.810
die ja darin sind, benutzen.

00:48:57.050 --> 00:48:58.350
Es gibt ja die Abstraktion

00:48:58.350 --> 00:49:00.170
von Apple selber, Metal

00:49:00.170 --> 00:49:01.530
heißt die irgendwie, wenn man die benutzt,

00:49:02.090 --> 00:49:03.310
dann ist das auch schon recht schnell.

00:49:03.310 --> 00:49:06.490
Also sozusagen die AMD-GPU, die jetzt in meinem MacBook,

00:49:06.670 --> 00:49:10.070
das ist ein relativ altes Ding von 2016, drin steckt,

00:49:10.310 --> 00:49:14.810
die ist auf jeden Fall irgendwie doppelt so schnell,

00:49:14.910 --> 00:49:18.310
wenn nur die GPU läuft, wie die vier i7-Kerne,

00:49:18.410 --> 00:49:19.430
die da sonst so drin sind.

00:49:20.170 --> 00:49:20.530
Wusch.

00:49:20.670 --> 00:49:22.230
Und das ist dann halt schon, also man kann so sagen,

00:49:22.290 --> 00:49:26.210
ungefähr GPU-zu-CPU-Performance-Unterschied ist so 1 zu 10 mindestens.

00:49:27.270 --> 00:49:29.190
Kommt halt drauf an, was man für CPUs und GPUs hat,

00:49:29.250 --> 00:49:31.090
aber so eine Größenordnung mindestens mal.

00:49:31.790 --> 00:49:33.570
Und genau, wenn man jetzt keine

00:49:33.570 --> 00:49:35.670
GPU hat, dann, weil, also auf einer

00:49:35.670 --> 00:49:37.630
GPU dauert das jetzt mit

00:49:37.630 --> 00:49:39.230
den Katzen und Hunden, mit den Tausendballspielen, wenn man es

00:49:39.230 --> 00:49:41.310
from scratch einfach so trainiert, auch schon fünf Minuten.

00:49:42.390 --> 00:49:43.630
Und das wäre dann jetzt,

00:49:43.870 --> 00:49:45.490
wenn man eine CPU verwenden würde, so

00:49:45.490 --> 00:49:47.090
mindestens mal ungefähr eine Stunde.

00:49:47.990 --> 00:49:49.490
Da macht das dann schon keinen Spaß mehr.

00:49:49.550 --> 00:49:50.850
Fünf Minuten kann man mal machen, aber

00:49:50.850 --> 00:49:53.390
irgendwie eine Stunde irgendwie darauf warten, dass da

00:49:53.390 --> 00:49:55.830
irgendwas, dass man so eine Stunde lang so ein

00:49:55.830 --> 00:49:57.050
Progress Bar angucken ist.

00:49:57.050 --> 00:49:58.630
Das ist vielleicht irgendwie nicht jedermanns Sache.

00:50:01.510 --> 00:50:26.430
Und, genau, also, ja, ich kann ja einfach mal, genau, was man tun kann, wenn man jetzt keine eigene GPU hat, ist, man geht auf Google Colab oder bei Azure gibt es auch irgendwie freie Instanzen, wo man Notebooks ausführen kann, sozusagen ohne, dass man dafür bezahlen muss.

00:50:27.370 --> 00:50:51.450
Man kann bei Colab auch Notebooks direkt aus dem GitHub irgendwie ausführen und das ist natürlich ganz praktisch. Man muss nur unter Edit Notebook Settings GPU anwählen und man sollte das auch machen mit dem, also man muss zuerst dieses Prepared Training Data Notebook ausführen, wo dann halt dieses Hundekatzenbeispiel irgendwie gezogen wird.

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

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

00:51:00.050 --> 00:51:03.970
Und wenn man das getan hat, da muss man auch schon die GPU aktivieren,

00:51:04.030 --> 00:51:05.210
damit das auf der gleichen Maschine bleibt.

00:51:06.770 --> 00:51:14.890
Und wenn man damit fertig ist, kann man das Notebook Model from Scratch irgendwie mal ausführen.

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

00:51:28.830 --> 00:51:34.510
Ja, also das Beispiel ist auch aus dem Buch Deep-Learning with Python von Sarkole.

00:51:34.750 --> 00:51:37.470
Das ist der Autor von Keras und wir arbeiten bei Google.

00:51:39.690 --> 00:51:42.830
Ja, das sind sehr schöne Beispiele, die da drin sind.

00:51:42.830 --> 00:51:47.590
Das Buch ist sowieso sehr empfehlenswert, wenn man sich für Deep-Learning und wie man das mit Python und Keras macht.

00:51:47.610 --> 00:51:49.790
interessiert, dann ist das auch auf jeden Fall

00:51:49.790 --> 00:51:50.950
eine Leseempfehlung.

00:51:56.190 --> 00:51:57.550
Ja, dann

00:51:57.550 --> 00:51:59.710
fangen wir halt an, das Modell wieder von Anfang an zu trainieren.

00:51:59.930 --> 00:52:01.290
Genau, also zuerst

00:52:01.290 --> 00:52:02.830
baut man das Modell halt irgendwie zusammen.

00:52:04.350 --> 00:52:05.570
Darauf möchte ich jetzt, das machen wir

00:52:05.570 --> 00:52:07.290
dann bei irgendeiner Deep Learning Folge, was

00:52:07.290 --> 00:52:09.710
macht ein Convolution Operation eigentlich, was ist Max Pooling

00:52:09.710 --> 00:52:10.970
und so, aber

00:52:10.970 --> 00:52:13.670
das wird einfach

00:52:13.670 --> 00:52:14.610
jetzt ein bisschen zu weit führen.

00:52:16.390 --> 00:52:17.570
Aber man kann halt dieses Modell

00:52:17.570 --> 00:52:19.610
bauen. Man kann sich ausgeben lassen, welche Layer sind da drin,

00:52:19.850 --> 00:52:21.610
wie viele Parameter oder so man da so

00:52:21.610 --> 00:52:23.350
durchgeht, sieht man das. Das ist jetzt

00:52:23.350 --> 00:52:25.650
nicht so groß, es hat nur so dreieinhalb Millionen Parameter,

00:52:25.950 --> 00:52:27.130
aber ist halt schon

00:52:27.130 --> 00:52:29.590
so ein Bereich, wo das halt mit CPU

00:52:29.590 --> 00:52:31.570
irgendwie zu trainieren schon relativ knackig wird.

00:52:32.910 --> 00:52:33.570
Dann nimmt man halt

00:52:33.570 --> 00:52:35.190
eben für,

00:52:36.070 --> 00:52:37.270
man legt noch die

00:52:37.270 --> 00:52:38.890
Verlustfunktion fest, das wäre an der Stelle

00:52:38.890 --> 00:52:41.710
Binary Cross Entropy, das ist einfach nur

00:52:41.710 --> 00:52:42.350
Log Loss.

00:52:43.830 --> 00:52:45.610
Kann man auch einfach nachgoogeln, dann weiß man,

00:52:45.610 --> 00:52:46.830
was das für eine Verlustfunktion ist.

00:52:47.570 --> 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:57.430 --> 00:53:02.630
Und, ähm, legt halt noch den, äh, äh, sozusagen Optimierungsalgorithmus fest.

00:53:04.210 --> 00:53:17.270
Ja, und, äh, dann, da man bei Bildern oft das Problem hat, dass man die, ähm, Datenmenge also nicht so richtig in den Hauptspeicher packen kann, ich weiß auch nicht, wie groß ImageNet ist, aber irgendwie so 140 GB oder ich weiß, das ist aber jedenfalls schon recht groß.

00:53:17.570 --> 00:53:18.970
Das kriegt man nicht mal so...

00:53:18.970 --> 00:53:20.750
Ist ein Lautspeicher nicht über 140 GB groß?

00:53:20.810 --> 00:53:22.510
Doch, gibt es wahrscheinlich Maschinen,

00:53:23.030 --> 00:53:24.350
da habe ich das

00:53:24.350 --> 00:53:27.750
falsch...

00:53:27.750 --> 00:53:29.650
Kann sein, dass ich total ein Blödsinn

00:53:29.650 --> 00:53:31.290
gerade erzählt habe, wie groß ist der Imageschnitt?

00:53:31.370 --> 00:53:32.390
Das müssen wir schnell kontrollieren.

00:53:32.470 --> 00:53:34.270
Das müssen wir gut nachkontrollieren.

00:53:36.290 --> 00:53:37.730
Größe, Imageschnitt-Size.

00:53:38.290 --> 00:53:39.310
Ja, habe ich gerade nach Google,

00:53:39.430 --> 00:53:40.530
habe einen Wikipedia-Artikel gefunden.

00:53:41.750 --> 00:53:42.390
Steht nicht drin.

00:53:45.950 --> 00:53:47.650
Naja, egal. Also ist wahrscheinlich

00:53:47.650 --> 00:53:49.270
auf jeden Fall sehr, sehr groß.

00:53:50.290 --> 00:53:50.430
Und

00:53:50.430 --> 00:53:52.950
ja,

00:53:53.450 --> 00:53:55.430
man arbeitet halt dann bei Bildern

00:53:55.430 --> 00:53:57.590
meistens mit so Generatoren.

00:53:57.690 --> 00:53:59.310
Das ist ja auch sowieso eine schöne Idee, wenn man...

00:53:59.310 --> 00:54:01.270
154 GB. Also okay.

00:54:01.490 --> 00:54:02.570
Also so schlimm ist es nicht, aber

00:54:02.570 --> 00:54:05.570
ja, hat man wahrscheinlich auch nicht

00:54:05.570 --> 00:54:07.450
unbedingt zu Hause. Und

00:54:07.450 --> 00:54:08.250
diese

00:54:08.250 --> 00:54:11.530
Image-Data-Generator-Klasse abstrahiert

00:54:11.530 --> 00:54:13.490
das sozusagen weg und man iteriert sozusagen

00:54:13.490 --> 00:54:15.250
über die Bilder, ohne dass man den ganzen Kram

00:54:15.250 --> 00:54:16.410
in meinem Hauptspeicher halten muss

00:54:16.410 --> 00:54:19.610
und sage dann halt, okay, hier sind Trainingsdaten,

00:54:19.710 --> 00:54:22.150
da sind die Validationsdaten.

00:54:22.610 --> 00:54:23.570
Validationsdaten wäre das benutzt,

00:54:23.770 --> 00:54:25.530
auch während der Trainingszeit

00:54:25.530 --> 00:54:27.470
schon anzuzeigen, wie gut das

00:54:27.470 --> 00:54:29.570
Modell momentan performt, sozusagen,

00:54:29.750 --> 00:54:31.210
auf Daten, die man halt noch nicht gesehen hat.

00:54:32.390 --> 00:54:33.490
Und am Schluss rechnet man halt

00:54:33.490 --> 00:54:34.830
den Score aus auf dem Testset.

00:54:35.390 --> 00:54:37.510
Das ist auch so eine ganz wichtige Geschichte, das hatten wir gestern nicht.

00:54:37.510 --> 00:54:39.030
Da haben wir einfach Training und Test genommen.

00:54:39.950 --> 00:54:41.490
Aber eigentlich

00:54:41.490 --> 00:54:43.170
muss man noch eine dritte Kategorie haben.

00:54:43.310 --> 00:54:45.070
Man muss halt irgendwie ein Trainingsset haben,

00:54:45.170 --> 00:54:47.210
muss ein Set haben,

00:54:47.370 --> 00:54:49.230
auf dem man validiert, also

00:54:49.230 --> 00:54:51.050
vielleicht schon während man

00:54:51.050 --> 00:54:53.170
ein Modell trainiert, sieht, geht das jetzt

00:54:53.170 --> 00:54:54.070
in die richtige Richtung oder nicht.

00:54:55.010 --> 00:54:57.110
Und auf dem man halt auch Überparameteroptimierung

00:54:57.110 --> 00:54:59.110
macht, aber das sollte man eben nicht

00:54:59.110 --> 00:55:01.010
auf dem Testset machen, sonst overfittet man das

00:55:01.010 --> 00:55:02.850
Testset. Und man kann halt

00:55:02.850 --> 00:55:04.530
sehen, dass man overfittet, wenn man

00:55:04.530 --> 00:55:07.190
auf dem Validationsset immer bessere Resultate

00:55:07.190 --> 00:55:09.170
erreicht und dann aber das nicht

00:55:09.170 --> 00:55:10.770
sozusagen auf dem Testset

00:55:10.770 --> 00:55:12.710
reproduziert werden kann.

00:55:12.830 --> 00:55:14.990
Das kann man wieder tatsächlich am besten, wenn man das wieder visualisiert.

00:55:15.110 --> 00:55:27.570
Also wenn man das jetzt hier mal fittet, das Modell, dann kriegt man eben viele Progressbar-Geschichten angezeigt. Das läuft über 30 Epochen. Das bedeutet, 30 Mal geht man über das komplette Set drüber.

00:55:29.870 --> 00:55:31.110
Progressbar ist wieder mit TQDM.

00:55:31.770 --> 00:55:33.230
Genau. Ne, das ist nicht T-Code.

00:55:33.310 --> 00:55:33.790
Nein, die ist mir nicht.

00:55:34.930 --> 00:55:37.170
Aber man sieht halt sozusagen, wie sich da

00:55:37.170 --> 00:55:39.270
die Accuracy, die hier als

00:55:39.270 --> 00:55:41.350
Maß für den Fehler genommen wird,

00:55:41.410 --> 00:55:43.210
weil an der Stelle ist es tatsächlich mal so, dass es

00:55:43.210 --> 00:55:44.830
halbwegs aussagekräftig ist,

00:55:44.930 --> 00:55:47.410
weil wenn man halt zwei Klassen hat, gleich viele

00:55:47.410 --> 00:55:49.370
Elemente, dann weiß man halt, 50%

00:55:49.370 --> 00:55:50.910
ist halt Zufall und wenn man

00:55:50.910 --> 00:55:53.330
irgendwie da von Richtung 1 geht,

00:55:53.410 --> 00:55:55.070
dann ist das gut und je näher an 1, desto besser.

00:55:56.810 --> 00:55:57.510
Und man sieht auch,

00:55:57.510 --> 00:55:59.470
dass das auf den Trainingsdaten halt passiert und

00:55:59.470 --> 00:56:01.510
auf den Validationsdaten

00:56:01.770 --> 00:56:03.630
Daten auch, die man halt eben nicht

00:56:03.630 --> 00:56:05.610
in den Trainingstätten hat, aber halt nicht so stark.

00:56:05.710 --> 00:56:07.130
Und irgendwann geht der,

00:56:08.110 --> 00:56:09.470
geht die Accuracy auf dem

00:56:09.470 --> 00:56:11.270
Validation-Set nicht mehr weiter hoch,

00:56:11.550 --> 00:56:12.950
auf dem Training-Set aber schon.

00:56:13.910 --> 00:56:15.490
Und das kann man sich auch

00:56:15.490 --> 00:56:17.590
irgendwie dann mal rausplotten

00:56:17.590 --> 00:56:19.630
und sieht dann halt

00:56:19.630 --> 00:56:21.510
irgendwie sozusagen

00:56:21.510 --> 00:56:22.950
ja, das als

00:56:22.950 --> 00:56:25.390
eine lineare Kurve und eine, die fällt dann so

00:56:25.390 --> 00:56:27.330
irgendwann so ein bisschen ab. Also auf der x-Achse sieht man halt

00:56:27.330 --> 00:56:29.330
die Infos. Entfernen sich so ein bisschen voneinander.

00:56:29.470 --> 00:56:31.330
Genau, wie oft man über das Training-Set

00:56:31.330 --> 00:56:33.130
drüber gelaufen, ist dann auf der

00:56:33.130 --> 00:56:35.390
Y-Achse die Accuracy und

00:56:35.390 --> 00:56:37.330
man sieht halt Training-Accuracy geht halt so schön

00:56:37.330 --> 00:56:38.190
immer weiter hoch und

00:56:38.190 --> 00:56:40.990
Validation-Accuracy

00:56:40.990 --> 00:56:43.310
bleibt halt irgendwo so bei knapp über

00:56:43.310 --> 00:56:45.330
70% und steigt dann nicht weiter an.

00:56:46.190 --> 00:56:47.350
Und beim Fehler sieht man das

00:56:47.350 --> 00:56:49.050
eigentlich noch schöner, dass halt das so

00:56:49.050 --> 00:56:51.270
quasi auseinanderläuft und das ist

00:56:51.270 --> 00:56:53.150
also geht halt so eine Schere auf

00:56:53.150 --> 00:56:54.990
zwischen dem

00:56:54.990 --> 00:56:56.910
Fehler auf den Trainingsdaten und Fehler

00:56:56.910 --> 00:56:58.050
auf den

00:56:58.050 --> 00:57:01.070
Validationsdaten und der Grund dafür

00:57:01.070 --> 00:57:03.010
Also mit Fehler meinst du jetzt, die er falsch einsortiert hat,

00:57:03.090 --> 00:57:04.970
oder meinst du damit diejenigen, die er richtig einsortiert hat,

00:57:04.990 --> 00:57:05.630
die aber falsch sind?

00:57:07.070 --> 00:57:09.110
Das ist an der Stelle egal. Also ja, beides.

00:57:09.490 --> 00:57:10.990
Sozusagen Accuracy ist sozusagen

00:57:10.990 --> 00:57:12.790
ein kombiniertes Maß für beides an der Stelle,

00:57:13.390 --> 00:57:14.990
weil es die Accuracy

00:57:14.990 --> 00:57:16.970
sozusagen gleich verändert, ob ich die eine

00:57:16.970 --> 00:57:18.770
Fehler habe oder die andere an der Stelle.

00:57:22.150 --> 00:57:23.050
Ja, ich könnte natürlich

00:57:23.050 --> 00:57:24.890
auch jetzt, wenn ich ein anderes Problem hätte, könnte ich beide,

00:57:25.410 --> 00:57:26.930
weil wenn ich jetzt Precision und Recall hätte, könnte ich

00:57:26.930 --> 00:57:29.150
das halt beides plotten oder eben das kombinierte

00:57:29.150 --> 00:57:30.770
Maß irgendwie F1 nehmen und plotten.

00:57:31.070 --> 00:57:54.170
Ja, aber immer wenn man das sieht, dass das halt so auseinanderläuft, dann weiß man halt, okay, man overfittet gerade das Training-Set und das bedeutet halt, dass man eigentlich nicht mehr wirklich lernt, also etwas generalisiert von den Trainingsbeispielen, die man sieht, sondern man wird halt immer besser auf den Trainingsdaten, aber das hilft einem gar nicht bei neuen Daten, sondern macht das Ergebnis eigentlich nur noch schlechter.

00:57:54.530 --> 00:57:56.410
Weil man halt quasi die Trainingsdaten auswendig lernt.

00:57:56.410 --> 00:58:09.050
Genau. Es gibt diverse Gründe dafür, warum das passiert. Es kann sein, dass man einfach zu wenig Technikdaten hat für die Komplexität des Modells oder für die Anzahl der Parameter, die das Modell hat.

00:58:09.050 --> 00:58:36.030
Es kann sein, dass man da nicht hinreichend Regularisierungsmaßnahmen gegen Overfitting getroffen hat. Also bei neuronalen Netzen wäre das Dropout. Man kann aber auch irgendwie für die Parameter halt irgendwie sagen, dass da sozusagen schmeißt man einige der Verbindungen halt weg.

00:58:36.030 --> 00:58:55.090
Also ein Anteil zwischen 10 und 50 Prozent oder sowas. Und zwingt damit sozusagen das Netz nicht nur, also da schon generellere Geschichten gelernt zu haben, weil es muss halt auch funktionieren, wenn halt ein Teil davon nicht mehr funktioniert.

00:58:56.330 --> 00:59:16.230
So, es ist nicht so einfach zu erklären, warum das funktioniert. Das ist auch nicht so, das war schon, das war auch irgendwie, ja, bekannt, dass das irgendwie klappt oder so, aber niemand wusste genau, warum. Also, das ist, ja, das ist auf jeden Fall etwas, was halt, ja, ein Modell, das sehr, sehr stark sich den Daten anpasst, halt bestraft irgendwie dafür, dass es das tut.

00:59:16.870 --> 00:59:39.890
Und in dem Sinne wirkt es halt Overfitting entgegen. Bei anderen Arten von Modellen gibt es halt auch eine klassische Regularisierung. Bei linearen Modellen wäre halt sowas wie, man bestraft das Modell dafür, dass die Größe, dass halt zum Beispiel die Länge des normalen Vektors, also die Länge des Modells, der Betrag, die Länge des Vektors, dass der zu groß wird, in der L2-Norm zum Beispiel.

00:59:39.890 --> 00:59:41.930
und sagt halt, das ist nicht gut.

00:59:42.710 --> 00:59:43.870
Das sollten immer möglichst kleine

00:59:43.870 --> 00:59:45.750
Werte sein und das

00:59:45.750 --> 00:59:47.850
regularisiert auch. Es gibt halt die

00:59:47.850 --> 00:59:49.290
unterschiedlichsten Arten, wie man das hinkriegt.

00:59:49.890 --> 00:59:51.350
Aber ja,

00:59:52.010 --> 00:59:53.810
also an der Stelle

00:59:53.810 --> 00:59:55.170
ist es halt einfach tausend

00:59:55.170 --> 00:59:57.670
Beispiele sind einfach zu wenig, um

00:59:57.670 --> 00:59:59.650
wirklich zu lernen, was Katzen von Hunden

00:59:59.650 --> 01:00:00.230
untersteidet.

01:00:01.550 --> 01:00:03.730
Und ja,

01:00:04.130 --> 01:00:05.670
Overfitting ist halt so der große

01:00:05.670 --> 01:00:07.710
fiese Fehler, also einer der beiden

01:00:07.710 --> 01:00:09.250
großen fiesen Dinge, die passieren können.

01:00:09.890 --> 01:00:26.490
Genau, da wären wir jetzt auch bei diesem Bias versus Variance Ding, wenn man halt eben sieht, dass das so aussieht wie in dem Plot bei dem Model-from-Scratch-Notebook, dann hat man halt Overfitting, aber es könnte halt auch sein,

01:00:26.490 --> 01:00:45.240
dass der Training-Error und Validation-Error beide noch relativ stark beieinander liegen, aber halt hoch sind.

01:00:45.560 --> 01:00:47.640
Und dann kann es halt sein, dass man underfittet.

01:00:47.940 --> 01:00:51.020
Das kann dann passieren, wenn das Modell zu einfach ist, was man benutzt.

01:00:51.700 --> 01:01:08.980
Also wenn zum Beispiel die Daten irgendwie verteilt sind in der Parabel, aber man legt halt eine Gerade durch oder so, dann hat man einen zu großen Bias im Modell, dadurch, dass es halt vielleicht zu einfach ist. Man geht halt davon aus, dass es sich irgendwie durch eine Gerade darstellen lässt, ist aber nicht so, dann underfittet man halt.

01:01:08.980 --> 01:01:37.040
Oder in dem Fall wäre das halt, wenn man jetzt sozusagen einfach zu wenig Trainingsepochen nehmen würde, man würde jetzt einfach nur einmal oder zweimal über die Trainingsdaten gehen, dann wäre zwar der Validation Error nicht viel schlimmer als der Trainings Error, aber man wäre nicht bei einem optimalen Ergebnis einfach deswegen, weil man noch nicht lange genug die Parameter optimiert hat

01:01:37.040 --> 01:01:40.820
und hätte sozusagen das Problem underfitted.

01:01:41.860 --> 01:01:45.180
Und zwischen Underfitting und Overfitting

01:01:45.180 --> 01:01:46.840
gibt es halt irgendwo einen Bereich, der optimal ist.

01:01:46.960 --> 01:01:48.420
Und man muss halt irgendwie versuchen, den zu treffen.

01:01:48.760 --> 01:01:49.500
Perfekt Match.

01:01:49.700 --> 01:01:51.820
Ja, und dann gibt es da auch immer noch so einen Unterschied

01:01:51.820 --> 01:01:55.420
zwischen Trainings- und Validation-Error,

01:01:55.660 --> 01:01:57.760
den man nicht wegkriegt.

01:01:58.200 --> 01:02:03.840
Das ist so ein irreduzierbarer Fehler,

01:02:04.100 --> 01:02:05.920
der halt vielleicht daherkommt, dass es da Rauschen gibt.

01:02:05.920 --> 01:02:07.580
Vielleicht, dass es irgendwie nicht geht.

01:02:10.200 --> 01:02:16.560
Ja, also die Overfitting- und Underfitting-Geschichten bekommt man halt irgendwie, wenn man das richtig macht, in den Griff.

01:02:16.780 --> 01:02:21.540
Aber es gibt halt auch immer einen Unterschied zwischen Trainings- und Validationserror, den man nicht wegbekommt.

01:02:23.120 --> 01:02:29.340
Ja, aber das halt voneinander unterscheiden zu können, ist relativ wichtig, weil wenn man sich jetzt an dem Fehler abarbeitet, den man nicht wegbekommt, dann ist das halt sinnlos.

01:02:29.820 --> 01:02:31.700
Und wenn man irgendwie

01:02:31.700 --> 01:02:34.040
denkt, man ist fertig und hat aber

01:02:34.040 --> 01:02:35.620
einen der Fehler, die man eigentlich noch

01:02:35.620 --> 01:02:37.160
wegoptimieren kann, dann

01:02:37.160 --> 01:02:39.260
kommt man halt auch nicht zum

01:02:39.260 --> 01:02:41.940
besten möglichen Ergebnis.

01:02:43.640 --> 01:02:43.780
Ja.

01:02:47.760 --> 01:02:48.160
Genau.

01:02:48.400 --> 01:02:49.840
Damit haben wir das eigentlich im Grunde schon

01:02:49.840 --> 01:02:51.280
so halbwegs

01:02:51.280 --> 01:02:53.560
erklärt. Ja, also ich glaube, das wird dann wieder

01:02:53.560 --> 01:02:55.320
Zeit für den Captain Mark, weil die Frage ist, was

01:02:55.320 --> 01:02:57.440
fällt dir denn noch so ein? Außer dem Deep Learning,

01:02:57.540 --> 01:02:59.480
was wir auf jeden Fall nochmal machen wollen, aber was wir wahrscheinlich in der eigenen

01:02:59.480 --> 01:03:00.340
Folge irgendwie besprechen?

01:03:01.400 --> 01:03:02.440
Ja, also

01:03:02.440 --> 01:03:05.660
was ich noch

01:03:05.660 --> 01:03:06.680
genau

01:03:06.680 --> 01:03:13.640
ja genau, was ich auf jeden Fall noch erzählen

01:03:13.640 --> 01:03:15.500
würde nach dem Beispiel

01:03:15.500 --> 01:03:17.080
ist, warum

01:03:17.080 --> 01:03:18.920
Deep

01:03:18.920 --> 01:03:20.120
Learning

01:03:20.120 --> 01:03:23.320
auch auf

01:03:23.320 --> 01:03:24.600
kleineren Datensätzen funktioniert.

01:03:26.720 --> 01:03:27.280
Okay,

01:03:27.280 --> 01:03:28.960
ja. Was sind

01:03:28.960 --> 01:03:30.640
dann da kleinere Datensätze?

01:03:31.020 --> 01:03:33.040
Ja, eben sowas wie das, was wir hier haben.

01:03:33.620 --> 01:03:35.180
Also 1000, 10.000

01:03:35.180 --> 01:03:36.540
bis 1000 Datensätze. Ja, genau.

01:03:36.860 --> 01:03:38.320
Also groß ist halt sowas, also da

01:03:38.320 --> 01:03:40.000
funktioniert es ja gut, das weiß man ja.

01:03:40.480 --> 01:03:42.760
Imagenet, aber das sind anderthalb Millionen Bilder. Jetzt könnte man auf die Idee kommen

01:03:42.760 --> 01:03:43.900
und sagen, okay,

01:03:46.200 --> 01:03:46.960
so viele Bilder

01:03:46.960 --> 01:03:48.920
habe ich leider nicht für mein Problem. 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.200
anwenden und

01:03:52.200 --> 01:03:54.960
ich möchte jetzt aber nicht Hunde von Katzen

01:03:54.960 --> 01:03:56.140
unterscheiden oder

01:03:56.140 --> 01:03:58.940
irgendwie Tische

01:03:58.940 --> 01:04:00.120
in Bildern finden, sondern

01:04:00.120 --> 01:04:02.880
ich habe das Problem, ich

01:04:02.880 --> 01:04:05.140
mache jetzt, weiß ich nicht,

01:04:06.920 --> 01:04:07.580
bin in einer

01:04:07.580 --> 01:04:09.180
Müllverbrennungsanlage oder so, bin an einem Platz,

01:04:09.260 --> 01:04:11.160
wo ganz viel Müll angeliefert wird und ich möchte jetzt irgendwie

01:04:11.160 --> 01:04:12.300
den Müll auseinandersortieren.

01:04:13.240 --> 01:04:15.200
Und das sind halt alles Klassen. Also ich möchte jetzt zum Beispiel

01:04:15.200 --> 01:04:17.140
feststellen, ist das eine Plastikflasche oder ist das

01:04:17.140 --> 01:04:18.320
halt irgendwie was anderes als Glas?

01:04:18.320 --> 01:04:19.500
Eine Plastikflasche mit einem Hundeetikett.

01:04:20.200 --> 01:04:22.080
Ja, also meine Klassen sind halt anders.

01:04:22.200 --> 01:04:24.180
Die sind in dem Image-Net-Data-Set so nicht drin.

01:04:25.300 --> 01:04:26.060
Und da kann ich denken,

01:04:26.140 --> 01:04:28.300
okay, dann muss ich jetzt erst anderthalb Millionen Bilder sammeln.

01:04:28.820 --> 01:04:30.140
Blöd, das kriege ich vielleicht nicht hin.

01:04:30.220 --> 01:04:31.340
Und ich kann die auch nicht labeln.

01:04:31.420 --> 01:04:33.980
Das ist alles irgendwie nicht wirklich handhabbar für mich.

01:04:35.920 --> 01:04:37.880
Dann könnte ich halt denken, okay, Deep Learning ist nichts für mich.

01:04:37.940 --> 01:04:38.780
Das funktioniert alles nicht.

01:04:39.300 --> 01:04:42.840
Ich lasse weiter das irgendwie ein Euro-Jobber

01:04:42.840 --> 01:04:44.680
und die sortieren das dann von Hand oder so.

01:04:46.420 --> 01:04:48.840
Aber nein, man kann tatsächlich da was machen.

01:04:49.620 --> 01:04:53.260
Und zwar braucht man gar nicht so viele Beispiele.

01:04:53.480 --> 01:04:58.320
Man kann nämlich die vortrainierten Modelle einfach benutzen.

01:04:59.040 --> 01:05:02.520
Die wurden dann halt auf ImageNet trainiert

01:05:02.520 --> 01:05:04.660
und geht halt dann davon aus,

01:05:04.660 --> 01:05:06.940
dass sozusagen ein Großteil von dem,

01:05:07.100 --> 01:05:10.040
was unsere visuelle Realität ausmacht,

01:05:10.140 --> 01:05:13.980
dann da schon irgendwie ordentlich trainiert worden ist.

01:05:14.500 --> 01:05:17.960
Also Feature-Extraktion aus Bildern

01:05:17.960 --> 01:05:19.960
funktioniert damit halt schon ziemlich gut

01:05:19.960 --> 01:05:22.060
und diese Annahme wird wahrscheinlich halten.

01:05:23.280 --> 01:05:26.860
Und dann trainiert man halt ein eigenes Modell,

01:05:27.060 --> 01:05:31.580
was aber nur die von einem Deep-Learning-Modell,

01:05:31.620 --> 01:05:34.720
das aus ImageNet trainiert wurde, generiert wurden.

01:05:34.840 --> 01:05:38.820
Also man nimmt sozusagen, also bei den Deep-Learning-Modellen,

01:05:38.880 --> 01:05:40.480
die auf ImageNet trainiert wurden, ist halt so der letzte Layer,

01:05:40.540 --> 01:05:42.840
zum Beispiel der Klassifikationslayer, der das halt in die tausend,

01:05:43.420 --> 01:05:46.580
das ist halt nochmal ein dichter Layer und danach sind nochmal tausend Ausgabeneuronen,

01:05:46.580 --> 01:05:48.940
die halt dann die tausend Klassen von ImageNet darstellen.

01:05:49.460 --> 01:05:51.960
Und dann bei jedem Ding kommt halt eine Wahrscheinlichkeit raus,

01:05:52.300 --> 01:05:53.400
dafür, dass es in der Klasse liegt.

01:05:55.300 --> 01:05:56.420
Und diese beiden Dinger nimmt man einfach

01:05:56.420 --> 01:05:58.100
weg, also den Klassifikationslayer

01:05:58.100 --> 01:06:00.340
und nimmt

01:06:00.340 --> 01:06:02.240
nur das, was dabei rauskommt, wenn man jetzt

01:06:02.240 --> 01:06:04.020
wirft man halt ein Bild von einer Plastikflasche

01:06:04.020 --> 01:06:06.260
oben rein und dann kommt halt das raus, was jetzt

01:06:06.260 --> 01:06:08.240
normalerweise dann als Elefant oder Hund

01:06:08.240 --> 01:06:09.080
klassifiziert würde.

01:06:09.880 --> 01:06:12.280
Ein Feature Vector, das ist an der Stelle noch nicht

01:06:12.280 --> 01:06:14.240
ein Vector, das ist halt ein Tensor, der irgendwie so ein bisschen anders aussieht.

01:06:14.540 --> 01:06:16.200
Den klopft man dann halt flach, irgendwie so

01:06:16.200 --> 01:06:18.320
in einen Vector. Einmal mit der

01:06:18.320 --> 01:06:20.280
großen Küchenrolle drüber. Genau, und dann

01:06:20.280 --> 01:06:21.120
hat man halt so einen

01:06:21.120 --> 01:06:23.880
Feature Vector extrahiert und das macht man halt mit allen

01:06:23.880 --> 01:06:25.960
Bildern, die man hat. Vielleicht hat man halt nur so tausend, aber tausend

01:06:25.960 --> 01:06:27.360
kann man durchaus sammeln, dass das geht.

01:06:28.560 --> 01:06:29.180
Und halt

01:06:29.180 --> 01:06:31.820
oder tausend für jede Klasse, die man halt hat.

01:06:33.520 --> 01:06:33.900
Und

01:06:33.900 --> 01:06:35.320
dann trainiert man einen eigenen

01:06:35.320 --> 01:06:37.900
Klassifikationslayer, sozusagen ein eigenes

01:06:37.900 --> 01:06:38.840
Modell auf diesen Features.

01:06:41.040 --> 01:06:41.760
Und dann

01:06:41.760 --> 01:06:43.960
kommt man damit auf

01:06:43.960 --> 01:06:46.140
auch gar nicht so schlechte Ergebnisse

01:06:46.140 --> 01:06:48.120
und hat sozusagen

01:06:48.120 --> 01:06:49.860
das Deep Learning Modell

01:06:49.860 --> 01:06:51.420
nur zur Feature-Extraktion benutzt.

01:06:51.820 --> 01:06:53.720
Das ist ein super billiges Verfahren.

01:06:54.600 --> 01:06:55.840
Damit kommt man schon in Bereiche,

01:06:55.920 --> 01:06:57.040
in die man früher nie gekommen wäre,

01:06:57.320 --> 01:06:59.360
mit wenig Trainingsdaten.

01:06:59.620 --> 01:07:01.080
Einfach deswegen, weil man sich halt viel

01:07:01.080 --> 01:07:04.100
von der Generalisierungs-Power

01:07:04.100 --> 01:07:06.280
oder Feature-Extraktions-Geschichte,

01:07:06.360 --> 01:07:08.000
die halt auf einem Image-net-trainierten

01:07:08.000 --> 01:07:09.820
Modell, was halt drinsteckt, irgendwie sozusagen

01:07:09.820 --> 01:07:11.420
transferieren kann auf das Problem, was man hat.

01:07:11.600 --> 01:07:13.320
Ja, also ich denke mal, diese Daten kommt ja relativ einfach sammeln.

01:07:13.400 --> 01:07:15.860
Ihr stellt euch einfach mit eurer Kamera da zu dem Unternehmen, wo ihr es einführen

01:07:15.860 --> 01:07:17.860
wollt, müsst halt pro Kategorie 1000 Fotos

01:07:17.860 --> 01:07:19.840
aus verschiedenen Perspektiven schießen und schon

01:07:19.840 --> 01:07:20.620
ein bisschen was da passiert.

01:07:22.840 --> 01:07:23.680
Genau, genau. Also

01:07:23.680 --> 01:07:24.800
es ist immer noch nicht einfach.

01:07:24.880 --> 01:07:27.860
Man muss das dann auch nebeln und so, aber das wird dann

01:07:27.860 --> 01:07:29.780
alles, kommt in den machbaren Bereich.

01:07:30.220 --> 01:07:32.020
Ein Verfahren, was noch besser funktioniert, ist

01:07:32.020 --> 01:07:35.400
das nennt sich Feintuning.

01:07:35.820 --> 01:07:37.060
Da nimmt man halt so ein Modell,

01:07:37.700 --> 01:07:39.060
so ein Deep Learning Modell und sagt halt, okay,

01:07:40.520 --> 01:07:41.100
ich nehme

01:07:41.100 --> 01:07:43.040
jetzt den obersten Klassifikationslayer

01:07:43.040 --> 01:07:44.980
oder vielleicht noch ein paar von den Layern mit

01:07:44.980 --> 01:07:47.140
den abstraktesten Features. Vielleicht ist, wenn ich Plastikflaschen

01:07:47.140 --> 01:07:49.080
erkennen will, gar nicht so

01:07:49.080 --> 01:07:50.920
relevant, ob da jetzt Fell drauf ist oder nicht,

01:07:51.040 --> 01:07:52.300
weil die haben halt kein Fell.

01:07:52.920 --> 01:07:54.940
Aber ich möchte jetzt zwei Arten von Plastikflaschen unterscheiden,

01:07:55.020 --> 01:07:56.960
da ist halt vielleicht was anderes wichtig. Das heißt,

01:07:57.240 --> 01:07:59.060
man nimmt einige der abstraktesten

01:07:59.060 --> 01:08:01.080
Layer, oder Layer,

01:08:01.140 --> 01:08:02.560
die halt die abstraktesten Features detektieren,

01:08:03.420 --> 01:08:03.660
die

01:08:03.660 --> 01:08:07.060
macht man trainierbar, den Rest von dem

01:08:07.060 --> 01:08:08.980
Modell, also die ganzen Layer,

01:08:09.060 --> 01:08:10.920
die halt so eher einfache Sachen

01:08:10.920 --> 01:08:12.560
detektieren,

01:08:13.300 --> 01:08:14.100
die friert man ein.

01:08:14.620 --> 01:08:16.900
Dann kann man in Keras einfach sagen, so, diese Layer sind alle

01:08:16.900 --> 01:08:18.580
eingefroren, die ändern sich beim Training nicht.

01:08:19.080 --> 01:08:20.740
Und nur die obersten paar Layer

01:08:20.740 --> 01:08:21.620
dürfen sich halt ändern.

01:08:22.600 --> 01:08:23.700
Und dann trainiert man neu.

01:08:24.500 --> 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 fitten muss.

01:08:29.120 --> 01:08:30.580
Aber das funktioniert dann noch viel besser.

01:08:30.680 --> 01:08:32.580
Und damit kommt man dann schon so in die Region von dem,

01:08:32.740 --> 01:08:34.540
was ImageNet halt auch, äh, was diese

01:08:34.540 --> 01:08:36.140
Modelle halt auch auf ImageNet für eine

01:08:36.140 --> 01:08:37.460
Genauigkeit haben.

01:08:38.320 --> 01:08:40.620
Und also da kommt man, ja, vielleicht nicht ganz

01:08:40.620 --> 01:08:42.380
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:45.060 --> 01:08:46.260
Also Feintuning heißt die Methode,

01:08:46.260 --> 01:08:48.360
funktioniert ziemlich

01:08:48.360 --> 01:08:50.280
klasse. Und damit kriegt man

01:08:50.280 --> 01:08:52.680
sozusagen Probleme,

01:08:52.800 --> 01:08:54.260
wo man früher gedacht hätte, das geht gar nicht,

01:08:54.300 --> 01:08:56.360
kriegt man nicht in den Griff. Und wenn man jetzt so ein bisschen was

01:08:56.360 --> 01:08:58.200
von Deep Learning gehört hat, dann denkt man sich vielleicht so, oh, so viele

01:08:58.200 --> 01:09:00.220
Trainingsbeispiele habe ich gar nicht. Wäre schön, ich

01:09:00.220 --> 01:09:02.280
kriege es vielleicht theoretisch in den Griff, aber praktisch kann ich es auch

01:09:02.280 --> 01:09:04.260
nicht machen. Man kriegt die Dinge auch

01:09:04.260 --> 01:09:06.060
tatsächlich praktisch in den Griff. Also das ist

01:09:06.060 --> 01:09:08.200
schon, das sollte man vielleicht wissen,

01:09:08.280 --> 01:09:09.960
dass das möglich ist und wie man das machen kann.

01:09:11.220 --> 01:09:12.160
Du musst dir mal alles ausprobieren.

01:09:12.260 --> 01:09:14.240
Ich bin da total neugierig drauf. Ich muss mal ein, zwei Leute finden,

01:09:14.240 --> 01:09:16.040
die Lust haben, dass man bei denen mal so ein Projekt baut.

01:09:16.400 --> 01:09:17.540
Ja, und

01:09:17.540 --> 01:09:19.900
ja, damit kann man dann auf jeden Fall

01:09:19.900 --> 01:09:21.600
schon so richtige... Also wenn ihr Lust habt, dass wir so

01:09:21.600 --> 01:09:23.620
ein Maschinen-Learning-Projekt bei euch machen, dann sagt auch mal

01:09:23.620 --> 01:09:24.820
Bescheid, ne? Das ist natürlich...

01:09:24.820 --> 01:09:24.960
Ja.

01:09:26.640 --> 01:09:27.740
Aber schon einen recht

01:09:27.740 --> 01:09:30.740
starken Wow-Effekt mit erzeugen.

01:09:32.560 --> 01:09:32.880
Ja,

01:09:33.120 --> 01:09:34.800
das wollte ich auf jeden Fall noch erwähnen.

01:09:34.880 --> 01:09:36.160
Deswegen ist das auch so interessant.

01:09:37.020 --> 01:09:38.700
Und ich bin auch gespannt, da wird es halt in den

01:09:38.700 --> 01:09:40.620
nächsten Jahren, das dauert natürlich jetzt sehr lange, also

01:09:40.620 --> 01:09:42.820
es gibt halt viele Dinge, die so theoretisch gelöst sind und

01:09:42.820 --> 01:09:44.900
ImageNet ist natürlich so ein

01:09:44.900 --> 01:09:46.740
Dataset, das kann man jetzt

01:09:46.740 --> 01:09:48.800
für viele Sachen in der Praxis geht

01:09:48.800 --> 01:09:50.720
das, aber für manche Sachen geht das noch nicht. Für viele

01:09:50.720 --> 01:09:52.120
andere Sachen gibt es noch keine tollen Datasets.

01:09:53.900 --> 01:09:54.700
Aber bis das

01:09:54.700 --> 01:09:56.600
jetzt sozusagen, also viele dieser

01:09:56.600 --> 01:09:58.620
Probleme, mit denen man in der Praxis was anfangen könnte,

01:09:58.680 --> 01:10:00.680
sind jetzt theoretisch im Griff und man muss es halt nicht nur

01:10:00.680 --> 01:10:02.540
praktisch umsetzen. Das wird aber

01:10:02.540 --> 01:10:04.720
wahrscheinlich noch irgendwie lange dauern. Wahrscheinlich wird es die nächsten

01:10:04.720 --> 01:10:06.800
zehn Jahre dauern, bis man das in Produkten im Alltag

01:10:06.800 --> 01:10:08.820
sieht, dass die das wirklich benutzen

01:10:08.820 --> 01:10:10.760
und auch richtig benutzen. Weil am Anfang

01:10:10.760 --> 01:10:12.300
jetzt müssen die Leute erstmal lernen, wie das geht.

01:10:12.700 --> 01:10:14.480
Die werden erstmal Fehler machen. Das wird erstmal

01:10:14.480 --> 01:10:16.980
wird man viele Dinge komplett falsch machen

01:10:16.980 --> 01:10:18.840
und dann dauert das halt irgendwie ein paar Jahre, bis die Leute

01:10:18.840 --> 01:10:21.200
anfangen, das richtig hinzubekommen

01:10:21.200 --> 01:10:23.060
und dann dauert es noch mal ein paar Jahre,

01:10:23.680 --> 01:10:25.000
bis die Daten ordentlich sind

01:10:25.000 --> 01:10:27.100
und ja, so wie das halt so ist.

01:10:27.520 --> 01:10:30.000
Also, alles sehr langsam.

01:10:30.000 --> 01:10:31.020
Ja, ist leider so.

01:10:32.520 --> 01:10:32.920
Aber

01:10:32.920 --> 01:10:35.800
wahrscheinlich wird man da

01:10:35.800 --> 01:10:36.680
in vielen Bereichen

01:10:36.680 --> 01:10:39.900
tolle Verbesserungen sehen und mir wird das ja schon

01:10:39.900 --> 01:10:41.520
reichen, wenn ich im Supermarkt nicht immer irgendwie

01:10:41.520 --> 01:10:43.000
fluchend vor dem Pfandautomaten stehen muss.

01:10:43.960 --> 01:10:45.920
wahrscheinlich braucht man ja nicht mal Deep Learning,

01:10:46.080 --> 01:10:47.800
das ist einfach nur kaputt. Ach,

01:10:48.020 --> 01:10:50.060
vielleicht geht's doch nicht. Das ist einfach ein Problem, schon nicht geht.

01:10:50.760 --> 01:10:51.080
Naja,

01:10:52.140 --> 01:10:54.040
ich geb die Hoffnung nicht auf. Ja, ja, genau, das wollte ich

01:10:54.040 --> 01:10:54.900
gerade sagen. Also eben mal so.

01:10:55.820 --> 01:10:58.040
Die Kundenintelligenz, die AGI kriegen wir alle nicht

01:10:58.040 --> 01:10:59.440
hin und die ganzen Roboter und so, aber

01:10:59.440 --> 01:11:01.040
ja, vielleicht ist es auch cool, also

01:11:01.040 --> 01:11:02.940
nützlich.

01:11:04.360 --> 01:11:05.960
Gut, ja, also

01:11:05.960 --> 01:11:07.440
ein praktisches Beispiel hatten wir, wir hatten eine Zeltform,

01:11:07.780 --> 01:11:09.880
genau, was wir vielleicht noch ein bisschen uns angucken

01:11:09.880 --> 01:11:12.160
können, ist das Visualisierungs-Notebook.

01:11:13.960 --> 01:11:20.080
Ja, weil

01:11:20.080 --> 01:11:21.740
ja,

01:11:22.740 --> 01:11:26.180
da bekommt jemand nicht, was er möchte.

01:11:26.360 --> 01:11:26.960
Nicht gut.

01:11:30.300 --> 01:11:30.740
Ja.

01:11:34.500 --> 01:11:34.940
Genau.

01:11:39.460 --> 01:11:42.100
Da sind sozusagen die, wenn man die ganzen Notebooks

01:11:42.100 --> 01:11:44.000
halt ausgeführt hat, dann werden die Modelle

01:11:44.000 --> 01:11:44.880
halt auch gespeichert

01:11:44.880 --> 01:11:47.900
und hier werden sie halt nochmal reingeladen.

01:11:48.420 --> 01:11:49.120
Da werden auch die

01:11:49.120 --> 01:11:51.980
quasi endgültigen Scores auf

01:11:51.980 --> 01:11:53.980
den Testdaten ermittelt

01:11:53.980 --> 01:11:55.640
sozusagen und man kann halt so ein bisschen

01:11:55.640 --> 01:11:56.420
sich angucken,

01:11:57.640 --> 01:11:59.820
welche Features

01:11:59.820 --> 01:12:01.880
werden eigentlich so aktiviert, wenn man jetzt so ein Bild von einer Katze

01:12:01.880 --> 01:12:02.900
zum Beispiel da reinwirft.

01:12:04.060 --> 01:12:04.160
Und

01:12:04.160 --> 01:12:07.980
da gibt es auch ein Ding, was hier so ein bisschen

01:12:07.980 --> 01:12:08.400
zeigt.

01:12:10.360 --> 01:12:11.980
Ach, jetzt das Visualisierungs-Notebook

01:12:11.980 --> 01:12:13.900
stimmt, da ist auch das tatsächlich

01:12:13.900 --> 01:12:16.100
eher so, das zeigt

01:12:16.100 --> 01:12:17.940
ja, da sind ein paar kaputte Sachen dabei und das

01:12:17.940 --> 01:12:19.300
zeigt tatsächlich eher so, wo

01:12:19.300 --> 01:12:21.840
wie funktioniert das mit den Controllers

01:12:21.840 --> 01:12:23.580
und so, das wollte ich aber gar nicht zeigen.

01:12:24.060 --> 01:12:25.500
Das ist ein anderes Notebook, was ich zeigen wollte.

01:12:25.700 --> 01:12:27.060
Da hast du gesagt, dass du das zeigen wolltest. Ja,

01:12:27.720 --> 01:12:28.600
hab ich vertan.

01:12:30.340 --> 01:12:31.460
Evaluation Notebook, das war das.

01:12:32.520 --> 01:12:34.080
Genau, das ist das, wo

01:12:34.080 --> 01:12:36.000
die Modelle geladen werden, die jetzt irgendwie

01:12:36.000 --> 01:12:37.220
gespeichert wurden auf der Platte.

01:12:38.840 --> 01:12:40.080
Was hast du gespeichert, das Pickel?

01:12:40.640 --> 01:12:42.020
Nee, HDF5.

01:12:42.540 --> 01:12:42.900
HDF5?

01:12:43.000 --> 01:12:43.180
Ja.

01:12:44.600 --> 01:12:45.160
Was ist das?

01:12:48.420 --> 01:12:50.100
Ist das Vorläufer von NetCDF?

01:12:50.180 --> 01:12:50.840
Ich weiß es nicht so genau.

01:12:51.040 --> 01:12:52.840
Ist auch so ein wissenschaftlicher Bereich,

01:12:52.940 --> 01:12:55.640
übliches Format, irgendwie Daten zu speichern.

01:12:56.920 --> 01:13:00.860
Ja, im Grunde stehen halt die Parameter vom Netz drin.

01:13:01.600 --> 01:13:04.460
Und ja, man könnte die auch irgendwie anders speichern.

01:13:04.520 --> 01:13:06.660
Man könnte es wahrscheinlich auch pickeln, aber ja.

01:13:10.640 --> 01:13:24.700
Genau. Ja, und da kann man halt mal vergleichen, ob die Scores, die man auf den Testdaten bekommt, halt auch das sind, was man jetzt erwarten würde, nachdem man das Modell auf den Validationsdaten irgendwie getestet hat.

01:13:24.700 --> 01:13:33.600
Und das sieht eigentlich alles so aus, als ob das halbwegs stimmt. Und dann kann man da so Dinge tun wie, man nimmt einfach mal Beispielbilder, die man da reinwirft.

01:13:34.060 --> 01:13:35.920
Ich weiß gar nicht, ob ich die mit eingecheckt habe.

01:13:39.860 --> 01:13:43.240
Wenn ja, dann kann man einfach die, die da auskommentiert sind, probieren.

01:13:43.320 --> 01:13:45.000
Man kann aber auch eigene Bilder nehmen.

01:13:46.320 --> 01:13:48.160
Fotografiert ihr eure Katze, fotografiert ihr euren Hund?

01:13:48.400 --> 01:13:48.720
Ja, genau.

01:13:49.420 --> 01:13:50.940
Ob das wirklich eine Katze oder ein Hund ist,

01:13:51.040 --> 01:13:52.580
zumindest nach der Meinung von dem Algorithmus.

01:13:53.300 --> 01:13:54.780
Wird man das natürlich auch irgendwie,

01:13:55.660 --> 01:13:58.360
wahrscheinlich sowas schon irgendwie so haben.

01:13:59.620 --> 01:14:01.300
Ihr könnt auch fast ganz andere fotografieren und fragen,

01:14:01.400 --> 01:14:02.820
ob es eine Katze oder ein Hund ist und gucken, was rauskommt.

01:14:03.260 --> 01:14:03.440
Ja.

01:14:04.060 --> 01:14:07.260
Ja, egal.

01:14:09.020 --> 01:14:10.660
Genau, und dann wird das halt runterskaliert.

01:14:10.800 --> 01:14:13.260
Das sieht dann auch ein bisschen deprimierend aus,

01:14:13.300 --> 01:14:14.740
weil man sieht nicht mehr so viel auf dem Bild.

01:14:15.120 --> 01:14:17.060
Das sind halt immer so 150x150 Pixel

01:14:17.060 --> 01:14:18.860
Bilder, die da

01:14:18.860 --> 01:14:19.560
reingehen.

01:14:20.880 --> 01:14:23.060
Und dann kann man halt mal die Modelle, die man da hat,

01:14:24.160 --> 01:14:24.880
hernehmen und

01:14:24.880 --> 01:14:26.940
die einfach klassifizieren lassen, was sie dann darauf

01:14:26.940 --> 01:14:28.920
sehen. Und dann sieht man schon, dass

01:14:28.920 --> 01:14:30.920
das vom Sketch-Model halt nicht so richtig toll

01:14:30.920 --> 01:14:32.780
funktioniert vielleicht. Das sagt bei einem Hund dann

01:14:32.780 --> 01:14:34.580
irgendwie mit einer 80%igen Wahrscheinlichkeit,

01:14:34.660 --> 01:14:35.700
oh, das ist eine Katze und

01:14:35.700 --> 01:14:38.660
ja, da gab es auch

01:14:38.660 --> 01:14:40.780
dann das mit Data Augmentation

01:14:40.780 --> 01:14:41.640
ist so ein bisschen, um

01:14:41.640 --> 01:14:44.720
Overfitting zu reduzieren, ist halt schon so ein bisschen besser,

01:14:45.340 --> 01:14:46.760
aber das Feature Extraction

01:14:46.760 --> 01:14:48.620
Modell, das hat dann schon, oh, das sieht aber

01:14:48.620 --> 01:14:50.140
eher wie ein Hund aus und dann

01:14:50.140 --> 01:14:52.480
ja, das

01:14:52.480 --> 01:14:56.700
Fine Tuning ist halt nochmal deutlich

01:14:56.700 --> 01:14:58.020
besser und

01:14:58.020 --> 01:15:00.640
das kann man dann auch nochmal auf mehreren

01:15:00.640 --> 01:15:02.500
Bildern machen und das ist vielleicht auch mal ganz interessant

01:15:02.500 --> 01:15:04.480
zu sehen, welche Bilder halt in dem

01:15:04.480 --> 01:15:08.360
Beispiel-Dataset da so drin sind

01:15:08.360 --> 01:15:10.520
und man kann sich das Ganze nochmal

01:15:10.520 --> 01:15:11.820
so als Tabelle ausgucken. Ich habe übrigens,

01:15:12.300 --> 01:15:13.380
das war bei der letzten,

01:15:15.140 --> 01:15:16.480
beim letzten Treffen

01:15:16.480 --> 01:15:18.180
der Python-User-Group habe ich das auch irgendwie mal so ein bisschen

01:15:18.180 --> 01:15:20.460
vorgestellt und da war das irgendwie, sah das

01:15:20.460 --> 01:15:21.920
nicht gut aus, weil dann stand da irgendwie

01:15:21.920 --> 01:15:23.720
Cat 0% oder sowas, aber das

01:15:23.720 --> 01:15:26.380
habe ich jetzt hier mal gefixt. Das war einfach nur so,

01:15:26.480 --> 01:15:28.260
dass das, der Klassenname war immer Cat

01:15:28.260 --> 01:15:29.960
und 0% bedeutete einfach, es ist ein Hund.

01:15:30.460 --> 01:15:32.120
Oh. Also es war schon richtig.

01:15:32.240 --> 01:15:34.400
Es war nur blöd dargestellt, das habe ich jetzt nochmal geändert,

01:15:34.560 --> 01:15:36.900
dass wenn es irgendwie kleiner als 50% ist,

01:15:38.200 --> 01:15:39.220
dass dann

01:15:39.220 --> 01:15:40.820
Hund als Klasse dasteht.

01:15:44.820 --> 01:15:46.580
Ja, ist auf jeden Fall super schön zum Antauen

01:15:46.580 --> 01:15:48.760
und ich glaube auch zum Visualisieren von den ersten Tests.

01:15:49.140 --> 01:15:50.480
Solltet ihr es auf jeden Fall auch mal ausprobieren?

01:15:51.200 --> 01:15:52.600
Ja, genau.

01:15:57.120 --> 01:15:58.800
Und ich glaube, von dem ganzen theoretischen Überbau

01:15:58.800 --> 01:16:00.860
haben wir es schon ziemlich viel geschafft heute, würde ich sagen.

01:16:01.520 --> 01:16:03.440
Ich guck noch mal grad, ob es noch irgendwas gibt, was

01:16:03.440 --> 01:16:05.400
äh. Hast du noch

01:16:05.400 --> 01:16:06.300
einen letzten kleinen Punkt?

01:16:07.200 --> 01:16:09.660
Nö. Nö, das ist, äh,

01:16:09.860 --> 01:16:11.540
ich glaube, wir sind tatsächlich irgendwie so halbwegs

01:16:11.540 --> 01:16:13.440
durch. Dann würde jetzt ja die nächste Chapter mal

01:16:13.440 --> 01:16:15.420
kommen und wir würden vielleicht noch einfach kurz die Picks

01:16:15.420 --> 01:16:17.200
nehmen, die wir immer so gerne noch wieder eingeführt hatten.

01:16:17.740 --> 01:16:18.840
Ich glaube, die gefielen euch auch ganz gut.

01:16:19.800 --> 01:16:21.320
Welches, äh, Modul

01:16:21.320 --> 01:16:22.940
pickst du diese Woche, Jochen?

01:16:23.300 --> 01:16:25.480
Äh, ja, hab ich auch in einem Podcast von gehört.

01:16:25.580 --> 01:16:27.020
Ich weiß jetzt gar nicht mehr, ob es Python Bytes war.

01:16:27.140 --> 01:16:28.980
Doch, ich meine. Aber, ähm,

01:16:29.660 --> 01:16:31.280
und zwar, äh, gibt's da

01:16:31.280 --> 01:16:33.540
ein sehr schönes Modul namens

01:16:33.540 --> 01:16:33.960
MatMat.

01:16:37.440 --> 01:16:38.720
Was das tut ist,

01:16:39.420 --> 01:16:41.340
also es gibt ja, also testen ist ganz wichtig

01:16:41.340 --> 01:16:43.140
und so. Und

01:16:43.140 --> 01:16:45.340
es gibt halt auch so Ansätze, irgendwie

01:16:45.340 --> 01:16:47.520
Tests vielleicht zu automatisieren.

01:16:47.760 --> 01:16:49.440
Ein interessanter ist Hypothesis.

01:16:49.800 --> 01:16:50.740
Das ist vielleicht dann auch irgendwie

01:16:50.740 --> 01:16:52.220
auch ein Pick.

01:16:53.220 --> 01:16:55.240
Das Ding generiert halt

01:16:55.240 --> 01:16:57.060
mögliche Eingaben für Funktionen und so

01:16:57.060 --> 01:16:59.240
und probiert die halt alle durch und sagt einem Bescheid,

01:16:59.240 --> 01:17:00.520
wenn es irgendwo Probleme gab.

01:17:01.280 --> 01:17:18.800
Das ist aber nur ein Ansatz und Mathematik verfolgt einen anderen und den finde ich eigentlich ziemlich cool. Man kann sich natürlich sowas ausgeben lassen wie Coverage, also sozusagen wie viel Prozent von den Zeilen, die man jetzt irgendwie hat, ist eigentlich quasi mal durchlaufen worden, wenn man jetzt die Tests wie durchläuft.

01:17:19.400 --> 01:17:30.900
Das gibt einem so einen ganz guten Anhaltspunkt dafür, wie vollständig die Tests sind, aber naja, das heißt ja jetzt nicht, dass das wirklich funktioniert, dass wirklich, wenn etwas kaputt geht, man das halt auch tatsächlich bemerken würde.

01:17:30.900 --> 01:17:35.220
Es könnte sein, aber es kann halt auch Fälle

01:17:35.220 --> 01:17:36.900
geben, wo das dann nicht passiert. Und MatMat

01:17:36.900 --> 01:17:38.600
setzt da irgendwie so ein bisschen an und

01:17:38.600 --> 01:17:41.120
macht etwas sehr Interessantes. Und zwar ändert es

01:17:41.120 --> 01:17:43.060
halt zufällig irgendwie Dinge

01:17:43.060 --> 01:17:45.020
im Code. Irgendwelche Datentypen

01:17:45.020 --> 01:17:46.760
oder sowas. Ja, also es macht zum Beispiel

01:17:46.760 --> 01:17:49.080
größer in kleiner Zeichen oder

01:17:49.080 --> 01:17:51.040
sowas. Ändert Bedingungen,

01:17:51.200 --> 01:17:53.160
fügt irgendwie was hinzu oder so. Und guckt,

01:17:53.280 --> 01:17:54.240
ob Tests fehlschlagen.

01:17:55.840 --> 01:17:56.960
Und das ist natürlich

01:17:56.960 --> 01:17:59.000
irgendwie echt nett. Also sozusagen, es macht

01:17:59.000 --> 01:18:00.980
halt irgendwie zufällige Änderungen an deinem Code und

01:18:00.980 --> 01:18:03.060
guckt dann halt irgendwie... Ist dann sein Test gut genug,

01:18:03.100 --> 01:18:05.000
um das zu entdecken? Ist seine Test-Feed gut genug

01:18:05.000 --> 01:18:06.960
zu finden, gut genug, ist seine

01:18:06.960 --> 01:18:08.620
Testabdeckung gut genug, um rauszufinden,

01:18:08.980 --> 01:18:10.680
dass jetzt irgendwie hier was zufällig geändert wurde.

01:18:11.160 --> 01:18:12.980
Und das ist natürlich schon echt

01:18:12.980 --> 01:18:14.880
ein sehr interessanter Ansatz. Sehr, sehr gut, also

01:18:14.880 --> 01:18:16.740
gerade wenn man sowas nicht richtig mal bauen möchte, oder?

01:18:16.960 --> 01:18:18.720
Ja, genau, das wäre halt so mein Pick

01:18:18.720 --> 01:18:20.500
für, ja,

01:18:21.020 --> 01:18:23.060
diese Episode. Ja, also ich würde

01:18:23.060 --> 01:18:24.620
tatsächlich auch nochmal Seaborn

01:18:24.620 --> 01:18:26.680
kurz auswählen, das hatten wir zwar schon in der

01:18:26.680 --> 01:18:28.840
Pandas-Episode, glaube ich, kurz vorgestellt, aber das ist einfach,

01:18:28.920 --> 01:18:30.080
wenn man Matplotlib so kennt,

01:18:30.660 --> 01:18:32.800
einfach die totale tolle grafische Erweiterung,

01:18:32.880 --> 01:18:33.940
dass alles ein bisschen schicker aussieht,

01:18:34.280 --> 01:18:36.680
mit der man es einfach auf Matplotlib draufpackt

01:18:36.680 --> 01:18:37.600
und an C-Bohren reinbaut.

01:18:38.400 --> 01:18:39.860
Und ich würde auch gerne irgendwie so drei Kleinigkeiten

01:18:39.860 --> 01:18:40.780
aus der Standardbibliothek,

01:18:40.840 --> 01:18:43.040
aber die ich jetzt so ein bisschen mehr drin bewahre,

01:18:43.100 --> 01:18:44.260
weil ich was dazu geschrieben hatte,

01:18:44.660 --> 01:18:45.240
nur kurz vorstellen.

01:18:45.320 --> 01:18:46.700
Das ist natürlich jetzt wieder der Nupic,

01:18:46.780 --> 01:18:48.360
aber das ist da trotzdem vielleicht für einige interessant.

01:18:48.880 --> 01:18:50.280
Und zwar kennt ihr hoffentlich ArcPath,

01:18:50.280 --> 01:18:54.300
also mit dem man vernünftig so die Parameter

01:18:54.300 --> 01:18:56.140
zu Skripten übergeben kann.

01:18:57.180 --> 01:18:58.620
da gibt es irgendwie von,

01:18:59.460 --> 01:19:00.420
wie heißt das von Google,

01:19:00.940 --> 01:19:02.880
gibt es eine Bibliothek? Es gibt noch

01:19:02.880 --> 01:19:03.800
Click. Genau.

01:19:04.180 --> 01:19:06.580
Und natürlich dann die Standard

01:19:06.580 --> 01:19:07.840
Variante.

01:19:09.220 --> 01:19:10.700
Aber ich finde ArcPass ja ziemlich cool.

01:19:10.980 --> 01:19:12.780
Also ich finde es auch besser als Click. Also Click benutzt halt irgendwie so

01:19:12.780 --> 01:19:14.240
Dekoratoren, um das irgendwie zu machen.

01:19:14.940 --> 01:19:16.740
Und ja, weiß nicht, fand ich

01:19:16.740 --> 01:19:18.980
nicht so toll, aber obwohl die Gesundheit auch ganz nett ist,

01:19:19.060 --> 01:19:20.520
aber ArcPass fand ich auch irgendwie ganz nice.

01:19:21.520 --> 01:19:22.340
Und dann ja,

01:19:22.780 --> 01:19:25.180
GetPass natürlich, um da irgendwie so Passwörter reinzubekommen.

01:19:25.180 --> 01:19:27.160
Irgendwie als verschlüsselten Text, dass man nicht direkt sieht, was eingegeben

01:19:27.160 --> 01:19:29.020
geben wird. Auch immer gut, wenn man sich irgendwo

01:19:29.020 --> 01:19:30.920
einloggt, braucht man das vielleicht. Ja, das ist tatsächlich

01:19:30.920 --> 01:19:32.520
super. Das ist vor allen Dingen auch schön in

01:19:32.520 --> 01:19:35.520
Notebooks, weil ansonsten

01:19:35.520 --> 01:19:36.940
schreibt man das ja auch

01:19:36.940 --> 01:19:38.980
irgendwie mit in die Notebooks

01:19:38.980 --> 01:19:40.540
rein und checkt das vielleicht irgendwo ein oder so.

01:19:41.380 --> 01:19:42.900
Genau. Und

01:19:42.900 --> 01:19:44.680
ja, ich habe ab und zu noch den Textwrap, das

01:19:44.680 --> 01:19:46.780
Textwrap-Modul benutzt, einfach nur zum

01:19:46.780 --> 01:19:48.600
Didenten, meistens von irgendwelchen

01:19:48.600 --> 01:19:50.640
mehrteiligen Dockstrings, die sonst irgendwie

01:19:50.640 --> 01:19:52.160
verrutscht wären, irgendwie einfach in meinen

01:19:52.160 --> 01:19:54.740
ja, in meiner Struktur, in meinen

01:19:54.740 --> 01:19:54.960
Files.

01:19:57.160 --> 01:19:59.220
Konnte man so ganz gut darstellen. Also, falls ihr das Problem

01:19:59.220 --> 01:20:00.360
habt, TechTrap.

01:20:00.920 --> 01:20:02.980
Ja, das war es eigentlich schon so mit den Modulen

01:20:02.980 --> 01:20:04.860
und ich hoffe, euch hat die Folge jetzt wieder gefallen,

01:20:04.940 --> 01:20:05.380
Machine Learning.

01:20:07.640 --> 01:20:08.680
Egal, wo ihr

01:20:08.680 --> 01:20:10.940
die gehört habt gerade. Also, wir haben jetzt gerade

01:20:10.940 --> 01:20:12.960
ausnahmsweise mal Nachmittag, sonst nehmen wir ja immer abends auf,

01:20:13.340 --> 01:20:15.080
gerade relativ gutes Wetter. Ich habe schon

01:20:15.080 --> 01:20:16.240
fast überlegt, ob wir rausgehen sollen.

01:20:16.580 --> 01:20:18.080
Ja, bestimmt könnte man eigentlich auch.

01:20:19.300 --> 01:20:20.320
Wetter ist momentan super.

01:20:21.100 --> 01:20:22.140
Frühling, voll gut.

01:20:22.940 --> 01:20:25.020
Ja, aber ansonsten, genau.

01:20:25.460 --> 01:20:26.560
Hört, wo immer ihr möchtet.

01:20:26.900 --> 01:20:28.840
Bleibt uns gewogen und schreibt uns euer Feedback

01:20:28.840 --> 01:20:29.980
an hallo-at-pison-podcast.de

01:20:29.980 --> 01:20:31.860
Ja, wir hören uns.

01:20:32.400 --> 01:20:33.200
Bis zum nächsten Mal.
