WEBVTT

00:00:00.000 --> 00:00:04.740
Ja, hallo, liebe Hörerinnen und Hörer, willkommen beim Python-Podcast in der 28. Episode heute.

00:00:05.640 --> 00:00:09.140
Es ist ein bisschen wieder eine Laber-Folge, und zwar über Machine Learning heute.

00:00:09.920 --> 00:00:12.340
Ja, hey Jochen, du bist wieder dabei, hier ist wieder Dominik.

00:00:12.580 --> 00:00:13.600
Ja, hallo Dominik.

00:00:13.720 --> 00:00:15.060
Und heute ist auch der Christian wieder da.

00:00:15.080 --> 00:00:15.880
Christian haben wir auch dabei, ja.

00:00:16.300 --> 00:00:16.900
Hey, willkommen.

00:00:17.960 --> 00:00:18.160
Danke.

00:00:19.520 --> 00:00:25.800
Ja, habt ihr euch schon was genaueres überlegt heute oder wolltet einfach so ein bisschen die Döniges erzählen?

00:00:26.080 --> 00:00:30.460
Wir haben heute übrigens, wir wollten es ja irgendwann mal anfangen zu sagen, 4. Februar 2021.

00:00:32.060 --> 00:00:37.060
Ja, ich glaube, diesmal wollten wir wieder so ein bisschen Richtung irgendwie Data Science, Machine Learning ein bisschen mehr.

00:00:37.560 --> 00:00:40.760
Wir hatten in letzter Zeit immer ganz, ganz viel Web-Entwicklung und so.

00:00:42.560 --> 00:00:47.500
Ja, und wegen uns da jetzt mal so ein bisschen, so wirklich das Thema haben wir noch nicht.

00:00:47.580 --> 00:00:49.000
Wir haben alle so ein bisschen was mitgebracht, mal schauen.

00:00:49.140 --> 00:00:52.140
Ja, wir hatten auch einige Hörerwünsche, was Datentypen zum Beispiel angeht.

00:00:52.140 --> 00:00:54.040
Wir wollten auch mal eine Folge machen, wo wir genau diese

00:00:54.040 --> 00:00:56.140
Build-in-Implementierung in Python

00:00:56.140 --> 00:00:58.120
dazu erklären, aber das wird dann eine

00:00:58.120 --> 00:00:59.600
der nächsten Folgen werden.

00:01:00.160 --> 00:01:01.980
Was wir euch aber noch mal fragen wollten, wenn ihr

00:01:01.980 --> 00:01:04.020
Feedback und Kritik und so habt, wie immer an

00:01:04.020 --> 00:01:06.000
hallo.pythonpodcast.de und sagt uns

00:01:06.000 --> 00:01:08.040
auch mal, auf welche Themen ihr so besonders Lust hättet.

00:01:08.440 --> 00:01:09.820
Dann werden wir die auch noch mal mit

00:01:09.820 --> 00:01:11.720
in unsere engere Auswahl nehmen.

00:01:13.100 --> 00:01:13.260
Ja,

00:01:14.140 --> 00:01:15.920
es gibt was Neues, es gibt eine

00:01:15.920 --> 00:01:17.400
möglichen Updates von

00:01:17.400 --> 00:01:20.220
Paketen, NumPy, Pandas,

00:01:20.860 --> 00:01:21.940
Pandas auch, MyPy,

00:01:22.140 --> 00:01:24.320
Nein, Pandas nicht. Doch, Pandas tatsächlich

00:01:24.320 --> 00:01:25.740
auch, fällt mir jetzt gerade so ein.

00:01:26.140 --> 00:01:27.940
Ich habe es jetzt hier gar nicht aufgeschrieben, aber ja,

00:01:28.320 --> 00:01:29.920
gab es jetzt auch letztens irgendwie eine neue,

00:01:30.140 --> 00:01:32.320
größere Version 1.2.

00:01:32.640 --> 00:01:34.320
Ich bin mir nicht ganz sicher. Aber tatsächlich

00:01:34.320 --> 00:01:36.460
auch NumPy hat die größte Release,

00:01:36.540 --> 00:01:37.960
also mit den meisten Pull-Requests seit

00:01:37.960 --> 00:01:40.340
x Jahren, jetzt mit

00:01:40.340 --> 00:01:42.160
1.20 und

00:01:42.160 --> 00:01:44.520
ähm, äh, Jupiter Lab

00:01:44.520 --> 00:01:46.380
3 ist draußen und

00:01:46.380 --> 00:01:48.320
äh, Spacey, äh,

00:01:48.380 --> 00:01:50.220
also die ganze Natural Language Processing

00:01:50.220 --> 00:01:52.220
Geschichte, Version 3

00:01:52.220 --> 00:01:53.960
ist jetzt gerade erschienen mit Support für Transformer.

00:01:54.940 --> 00:01:56.300
Also genau, das war mal so das erste, ich hab mir mal

00:01:56.300 --> 00:01:58.220
angeguckt, was ist denn alles Neues passiert, weil ich da auch schon lange nicht mehr

00:01:58.220 --> 00:02:00.380
drauf geguckt hab und da ist ja in letzter Zeit

00:02:00.380 --> 00:02:01.500
einiges, hat sich da...

00:02:01.500 --> 00:02:04.160
Falls ihr irgendwie tatsächlich mal den Einstieg finden wollt in NumPy

00:02:04.160 --> 00:02:06.020
und oder Pandas oder schon immer mal ein bisschen tiefer

00:02:06.020 --> 00:02:08.280
angucken wolltet, es gab einige richtig coole

00:02:08.280 --> 00:02:10.280
YouTube-Tutorials, die ich fand, die ich bis jetzt

00:02:10.280 --> 00:02:12.280
so die besten nicht kennengelernt hab, von Ben Gorman

00:02:12.280 --> 00:02:13.500
dazu und zwar

00:02:13.500 --> 00:02:16.260
NumPy for Grandmas und Pandas

00:02:16.260 --> 00:02:17.760
for your Grandpa. Okay.

00:02:18.440 --> 00:02:20.640
Ja, eine richtig schöne

00:02:20.640 --> 00:02:22.740
Einführungsserie

00:02:22.740 --> 00:02:24.560
für die beiden Bibliotheken, würde ich sagen,

00:02:24.660 --> 00:02:25.420
wo man mal so ein bisschen

00:02:25.420 --> 00:02:27.920
schon doch tiefer einkommen kann.

00:02:28.100 --> 00:02:28.540
Fand ich super.

00:02:30.560 --> 00:02:31.880
Genau, ja.

00:02:34.700 --> 00:02:36.080
Genau, weil wir so ein bisschen News machen,

00:02:36.220 --> 00:02:37.560
es gab noch ein paar andere

00:02:37.560 --> 00:02:40.400
Releases auch, MyPi

00:02:40.400 --> 00:02:42.360
kann man dazu was sagen, also ich weiß

00:02:42.360 --> 00:02:44.600
nur, das hat jetzt irgendwie Support für 3.9,

00:02:46.120 --> 00:02:47.020
Python 3.9,

00:02:47.780 --> 00:02:51.320
dann gibt es irgendwie für PIP

00:02:51.320 --> 00:02:53.080
gibt es einen neuen Resolver. Ich weiß nicht,

00:02:53.660 --> 00:02:55.200
hat sich den irgendjemand schon mal angeguckt,

00:02:55.260 --> 00:02:55.580
so ein bisschen?

00:02:57.840 --> 00:02:59.160
Ich hatte drüber gelesen

00:02:59.160 --> 00:03:00.860
und ihn nochmal auf die

00:03:00.860 --> 00:03:03.220
Wiedervorlage gepackt.

00:03:03.780 --> 00:03:04.900
Tatsächlich bin ich mit,

00:03:05.920 --> 00:03:07.100
was das Resolving angeht,

00:03:07.200 --> 00:03:07.820
momentan,

00:03:09.100 --> 00:03:10.380
ich bin immer noch an dem anderen Ende,

00:03:10.520 --> 00:03:13.120
am Umdoktern, wie ich irgendwie

00:03:13.120 --> 00:03:15.240
so einmal zusammengestellte Paketlisten

00:03:15.240 --> 00:03:16.960
so fix und fertig

00:03:16.960 --> 00:03:17.960
durch die Gegend verteile.

00:03:18.940 --> 00:03:20.600
Deswegen hatte ich es wieder zur Seite gelegt, aber

00:03:20.600 --> 00:03:22.940
ich merke auch, es hat uns nirgendwo

00:03:22.940 --> 00:03:24.580
gebissen zumindest. Es stand ja so ein kleines

00:03:24.580 --> 00:03:26.920
Teilchen drauf von, man kann noch

00:03:26.920 --> 00:03:28.640
den alten Reserver, glaube ich, aktivieren, wenn

00:03:28.640 --> 00:03:31.040
einer der Neue irgendwie Quatsch macht.

00:03:32.100 --> 00:03:32.500
Aber

00:03:32.500 --> 00:03:34.780
nee, erst mal nicht negativ

00:03:34.780 --> 00:03:35.280
aufgefallen.

00:03:36.880 --> 00:03:38.720
Ja, nee, ich merke

00:03:38.720 --> 00:03:40.680
ab und zu funktioniert das halt irgendwie nicht so richtig

00:03:40.680 --> 00:03:42.640
und dann irgendwie meistens

00:03:42.640 --> 00:03:44.600
hilft irgendwie das Paket, was Ärger macht,

00:03:44.680 --> 00:03:46.480
nochmal auszukommentieren, nochmal wieder alles neu zu installieren

00:03:46.480 --> 00:03:47.940
Und dann wieder reinzunehmen, dann geht es irgendwie wieder.

00:03:48.920 --> 00:03:50.620
Ja, aber

00:03:50.620 --> 00:03:52.180
ich habe es auch eigentlich nicht, also insofern,

00:03:52.280 --> 00:03:54.480
es hat nicht wehgetan, insofern

00:03:54.480 --> 00:03:56.820
scheint alles halbwegs gut gelaufen

00:03:56.820 --> 00:03:58.740
zu sein. Wobei das, was du,

00:03:58.860 --> 00:04:00.620
also wenn du das erzählst, ist aber genau so ein Fall

00:04:00.620 --> 00:04:02.680
von, ja, nee, das kann ich nicht leiden.

00:04:03.520 --> 00:04:04.120
Ja, ja, also

00:04:04.120 --> 00:04:06.600
das ist so ein schlechtes Gefühl, wenn ich sowas merke.

00:04:06.600 --> 00:04:08.360
Ja, ich

00:04:08.360 --> 00:04:10.000
spiele halt ein bisschen rum mit

00:04:10.000 --> 00:04:12.040
so einer Form von Logfiles,

00:04:12.840 --> 00:04:14.680
dass ich halt ein Environment

00:04:14.680 --> 00:04:16.460
beschreiben kann. Ich hatte, glaube ich,

00:04:16.460 --> 00:04:18.660
an irgendeiner Stelle ja mal das App-Env

00:04:18.660 --> 00:04:20.720
erwähnt gehabt, was

00:04:20.720 --> 00:04:21.680
ich benutze, um so

00:04:21.680 --> 00:04:24.700
fertiggebackene Virtual-Envs zu erzeugen.

00:04:24.760 --> 00:04:25.380
Klingt nach Poetry.

00:04:27.260 --> 00:04:28.920
So ein bisschen das Problem

00:04:28.920 --> 00:04:29.940
bei Poetry war mir,

00:04:30.220 --> 00:04:32.560
das ist zu viel. Das ist einfach

00:04:32.560 --> 00:04:34.600
zu viel Kram. Ich brauche irgendwie was ganz

00:04:34.600 --> 00:04:36.280
Kleines. Der

00:04:36.280 --> 00:04:37.960
wichtigste Teil für mich ist,

00:04:38.440 --> 00:04:40.780
wir haben so Projekte,

00:04:40.940 --> 00:04:42.500
wo wir ein Repo haben, das

00:04:42.500 --> 00:04:44.260
auschecken und dann

00:04:44.260 --> 00:04:46.560
bringt das Repo im Prinzip sein Log-File

00:04:46.560 --> 00:04:48.520
mit und das konkrete Tool,

00:04:48.660 --> 00:04:50.220
was da dran hängt,

00:04:50.860 --> 00:04:52.580
bootstrappt sich mit dem Log-File

00:04:52.580 --> 00:04:54.440
selber durch ein kleines Bootstrap-Skript,

00:04:54.520 --> 00:04:56.420
was in dem Repo drinnen liegt. Also

00:04:56.420 --> 00:04:58.480
Bateau ist bei uns das große Werkzeug, was

00:04:58.480 --> 00:05:00.560
das benutzt. Und dann hast

00:05:00.560 --> 00:05:02.480
du dort ein, dann kann sozusagen jeder, der mit diesem

00:05:02.480 --> 00:05:04.100
Projekt arbeitet, das Repo auschecken

00:05:04.100 --> 00:05:06.500
und tippt einfach Punkt, Schrägstrich

00:05:06.500 --> 00:05:08.720
in dem Fall Bateau oder auch irgendwas anderes.

00:05:09.000 --> 00:05:10.500
Du musst gleich nochmal kurz auf

00:05:10.500 --> 00:05:12.420
Bateau eingehen, gleich. Ja,

00:05:12.560 --> 00:05:13.100
kann ich auch.

00:05:14.260 --> 00:05:29.100
Und dieses Skript, was in dem Repository eingecheckt ist, ist nur ein ganz kleines Bootstrap-Skript, so ein Single-File, was auch über mehrere, mindestens so, glaube ich, 3, 4 oder 3, 5 bis hoch zur aktuellsten halt kompatibel ist.

00:05:29.340 --> 00:05:40.380
Und der ist ein kleiner Wrapper, dass wenn man ihn aufruft, guckt er, ob ein funktionierendes Virtual-Env für das Log-File oder halt auch das Requirements-Text-File vorhanden ist.

00:05:40.800 --> 00:05:48.340
Und wenn ja, dann startet er sozusagen das eigentliche Kommando aus diesem Virtual Env statt sich selber.

00:05:48.880 --> 00:05:50.160
So einmal durchgereicht wie so ein Exec.

00:05:50.840 --> 00:05:54.020
Und wenn das aber eben nicht der Fall ist oder wenn das Virtual Env kaputt ist

00:05:54.020 --> 00:05:57.680
oder wenn sich das Log-File geändert hat oder wenn du deinen Python-Interpreter geändert hast,

00:05:58.960 --> 00:06:03.980
dann erkennt er das und macht in dem Moment sofort eine Reinstallation, ohne dass du irgendwas tun musst.

00:06:03.980 --> 00:06:07.940
Du rufst einfach wie immer dein Tool auf, um zu sagen, ich will jetzt XY machen.

00:06:08.040 --> 00:06:14.320
Und dann sagt der im schlimmsten Fall nur, ja Moment, weil zum Beispiel ein anderer im Projekt hat was committed, weswegen das Log-File sich geändert hat.

00:06:14.380 --> 00:06:15.660
Und dann zieht der das sofort gerade.

00:06:17.040 --> 00:06:29.360
Und dieses Self-Contained-Ding, es ist auch so, dass du kannst dann halt dieses Tool in sieben Projekten benutzen und jedes Projekt benutzt seine eigene Versionsliste automatisch.

00:06:29.360 --> 00:06:34.160
Und du hast nie eine systemweite Installation dieses Tools, sondern das hängt immer konkret an den Projekten dran.

00:06:34.740 --> 00:06:37.440
das ist ein Use Case, den habe ich nirgends

00:06:37.440 --> 00:06:39.000
wo gefunden, der das so abbildet

00:06:39.000 --> 00:06:40.220
und

00:06:40.220 --> 00:06:42.900
Poetry hatte ich gesehen und das war aber sozusagen

00:06:42.900 --> 00:06:45.160
dafür Poetry zu verwenden, wäre viel zu

00:06:45.160 --> 00:06:47.220
aufwendig geworden, um dieses ganze Self-Bootstrapping

00:06:47.220 --> 00:06:49.280
irgendwie anzugehen und ich merke da

00:06:49.280 --> 00:06:50.860
da habe ich auch häufig

00:06:50.860 --> 00:06:53.060
Gedanken und Ideen, wie ich möchte, dass das funktioniert

00:06:53.060 --> 00:06:55.140
wo ich gegen andere Tools nicht

00:06:55.140 --> 00:06:57.120
mehr ankämpfen möchte, so viel Code

00:06:57.120 --> 00:06:58.940
ist es dann nicht, das selber zu bauen, als dass ich dann

00:06:58.940 --> 00:07:01.180
einem Riesentool hinterherlaufe, dem man

00:07:01.180 --> 00:07:02.960
ständig sagen muss, du ich brauch das aber so oder so

00:07:02.960 --> 00:07:06.360
Okay, und vielleicht

00:07:06.360 --> 00:07:08.120
das machst du mit Bato, oder

00:07:08.120 --> 00:07:10.200
das Tool heißt Bato, oder?

00:07:10.360 --> 00:07:12.240
Also dieses Bootstrap-Tool

00:07:12.240 --> 00:07:13.320
heißt AppEnv

00:07:13.320 --> 00:07:16.280
das ist im Prinzip nur eine

00:07:16.280 --> 00:07:17.580
einzige Datei, da gibt es bei uns

00:07:17.580 --> 00:07:20.380
auf GitHub, GitHub, Flying Circus

00:07:20.380 --> 00:07:21.860
IO, AppEnv

00:07:21.860 --> 00:07:24.200
das ist nur eine einzige

00:07:24.200 --> 00:07:26.340
Python-Datei, die legt man sich in ein Repo

00:07:26.340 --> 00:07:28.320
und wenn in dem Repo

00:07:28.320 --> 00:07:29.900
daneben eine Datei liegt, die

00:07:29.900 --> 00:07:31.080
Requirements-Text heißt

00:07:31.960 --> 00:07:38.280
Dann passiert folgendes, dann benennt man das Skript so wie das eigene Tool.

00:07:38.860 --> 00:07:42.240
Das muss nicht Bateau sein, das kann irgendein Python-Package sein,

00:07:43.360 --> 00:07:52.920
was ein Konsol-Skript hat, was genauso heißt wie das Skript, was du in deinem Repo ablegst.

00:07:53.400 --> 00:07:58.300
Und dann installiert er alles das, was in dem Equipments-Text-File drin steht,

00:07:58.920 --> 00:08:01.800
in eine geheime, in Anführungszeichen,

00:08:01.900 --> 00:08:03.880
Position, also das heißt dann irgendwie Punkt

00:08:03.880 --> 00:08:05.840
dein Tool-Name, Schrägstrich, und dann werden

00:08:05.840 --> 00:08:07.780
da so gehäschte Virtual-Envs drin erzeugt

00:08:07.780 --> 00:08:09.860
und auch wieder aufgeräumt und ruft

00:08:09.860 --> 00:08:11.360
im Prinzip dann bloß Punkt

00:08:11.360 --> 00:08:13.640
da aus dem Virtual-Env

00:08:13.640 --> 00:08:15.440
bin und dieses Konsol-Skript auf,

00:08:15.620 --> 00:08:17.360
viel mehr macht der nicht, und das ist das App-Env,

00:08:17.880 --> 00:08:19.800
um so ein Bootstrapping-

00:08:19.800 --> 00:08:21.760
Mechanismus da einmal

00:08:21.760 --> 00:08:22.840
abzubilden.

00:08:24.300 --> 00:08:25.660
Und Bateau ist ein Werkzeug, was das halt

00:08:25.660 --> 00:08:27.660
benutzt. Wir haben so Bateau-Projekte, also

00:08:27.660 --> 00:08:32.240
Also das ist ein Deployment-Werkzeug, ähnlich zu Ansible und anderen Tools.

00:08:33.040 --> 00:08:37.060
Und ein Charakter von dem Ding ist halt, wenn du Bateau-Projekte machst

00:08:37.060 --> 00:08:39.780
und wir haben bei uns bei den Mitarbeitern halt gerne das,

00:08:40.740 --> 00:08:44.840
die haben 12, 15, 20 so Projekte rumfliegen, die sie jonglieren.

00:08:45.400 --> 00:08:49.940
Und jedes davon, eins davon hat ein Kunde halt mal ein Dreivierteljahr nicht angefasst

00:08:49.940 --> 00:08:52.820
und das ist jetzt auf einer Bateau-Version von vor anderthalb Jahren oder irgendwas.

00:08:54.080 --> 00:08:55.600
Und dann will ich nicht überlegen müssen,

00:08:56.120 --> 00:08:58.700
was muss ich tun, um diese Bateau-Version wieder zum Laufen zu kriegen,

00:08:58.800 --> 00:09:00.920
weil meine letzten drei Projekte waren in einer anderen Bateau-Version.

00:09:01.880 --> 00:09:04.080
Oder ist das Thema halt, nee, du brauchst bloß das Repo nehmen,

00:09:04.540 --> 00:09:06.580
rufst .slash Bateau in dem Repo auf

00:09:06.580 --> 00:09:09.780
und der zieht sich exakt die Version, die für dieses Projekt gebraucht wird, her

00:09:09.780 --> 00:09:12.840
und du kannst dann halt in dutzenden Projekten

00:09:12.840 --> 00:09:15.080
halt die Dependencies ordentlich managen,

00:09:15.180 --> 00:09:17.140
ohne jemals händisch reingreifen zu müssen.

00:09:17.140 --> 00:09:18.860
Das macht ja alles im Self-Bootstrapping

00:09:18.860 --> 00:09:22.660
und auch ohne, dass in deinem System was anderes installiert ist, außer Python selber.

00:09:23.360 --> 00:09:24.940
Also da sind auch noch so ein paar Hacks drin,

00:09:25.060 --> 00:09:27.360
dass wenn du halt kaputte Pythons hast,

00:09:27.480 --> 00:09:28.420
wie auf Debian üblich,

00:09:29.200 --> 00:09:32.760
also Debian macht halt gerne Setup-Tools und Pip und so kaputt,

00:09:33.360 --> 00:09:35.300
und dass die Standard-Library noch nicht mehr geht,

00:09:35.520 --> 00:09:37.360
da ist überall so dieses kleine Wissen drin,

00:09:37.460 --> 00:09:40.320
von wie ziehe ich mir das in so einem Moment halt alles gerade,

00:09:40.460 --> 00:09:42.380
dass ich mich dann aus dem luftleeren Raum,

00:09:42.380 --> 00:09:44.140
solange ich irgendwie einen Python habe,

00:09:45.020 --> 00:09:48.680
was nicht nur ein bisschen kaputt gemacht wurde,

00:09:49.940 --> 00:09:51.860
dass er sich daraus halt bootstrappen kann

00:09:51.860 --> 00:09:53.740
und dir dann ein voll funktionierendes Virtual Env

00:09:53.740 --> 00:09:54.980
auch zusammenbaut.

00:09:55.580 --> 00:09:57.860
Und du musst nie überlegen,

00:09:58.200 --> 00:09:59.720
muss ich das Virtual Env jetzt aufräumen

00:09:59.720 --> 00:10:01.540
oder nicht, sondern er macht es halt immer, weil er

00:10:01.540 --> 00:10:02.780
erkennt, wann das nötig ist.

00:10:05.220 --> 00:10:05.980
Das klingt klasse.

00:10:08.280 --> 00:10:08.520
Ja.

00:10:09.960 --> 00:10:11.600
Ja, ehrlich gesagt, hätte man an der Stelle

00:10:11.600 --> 00:10:12.000
schon

00:10:12.000 --> 00:10:15.660
eigentlich eine ganz gute Überleitung zu

00:10:15.660 --> 00:10:17.020
MBDev.

00:10:18.020 --> 00:10:19.080
Also das ist ja so ein Ding, mit dem

00:10:19.080 --> 00:10:20.760
spiele ich in letzter Zeit so ein bisschen rum.

00:10:21.860 --> 00:10:24.320
weil das

00:10:24.320 --> 00:10:26.240
im Grunde auch einen Großteil von

00:10:26.240 --> 00:10:27.440
diesen Dingen halt tut.

00:10:27.800 --> 00:10:30.320
Probleme lösen, wie man seine MGBung so

00:10:30.320 --> 00:10:32.060
einrichtet, dass man damit arbeiten kann, oder?

00:10:32.380 --> 00:10:34.220
Ja, wobei es halt auch

00:10:34.220 --> 00:10:35.940
sehr weit noch in den Bereich reinragt,

00:10:36.140 --> 00:10:38.240
irgendwie, wie kann man

00:10:38.240 --> 00:10:40.140
quasi ein Projekt so konfigurieren,

00:10:40.260 --> 00:10:42.040
dass hinterher dann auch Pakete für PyPI

00:10:42.040 --> 00:10:42.820
rausfallen

00:10:42.820 --> 00:10:46.640
und Dokumentation

00:10:46.640 --> 00:10:47.220
und

00:10:47.220 --> 00:10:50.200
GitHub Actions, wo dann direkt

00:10:50.200 --> 00:10:51.860
irgendwie so ein

00:10:51.860 --> 00:10:54.560
Continuous-Integration-Zeugs

00:10:54.560 --> 00:10:56.340
halt läuft und... Also Jochen,

00:10:56.520 --> 00:10:58.520
man hört raus, mag Notebooks, Jupyter-Notebooks.

00:10:59.380 --> 00:11:00.300
Ja, also ich

00:11:00.300 --> 00:11:01.200
mag die tatsächlich

00:11:01.200 --> 00:11:04.240
und das Ding

00:11:04.240 --> 00:11:06.200
dreht halt quasi

00:11:06.200 --> 00:11:08.140
den Jupyter-Notebook-Level

00:11:08.140 --> 00:11:09.800
so auf 11, weil

00:11:09.800 --> 00:11:12.540
da schreibt man halt alles in Jupyter-Notebooks

00:11:12.540 --> 00:11:14.120
beziehungsweise das ist halt eigentlich

00:11:14.120 --> 00:11:15.980
so eine Art IDE und

00:11:15.980 --> 00:11:18.000
plus Projektverwaltungs-Dings irgendwie

00:11:18.000 --> 00:11:42.020
Und genau, also ist halt quasi so die Antwort auf die Frage, was wäre, wenn ich alles in Notebooks machen wollte? Und dann kommt es ungefähr das dabei raus. Und das hat einige interessante Vorteile. Also es hat auch interessante, also es ist halt auch ein bisschen komisch natürlich, also wenn man jetzt irgendwie eine IDE gewohnt ist oder irgendwie auch nur einen normalen Texteditor, dann kommt einem das alles so ein bisschen eigenartig vor.

00:11:42.160 --> 00:12:02.080
Es gibt ja auch so einen sehr populären Talk, ich weiß gar nicht wo, der gehalten, Joel Gruß, der macht auch so einen Data Science Podcast, Adversarial Learning, glaube ich, heißt der und der macht viele YouTube-Videos und der hatte halt so einen Talk gehalten, I don't like Notebooks, der dann oft irgendwie immer rumgeschickt wurde.

00:12:04.080 --> 00:12:05.900
Und wo er sagt, ja, ja, das

00:12:05.900 --> 00:12:07.980
encouraget irgendwie

00:12:07.980 --> 00:12:09.460
einen Haufen sehr schlechte

00:12:09.460 --> 00:12:12.740
Software-Entwicklungspraktiken

00:12:12.740 --> 00:12:13.860
und macht

00:12:13.860 --> 00:12:16.160
die funktionierenden Workflows, die ich habe, halt kaputt

00:12:16.160 --> 00:12:17.760
und deswegen, ich finde das alles doof und

00:12:17.760 --> 00:12:18.780
nicht deterministisch und

00:12:18.780 --> 00:12:22.080
ja, in gewisser Weise hat er da so einen Punkt,

00:12:22.240 --> 00:12:23.960
aber man kann da auch

00:12:23.960 --> 00:12:25.780
überall um diese ganzen Ecken drum herum

00:12:25.780 --> 00:12:27.840
arbeiten und manche Sachen

00:12:27.840 --> 00:12:29.800
sind halt auch sehr, sehr cool dabei.

00:12:30.180 --> 00:12:31.820
Also das, was

00:12:31.820 --> 00:12:33.220
es halt so ein bisschen möglich macht,

00:12:33.780 --> 00:12:35.920
ist halt ein Ideal,

00:12:36.020 --> 00:12:37.820
dass, ich glaube, Knut

00:12:37.820 --> 00:12:39.060
hatte das irgendwann mal

00:12:39.060 --> 00:12:41.340
1983 oder so aufgeschrieben, so von

00:12:41.340 --> 00:12:43.560
Literate Programming, dass man halt sozusagen

00:12:43.560 --> 00:12:45.440
nicht nur Code hinschreibt, sondern halt

00:12:45.440 --> 00:12:47.780
Dokumentation und Code oder beziehungsweise was der Code tun soll

00:12:47.780 --> 00:12:49.760
halt irgendwie zusammen. Gab es diverse

00:12:49.760 --> 00:12:51.080
Versuche, das irgendwie hinzukriegen.

00:12:52.000 --> 00:12:53.280
Ich glaube, mit die ersten war

00:12:53.280 --> 00:12:55.600
der erste Versuch war Mathematica, aber das ist halt

00:12:55.600 --> 00:12:56.700
irgendwie nicht so richtig populär geworden.

00:12:58.020 --> 00:12:58.420
Matlab,

00:12:59.760 --> 00:13:01.680
R-Studio geht auch in die

00:13:01.680 --> 00:13:03.920
Richtung. Und jetzt halt Jupyter Notebooks,

00:13:04.140 --> 00:13:05.360
damit würde ich sagen, war es halt so,

00:13:05.540 --> 00:13:07.540
hat es in gewisser Weise einen Durchbruch

00:13:07.540 --> 00:13:09.060
gehabt und wird jetzt überall verwendet.

00:13:09.400 --> 00:13:11.480
Und halt auch JupyterLab nochmal so als komplette

00:13:11.480 --> 00:13:12.500
IDE irgendwie dafür.

00:13:14.340 --> 00:13:15.500
Und genau,

00:13:15.600 --> 00:13:17.520
da gibt es dann halt auf diesen Talk auch eine Antwort

00:13:17.520 --> 00:13:19.420
von einem, der sich,

00:13:19.560 --> 00:13:21.120
also derjenige, der sich diese

00:13:21.120 --> 00:13:22.800
MBDF-Geschichte überlegt hat oder dann halt,

00:13:23.560 --> 00:13:25.520
ja, die dann entstanden ist bei der

00:13:25.520 --> 00:13:26.880
Entwicklung einer Bibliothek,

00:13:27.600 --> 00:13:28.480
das ist Jeremy Howard,

00:13:29.420 --> 00:13:29.740
der hat

00:13:29.740 --> 00:13:32.040
der hat halt Fast

00:13:32.040 --> 00:13:34.220
AI, die

00:13:34.220 --> 00:13:36.660
Library, das ist auch so ein Wrapper um PyTorch

00:13:36.660 --> 00:13:37.860
im Grunde,

00:13:37.900 --> 00:13:40.520
damit geschrieben, auch ein Buch darüber geschrieben,

00:13:40.660 --> 00:13:42.940
das ist auch wahrscheinlich so das empfehlenswerteste

00:13:42.940 --> 00:13:44.800
Buch über PyTorch ist

00:13:44.800 --> 00:13:46.660
und das

00:13:46.660 --> 00:13:48.480
Buch ist auch komplett mit MBDev geschrieben

00:13:48.480 --> 00:13:49.460
und

00:13:49.460 --> 00:13:52.560
das ist halt schon, das hat auch schon so was sehr

00:13:52.560 --> 00:13:54.300
sehr cooles und der argumentiert halt, ja,

00:13:54.440 --> 00:13:56.340
für mich ist das alles viel einfacher, so einmal

00:13:56.340 --> 00:13:58.360
diese ganzen Hässlichkeiten und da muss man leider

00:13:58.360 --> 00:14:00.020
sagen, es ist halt, es gibt viele Hässlichkeiten

00:14:00.020 --> 00:14:02.500
oder es fällt vielen Leuten

00:14:02.500 --> 00:14:04.220
total schwer, irgendwie Projekte ordentlich

00:14:04.220 --> 00:14:06.300
aufzusetzen. Das geht halt

00:14:06.300 --> 00:14:08.420
alles mehr oder weniger weg, wenn die Leute halt

00:14:08.420 --> 00:14:10.240
mit, also es gibt ja so ein Template für

00:14:10.240 --> 00:14:12.400
GitHub zum Beispiel, wo man einfach sagen kann, okay, erzeuge

00:14:12.400 --> 00:14:14.380
mir so ein MBDev-Projekt oder

00:14:14.380 --> 00:14:16.260
man sagt MBDev-New irgendwie, ich weiß

00:14:16.260 --> 00:14:18.440
jetzt gar nicht genau, wenn man das Papier installiert

00:14:18.440 --> 00:14:20.120
hat, dann erzeugt es einem halt

00:14:20.120 --> 00:14:22.420
so eine Projektstruktur, so ähnlich

00:14:22.420 --> 00:14:24.520
wie bei Portree, Portree

00:14:24.520 --> 00:14:26.400
Init oder so, nur es macht

00:14:26.400 --> 00:14:28.000
noch mehr, deutlich mehr.

00:14:28.360 --> 00:14:46.660
Und, ja, dann für ihn ist es halt total super, weil die Pull-Requests werden halt besser und er reviewt die Pull-Requests, da gibt es dann auch ein eigenes Tool für, dann direkt in einem Notebook, das halt irgendwo auf Binder oder irgendwie auf Google Colab oder so gestartet wird.

00:14:46.660 --> 00:15:03.760
Das heißt, ein Pull-Request kommt rein, er klickt halt auf einen Link, dann geht das halt in einem eigenen Notebook auf, das überhaupt nicht bei ihm läuft, sondern irgendwo in der Cloud. Und dann kann er halt auch direkt sehen, da das halt so ein bisschen Richtung Literate-Programming geht, was hat sich denn geändert? Also wie verändern sich zum Beispiel auch die Visualisierungen von irgendwelchen Dingen?

00:15:04.440 --> 00:15:05.940
Das ja ansonsten auch ein Problem wäre,

00:15:06.020 --> 00:15:07.560
wenn jemand ein Pull-Request stellt,

00:15:07.820 --> 00:15:11.040
jetzt sieht die Visualisierung von irgendeiner Geschichte besser aus.

00:15:11.820 --> 00:15:14.340
Ja, da muss man erst mal, okay, die Daten zusammensammeln,

00:15:14.440 --> 00:15:16.200
das dann irgendwie ausführen und dann sich das angucken.

00:15:16.300 --> 00:15:18.240
Oh, dann wo guckt man sich das an?

00:15:18.300 --> 00:15:19.880
Wie generiert man so diese Grafik eigentlich?

00:15:19.980 --> 00:15:20.980
Das ist alles ziemlich umständlich.

00:15:21.860 --> 00:15:23.680
Und da hat man es halt dann direkt, kann sehen,

00:15:23.820 --> 00:15:25.500
okay, ah, sieht besser aus als vorher, super,

00:15:25.980 --> 00:15:27.100
Pull-Request akzeptieren, fertig.

00:15:28.460 --> 00:15:30.300
Und auch ein schöner Vorteil ist halt,

00:15:30.380 --> 00:15:32.780
Tests und so, die sind da auch direkt mit im Notebook.

00:15:33.620 --> 00:15:43.660
Bei so klassischer Softwareentwicklung mit einer IDE oder so hast du dann halt schon auch die Tests oft in einem sehr anderen Bereich deines Pakets, als der Code, an dem man gerade schreibt.

00:15:44.420 --> 00:15:47.860
Und das ist halt auch immer nicht so richtig, also die liegen halt nicht nah beieinander.

00:15:48.060 --> 00:15:53.740
Während wenn man das jetzt in einem Notebook schreibt, dann hat man halt irgendwie den eigentlichen Code, der irgendwas tut.

00:15:54.600 --> 00:15:58.560
Und halt noch Dokumentation und Beispiele, wie man es halt ausführt und so drumherum.

00:15:58.880 --> 00:16:01.060
Plus die Tests, alle zusammen in einem Notebook.

00:16:01.840 --> 00:16:22.120
Und über den Teilen, die halt hinterher in der Library wirklich landen sollen, steht halt noch irgendwie Export in Markdown oben drüber und dann werden die halt in eine Library gepackt. Und der ganze Dokumentationscode nicht, aber der landet dann durchaus noch in der Dokumentation. Und das ist schon sehr nett. Also ich finde es auf jeden Fall einen sehr interessanten Ansatz.

00:16:22.120 --> 00:16:25.600
Und ja, also ...

00:16:25.600 --> 00:16:28.740
Ist das nicht dann irgendwie so ein ewig langes Endlos-Scrolling

00:16:28.740 --> 00:16:32.640
durch irgendwelche Projekte dann durch von Top to Bottom?

00:16:34.340 --> 00:16:36.180
Ja gut, du kannst das ja strukturieren.

00:16:36.280 --> 00:16:38.060
Natürlich können die Notebooks schon lang werden.

00:16:38.420 --> 00:16:40.000
Man kann das ja strukturieren, wie man möchte.

00:16:40.080 --> 00:16:41.560
Man kann auch viele Notebooks machen.

00:16:41.940 --> 00:16:46.200
Ist auch so, man kann auch Dinge dann in der Library ändern

00:16:46.200 --> 00:16:49.000
und die werden dann in die Notebooks zurückgesynct, der Code.

00:16:49.000 --> 00:16:50.360
und umgekehrt halt

00:16:50.360 --> 00:16:52.940
und das ist so, man muss

00:16:52.940 --> 00:16:54.980
wenn Dinge jetzt, wenn

00:16:54.980 --> 00:16:57.180
Klassen zum Beispiel sehr groß werden, dann muss man nicht alle

00:16:57.180 --> 00:16:59.320
Methoden direkt

00:16:59.320 --> 00:17:01.200
an die Klasse dran schreiben, sondern man kann das

00:17:01.200 --> 00:17:03.220
dann auch später machen, dann gibt es dann halt Dekoratoren

00:17:03.220 --> 00:17:04.900
die dann irgendwie

00:17:04.900 --> 00:17:07.460
Funktionen als Methoden wieder an Klassen dran klatschen

00:17:07.460 --> 00:17:09.180
dem Code, der da hinterher rausfällt

00:17:09.180 --> 00:17:11.100
den sieht man das nicht an, aber im Notebook ist das dann halt schön

00:17:11.100 --> 00:17:13.120
übersichtlich, weil die ganzen

00:17:13.120 --> 00:17:15.140
Methoden, die die Klasse groß machen, kommen dann

00:17:15.140 --> 00:17:17.120
halt erst so nach und nach dazu oder können halt auch in einem anderen

00:17:17.120 --> 00:17:17.860
Notebook dazukommen

00:17:17.860 --> 00:17:19.520
ja, also

00:17:19.520 --> 00:17:22.480
es ist sehr anders, als man normalerweise

00:17:22.480 --> 00:17:24.300
so entwickelt, aber ich finde, das ist interessant

00:17:24.300 --> 00:17:25.920
und ja, ich meine,

00:17:26.600 --> 00:17:28.640
ich muss

00:17:28.640 --> 00:17:30.380
mich so ein bisschen zwingen, also ich muss mich manchmal so ein bisschen

00:17:30.380 --> 00:17:32.400
zwingen, da immer mal so reinzugucken in solche

00:17:32.400 --> 00:17:34.440
Dinge. Ich habe auch zuerst, muss ich

00:17:34.440 --> 00:17:36.400
gestehen, Notebooks hielt

00:17:36.400 --> 00:17:37.500
ich erst für ziemlich

00:17:37.500 --> 00:17:39.880
ein Quatsch und

00:17:39.880 --> 00:17:42.180
ich musste erst Leute damit arbeiten sehen, um zu

00:17:42.180 --> 00:17:44.120
verstehen, dass das eigentlich eine

00:17:44.120 --> 00:17:45.740
ziemlich coole Geschichte ist.

00:17:46.080 --> 00:17:47.020
Das war auch relativ spät.

00:17:47.140 --> 00:17:49.260
Also ich hatte, ich weiß nicht,

00:17:49.300 --> 00:17:50.860
wann ich erfahren habe davon, dass es Notebooks gibt,

00:17:50.920 --> 00:17:52.200
aber schon wahrscheinlich relativ früh,

00:17:52.300 --> 00:17:53.840
kurz nachdem sie irgendwie da waren.

00:17:54.600 --> 00:17:56.800
Und dann aber gesehen, dass es eine coole Geschichte ist,

00:17:56.820 --> 00:17:58.940
habe ich erst 2015, Ende 2015 oder so.

00:17:59.940 --> 00:18:01.900
Und ja, wenn man es dann halt mal ausprobiert,

00:18:01.960 --> 00:18:04.180
dann merkt man doch, oh, für manche Sachen ist das total super.

00:18:05.880 --> 00:18:08.300
Ja, und genau, deswegen gucke ich mir das jetzt gerade an

00:18:08.300 --> 00:18:09.440
und probiere das halt auch mal aus.

00:18:10.000 --> 00:18:11.440
Und das ist halt auch so was,

00:18:11.440 --> 00:18:15.080
was der Autor von Imdingen dann in seinem Talk

00:18:15.080 --> 00:18:17.760
als Antwort auf diesen I-don't-like-notebooks-Talk

00:18:17.760 --> 00:18:18.740
erzählt hat, ja,

00:18:19.160 --> 00:18:21.100
also er hat immer, er findet, es funktioniert

00:18:21.100 --> 00:18:23.260
immer gut bei Anfängern oder bei sehr, sehr erfahrenen

00:18:23.260 --> 00:18:25.160
Leuten. Dazwischen, wenn

00:18:25.160 --> 00:18:27.060
die Leute so sich eingegroovt haben auf ihre

00:18:27.060 --> 00:18:29.040
Idee oder so, dann, die sind alle

00:18:29.040 --> 00:18:30.160
immer sehr skeptisch zuerst,

00:18:31.220 --> 00:18:33.060
weil das natürlich auch immer

00:18:33.060 --> 00:18:35.020
so eine harte Änderung ist. Ich merke das ja auch,

00:18:35.120 --> 00:18:36.920
ich bin eigentlich VI-User

00:18:36.920 --> 00:18:39.080
und ich habe jetzt dieses Jahr mich

00:18:39.080 --> 00:18:41.540
mehr mit PyCharm beschäftigt,

00:18:41.620 --> 00:18:42.680
wie es gut noch nicht so

00:18:42.680 --> 00:18:46.180
und das war schon schmerzhaft, also das war

00:18:46.180 --> 00:18:48.060
irgendwie nicht, ja, aber muss man

00:18:48.060 --> 00:18:50.040
ab und zu wohl mal machen, um einfach mal zu

00:18:50.040 --> 00:18:52.120
gucken, wie sind andere Entwicklungsumgebungen denn so.

00:18:52.660 --> 00:18:53.820
Vielleicht gibt es ja doch tolle Sachen.

00:18:53.820 --> 00:18:55.200
Ja, diesen Wettel haben wir auch bei uns immer ständig.

00:18:55.820 --> 00:18:57.620
Also, was ich mich frage, macht ihr gerne

00:18:57.620 --> 00:19:00.120
Notebooks? Könnt ihr bestimmt

00:19:00.120 --> 00:19:01.940
gerne mal Bescheid, schreibt uns eine E-Mail dazu oder sowas.

00:19:02.200 --> 00:19:03.860
Also ich benutze zum Beispiel Notebooks auch

00:19:03.860 --> 00:19:06.120
relativ gerne, so zum schnellen

00:19:06.120 --> 00:19:07.960
Debuggen oder sowas, wenn ich irgendwie neue

00:19:07.960 --> 00:19:09.860
Methoden, neue Funktionen baue, dann schreibe ich

00:19:09.860 --> 00:19:11.980
die gerne erstmal im Notebook, zum Beispiel in der Django-Shell

00:19:11.980 --> 00:19:13.900
dann auch oder so und probiere es dann direkt aus,

00:19:14.020 --> 00:19:15.820
ob es geht und muss halt nicht mehr das

00:19:15.820 --> 00:19:17.400
ganze Projekt immer starten und dann irgendwie

00:19:17.400 --> 00:19:19.660
den Web-Server hochfahren und dann da die Module

00:19:19.660 --> 00:19:21.780
oder die Routen aufrufen, sondern ich sehe halt irgendwie direkt, ob diese

00:19:21.780 --> 00:19:23.440
kleinen Teile gehen oder nicht.

00:19:23.660 --> 00:19:25.820
Das ersetzt so ein bisschen den Debugger vielleicht an der Stelle

00:19:25.820 --> 00:19:27.860
oder so. Finde ich sehr

00:19:27.860 --> 00:19:28.660
handlich.

00:19:30.500 --> 00:19:31.920
Das verkürzt so ein bisschen den Entwicklungssyklus,

00:19:32.040 --> 00:19:32.540
habe ich das Gefühl.

00:19:33.900 --> 00:19:35.820
Das ist spannend, weil ich glaube, das ist ein Phänomen

00:19:35.820 --> 00:19:37.820
von der Komplexität der

00:19:37.820 --> 00:19:39.940
Frameworks und der Libraries, mit denen man zu tun

00:19:39.940 --> 00:19:42.000
hat, weil also im Kern

00:19:42.000 --> 00:19:43.820
ist ja die Handlichkeit, dass das

00:19:43.820 --> 00:19:44.660
Python eh schon hat

00:19:44.660 --> 00:19:47.760
und ich habe jetzt

00:19:47.760 --> 00:19:49.940
ja eben in der letzten Zeit häufiger eher mit

00:19:49.940 --> 00:19:51.980
sehr kleinen Sachen immer wieder zu tun

00:19:51.980 --> 00:19:53.840
weil halt viel Systemintegration, viel so

00:19:53.840 --> 00:19:55.920
Mini-Tooling, viel gerade

00:19:55.920 --> 00:19:58.060
auch verteilt durch die Gegend

00:19:58.060 --> 00:19:59.840
wo ich experimentellen Code

00:19:59.840 --> 00:20:01.880
habe, wo ich merke, entweder mache ich so, dass ich da einen PyTest

00:20:01.880 --> 00:20:03.880
reinwerfe, relativ

00:20:03.880 --> 00:20:05.780
leichtgewichtig, um mir auch für Sachen, die ich gerade

00:20:05.780 --> 00:20:07.840
sketche, gleich

00:20:07.840 --> 00:20:08.940
auch die Test Cases dann

00:20:08.940 --> 00:20:11.280
im Prinzip rauszulassen, indem ich

00:20:11.280 --> 00:20:13.340
sage, ich muss gerade mal was verstehen und debuggen

00:20:13.340 --> 00:20:15.320
und dann habe ich gleich ein Testcase zu oder

00:20:15.320 --> 00:20:17.240
weil ich eh bloß so ein

00:20:17.240 --> 00:20:19.360
30, 40 Zeiler habe, der irgendwo

00:20:19.360 --> 00:20:20.840
auf einer Maschine läuft, wo ich halt

00:20:20.840 --> 00:20:23.260
einen Haufen Bewegdaten brauche, weil es ist

00:20:23.260 --> 00:20:25.240
irgendein Storage-Server und ich irgendwie die Krypto von

00:20:25.240 --> 00:20:27.260
diesem komischen Ding da gerade auseinandernehme und die

00:20:27.260 --> 00:20:29.060
Formate irgendwie auch verstehen möchte.

00:20:29.720 --> 00:20:31.300
Da merke ich, da bin ich halt häufig in so

00:20:31.300 --> 00:20:32.700
System-Integration-Sachen drinne

00:20:32.700 --> 00:20:35.320
und ich fall irgendwie, so wie

00:20:35.320 --> 00:20:37.160
du sagst, genau in diesen Mittelteil da irgendwie gerade

00:20:37.160 --> 00:20:39.080
rein, dass

00:20:39.080 --> 00:20:41.120
sozusagen, ja, für so einzelne Fälle haben mich

00:20:41.120 --> 00:20:43.540
die Notebooks immer wieder angelockt.

00:20:43.880 --> 00:20:45.160
Ich sehe auch so andere Kollegen für

00:20:45.160 --> 00:20:46.680
bestimmte Fälle, die immer wieder rausholen.

00:20:47.800 --> 00:20:49.100
Aber wenn ich es dann versuche, dann

00:20:49.100 --> 00:20:50.460
stolpere ich in meinem Workflow

00:20:50.460 --> 00:20:52.920
zu schnell drüber,

00:20:53.040 --> 00:20:55.080
dass es mit irgendwie allen anderen Sachen nicht mehr so

00:20:55.080 --> 00:20:57.120
richtig andockt, die ich bei mir so parat

00:20:57.120 --> 00:20:59.160
liegen habe. Also ich würde es zum Beispiel

00:20:59.160 --> 00:21:00.200
sehr gerne auch via das Code

00:21:00.200 --> 00:21:02.980
und da kann man die mittlerweile sogar integrativ

00:21:02.980 --> 00:21:04.860
einfach nutzen. Das heißt, du hast sie dann einfach

00:21:04.860 --> 00:21:06.940
nirgendwo beiliegen, wie den anderen Code, den du auch

00:21:06.940 --> 00:21:08.860
drin hast und neben dem Terminal oder sowas und kannst halt dann

00:21:08.860 --> 00:21:10.740
direkt fast wie in der Shell

00:21:10.740 --> 00:21:12.780
irgendwie so nativ so hin und her switchen. Das ist schon

00:21:12.780 --> 00:21:13.720
nett.

00:21:15.780 --> 00:21:16.580
Ja, interessant.

00:21:19.580 --> 00:21:19.940
Ja.

00:21:20.780 --> 00:21:22.880
Ja, das ist schon, also

00:21:22.880 --> 00:21:25.040
ich finde, also das für mich total überzeugende

00:21:25.040 --> 00:21:26.980
Geschichte war dann halt, also gerade

00:21:26.980 --> 00:21:28.520
für so Data Science oder Machine Learning-Geschichten,

00:21:28.900 --> 00:21:30.740
wo man oft so Schritte hat, die lange dauern.

00:21:32.240 --> 00:21:33.080
Und das ist

00:21:33.080 --> 00:21:34.920
einfach, wenn man das anders macht, ist es halt,

00:21:35.640 --> 00:21:36.720
also kann man auch irgendwie,

00:21:36.900 --> 00:21:38.960
aber das lässt man dann manchmal weg, weil man da nicht dran denkt oder so.

00:21:39.200 --> 00:21:40.740
Man kann natürlich alles irgendwie cachen oder

00:21:40.740 --> 00:21:43.300
versuchen, das halt so hinzuschreiben,

00:21:43.460 --> 00:21:44.960
dass man es auch schnell wieder erzeugen

00:21:44.960 --> 00:21:46.800
kann oder so. Aber wenn man jetzt irgendwie

00:21:46.800 --> 00:21:48.760
ein Modell eine Stunde lang trainiert hat oder ein paar Stunden

00:21:48.760 --> 00:21:50.480
und da macht man irgendeinen blöden Fehler,

00:21:50.780 --> 00:21:54.160
Und dann ist halt das Ergebnis von einer Stundenberechnung einfach weg.

00:21:54.800 --> 00:21:58.200
Das kann einem im Notebook im Grunde nicht so wirklich passieren,

00:21:58.360 --> 00:22:01.160
weil dann hat man halt die Zelle, die das macht, ausgeführt.

00:22:01.780 --> 00:22:03.420
Und selbst wenn man irgendwo anders einen Fehler macht,

00:22:03.420 --> 00:22:06.060
dann macht das halt erst mal nichts kaputt,

00:22:06.200 --> 00:22:09.440
sondern dann ändert man das halt und dann führt man es nochmal aus

00:22:09.440 --> 00:22:10.140
und dann geht es halt weiter.

00:22:10.820 --> 00:22:13.840
Und das beschleunigt viele Dinge durchaus.

00:22:14.080 --> 00:22:18.140
Auch wenn man gerade mit großen Datenmengen irgendwie viel macht

00:22:18.140 --> 00:22:19.760
und die nicht so einfach mal laden kann.

00:22:20.120 --> 00:22:26.900
Also gerade so leidvolle Geschichten sind da sowas wie so fürchterliche Hadoop-Data-Lakes oder so,

00:22:26.960 --> 00:22:28.840
aus denen man die Daten nur ganz schlecht wieder rauskriegt.

00:22:28.920 --> 00:22:30.820
Und dann hat man es irgendwie geschafft, die Daten rauszukriegen.

00:22:31.520 --> 00:22:35.020
Und dann sind sie gleich wieder weg, wenn man irgendwie einen Fehler gemacht hat oder so.

00:22:36.860 --> 00:22:40.040
Also das war auch in dem Talk von Joel Gruß,

00:22:40.140 --> 00:22:42.940
hat dann jemand am Schluss, als dann Fragen aus dem Publikum kamen,

00:22:42.960 --> 00:22:45.040
meinte jemand dann so, ja, also ich habe ja das Problem, genau,

00:22:45.160 --> 00:22:48.880
meine Data-Sites sind halt groß und es nervt, wenn ich das irgendwie verliere.

00:22:49.500 --> 00:22:51.660
quasi das gleiche Argument, was ich jetzt auch gerade gebracht habe

00:22:51.660 --> 00:22:53.600
und er meinte dann so,

00:22:53.780 --> 00:22:55.640
ja, Moment, du hast, du machst

00:22:55.640 --> 00:22:57.620
explorative Datenanlöse-Geschichten

00:22:57.620 --> 00:22:59.660
mit Datasets, die so mehrere Gigabyte,

00:22:59.720 --> 00:23:01.640
zwölf Gigabyte groß sind oder so, und er so,

00:23:02.160 --> 00:23:03.280
ja, und ich dachte mir so,

00:23:03.540 --> 00:23:05.740
ja, ja, ich mache das auch sehr oft,

00:23:06.160 --> 00:23:07.760
das ist irgendwie, okay, ja, dann,

00:23:08.140 --> 00:23:09.560
dann, so, ja,

00:23:09.560 --> 00:23:11.100
das ist, also, finde ich, ist auch,

00:23:11.240 --> 00:23:13.120
das ist halt völlig normal, also, irgendwie,

00:23:13.800 --> 00:23:15.500
und er meinte, er macht das halt nie, und dann kann ich das auch

00:23:15.500 --> 00:23:17.400
verstehen, okay, wenn man diesen Fall nie hat, dann, okay,

00:23:17.920 --> 00:23:19.440
aber wenn man ihn hat, dann ist das sehr hilfreich,

00:23:19.500 --> 00:23:40.400
Und interessanterweise triggert aber bei mir dieses Gefühl, und das ist so diese Frage, wer bringt da welchen Erfahrungshintergrund mit, bei mir triggert, wenn du beschreibst, du willst nicht aus Versehen irgendwas verlieren, dann ist mein Gefühl den Notebooks halt gegenüber viel stärker ein, ja das ist da irgendwo, ich habe keine Ahnung, wann der Punkt ist, wann ich es verliere.

00:23:40.580 --> 00:23:59.360
Das ist so irgendwie noch unoffensichtlicher, während bei dem anderen ist es irgendwie offensichtlich und ich muss hier etwas machen, wo mir dann auch klar ist, wieso es jetzt persistent ist oder auch nicht. Ich glaube, daran spaltet sich, glaube ich, ein bisschen so das Publikum.

00:24:00.980 --> 00:24:05.720
Naja, man muss es halt immer dann noch irgendwie irgendwann ordentlich machen, aber manchmal will man einfach nur irgendwas ausprobieren.

00:24:05.720 --> 00:24:35.180
Ja, ich wollte gerade sagen, also ich habe also ein paar Müll-Notebooks, da schmeiße ich einfach irgendwas rein, manchmal auch richtig unformatierte Sachen, einfach um die Schnipsel irgendwo griffbereit zu haben und führe dann halt einfach mal so eine Zelle aus, um zu gucken, was da passiert und das ist halt von der Struktur vielleicht manchmal sogar entfernt, aber das ist echt hilfreich, weil also ich würde das halt nie irgendwie in das Projekt dann reinstecken, sondern das ist halt dann nur dann da drin und irgendwann zieht man das dann halt vielleicht mal gerade und baut dann irgendwie so ein kleines Modul da und dann funktioniert es, weil das super getestet ist und das kann man dann einfach copy-pasten eigentlich und es geht.

00:24:35.300 --> 00:25:05.280
Also wo ich gespannt bin, das reißt jetzt so, jetzt kriegen wir so fast die Kurve zum Machine Learning rüber, da habe ich gesehen, dass das halt tatsächlich sehr häufig auch angeboten wird als Übungsplattform, dass du irgendwie vorgefertigte Notebooks eben hast, wo du eben halt so ein bisschen erzählerische Erklärungen hast und dann Code-Beispiele und dann halt auch das Zeug ausführen kannst, die Ergebnisse sehen und dann halt drinnen rumeditieren, um so ein bisschen mit dem Code zu arbeiten.

00:25:05.300 --> 00:25:05.900
zu spielen.

00:25:07.100 --> 00:25:08.780
Ich bin mal gespannt, weil ich mich jetzt durch

00:25:08.780 --> 00:25:11.240
ein paar von den Sachen durcharbeite,

00:25:11.780 --> 00:25:13.240
wie mir das didaktisch als jemand, der

00:25:13.240 --> 00:25:15.020
auf der Konsumentenseite davon ist, gefällt.

00:25:15.780 --> 00:25:17.260
Weil ich gleichzeitig mich selber

00:25:17.260 --> 00:25:18.600
dann eher ertappe von,

00:25:19.220 --> 00:25:20.260
wenn ich das schon so

00:25:20.260 --> 00:25:23.160
vorgesetzt kriege, ist irgendwie die

00:25:23.160 --> 00:25:25.280
Hürde oder es ist, gibt es

00:25:25.280 --> 00:25:27.240
ein gewisses Risiko, dass ich schneller

00:25:27.240 --> 00:25:29.400
durchgehe, als ich es tatsächlich verstehen

00:25:29.400 --> 00:25:31.200
und konsumieren kann. Weil es

00:25:31.200 --> 00:25:33.400
dir vorgaukelt mit, ja, du hast jetzt auf Play gedrückt

00:25:33.400 --> 00:25:35.200
und jetzt kam das Ergebnis raus, ah ja, aha,

00:25:35.300 --> 00:25:35.840
okay, weiter.

00:25:37.740 --> 00:25:38.380
Da ist sozusagen

00:25:38.380 --> 00:25:41.320
vom E-Learning-Faktor habe ich das

00:25:41.320 --> 00:25:43.260
Gefühl, ich muss mich ja eigentlich noch

00:25:43.260 --> 00:25:45.120
viel stärker mit dem Zeug auseinandersetzen

00:25:45.120 --> 00:25:46.720
und jetzt muss ich aber noch weniger machen.

00:25:47.460 --> 00:25:49.120
Also ist da so ein Gap von

00:25:49.120 --> 00:25:51.180
was hat mein Hirn noch an Chancen, es zu

00:25:51.180 --> 00:25:53.180
verstehen? Bin ich gespannt darauf.

00:25:54.020 --> 00:25:55.180
Ja, es ist immer blöd, wenn man es nicht

00:25:55.180 --> 00:25:56.800
selber ausprobiert, dann ist es schnell wieder weg.

00:25:57.200 --> 00:25:59.040
Ja, eben. Also wenn man die Zeilen einfach nur

00:25:59.040 --> 00:26:01.340
nacheinander, viele Tutorials

00:26:01.340 --> 00:26:03.180
oder Videos, die man so sieht, bestehen

00:26:03.180 --> 00:26:05.180
daraus, dass jemand dann halt so eine Zeile nach der anderen ausführt,

00:26:05.240 --> 00:26:06.380
Das hilft einem natürlich nicht so richtig.

00:26:06.700 --> 00:26:09.160
Aber was toll ist und was man machen kann,

00:26:09.240 --> 00:26:11.300
ist ja selber dann halt irgendwann mal so damit rumzuspielen

00:26:11.300 --> 00:26:14.080
und halt zu gucken, okay, was ist denn da jetzt wirklich drin?

00:26:14.380 --> 00:26:16.100
Und das kann man halt auch einfach ...

00:26:16.100 --> 00:26:17.940
Ich hatte mal so am Anfang ja diese Tutorial-Reihe,

00:26:18.020 --> 00:26:21.420
der erwähnt, NumPy for Grandmas und Pandas for Grandpas.

00:26:21.940 --> 00:26:25.240
Der benutzt auch Google Colab, was ja auch im Prinzip das Notebook ist.

00:26:25.700 --> 00:26:30.220
Und er hat jedes Mal nach jedem Kapitel Übungen eingestellt,

00:26:30.280 --> 00:26:32.180
die ziemlich cool sind, wo man, weiß ich nicht,

00:26:32.240 --> 00:26:35.180
die Anwendung direkt praktisch an so Aufgaben üben kann.

00:26:35.240 --> 00:26:57.140
Und wenn man die halt selber versucht, dann stellt man halt fest, ob man das kann. Also meistens kann man es dann nicht, aber das ist ja nicht so schlimm, weil er hat ja die Lösung dann hinterher gezeigt. Aber durch das Ausprobieren bekommt man halt genau das Gefühl dafür, wann, wie, wo, was man vielleicht filtern, nutzen und so kann. Und auch halt mit dem Notebook. Und ich glaube, das ist so die einzige Methode, wie man tatsächlich dann versteht, was dann da passiert und was man da machen möchte.

00:26:57.800 --> 00:27:01.700
Und mindestens ist es natürlich so, dass man auf jeden Fall erstmal eine lauffähige Umgebung hat.

00:27:02.020 --> 00:27:06.440
Also dass man dort erstmal was hat, wo man sagt, okay, ich kann anfangen mit,

00:27:06.520 --> 00:27:09.320
also hier gibt es Code, der sich selber beweist, dass er erstmal tut.

00:27:10.040 --> 00:27:13.500
Das heißt, ich habe nicht das Problem, wenn ich dann irgendwie das Zeug aufbaue

00:27:13.500 --> 00:27:18.900
und dann noch nicht so ganz weiß, ob meine Umgebung jetzt tatsächlich irgendwie clean ist

00:27:18.900 --> 00:27:22.000
und warum kommt jetzt nicht das raus, was rauskommen soll?

00:27:22.000 --> 00:27:25.160
Warum wirft man mir irgendwelche komischen Fehler? Bin ich schuld oder war die Umgebung schuld?

00:27:25.460 --> 00:27:27.500
Da ist es natürlich schön, von einem definierten

00:27:27.500 --> 00:27:29.460
Zustand aus loszulaufen.

00:27:33.280 --> 00:27:35.180
Zumal ich auch eigentlich, eigentlich würde ich halt sagen,

00:27:35.240 --> 00:27:37.200
mir liegt es total, Sachen halt

00:27:37.200 --> 00:27:38.800
erstmal Ende-Ende zu begreifen.

00:27:39.080 --> 00:27:39.660
Also wirklich mit,

00:27:40.780 --> 00:27:43.320
wo fängt es hier an, was sind die kleinen Bauteile,

00:27:43.420 --> 00:27:45.260
aus denen sich das zusammensetzt und wie löse

00:27:45.260 --> 00:27:47.140
ich jetzt ein Problem einmal von vorne

00:27:47.140 --> 00:27:49.180
bis hinten damit durch. Das taugt mir

00:27:49.180 --> 00:27:49.980
total und

00:27:49.980 --> 00:27:52.840
aber trotzdem triggert es mich an so ein paar

00:27:52.840 --> 00:27:53.540
anderen Punkten.

00:27:55.460 --> 00:27:58.020
Ja, also

00:27:58.020 --> 00:27:59.720
genau, also ich würde sagen, kann man

00:27:59.720 --> 00:28:00.820
sich mal angucken.

00:28:01.460 --> 00:28:03.380
Ist ganz nett.

00:28:04.200 --> 00:28:04.900
Ja, genau.

00:28:05.760 --> 00:28:07.440
Eigentlich ein ganz guter Einstieg in dieses

00:28:07.440 --> 00:28:08.460
Machine Learning Ding.

00:28:09.240 --> 00:28:11.620
Ich würde sagen, dieses PyTorch Buch, was

00:28:11.620 --> 00:28:13.680
Jeremy Howard geschrieben hat, das kann man sich

00:28:13.680 --> 00:28:15.380
auf jeden Fall auch... Wie heißt nochmal dieser Rapper

00:28:15.380 --> 00:28:17.160
von PyTorch, von dem du am Anfang sprichst?

00:28:17.340 --> 00:28:18.280
Fast.ai.

00:28:21.020 --> 00:28:21.640
Könnte man jetzt

00:28:21.640 --> 00:28:23.180
eigentlich also direkt in Colab, also das kann man auch

00:28:23.180 --> 00:28:25.080
seinem Telefon ausprobieren, direkt Python ausführen

00:28:25.080 --> 00:28:26.580
im Browser und live und

00:28:26.580 --> 00:28:27.480
funktioniert einfach.

00:28:29.060 --> 00:28:31.020
Und dann kann man es importieren. Ich glaube, die Sachen sind alle

00:28:31.020 --> 00:28:32.100
dabei und los geht's, oder?

00:28:33.400 --> 00:28:33.600
Ja.

00:28:34.720 --> 00:28:36.900
Ich weiß jetzt nicht, ob ich das auf dem Telefon machen wollte.

00:28:37.080 --> 00:28:37.300
Aber gut.

00:28:39.420 --> 00:28:40.660
Wobei die Telefone, also

00:28:40.660 --> 00:28:42.800
ich war ja von dem Machine Learning Thema

00:28:42.800 --> 00:28:44.840
angetriggert, weil

00:28:44.840 --> 00:28:47.020
ich mich jetzt mal angefangen habe,

00:28:47.080 --> 00:28:48.500
ein bisschen umzugucken, was da so an Hardware

00:28:48.500 --> 00:28:50.980
auf dem Markt eigentlich rumfliegt

00:28:50.980 --> 00:28:53.000
und in den Libraries habe ich zumindest auch gesehen,

00:28:53.120 --> 00:29:03.020
Tatsächlich das Mobil ist ja definitiv halt interessant, weil du hast halt inzwischen da überall nochmal irgendwelche Chips drin, die Machine Learning Tasks halt unterstützen.

00:29:03.020 --> 00:29:08.380
Also ich meine, guck dir den bei Apple die ganze Reihe, da ist das ja irgendwie völlig klar.

00:29:09.120 --> 00:29:11.920
Aber auch die Androids haben da ja schon Sachen drin.

00:29:12.680 --> 00:29:28.220
Das ist halt, weil es ist ja für mich vom Verständnis jetzt mit dem, wie ich reingeputzelt bin über die letzten zwei Wochen, ist vor allem, dass es halt ein Trade-off ist, dass du mit weniger Strom mehr Punch kriegst.

00:29:28.220 --> 00:29:44.060
Also die Verhältnisse, wenn du deine Algorithmen oder deine Pipelines halt richtig aufziehst, speziell nachher für die Inferenz, müssen nachher noch ein bisschen in die Themen, glaube ich, die Stichworte sortieren und ich habe auch noch welche, wo ich Fragezeichen im Kopf habe.

00:29:44.320 --> 00:30:03.040
Also wenn ich tatsächlich für den Benutzer etwas rechnen will, um für ihn ein Ergebnis zu erzeugen, dann ist da wohl typischerweise ein Power-Faktor von 40 drin, was ich an Geschwindigkeit rausholen kann im Vergleich zu wenn ich es auf einer normalen CPU rechne.

00:30:03.520 --> 00:30:19.880
Und gerade wenn ich halt ein stromlimitiertes Gerät habe, wie ein Telefon, dann ist Faktor 40 halt schon ein massiver Unterschied. Alle beschweren sich, dass sie gerade über den Tag kommen. Wenn ich das halt dann mal 40 mache, ist der Tag halt schon früh um acht vorbei.

00:30:22.320 --> 00:30:46.940
Insofern, also das ist so das erste Verständnis von, warum fangen wir eigentlich da an, an dieser Ebene drauf reinzuhauen und das ist halt, auch wenn jetzt einige CPUs natürlich immer mehr Instructions kriegen, die bestimmte von den Operationen, die es da braucht, diese ganzen Vektor-Operationen in Hardware abbilden, die fallen einem auch gerne mal auf den Fuß.

00:30:46.940 --> 00:31:10.160
Also mir ist dann letztens auch aufgefallen, dass einige von den etwas älteren Libraries, die sich im KI-artigen Bereich bewegen, also Tesseract für OCR, also Schrifterkennung, Texterkennung, die haben halt zum Beispiel jetzt Unterstützung für diese Vector Instructions von Intel.

00:31:10.700 --> 00:31:23.840
Und das fällt einem auf die Füße, weil du auf einem Multicore-System mit diesen großen Instructions von den Vektoren halt gerne mal die Pipeline für drei, vier Kerne auf einen Schlag mal für 40, 50 Takte stilllegen kannst.

00:31:25.320 --> 00:31:51.900
Und ja, das durch eine so eine Vektor-Operation erledigen zu lassen, ist in Summe schneller als durch viele kleine, aber nichtsdestotrotz hat das so Auswirkungen auf die Responsivität des Systems, weil das plötzlich, also das Ding frisst Strom, dann geht dir der Turbo-Boost verloren und so Auswirkungen, wenn du das dann auf einer virtuellen Maschine machst, dann müssen halt gegebenenfalls noch drei virtuelle Maschinen nebenan auch noch die Luft anhalten, weil, boah, das ist aber eine dicke Instruction, die kann ich jetzt aber nicht so auf einmal rechnen.

00:31:52.700 --> 00:31:55.280
Und da merke ich, okay, ja, das macht Sinn,

00:31:55.560 --> 00:31:57.440
da nochmal über spezialisierte Hardware nachzudenken

00:31:57.440 --> 00:31:59.400
und Algorithmen, die sich genau darauf abbilden

00:31:59.400 --> 00:31:59.620
lassen.

00:32:01.860 --> 00:32:03.340
Ja, ja, ja, dieses Hardware-Thema

00:32:03.340 --> 00:32:05.580
ist natürlich total interessant. Ich meine, im Grunde

00:32:05.580 --> 00:32:07.200
hat man da nur

00:32:07.200 --> 00:32:09.140
bei einer speziellen Art von

00:32:09.140 --> 00:32:10.760
Machine Learning-Modellen

00:32:10.760 --> 00:32:12.880
irgendwie diesen Bedarf, halt bei

00:32:12.880 --> 00:32:15.140
den neuronalen Netzen,

00:32:15.500 --> 00:32:17.120
bei vielen

00:32:17.120 --> 00:32:18.300
anderen Sachen, also wenn man jetzt irgendwie,

00:32:18.880 --> 00:32:20.500
weiß ich nicht, lineare Modelle macht oder

00:32:20.500 --> 00:32:22.660
Superflexor-Maschinen oder so, da hilft einem das alles nicht

00:32:22.660 --> 00:32:23.180
so richtig.

00:32:24.640 --> 00:32:25.940
Aber eben bei

00:32:25.940 --> 00:32:28.660
neuronalen Netzen halt schon. Also alles,

00:32:28.740 --> 00:32:30.760
was irgendwie mit Matrizen-

00:32:30.760 --> 00:32:32.480
Multiplikationen irgendwie darauf

00:32:32.480 --> 00:32:33.900
dann letztlich irgendwie basiert.

00:32:34.940 --> 00:32:36.620
Ich finde das sowieso auch interessant, wie sich

00:32:36.620 --> 00:32:38.620
jetzt so die Hardware im Grunde

00:32:38.620 --> 00:32:40.580
so über die Jahrzehnte so in der

00:32:40.580 --> 00:32:42.360
Mathematik hochhangelt. Also wenn man jetzt

00:32:42.360 --> 00:32:44.540
sozusagen vom, wenn man sagt

00:32:44.540 --> 00:32:46.480
so irgendwie, keine Ahnung, ein Skalar ist irgendwie so

00:32:46.480 --> 00:32:48.540
Tensor-Nullterstufe oder sowas und dann hat man halt

00:32:48.540 --> 00:32:50.520
irgendwie so ein Vektor und

00:32:50.520 --> 00:32:52.460
dann irgendwie eine Matrix

00:32:52.460 --> 00:32:54.220
und dann irgendwie

00:32:54.220 --> 00:32:56.400
im allgemeinen Fall

00:32:56.400 --> 00:32:58.340
Tensoren oder

00:32:58.340 --> 00:33:00.540
Arrays mit N-Dimensionen.

00:33:01.700 --> 00:33:02.540
Was ist der Unterschied

00:33:02.540 --> 00:33:04.320
eines Arrays mit N?

00:33:04.500 --> 00:33:06.600
Also was ist der Unterschied eines Tensors mit einer Matrix?

00:33:07.260 --> 00:33:08.640
Das ist genau

00:33:08.640 --> 00:33:10.200
eigentlich, ja, Matrix ist zweidimensional,

00:33:10.380 --> 00:33:12.260
Tensor ist quasi N-dimensional,

00:33:12.740 --> 00:33:14.340
wobei das halt in unterschiedlichen Communities

00:33:14.340 --> 00:33:15.860
auch unterschiedlich genannt wird.

00:33:15.860 --> 00:33:18.040
Wenn ich dann sowas sage,

00:33:18.140 --> 00:33:19.620
dann sagen die Leute, die aus der Mathematik kommen,

00:33:19.720 --> 00:33:22.200
das ist doch Quatsch. Dann die Leute, die aus der Physik

00:33:22.200 --> 00:33:24.000
kommen, sagen so, nee, Moment, Tensor, das ist für uns

00:33:24.000 --> 00:33:24.740
was ganz anderes.

00:33:26.900 --> 00:33:28.140
Ja, da musst du jetzt nochmal genau

00:33:28.140 --> 00:33:29.580
sagen, was denn Tensor für dich ist.

00:33:30.040 --> 00:33:31.880
Also das, was ich, also das

00:33:31.880 --> 00:33:33.820
Konzept sozusagen ist eigentlich quasi, du hast

00:33:33.820 --> 00:33:35.580
einen Skalar, das ist halt irgendwie sozusagen

00:33:35.580 --> 00:33:37.860
ein Ding, irgendwie eine

00:33:37.860 --> 00:33:39.840
Zahl. So, das nächste, die nächste

00:33:39.840 --> 00:33:41.820
Stufe wäre für mich jetzt halt irgendwie

00:33:41.820 --> 00:33:43.660
ein Vektor. Also

00:33:43.660 --> 00:33:45.840
eine Richtung in einem Raum.

00:33:47.040 --> 00:33:47.900
Ja, das ist dann

00:33:47.900 --> 00:33:49.660
schon eine Interpretation, was das da nun ist, aber

00:33:49.660 --> 00:33:51.960
das einfach nur so

00:33:51.960 --> 00:33:53.680
als Struktur. Das nächste wäre halt

00:33:53.680 --> 00:33:54.240
Matrix.

00:33:55.500 --> 00:33:57.680
Genau, also ein Skalar ist ja tatsächlich

00:33:57.680 --> 00:33:59.240
erst mal bloß ein Wert, der für sich steht.

00:34:00.220 --> 00:34:01.540
Der ist dimensionslos.

00:34:03.180 --> 00:34:03.580
Und

00:34:03.580 --> 00:34:05.660
ein Vektor kann ja

00:34:05.660 --> 00:34:07.000
n Dimensionen haben.

00:34:07.680 --> 00:34:09.980
Und das ist ein Punkt in einem n-dimensionalen

00:34:09.980 --> 00:34:11.580
Raum. Genau, also

00:34:11.580 --> 00:34:13.760
aber da sieht man schon, dass das mit den Dimensionen nicht so

00:34:13.760 --> 00:34:15.800
ganz hinkommt, weil klar, natürlich hat der n Dimensionen,

00:34:15.800 --> 00:34:17.680
aber tatsächlich würde ich jetzt sagen, der hat

00:34:17.680 --> 00:34:20.280
irgendwie ist halt eine Liste von Zahlen

00:34:20.280 --> 00:34:22.260
und hat halt als Struktur eine

00:34:22.260 --> 00:34:24.300
Achse. Vielleicht einfach mal ein anderes Wort

00:34:24.300 --> 00:34:25.020
nehmen. Genau, ich kann,

00:34:25.800 --> 00:34:27.720
die Frage ist jetzt, von welchem Ende komme ich halt erstmal,

00:34:28.120 --> 00:34:30.360
aber ich bilde ja mit einem Vektor

00:34:30.360 --> 00:34:32.180
einen Punkt in einem

00:34:32.180 --> 00:34:34.320
n-dimensionalen Raum ab und dafür brauche

00:34:34.320 --> 00:34:36.200
ich eine Liste, weil ich nämlich

00:34:36.200 --> 00:34:38.680
halt n-Werte, n-Skalare

00:34:38.680 --> 00:34:40.060
bilden halt

00:34:40.060 --> 00:34:42.260
einen Vektor der

00:34:42.260 --> 00:34:44.080
Dimension n. Genau.

00:34:44.560 --> 00:34:45.480
Mit einer Matrix

00:34:45.480 --> 00:34:47.640
mit einer Matrix kann ich jetzt mehrere

00:34:47.640 --> 00:34:49.740
von solchen Vektoren nebeneinander

00:34:49.740 --> 00:34:51.560
setzen. Da gibt es dann welche mit

00:34:51.560 --> 00:34:53.700
bestimmten Eigenschaften, die, wenn ich, wenn die Matrix

00:34:53.700 --> 00:34:55.620
genauso, wenn ich halt N

00:34:55.620 --> 00:34:57.280
Vektoren der Dimension N

00:34:57.280 --> 00:34:59.520
zusammenfasse, dann habe ich

00:34:59.520 --> 00:35:01.380
genau eine

00:35:01.380 --> 00:35:03.720
quadratische Matrix

00:35:03.720 --> 00:35:05.780
und

00:35:05.780 --> 00:35:07.580
solche Spielchen, wo man dann halt bestimmte

00:35:07.580 --> 00:35:08.240
Dinge rechnen kann.

00:35:09.520 --> 00:35:11.660
Ja, aber genau, das wäre halt für mich die nächste Stufe

00:35:11.660 --> 00:35:13.120
sozusagen, dass du dann zwei Achsen hast,

00:35:13.260 --> 00:35:15.140
so in zwei unterschiedliche Richtungen

00:35:15.140 --> 00:35:16.360
und das nächste wären dann halt drei.

00:35:16.900 --> 00:35:18.840
Das hast du dann halt bei Bildern, da hast du dann halt

00:35:18.840 --> 00:35:21.080
nicht nur, also du könntest ja auch schon eine Matrix

00:35:21.080 --> 00:35:23.000
als Modell für

00:35:23.000 --> 00:35:24.980
ein Bild nehmen, wenn du jetzt nur schwarz und

00:35:24.980 --> 00:35:26.340
weiß hättest oder nur irgendwie

00:35:26.340 --> 00:35:28.860
einen Wert für, weiß ich nicht, die Helligkeit

00:35:28.860 --> 00:35:31.080
oder so, aber wenn du jetzt Farben hast,

00:35:31.140 --> 00:35:32.300
dann hast du schon Rot, Grün, Blau,

00:35:32.420 --> 00:35:35.260
das kannst du jetzt in eine Matrixzelle

00:35:35.260 --> 00:35:36.540
ja schon nicht mehr so richtig reinpacken

00:35:36.540 --> 00:35:39.000
und was man dann macht, ist halt, dann geht man halt noch

00:35:39.000 --> 00:35:40.520
eine Achse in die nächste

00:35:40.520 --> 00:35:42.960
Richtung sozusagen und dann hast du halt sozusagen

00:35:42.960 --> 00:35:45.880
eine Matrix pro Farbkanal

00:35:45.880 --> 00:35:47.980
sozusagen. Das kannst du ja abbilden

00:35:47.980 --> 00:35:49.960
sozusagen über eine Matrix von Vektoren

00:35:49.960 --> 00:35:50.980
oder über eine

00:35:50.980 --> 00:35:53.760
statt einem Quadrat über einen Würfel.

00:35:54.060 --> 00:35:55.920
Ja, aber mit dem Würfel darstellen,

00:35:56.000 --> 00:35:57.800
glaube ich, das wird schwierig, weil was ist dann die vierte

00:35:57.800 --> 00:35:59.280
Dimension und die fünfte und so?

00:35:59.640 --> 00:36:00.560
Ja, das geht immer weiter.

00:36:01.220 --> 00:36:02.840
Wir machen halt einen Hyperwürfel.

00:36:04.060 --> 00:36:06.060
Also das ist

00:36:06.060 --> 00:36:07.700
tatsächlich, Bilder

00:36:07.700 --> 00:36:09.820
sind halt im Rechner,

00:36:10.360 --> 00:36:11.660
also für Machine Learning-Geschichten

00:36:11.660 --> 00:36:13.400
sind halt, einzelne Bilder sind

00:36:13.400 --> 00:36:14.520
halt sozusagen

00:36:14.520 --> 00:36:17.380
Arrays mit drei Achsen, ja, so einer

00:36:17.380 --> 00:36:19.560
für halt Höhe, Breite.

00:36:19.740 --> 00:36:21.440
Das wäre wesentlich, wenn die so nebeneinander

00:36:21.440 --> 00:36:23.360
macht, oder? Dann hast du da drei Matrizen nebeneinander und

00:36:23.360 --> 00:36:25.140
dann hast du hinterher Reihen von

00:36:25.140 --> 00:36:27.440
Matrizen nebeneinander. Ja, aber die legt man

00:36:27.440 --> 00:36:29.360
übereinander und das spielt auch tatsächlich

00:36:29.360 --> 00:36:31.300
eine Rolle, dass das halt irgendwie nicht

00:36:31.300 --> 00:36:33.240
einfach getrennte Dinger sind, sondern dass es halt

00:36:33.240 --> 00:36:35.380
ein Array ist mit drei Achsen und

00:36:35.380 --> 00:36:36.420
nicht drei Matrizen.

00:36:37.300 --> 00:36:39.520
Und es ist so, tatsächlich ist es

00:36:39.520 --> 00:36:41.280
eher sogar so, dass man jetzt

00:36:41.280 --> 00:36:43.260
ein Trainingsset, als ein Array mit

00:36:43.260 --> 00:36:45.160
vier Achsen begreift. Nämlich, du hast dann halt auch noch die

00:36:45.160 --> 00:36:46.580
deine Trainingsbeispiele.

00:36:47.740 --> 00:36:48.540
Die Labels, oder?

00:36:50.160 --> 00:36:51.220
Die Labels

00:36:51.220 --> 00:36:52.860
sind getrennt davon, aber du hast halt

00:36:52.860 --> 00:36:55.080
sozusagen mehrere Trainingsbeispiele.

00:36:56.940 --> 00:36:57.480
Du hast

00:36:57.480 --> 00:36:58.740
immer Batches von so

00:36:58.740 --> 00:37:01.200
Bildern. Das heißt, du hast halt

00:37:01.200 --> 00:37:03.200
da auch nochmal eine Achse.

00:37:03.800 --> 00:37:05.280
Und dann bist du schon bei

00:37:05.280 --> 00:37:07.160
vier Achsen. Und dann,

00:37:07.160 --> 00:37:09.160
wenn du jetzt in Richtung Videos gehst, dann bist du auf jeden Fall schon mal

00:37:09.160 --> 00:37:09.720
bei fünf Achsen.

00:37:11.020 --> 00:37:12.960
Weil dann hast du nämlich auch noch Frames

00:37:12.960 --> 00:37:14.140
über die Zeit und so.

00:37:15.100 --> 00:37:17.140
Und dann wird es halt, irgendwann kann man

00:37:17.140 --> 00:37:18.140
es sich auch nicht mehr vorstellen, aber

00:37:18.140 --> 00:37:21.160
muss man ja vielleicht auch nicht. Ja, aber wenn man das halt so nebeneinander

00:37:21.160 --> 00:37:22.860
schreibt und dann wieder rein und dann wieder spalten,

00:37:22.940 --> 00:37:24.880
dann wieder rein und spalten von Dingen, die sich so ein bisschen

00:37:24.880 --> 00:37:27.100
schachteln, wie so eine Puppe,

00:37:27.340 --> 00:37:27.500
dann

00:37:27.500 --> 00:37:31.260
wird das vielleicht ein bisschen visualisierbarer.

00:37:31.440 --> 00:37:32.500
Ja, kann man auch.

00:37:33.040 --> 00:37:34.960
Auf jeden Fall. Aber genau.

00:37:35.140 --> 00:37:36.980
Also jedenfalls, das wird dann halt immer

00:37:36.980 --> 00:37:39.200
von der

00:37:39.200 --> 00:37:40.540
Struktur her schwieriger.

00:37:40.980 --> 00:37:42.680
Und was ich eigentlich nur am Anfang

00:37:42.680 --> 00:37:44.580
sagen wollte, was ich interessant finde, ist, dass jetzt sozusagen

00:37:44.580 --> 00:37:46.600
die Hardware halt diesen Prozess mitmacht.

00:37:47.980 --> 00:37:48.820
Nämlich halt

00:37:48.820 --> 00:37:50.480
von irgendwie, keine Ahnung,

00:37:50.760 --> 00:37:52.420
Vektorrechnern, wo man halt eine

00:37:52.420 --> 00:37:54.720
Instruktion hat, die dann nicht nur

00:37:54.720 --> 00:37:56.700
auf einem, mit einem Skalar

00:37:56.700 --> 00:37:58.560
quasi rechnet, sondern... Das ist der Aberkurs, der dann

00:37:58.560 --> 00:38:00.640
hin und her schiebt. Ja, sondern

00:38:00.640 --> 00:38:02.540
wo man die halt auf

00:38:02.540 --> 00:38:04.560
vielen Datendingern dann

00:38:04.560 --> 00:38:06.520
halt ausführt, sozusagen diese SIMD-Geschichten

00:38:06.520 --> 00:38:08.700
oder Vektorrechner halt. Und jetzt

00:38:08.700 --> 00:38:10.800
haben wir halt Tensor Cores

00:38:10.800 --> 00:38:12.860
in den Grafikkarten und den GPUs

00:38:12.860 --> 00:38:14.760
und da

00:38:14.760 --> 00:38:16.840
ist halt sozusagen, die rechnen dann halt nicht mit Vektoren,

00:38:17.400 --> 00:38:18.660
sondern die rechnen halt direkt mit

00:38:18.660 --> 00:38:20.880
Matrizen. Also klein,

00:38:21.060 --> 00:38:22.740
so 4x4 Matrizen, aber immerhin.

00:38:23.220 --> 00:38:24.720
Die machen halt dann in einem Takt schon

00:38:24.720 --> 00:38:26.940
Multiplikationen von zwei 4x4

00:38:26.940 --> 00:38:28.840
Matrizen, wo du

00:38:28.840 --> 00:38:30.760
normalerweise viel, viel mehr Takte brauchst, wenn

00:38:30.760 --> 00:38:32.060
du das halt irgendwie dann halt

00:38:32.060 --> 00:38:34.360
in Vektor-Operationen machst oder halt

00:38:34.360 --> 00:38:36.760
in der CPU

00:38:36.760 --> 00:38:37.320
als Skalar.

00:38:39.420 --> 00:38:40.720
Und ja, das ist

00:38:40.720 --> 00:38:42.760
eigentlich ganz faszinierend zu sehen, dass das jetzt so gerade mit der

00:38:42.760 --> 00:38:43.260
Zeit passiert.

00:38:45.480 --> 00:38:46.760
Ja. Also das ist auch der Hauptgrund

00:38:46.760 --> 00:38:48.500
dann, warum die Grafik

00:38:48.500 --> 00:38:50.780
Hardware so gerne dafür benutzt wird.

00:38:50.860 --> 00:38:52.720
Ja, weil halt die Dimensionalität bei

00:38:52.720 --> 00:38:54.720
Grafikoperationen eh schon so hoch gewesen

00:38:54.720 --> 00:38:55.500
sein muss.

00:38:56.600 --> 00:38:58.760
Ja, weil halt die Geschichten, auf die das optimiert

00:38:58.760 --> 00:39:00.720
ist, die mappen halt super auf die Operationen, die man

00:39:00.720 --> 00:39:02.120
halt für Machine Learning braucht.

00:39:02.660 --> 00:39:04.040
Also diese ganzen

00:39:04.040 --> 00:39:06.180
Matrix-Multiplikationen, beziehungsweise halt diese

00:39:06.180 --> 00:39:08.500
Convolution-Operationen, die man für

00:39:08.500 --> 00:39:10.820
diese Convolutional Neural Nets halt braucht,

00:39:11.000 --> 00:39:12.680
die sind halt damit super

00:39:12.680 --> 00:39:14.300
umzusetzen. Die brauchen wir halt auch für Spiele und so.

00:39:14.640 --> 00:39:16.180
Die machen ja auch im Grunde solche Sachen.

00:39:17.100 --> 00:39:18.720
Jetzt musst du vielleicht nochmal für all die Hörer erklären,

00:39:18.780 --> 00:39:20.560
was ein Convolutional Neural Network ist.

00:39:20.660 --> 00:39:21.620
Vielleicht einmal ganz kurz.

00:39:24.760 --> 00:39:26.300
Da hatten wir doch schon mal eine Episode dazu.

00:39:26.380 --> 00:39:27.380
Da war das nicht die Folge 8.

00:39:29.260 --> 00:39:30.360
Ehrlich gesagt, ich weiß nicht, ob ich das

00:39:30.360 --> 00:39:32.360
kann ich jetzt aus dem Stehgreif auch nicht.

00:39:32.440 --> 00:39:34.840
Also im Grunde, das ist halt eine spezielle Art von

00:39:34.840 --> 00:39:36.620
neuronalen Netz, wo halt

00:39:36.620 --> 00:39:40.860
zwischen den verschiedenen

00:39:40.860 --> 00:39:42.800
Layern, zwischen den Ebenen irgendwelche Dinge passieren.

00:39:42.800 --> 00:39:44.700
Das eignet sich halt vor allen Dingen, also es ist nicht nur

00:39:44.700 --> 00:39:46.640
Bildverarbeitung, also man kann das auch

00:39:46.640 --> 00:39:48.660
eindimensional dann halt für Audio

00:39:48.660 --> 00:39:50.340
machen oder für halt Text, aber

00:39:50.340 --> 00:39:52.680
es ist halt eine

00:39:52.680 --> 00:39:54.700
Operation, man kann sich das, muss man

00:39:54.700 --> 00:39:56.620
sich eigentlich auch mal ein Bild so angucken. Ich glaube,

00:39:56.680 --> 00:39:58.440
das kann man nicht so wirklich gut erklären.

00:39:59.200 --> 00:40:00.120
Das kriege ich irgendwie

00:40:00.120 --> 00:40:02.380
nicht so richtig hin. Aber

00:40:02.380 --> 00:40:04.040
genau, also es gibt auch noch andere

00:40:04.040 --> 00:40:06.500
Arten von Netzen, also die jetzt gerade eine große Rolle

00:40:06.500 --> 00:40:08.500
spielen mit so einem Transformer, ist zum Beispiel total heiß

00:40:08.500 --> 00:40:10.520
gerade. Und

00:40:10.520 --> 00:40:12.420
ja,

00:40:12.660 --> 00:40:14.280
das funktioniert, es gibt so unterschiedliche

00:40:14.280 --> 00:40:16.020
Architekturen, TPUs und so,

00:40:16.140 --> 00:40:18.300
Tensor Cores. Und das

00:40:18.300 --> 00:40:20.160
einzig Blöde ist jetzt, dass außerhalb von

00:40:20.160 --> 00:40:22.360
das eigentlich, das ist was halt

00:40:22.360 --> 00:40:24.300
wirklich doof ist, dass halt Nvidia da so ein Monopol

00:40:24.300 --> 00:40:25.740
auf den ganzen Kram hat. Das ist so richtig

00:40:25.740 --> 00:40:28.260
ätzend. Das macht das mit der Hardware auch ziemlich

00:40:28.260 --> 00:40:30.160
schwierig, finde ich, irgendwie. Und gut,

00:40:30.280 --> 00:40:32.160
ich meine, es gibt noch Google und so, die mit ihren TPUs

00:40:32.160 --> 00:40:34.200
dann auch mal eine eigene Geschichte machen, aber da kommt man ja auch nicht

00:40:34.200 --> 00:40:36.020
so richtig ran. So einen Laden kaufen kann man ja auch nicht.

00:40:36.500 --> 00:40:38.600
und

00:40:38.600 --> 00:40:41.040
tja, das ist halt, das macht das Ganze

00:40:41.040 --> 00:40:43.120
etwas unschön. Alles andere ist super

00:40:43.120 --> 00:40:45.220
toll, aber das ist ja, diese ganzen

00:40:45.220 --> 00:40:47.160
Geschichten sind etwas fies und natürlich

00:40:47.160 --> 00:40:49.140
ist es dann auch schwierig, die Dinger zu betreiben, weil wenn man

00:40:49.140 --> 00:40:51.060
jetzt zu Nvidia geht und sagt, also ich habe da so ein

00:40:51.060 --> 00:40:53.020
Rechenzentrum und da würde ich jetzt gerne irgendwie Machine Learning

00:40:53.020 --> 00:40:57.020
Server irgendwie mir hinstellen oder so,

00:40:57.160 --> 00:40:58.460
dann sagen die, ja gern, klar, super, hier,

00:40:58.760 --> 00:41:01.060
nimm doch mal die, weiß ich nicht,

00:41:01.180 --> 00:41:03.300
was haben wir da, A100 Karten oder so,

00:41:04.460 --> 00:41:05.060
aber die

00:41:05.060 --> 00:41:06.220
kosten dann halt ein Arm und ein Bein.

00:41:07.500 --> 00:41:08.940
Wobei das finde ich, also

00:41:08.940 --> 00:41:10.760
ob die ein Arm und ein Bein kosten, kommt so ein bisschen darauf an.

00:41:11.120 --> 00:41:12.900
Du hast halt das Thema, du kannst nicht unter

00:41:12.900 --> 00:41:14.460
einer gewissen Mindestgröße einsteigen.

00:41:15.480 --> 00:41:16.800
Und was mir bei Nvidia mit dem

00:41:16.800 --> 00:41:18.960
Monopol tatsächlich aufgefallen ist, ist, die

00:41:18.960 --> 00:41:21.200
segmentieren

00:41:21.200 --> 00:41:22.260
sich den Markt zurecht.

00:41:22.940 --> 00:41:24.700
Die haben sehr stark angefangen, über

00:41:24.700 --> 00:41:26.760
Lizenzverträge zu knebeln.

00:41:27.140 --> 00:41:28.860
Also speziell mit dem Thema, dass

00:41:28.860 --> 00:41:31.560
die meisten Puppel-Grafikkappen

00:41:31.560 --> 00:41:32.300
können

00:41:32.300 --> 00:41:34.820
genau den Kram, den man da braucht. Die haben inzwischen

00:41:34.820 --> 00:41:36.560
auch ausreichend RAM, es ist immer noch die Frage

00:41:36.560 --> 00:41:38.300
nach welchen Modellgrößen kannst du rechnen

00:41:38.300 --> 00:41:40.540
und Nvidia will ja nun mal die

00:41:40.540 --> 00:41:41.480
Gamerszene bedienen

00:41:41.480 --> 00:41:44.400
und verbietet dir aber halt für die

00:41:44.400 --> 00:41:46.380
normalen Gamer-Grafikkarten

00:41:46.380 --> 00:41:48.500
sie verbieten es, die Lizenz technisch

00:41:48.500 --> 00:41:49.760
einfach sie dafür einzusetzen

00:41:49.760 --> 00:41:52.480
sie sagen, auf diesen Karten darfst du kein

00:41:52.480 --> 00:41:53.660
Machine Learning machen

00:41:53.660 --> 00:41:55.540
so und dann

00:41:55.540 --> 00:41:58.600
nimmst du bitte unsere, die A100 oder halt

00:41:58.600 --> 00:41:59.880
auch ein paar kleinere oder irgendwas

00:41:59.880 --> 00:42:02.540
und es ist schon krass, was die auf dem Gebrauchtmarkt teilweise ziehen

00:42:02.540 --> 00:42:03.420
also es gibt jetzt irgendwie

00:42:03.420 --> 00:42:04.900
bei Azure

00:42:04.900 --> 00:42:07.640
gibt es die K80 unter anderem.

00:42:07.800 --> 00:42:09.800
Die ist jetzt schon ganz schön in die Jahre gekommen,

00:42:09.920 --> 00:42:11.940
glaube ich. Aber die kostet

00:42:11.940 --> 00:42:15.060
halt das Stück immer noch 2.500 Euro

00:42:15.060 --> 00:42:15.540
auf dem

00:42:15.540 --> 00:42:16.860
freien Markt.

00:42:17.600 --> 00:42:19.660
Und wenn du mit einer A100 einsteigen willst,

00:42:19.760 --> 00:42:21.880
bist du halt bei so 8.000, 9.000 Euro

00:42:21.880 --> 00:42:22.760
etwa dabei netto.

00:42:23.780 --> 00:42:25.760
Und da muss man aber im Hintergrund wissen, naja, das ist halt

00:42:25.760 --> 00:42:27.860
schon genau für das High-End-Data-Center-Zeug

00:42:27.860 --> 00:42:29.860
gedacht. Das heißt, eine davon kannst

00:42:29.860 --> 00:42:32.080
du halt im Prinzip auch in sieben Teile zerteilen,

00:42:32.200 --> 00:42:34.160
in virtuelle Maschinen reinpacken, kannst die irgendwie

00:42:34.160 --> 00:42:36.180
in unterschiedliche Zuschnitte von

00:42:36.180 --> 00:42:38.220
irgendwie unterschiedlichen

00:42:38.220 --> 00:42:40.180
Rahmengrößen und was du denen an

00:42:40.180 --> 00:42:41.420
Ressourcen zuweist, also da

00:42:41.570 --> 00:43:04.390
Da ist dann schon auch Musik drin im Handling und wenn du dir das dann durchrechnest, dann merkst du, okay, das lohnt sich wirtschaftlich auch, aber es braucht halt diese Mindestgröße und klar, Nvidia verkauft ja halt auch, es gibt so eine A100, irgendwie vier Höheneinheiten, glaube ich, Riesenchassis mit acht von den Stück drin oder so, mit den tollen irgendwie auch noch speziellen Bussystemen, die die Karten untereinander verbinden.

00:43:05.190 --> 00:43:07.630
Da kostet halt das Stück nur 250.000 Euro.

00:43:09.070 --> 00:43:12.130
Das ist natürlich für mal anfangen und irgendwie loslegen und gucken,

00:43:12.250 --> 00:43:13.690
wie experimentiere ich jetzt eigentlich damit.

00:43:13.810 --> 00:43:15.990
Und du brauchst halt, ich habe noch nicht verstanden,

00:43:16.570 --> 00:43:20.170
welche dieser Hardware, welche Operationen zum Beispiel in vergleichbarem Umfang,

00:43:20.290 --> 00:43:23.070
vergleichbarem Takt, welche Modellgrößen für den RAM

00:43:23.070 --> 00:43:25.050
und haben die nochmal unterstrichen,

00:43:25.150 --> 00:43:28.490
da sind inzwischen auch acht Generationen, glaube ich, in Summe am Start,

00:43:28.910 --> 00:43:32.090
was die tatsächlich können, welche Befehlssätze.

00:43:32.190 --> 00:43:33.390
Das ist alles relativ unübersichtlich.

00:43:33.390 --> 00:43:35.530
extrem viel Marketing-Fluff momentan

00:43:35.530 --> 00:43:37.370
draußen und selbst die

00:43:37.370 --> 00:43:39.590
Datasheets sind nicht

00:43:39.590 --> 00:43:40.490
gut lesbar.

00:43:41.570 --> 00:43:43.810
Was ich bei Nvidia zum Experimentieren gerade auf dem Schirm

00:43:43.810 --> 00:43:45.650
habe, sind diese Jetson-Teile.

00:43:46.850 --> 00:43:47.810
Das ist irgendwie deren Richtung

00:43:47.810 --> 00:43:49.650
für eher kleine Embedded-Sachen, wo du so

00:43:49.650 --> 00:43:51.850
in Richtung Robotik und so gehst. Und da kann man

00:43:51.850 --> 00:43:53.250
tatsächlich mit dem allerkleinsten

00:43:53.250 --> 00:43:56.170
für, glaube ich, 100 Dollar oder so, kannst du da reinwerfen.

00:43:56.570 --> 00:43:57.590
Und das ist schon ein

00:43:57.590 --> 00:43:59.690
Mini-PC, wie so ein Raspberry

00:43:59.690 --> 00:44:01.830
im Prinzip. Da hast du schon Netzwerk und CPU

00:44:01.830 --> 00:44:03.590
und alles irgendwie einmal als einen Bundle

00:44:03.590 --> 00:44:05.630
und da findet man im Netz auch

00:44:05.630 --> 00:44:07.950
für die ganzen klassischen Frameworks, die man jetzt so hat

00:44:07.950 --> 00:44:09.510
wie PyTorch etc. Anleitungen

00:44:09.510 --> 00:44:11.850
wie man die auf den Teilen dann betreibt, das heißt

00:44:11.850 --> 00:44:14.010
das ist so für mich gerade der Vector

00:44:14.010 --> 00:44:15.830
mal zu gucken, okay, so ein Stück

00:44:15.830 --> 00:44:17.690
Hardware mal zu kriegen, wo man das Zeug

00:44:17.690 --> 00:44:19.750
tatsächlich sehen kann von, bringt mir das

00:44:19.750 --> 00:44:21.650
jetzt wirklich was in der Beschleunigung oder

00:44:21.650 --> 00:44:23.490
ist das alles bloß heiße Luft

00:44:23.490 --> 00:44:25.830
ja, das ist so ein Ende

00:44:25.830 --> 00:44:27.070
ansonsten würde ich ja gerne

00:44:27.070 --> 00:44:29.710
immer lieber noch ein bisschen AMD

00:44:29.710 --> 00:44:31.770
kaufen. Und da macht sich

00:44:31.770 --> 00:44:33.570
aber auch wieder Nvidia als Platzhörer

00:44:33.570 --> 00:44:35.550
bemerkbar, dass viele von den Frameworks dann

00:44:35.550 --> 00:44:37.610
mit den AMD-Karten wieder nichts anfangen können.

00:44:38.830 --> 00:44:39.550
Das ist so ein bisschen,

00:44:39.810 --> 00:44:40.370
ja, hm.

00:44:41.390 --> 00:44:43.610
Ja, das ist ganz blöd. Also nicht, dass ich wüsste,

00:44:43.710 --> 00:44:45.610
dass mit AMD da irgendwas zu machen wäre zur Zeit.

00:44:45.910 --> 00:44:47.590
Also das kann man ja auch

00:44:47.590 --> 00:44:49.270
nicht kaufen kann. Ja, okay.

00:44:50.310 --> 00:44:51.410
Also zum einen muss die

00:44:51.410 --> 00:44:53.570
Playstation mal noch irgendwie gefertigt werden.

00:44:53.730 --> 00:44:55.290
Die ziehen da ja Kapazität ab.

00:44:55.410 --> 00:44:58.110
Und zum anderen die ganzen Bitcoin-

00:44:58.110 --> 00:44:59.450
Miner, die scheinen das

00:44:59.450 --> 00:45:01.130
Zeug schon direkt an der Fabrik abzuzweigen.

00:45:01.270 --> 00:45:03.190
Ich habe ein paar Lieferanten gesprochen, die

00:45:03.190 --> 00:45:05.210
eigentlich gern AMD anbieten würden. Sie meinen, sie haben noch

00:45:05.210 --> 00:45:07.410
nicht einmal irgendeine der Karten

00:45:07.410 --> 00:45:08.470
jemals in echt gesehen.

00:45:08.910 --> 00:45:09.730
Oh, okay. Ja, gut.

00:45:11.490 --> 00:45:12.990
Ja, ja, das ist natürlich auch so ein Problem.

00:45:13.210 --> 00:45:15.430
Die Verfügbarkeit. Das ist auch teilweise bei den

00:45:15.430 --> 00:45:17.010
Nvidia-Karten auch immer

00:45:17.010 --> 00:45:19.270
so ein Problemchen, die es sind, wirklich zu bekommen.

00:45:20.190 --> 00:45:21.430
Ist manchmal gar nicht so einfach.

00:45:22.370 --> 00:45:22.510
Ja.

00:45:22.510 --> 00:45:24.490
Ja, also genau diese

00:45:24.490 --> 00:45:26.590
Marktskementierungsgeschichte ist halt das, was man dann...

00:45:26.590 --> 00:45:28.770
Das ist halt im Grunde die Art, wie man

00:45:28.770 --> 00:45:30.930
jetzt ein Monopol hat, wie man das zu Geld macht.

00:45:33.090 --> 00:45:33.450
IBM

00:45:33.450 --> 00:45:34.770
hat das früher ja dann auch schon gemacht.

00:45:34.970 --> 00:45:36.390
Man macht dann halt Functional Pricing.

00:45:36.550 --> 00:45:38.910
Man macht den Preis halt so,

00:45:39.010 --> 00:45:40.670
dass es zu dem Markt, das man

00:45:40.670 --> 00:45:42.710
bedienen möchte, passt. Im Grunde können die ganzen Dinge

00:45:42.710 --> 00:45:43.930
mehr oder weniger das Gleiche.

00:45:44.130 --> 00:45:46.230
Die RTX-Karten,

00:45:46.350 --> 00:45:48.910
die können im Grunde

00:45:48.910 --> 00:45:50.570
fast das, also die Gamer-Karten können halt

00:45:50.570 --> 00:45:51.730
im Grunde das Gleiche, was halt

00:45:51.730 --> 00:45:53.030
auch die

00:45:53.030 --> 00:45:56.550
großen Server-Karten können.

00:45:56.890 --> 00:45:58.570
Sie sind halt in bestimmten Operationen ein bisschen

00:45:58.570 --> 00:46:00.770
künstlich langsamer gemacht, damit man sie halt

00:46:00.770 --> 00:46:01.810
jetzt nicht so verwenden kann.

00:46:02.650 --> 00:46:04.570
Übrigens, ich weiß auch nicht, ob das irgendwie

00:46:04.570 --> 00:46:06.350
überhaupt geht. Also in den USA geht es vielleicht,

00:46:06.610 --> 00:46:09.070
aber ob man jetzt in Deutschland jemandem,

00:46:09.950 --> 00:46:10.450
der irgendwas

00:46:10.450 --> 00:46:12.850
abgekauft hat, dann hinterher verbieten kann,

00:46:12.910 --> 00:46:15.010
damit irgendwas zu tun. Ich glaube, das geht überhaupt gar nicht.

00:46:15.230 --> 00:46:16.510
Also auch eine Lizenz oder sowas

00:46:16.510 --> 00:46:18.130
schwierig wahrscheinlich.

00:46:20.450 --> 00:46:20.850
Insofern,

00:46:21.390 --> 00:46:22.650
ja, also

00:46:22.650 --> 00:46:24.170
vielleicht kann man

00:46:24.170 --> 00:46:26.630
das einfach trotzdem machen. Auf der anderen Seite

00:46:26.630 --> 00:46:28.210
ist es natürlich auch so, es ist

00:46:28.210 --> 00:46:30.010
nicht so einfach.

00:46:30.670 --> 00:46:32.930
Ja, es ist halt für eine Geschäftsbeziehung keine Grundlage.

00:46:33.290 --> 00:46:34.910
Also, was machst du denn?

00:46:34.990 --> 00:46:36.910
Damit machst du dich deinem Hersteller gegenüber nackig

00:46:36.910 --> 00:46:38.990
und der sagt, so, jetzt hast du

00:46:38.990 --> 00:46:41.010
da dein Produkt aufgebaut und wir sollen dich beliefern.

00:46:41.550 --> 00:46:42.810
Wäre aber schade, wenn du nicht mehr

00:46:42.810 --> 00:46:45.030
beliefert wirst. Ja, ja, gut, klar, natürlich.

00:46:45.750 --> 00:46:47.430
Das ist halt die Frage,

00:46:47.530 --> 00:46:48.750
ob man das machen kann.

00:46:48.950 --> 00:46:50.990
Ja, das ist schon, das ist natürlich

00:46:50.990 --> 00:46:52.950
so ein Punkt. Ja, und

00:46:52.950 --> 00:46:54.790
ein weiterer Punkt ist halt, es ist schwer,

00:46:54.790 --> 00:46:56.210
die Dinger zu betreiben nach wie vor.

00:46:56.650 --> 00:47:00.930
Also die Leistung steigt zwar auch immer noch,

00:47:01.130 --> 00:47:04.290
aber auch die Leistungsaufnahme steigt halt irgendwie einfach an Strom.

00:47:05.630 --> 00:47:10.530
Und so bei den, glaube ich, bei den RTX 3090-Karten,

00:47:10.610 --> 00:47:12.950
die aktuellsten, da ist es so, da musst du halt dann,

00:47:13.650 --> 00:47:16.830
also Netzteile, die normalerweise,

00:47:16.930 --> 00:47:18.650
also selbst die größten Netzteile, das funktioniert nicht mehr.

00:47:18.710 --> 00:47:20.170
Du brauchst dann nochmal externen Strom da dran.

00:47:20.670 --> 00:47:22.550
Und wenn du dann mehrere in ein Gehäuse steckst,

00:47:22.550 --> 00:47:24.490
dann kriegst du sofort Hitzeprobleme.

00:47:24.870 --> 00:47:27.330
Man muss halt immer zusehen, dass man genug Platz lässt

00:47:27.330 --> 00:47:28.270
und dann irgendwie Leute,

00:47:29.110 --> 00:47:31.110
also da gibt es ganze Bastelzähne,

00:47:31.250 --> 00:47:33.010
die versuchen, das irgendwie richtig hinzukriegen

00:47:33.010 --> 00:47:34.390
und das alles irgendwie,

00:47:34.850 --> 00:47:35.650
es ist nicht so einfach.

00:47:36.730 --> 00:47:39.090
Aber tatsächlich, das lohnt sich auch noch

00:47:39.090 --> 00:47:41.170
alles. Also wenn man das selber macht, dann kann man

00:47:41.170 --> 00:47:43.130
mindestens im Faktor 10 irgendwie günstiger

00:47:43.130 --> 00:47:44.650
sein, als wenn man das jetzt irgendwie fertig

00:47:44.650 --> 00:47:46.710
gebaut kauft und hat halt

00:47:46.710 --> 00:47:48.970
die gleiche Performance. Und das ist

00:47:48.970 --> 00:47:49.950
schon noch signifikant.

00:47:50.730 --> 00:47:52.990
Ja, der Unterschied im fertig gekauft

00:47:52.990 --> 00:47:54.990
beziehungsweise wenn du sie halt aus irgendeinem Cloud

00:47:54.990 --> 00:47:57.090
Ding rausziehst, der Unterschied dort ist halt

00:47:57.090 --> 00:47:58.990
du kannst halt hinklicken, dann kostet sich das

00:47:58.990 --> 00:48:01.090
zwar auch ein Arm und ein Bein, aber du kannst es halt auch jederzeit

00:48:01.090 --> 00:48:02.950
wieder abschießen und du musst nicht

00:48:02.950 --> 00:48:04.990
fünf Monate lang ein Projekt

00:48:04.990 --> 00:48:07.050
machen, dir zu überlegen, was kaufe ich

00:48:07.050 --> 00:48:09.030
jetzt und wie stecke ich es zusammen etc. Insofern finde

00:48:09.030 --> 00:48:09.850
ich das schon legitim.

00:48:10.990 --> 00:48:12.570
Aber ich merke halt, also der

00:48:12.570 --> 00:48:14.230
man darf das

00:48:14.230 --> 00:48:17.030
nicht nur schätzen, was Flexibilität

00:48:17.030 --> 00:48:18.650
und das ist ja eine

00:48:18.650 --> 00:48:19.710
betriebswirtschaftliche

00:48:19.710 --> 00:48:21.390
Grund

00:48:21.390 --> 00:48:23.910
Erkenntnis,

00:48:24.690 --> 00:48:26.230
Flexibilität oder Optionen

00:48:26.230 --> 00:48:26.930
kosten Geld.

00:48:28.090 --> 00:48:29.610
Die kosten immer irgendwas und

00:48:29.610 --> 00:48:31.830
wenn man Investitionskosten und alle

00:48:31.830 --> 00:48:33.890
wollen immer alles auf möglichst

00:48:33.890 --> 00:48:35.570
OPEX umlegen heutzutage und wenig

00:48:35.570 --> 00:48:37.470
kapitalintensiv irgendwie vorfinanzieren,

00:48:38.070 --> 00:48:39.830
aber es kann halt manchmal passieren, dass wenn

00:48:39.830 --> 00:48:41.550
du deine Lebensdauer von 12 bis 14,

00:48:42.030 --> 00:48:43.630
von 12, 36

00:48:43.630 --> 00:48:45.450
oder 60 Monaten anguckst,

00:48:45.850 --> 00:48:47.830
dann ist das Ding in Summe 3 bis 4, 5 mal

00:48:47.830 --> 00:48:49.870
so teuer, als wenn du es dann irgendwann mal selber in die Hand

00:48:49.870 --> 00:48:51.930
genommen hättest. Da muss man

00:48:51.930 --> 00:48:54.030
sich dann fragen, ist das für eine Basislast

00:48:54.030 --> 00:48:55.970
ist das halt eigentlich dann irgendwann nicht mehr gerechtfertigt.

00:48:57.830 --> 00:48:58.190
Also ich meine,

00:48:58.530 --> 00:48:59.970
die A100 fand ich sogar

00:48:59.970 --> 00:49:01.930
relativ zahm in der Hinsicht noch. Also ich

00:49:01.930 --> 00:49:03.070
gucke gerade nochmal in das

00:49:03.070 --> 00:49:05.710
Specsheet rein und wenn du halt eine PCIe-Karte

00:49:05.710 --> 00:49:07.810
von der A100 ziehst und

00:49:07.810 --> 00:49:09.870
die hat, was hat

00:49:09.870 --> 00:49:11.290
die an RAM drin, 40 Gig

00:49:11.290 --> 00:49:13.050
und

00:49:13.050 --> 00:49:17.670
die zieht halt 250 Watt.

00:49:17.950 --> 00:49:19.770
Das ist halt schon noch überschaubar. Das heißt,

00:49:19.870 --> 00:49:21.850
also da habe ich bei den Netzteilen, was

00:49:21.850 --> 00:49:23.250
wir so typischerweise Zeug verbauen,

00:49:24.070 --> 00:49:25.730
ich würde ja in so einer Hinsicht halt auch weniger

00:49:25.730 --> 00:49:27.890
gucken, irgendwie eine Karre möglichst

00:49:27.890 --> 00:49:29.810
voll zu machen, sondern mehr

00:49:29.810 --> 00:49:31.750
zuzusehen, dass man halt irgendwie dann in seinem

00:49:31.750 --> 00:49:33.790
Pool vier, fünf, sechs

00:49:33.790 --> 00:49:34.810
Maschinen damit bestückt,

00:49:35.490 --> 00:49:37.910
weil man es ja auch irgendwie verteilen möchte, wenn mal was kaputt

00:49:37.910 --> 00:49:39.910
geht, etc. Da bin

00:49:39.910 --> 00:49:41.810
ich halt auch noch gespannt, weil

00:49:41.810 --> 00:49:43.190
dann halt

00:49:43.190 --> 00:49:45.870
die Kundenseite

00:49:45.870 --> 00:49:47.790
für, ich rechne Modelle

00:49:47.790 --> 00:49:49.730
um dir irgendwie Vorschläge

00:49:49.730 --> 00:49:51.750
oder Klassifizierung oder irgendwie so ein Kram

00:49:51.750 --> 00:49:52.410
zu rechnen.

00:49:54.010 --> 00:49:55.790
Das ist ja immer sehr kurz von den

00:49:55.790 --> 00:49:57.830
Transaktionen her. Da willst du ja innerhalb von

00:49:57.830 --> 00:49:59.650
einer halben Sekunde deine Antwort haben

00:49:59.650 --> 00:50:00.310
und dann ist es vorbei.

00:50:01.430 --> 00:50:03.550
Wenn du aber tatsächlich so ein Ding hast mit

00:50:03.550 --> 00:50:04.890
ich rechne hier mein

00:50:04.890 --> 00:50:06.090
Training,

00:50:06.970 --> 00:50:09.730
da habe ich noch nicht rausgefunden, was dann typische

00:50:09.730 --> 00:50:11.690
Trainingsdauern sind. Aber wenn das halt mal Stunden

00:50:11.690 --> 00:50:13.430
dauert und

00:50:13.430 --> 00:50:15.970
die ganze Virtualisierung das noch nicht hergibt,

00:50:15.970 --> 00:50:17.930
so ein Zeug transparent halt dann zwischen A

00:50:17.930 --> 00:50:18.750
und B zu verschieben,

00:50:19.730 --> 00:50:22.250
dann muss ich halt mittendrin operativ eingreifen können

00:50:22.250 --> 00:50:27.230
und zu sagen, die eine Grafik da drüben, die fliegt jetzt mal weg.

00:50:28.910 --> 00:50:31.050
Ja, also es kommt halt darauf an, was man damit macht.

00:50:31.230 --> 00:50:32.330
Also die Leute, die das halt,

00:50:32.630 --> 00:50:34.410
also die ganze Kegel-Community,

00:50:34.570 --> 00:50:36.230
die da so kompetitives Machine Learning machen,

00:50:37.110 --> 00:50:39.210
die versuchen sich alle möglichst viele Karten

00:50:39.210 --> 00:50:41.190
in einen Rechner zu basteln halt irgendwie.

00:50:41.410 --> 00:50:44.470
Und das ist natürlich irgendwie auch nicht so einfach,

00:50:45.190 --> 00:50:47.850
aber weil du damit halt die Trainingszeiten runterkriegst.

00:50:48.250 --> 00:50:50.070
wenn du jetzt viele Karten, also wenn du

00:50:50.070 --> 00:50:52.110
mehrere Karten in unterschiedlichen Rechnern hast, das hilft dir nicht so

00:50:52.110 --> 00:50:53.570
viel. Also insofern,

00:50:53.730 --> 00:50:55.130
aber

00:50:55.130 --> 00:50:58.170
das hängt

00:50:58.170 --> 00:51:00.070
da, also das Ende, an dem ich

00:51:00.070 --> 00:51:01.990
noch dran bin, ist ein Gefühl dafür zu kriegen,

00:51:02.250 --> 00:51:04.050
dann welche Modellgrößen sich dann

00:51:04.050 --> 00:51:06.070
in welcher Geschwindigkeit aufhäufen, weil

00:51:06.070 --> 00:51:08.150
da wir über Mehrdimensionalität reden,

00:51:08.230 --> 00:51:10.030
ist es natürlich immer so, irgendwann kommt der

00:51:10.030 --> 00:51:11.870
Punkt, wo jede neue Dimension

00:51:11.870 --> 00:51:13.510
das ganze Ding natürlich

00:51:13.510 --> 00:51:15.690
dir schnell weglaufen lässt und wenn du also

00:51:15.690 --> 00:51:17.890
keine Ahnung, dein Modell zu trainieren

00:51:17.890 --> 00:51:19.750
schon 20 Gig frisst und du kriegst noch eine

00:51:19.750 --> 00:51:21.910
Dimension rein, dann kann ich mir gut vorstellen, bist du plötzlich

00:51:21.910 --> 00:51:23.830
bei 40 und damit bist du schon beim

00:51:23.830 --> 00:51:25.490
oberen Ende, was eine so eine Karte halt kann.

00:51:25.790 --> 00:51:27.450
Ja, kommt halt drauf an, was man macht. Also wenn man

00:51:27.450 --> 00:51:28.630
halt irgendwie so

00:51:28.630 --> 00:51:33.890
so klassische

00:51:33.890 --> 00:51:34.230
Bild,

00:51:35.250 --> 00:51:37.550
was ImageNet mäßiges macht, halt

00:51:37.550 --> 00:51:39.610
Klassifikation von Bildern oder so und da Modelle trainiert,

00:51:40.370 --> 00:51:41.710
da braucht man nicht so viel

00:51:41.710 --> 00:51:43.630
Hauptspeicher, aber wenn man jetzt Transformer-Geschichten macht,

00:51:43.630 --> 00:51:45.830
also Natural Language

00:51:45.830 --> 00:51:47.810
Processing auf irrsinnig

00:51:47.810 --> 00:51:49.850
großen Mengen Text oder so, da

00:51:49.850 --> 00:51:51.750
braucht man eigentlich so viel Hauptspeicher, wie man kriegen kann

00:51:51.750 --> 00:51:53.890
und da sind halt auch 24 Gig oder so, das ist

00:51:53.890 --> 00:51:55.890
halt so das, glaube ich, maximale, was

00:51:55.890 --> 00:51:57.690
man im Computer-Summe-Bereich kriegt, halt schnell

00:51:57.690 --> 00:51:59.930
vorbei und dann, ja.

00:51:59.950 --> 00:52:01.670
Kann man so eine A auch in

00:52:01.670 --> 00:52:03.710
seinen Gaming-PC einbauen? Ich frage nur aus

00:52:03.710 --> 00:52:05.810
Interesse. Ja, ja, kann man, kann man machen.

00:52:06.330 --> 00:52:07.670
Aber, ja.

00:52:07.730 --> 00:52:09.970
Die A hat, glaube ich, die hat keine Grafik-Outputs,

00:52:10.030 --> 00:52:11.070
glaube ich. Ich weiß nicht, ob die

00:52:11.070 --> 00:52:12.950
tatsächlich was hilft.

00:52:15.150 --> 00:52:15.730
Also für die

00:52:15.730 --> 00:52:17.490
Enthusiasten dann in der Szene.

00:52:17.810 --> 00:52:36.650
Nee, nee, also das sind ja, viele von den Karten benutzt man ja auch so, benutzen Spieler ja auch, weiß ich jetzt nicht genau, welche davon, aber das sind, also die, gerade die günstigen Dinger, das sind halt alles eigentlich Karten für den Gamermarkt, ja.

00:52:37.790 --> 00:52:49.430
Aber kann der, wie ist das auch mit diesen externen Grafikkarten dann, schließe ich die Displays an die externen Grafikkarten an oder schleifen die das Rechenergebnis wieder zurück und ich schicke das irgendwie über einen anderen Output raus?

00:52:52.150 --> 00:52:53.590
Ich meine, man schließt die direkt an.

00:52:53.590 --> 00:52:55.490
Ja, das ja auch, weil es gibt

00:52:55.490 --> 00:52:57.690
auch Nvidia hat an der Stelle halt von ihren

00:52:57.690 --> 00:52:59.630
von den Sachen, die haben

00:52:59.630 --> 00:53:01.350
ja dann auch zum Beispiel noch Spezialkarten,

00:53:01.490 --> 00:53:03.710
siehe Marktsegmentierung, die so für

00:53:03.710 --> 00:53:06.010
AI-Unterstützung,

00:53:06.090 --> 00:53:07.730
Maschinenunterstützung zum Beispiel für Architekten

00:53:07.730 --> 00:53:09.630
ist und das sind dann Karten, die haben

00:53:09.630 --> 00:53:11.250
halt entsprechend auch wieder ein Output dran

00:53:11.250 --> 00:53:13.590
und dann gibt es halt noch

00:53:13.590 --> 00:53:15.650
da gibt es ja noch dann wieder die Karten, die für

00:53:15.650 --> 00:53:17.510
Desktop-Virtualisierung gemacht sind

00:53:17.510 --> 00:53:19.810
da habe ich auch gerade einen Kollegen, der da

00:53:19.810 --> 00:53:21.530
an dem Ende bei sich

00:53:21.530 --> 00:53:23.290
rumarbeitet, also das ist nicht bei uns in der Firma,

00:53:23.450 --> 00:53:24.890
sondern woanders, die halt

00:53:24.890 --> 00:53:26.770
jetzt dank Corona

00:53:26.770 --> 00:53:29.290
und Homeoffice haben sich anscheinend

00:53:29.290 --> 00:53:31.530
viele Unternehmen entschieden, die Windows-Desktops ihrer User,

00:53:31.930 --> 00:53:33.310
damit die Daten

00:53:33.310 --> 00:53:35.310
nicht bei den Usern zu Hause liegen, alles über

00:53:35.310 --> 00:53:36.550
so Remote-Desktop zu machen

00:53:36.550 --> 00:53:39.330
und die musst du aber tatsächlich auch durch

00:53:39.330 --> 00:53:40.470
eine Acceleration durchschicken.

00:53:42.450 --> 00:53:43.190
Naja, weil auch

00:53:43.190 --> 00:53:45.190
das Windows auf der VM

00:53:45.190 --> 00:53:47.370
rechnet dir irgendwelche Transparenzen

00:53:47.370 --> 00:53:48.710
aus und das willst du nicht mehr

00:53:48.710 --> 00:53:51.450
in CPU machen.

00:53:51.530 --> 00:53:54.850
Und da haben sie dann auch wieder

00:53:54.850 --> 00:53:57.310
Spezialkarten für, die halt genau dafür

00:53:57.310 --> 00:53:58.310
wiederum getrimmt sind.

00:54:01.570 --> 00:54:02.010
Ja.

00:54:03.950 --> 00:54:04.730
Naja, also

00:54:04.730 --> 00:54:07.350
gut, ich kenne es halt nur von den Leuten,

00:54:07.490 --> 00:54:08.710
die das halt, ja,

00:54:08.970 --> 00:54:10.750
die das jetzt nicht, also

00:54:10.750 --> 00:54:12.910
mit den ganzen Enthusiasten sozusagen, die

00:54:12.910 --> 00:54:14.990
nehmen alle die Gamer-Karten und basteln

00:54:14.990 --> 00:54:16.850
halt selber. Dann gut,

00:54:16.850 --> 00:54:18.610
wenn man jetzt im Datacenter machen will,

00:54:18.770 --> 00:54:20.730
dann, ja, nimmt man vielleicht

00:54:20.730 --> 00:54:22.710
halt dann einfach in Kauf, dass das Zeug halt zehnmal

00:54:22.710 --> 00:54:23.410
so teuer ist.

00:54:24.550 --> 00:54:26.610
Die sind dann auch in den Nantien-Bereichen noch ein bisschen schneller,

00:54:27.050 --> 00:54:28.830
aber da kommt es halt darauf an, was man damit machen möchte.

00:54:28.990 --> 00:54:30.790
Für Transformer braucht man halt viel Hauptspeicher,

00:54:30.990 --> 00:54:32.910
für viele andere kleinere

00:54:32.910 --> 00:54:34.490
Sachen reichen halt auch die

00:54:34.490 --> 00:54:36.070
mit weniger Hauptspeicher.

00:54:36.930 --> 00:54:38.910
Es ist sowieso so, dass man ja im Grunde braucht man

00:54:38.910 --> 00:54:40.890
diese ganze Power eigentlich nur dann, wenn man

00:54:40.890 --> 00:54:42.170
tatsächlich größere

00:54:42.170 --> 00:54:44.950
Trainingsdatenmengen halt

00:54:44.950 --> 00:54:46.510
hat und irgendwie Modelle

00:54:46.510 --> 00:54:48.690
quasi von Grund auf trainiert.

00:54:48.850 --> 00:54:49.730
Also wenn man jetzt irgendwie

00:54:49.730 --> 00:54:52.730
und das würde ich jetzt, ist halt

00:54:52.730 --> 00:54:54.530
die Frage, was das für ein Anwendungsfall ist, aber wenn man jetzt

00:54:54.530 --> 00:54:56.390
den Anwendungsfall hat, wo ich denke,

00:54:56.490 --> 00:54:57.770
der kommt in der Praxis sehr, sehr häufig vor,

00:54:58.890 --> 00:55:00.510
man hat im Grunde, man nimmt irgendwie fertig

00:55:00.510 --> 00:55:02.550
trainierte Modelle von

00:55:02.550 --> 00:55:04.590
irgendwo her und feintunt die jetzt

00:55:04.590 --> 00:55:06.610
auf das Problem, das man hat. Also man

00:55:06.610 --> 00:55:08.670
hat halt irgendwie, keine Ahnung, man möchte irgendein Produkt für

00:55:08.670 --> 00:55:10.530
was irgendwie, das kriegt halt Bilder und soll dann

00:55:10.530 --> 00:55:12.110
irgendwas zu den Bildern sagen,

00:55:12.870 --> 00:55:14.550
die irgendwie klassifizieren oder da

00:55:14.550 --> 00:55:16.730
halt irgendwie, weiß ich nicht, irgendwas drauf erkennen

00:55:16.730 --> 00:55:17.750
oder so, was jetzt nicht

00:55:17.750 --> 00:55:19.590
in den ImageNet-Klassen

00:55:19.590 --> 00:55:21.490
schon drin ist, dann würde man einfach

00:55:21.490 --> 00:55:23.390
ein ImageNet-Modell nehmen und dann halt das noch

00:55:23.390 --> 00:55:25.570
feintunen auf das Problem. Dafür braucht man nicht viel Trainingsdaten

00:55:25.570 --> 00:55:27.330
und dafür reicht irgendwie so eine

00:55:27.330 --> 00:55:29.570
billige, diskrete GPU, weiß ich nicht,

00:55:29.690 --> 00:55:31.230
irgendwie so eine NVIDIA

00:55:31.230 --> 00:55:33.230
1070 oder sowas, was ganz billiges, so ein paar

00:55:33.230 --> 00:55:35.210
hundert Euro, das reicht ja schon aus, um das

00:55:35.210 --> 00:55:37.290
irgendwie machen zu können. Wenn man jetzt

00:55:37.290 --> 00:55:39.450
tatsächlich das ImageNet-Dataset

00:55:39.450 --> 00:55:41.410
komplett neu trainieren möchte für

00:55:41.410 --> 00:55:43.310
irgendwas, also, oder ein

00:55:43.310 --> 00:55:44.290
Dataset der Größe,

00:55:44.870 --> 00:55:47.150
also, jenseits,

00:55:47.330 --> 00:55:48.430
also schon so ein paar hundert,

00:55:48.650 --> 00:55:50.610
jenseits von 100 Gigabyte irgendwie Bilder

00:55:50.610 --> 00:55:54.630
und dann halt von Grund auf das Trainieren,

00:55:54.770 --> 00:55:56.270
dann braucht man eigentlich alles,

00:55:56.330 --> 00:55:58.330
was man an Power kriegen kann,

00:55:58.430 --> 00:55:59.030
weil dann kann es sein,

00:55:59.130 --> 00:56:01.150
dass so ein Trainingslauf halt mal eine Woche läuft

00:56:01.150 --> 00:56:03.270
und ob der eine Woche läuft oder eine halbe Woche läuft,

00:56:03.350 --> 00:56:04.130
macht dann einen großen Unterschied,

00:56:04.270 --> 00:56:05.990
weil dann kann man halt unter Umständen

00:56:05.990 --> 00:56:06.830
doppelt so schnell iterieren.

00:56:07.730 --> 00:56:09.150
Und ja, also,

00:56:10.530 --> 00:56:12.410
tja,

00:56:13.670 --> 00:56:14.310
ich denke mal,

00:56:14.310 --> 00:56:16.170
die allermeisten Leute brauchen das gar nicht so wirklich,

00:56:16.330 --> 00:56:17.530
Boah, ehrlich gesagt.

00:56:18.750 --> 00:56:20.450
Aber vielleicht wissen sie das auch nicht.

00:56:20.470 --> 00:56:22.250
Wir hätten gerne alle so ein Machine Learning Ding dabei,

00:56:22.390 --> 00:56:24.390
wenn wir zum Beispiel irgendwelche Geräte

00:56:24.390 --> 00:56:26.490
bewegen oder sowas, die alles dann direkt selber

00:56:26.490 --> 00:56:28.050
wahrnehmen können.

00:56:28.630 --> 00:56:30.350
Genau, aber das ist ja immer sozusagen das Ende von

00:56:30.350 --> 00:56:32.370
die benutzen die Modelle ja nur

00:56:32.370 --> 00:56:34.010
und schärfen sie vielleicht noch ein bisschen nach.

00:56:34.830 --> 00:56:36.390
Aber die rechnen ja die Modelle nicht.

00:56:36.750 --> 00:56:38.110
Nee, nicht von Grund auf, genau.

00:56:39.390 --> 00:56:40.470
Wäre doch schön, wenn sich das Modell

00:56:40.470 --> 00:56:42.090
parallel anpasst. Aber naja,

00:56:42.250 --> 00:56:44.510
wir träumen hier ein bisschen. Doch, den kann man ja

00:56:44.510 --> 00:56:46.110
tun, aber die unteren Ebenen,

00:56:46.250 --> 00:56:47.810
also sozusagen du trainierst halt bei so einem

00:56:47.810 --> 00:56:49.790
Feintuning, was du da machst, ist halt, du

00:56:49.790 --> 00:56:51.050
passt halt nur

00:56:51.050 --> 00:56:53.890
die oberen, also

00:56:53.890 --> 00:56:55.870
sozusagen nur einen Teil der Layer an. Also du

00:56:55.870 --> 00:56:57.950
frierst halt die Gewichte für den Großteil

00:56:57.950 --> 00:56:59.930
deines Modells ein und passt halt nur

00:56:59.930 --> 00:57:01.830
noch Details

00:57:01.830 --> 00:57:03.730
davon an. Wenn jetzt irgendwas über ImageNet

00:57:03.730 --> 00:57:04.150
gelaufen ist,

00:57:05.050 --> 00:57:07.110
was halt jetzt

00:57:07.110 --> 00:57:09.750
also ein Modell, was jetzt super

00:57:09.750 --> 00:57:11.770
gelernt hat, wie man Haare erkennt

00:57:11.770 --> 00:57:13.030
oder Augen oder sowas,

00:57:13.910 --> 00:57:15.670
das macht eigentlich keinen großen Sinn, wenn

00:57:15.670 --> 00:57:17.890
du jetzt eine spezielle Art von Tier irgendwie

00:57:17.890 --> 00:57:19.990
erkennen willst auf Bildern,

00:57:20.370 --> 00:57:21.950
das nochmal alles von Grund auf neu zu

00:57:21.950 --> 00:57:23.770
machen, so zu trainieren, wie man Fälle

00:57:23.770 --> 00:57:25.210
erkennt oder so, weil das funktioniert schon super.

00:57:25.950 --> 00:57:27.850
Du willst halt nur, dass deine Klasse von Tier

00:57:27.850 --> 00:57:29.910
jetzt dann noch gut erkannt wird, aber dafür musst du eigentlich nur

00:57:29.910 --> 00:57:31.470
ein paar Layer irgendwie...

00:57:31.470 --> 00:57:33.750
Bei Live-Videodaten oder sowas, ist das vielleicht noch

00:57:33.750 --> 00:57:34.470
anders?

00:57:35.830 --> 00:57:37.670
Also es kommen halt auch... Ich meine, Video ist sowieso

00:57:37.670 --> 00:57:38.850
ein Ding, wo es noch nicht so viel gibt.

00:57:39.890 --> 00:57:41.350
Das wäre, wenn... Also

00:57:41.350 --> 00:57:43.630
klar, wenn du jetzt eine neue Geschichte machst, die

00:57:43.630 --> 00:57:45.650
sonst noch keiner gemacht hat, dann hast du natürlich genau... Oder wenn du

00:57:45.650 --> 00:57:47.330
auch neue Modelle ausprobieren willst, wenn du

00:57:47.330 --> 00:57:49.250
die Architektur änderst und sagst,

00:57:49.370 --> 00:57:50.810
mir ist jetzt eingefallen, wie man

00:57:50.810 --> 00:57:53.270
eine ganz neue, tolle Art von

00:57:53.270 --> 00:57:55.350
Maschinen-Learning-Modell hat, bauen kann,

00:57:55.530 --> 00:57:57.230
die alles viel besser macht und

00:57:57.230 --> 00:57:59.050
dann musst du halt von Grund auf neu trainieren, weil

00:57:59.050 --> 00:58:01.450
ja, du willst ja demonstrieren, dass es besser ist.

00:58:02.130 --> 00:58:03.270
Dann, ja, also wenn du

00:58:03.270 --> 00:58:05.010
Maschinen-Learning-Forschung machst und so, klar, dann

00:58:05.010 --> 00:58:07.290
brauchst du, aber auch da

00:58:07.290 --> 00:58:09.330
brauchst du unter Umständen keine so wahnsinnig

00:58:11.010 --> 00:58:13.690
wahnsinnig

00:58:13.690 --> 00:58:15.430
große Rechenleistung für.

00:58:15.650 --> 00:58:18.410
du brauchst die, ja, wenn du

00:58:18.410 --> 00:58:20.530
Forschung im Bereich von Transformer machen willst, dann brauchst

00:58:20.530 --> 00:58:22.250
du halt richtig viel Hauptspeicher und richtig

00:58:22.250 --> 00:58:24.470
fette Leistungen. Aber ich meine, wer macht

00:58:24.470 --> 00:58:25.570
denn sowas? Also so,

00:58:27.090 --> 00:58:28.670
also ich, die Leute, die Werbung,

00:58:29.270 --> 00:58:30.390
die Leute, die

00:58:30.390 --> 00:58:32.390
die Werbung auf die Webseiten

00:58:32.390 --> 00:58:33.050
drücken wollen.

00:58:35.630 --> 00:58:36.390
Da fließt

00:58:36.390 --> 00:58:38.390
doch das ganze Geld rein. Das Geld fließt da rein,

00:58:38.390 --> 00:58:40.410
dass die Leute mehr auf die Werbung

00:58:40.410 --> 00:58:41.890
klicken. Ja, ja,

00:58:42.030 --> 00:58:43.810
ich hab da, also die haben auch,

00:58:44.470 --> 00:58:46.870
Da habe ich auch mal an so einer Maschinen-Competition

00:58:46.870 --> 00:58:48.710
teilgenommen. Da gibt es die französische

00:58:48.710 --> 00:58:50.790
Firma Criteo, oder ich habe jetzt schon wieder

00:58:50.790 --> 00:58:51.410
den Namen vergessen.

00:58:52.950 --> 00:58:54.590
Die machen irgendwie sowas wie

00:58:54.590 --> 00:58:56.610
zum Beispiel Vorhersagen, wie wahrscheinlich ist es, dass

00:58:56.610 --> 00:58:58.430
ein User irgendwie auf

00:58:58.430 --> 00:58:59.910
Werbung klickt oder so.

00:59:00.750 --> 00:59:02.670
Und die Modelle, die da

00:59:02.670 --> 00:59:04.690
aber gewonnen haben, gut, das ist jetzt auch schon lange her, aber

00:59:04.690 --> 00:59:06.570
das war alles total einfach, das war alles

00:59:06.570 --> 00:59:08.290
linear, das war alles so

00:59:08.290 --> 00:59:09.850
Logistic Regression-mäßig.

00:59:11.950 --> 00:59:12.790
Ich bin mal gespannt.

00:59:13.230 --> 00:59:14.150
Ich habe mich ja jetzt mal

00:59:14.150 --> 00:59:41.670
Also ich habe, um da ein bisschen tiefer auch in das Thema für mich einzusteigen, weil ich halt eigentlich immer gerne verstehen will, wie ist das handwerklich gemacht, habe ich mich in so einen Coursera-Kurs eingeschrieben und da kommen natürlich dann diese ganzen Standardteile, unter anderem dann halt auch irgendwelche Recommendation Systems und ich wollte ja ganz kurz irgendwie den Schreibtisch abräumen und alles in die Ecke pfeffern, als dann die Aussage war, dass ja irgendwie so die tollen positiven Beispiele, die sind, wie Netflix dir halt neue Sachen empfiehlt und Amazon.

00:59:41.670 --> 00:59:46.430
Und ich denke mir so, ja, aber das sind doch die Beispiele für, das hilft gerade genau gar nicht.

00:59:47.770 --> 00:59:53.150
Also ich meine, wofür brauche ich Machine Learning, damit mir meine Plattform sagt, du hast gerade einen Schraubenzieher gekauft.

00:59:53.590 --> 00:59:55.570
Ich glaube, du willst einen Schraubenzieher kaufen.

00:59:56.930 --> 01:00:02.750
Also ich habe es ja noch nie in Funktionierend gesehen, dass da irgendwie sinnvolles Zeug rauskam.

01:00:03.130 --> 01:00:10.490
Mich würde wirklich interessieren, wo jemand nachgewiesen hat, dass das was bringt.

01:00:11.630 --> 01:00:13.130
Also vielleicht bin ich auch einfach als Nerd

01:00:13.130 --> 01:00:14.350
so ein bisschen komisch an der Stelle.

01:00:14.430 --> 01:00:17.810
Also ganz wichtig, Recommendation-Systeme,

01:00:18.330 --> 01:00:19.510
das geht gerade besonders gut.

01:00:19.590 --> 01:00:21.670
Einfach die Sachen, die am häufigsten gekauft werden,

01:00:21.770 --> 01:00:23.670
die viralisieren sich dann einfach weiter.

01:00:23.990 --> 01:00:25.770
Das scheint ja auch so funktionieren.

01:00:26.450 --> 01:00:27.050
Naja, also

01:00:27.050 --> 01:00:30.010
das ist jetzt aber auch schon da ganz lange her,

01:00:30.110 --> 01:00:31.590
aber zum Beispiel Netflix hat da ja tatsächlich

01:00:31.590 --> 01:00:33.750
mal einen Preis für ausgelobt.

01:00:34.070 --> 01:00:35.750
Für eben

01:00:35.750 --> 01:00:37.850
Leuten Videos empfehlen.

01:00:39.290 --> 01:00:39.690
Und

01:00:39.690 --> 01:00:41.190
das weiß gar nicht, wann das war.

01:00:41.190 --> 01:00:43.130
das muss, das ist jetzt auch schon über 10 Jahre her,

01:00:43.310 --> 01:00:45.110
oh mein Gott. Und da,

01:00:45.210 --> 01:00:46.730
sie haben da eine Million Dollar drauf

01:00:46.730 --> 01:00:49.130
ausgesetzt und das, was die Leute

01:00:49.130 --> 01:00:51.110
daraus da gemacht haben, war auch sehr

01:00:51.110 --> 01:00:52.450
interessant. Und

01:00:52.450 --> 01:00:55.050
die Verbesserung in dieser,

01:00:55.290 --> 01:00:57.110
in diesem Wettbewerb von, wie

01:00:57.110 --> 01:00:59.050
war das am Anfang oder was hat Netflix

01:00:59.050 --> 01:01:01.330
quasi, sie haben als Baseline auch angegeben,

01:01:01.630 --> 01:01:03.130
was sie momentan verwenden für ein Verfahren

01:01:03.130 --> 01:01:04.970
und wie gut das ist. Und

01:01:04.970 --> 01:01:07.150
das, was dann hinterher gewonnen hat,

01:01:07.210 --> 01:01:09.010
das war schon deutlich besser. Also

01:01:09.010 --> 01:01:10.390
das hat richtig was gebracht.

01:01:11.070 --> 01:01:13.070
Aber ehrlich gesagt, natürlich, es ist immer noch nicht

01:01:13.070 --> 01:01:13.810
wirklich gut.

01:01:15.050 --> 01:01:16.510
Ja, es war so mittelgut, ne?

01:01:16.710 --> 01:01:16.990
Ja.

01:01:19.310 --> 01:01:21.150
Gerade Netflix muss sich halt dann an der Stelle

01:01:21.150 --> 01:01:23.110
auch gefallen lassen, ihr Katalog

01:01:23.110 --> 01:01:24.050
ist halt nicht so groß.

01:01:25.170 --> 01:01:27.530
Also, wenn ich es halt vergleiche,

01:01:27.950 --> 01:01:28.930
auch die

01:01:28.930 --> 01:01:31.090
eingeschränkte Art, wie man es häufig browsen kann,

01:01:31.090 --> 01:01:33.090
dass du gar nicht mehr so richtig

01:01:33.090 --> 01:01:35.170
wirklich strukturiert durch die Kataloge durchkommst,

01:01:35.250 --> 01:01:36.910
sondern immer nur noch nach irgendwelchen

01:01:36.910 --> 01:01:37.550
vor

01:01:37.550 --> 01:01:40.910
gefertigten Kategorien,

01:01:40.990 --> 01:01:42.730
die so ein bisschen merkwürdig sind und dann

01:01:42.730 --> 01:01:44.470
irgendwie so Unterkategorien haben, die

01:01:44.470 --> 01:01:46.050
Netflix irgendwie gefallen,

01:01:46.770 --> 01:01:48.870
dann hilft es mir ja nichts,

01:01:48.970 --> 01:01:50.850
wenn er mir die 20 Filme,

01:01:50.970 --> 01:01:52.690
die er für mich gut findet, mal in der

01:01:52.690 --> 01:01:54.550
und mal in der und mal in der Reihenfolge anzeigt.

01:01:55.130 --> 01:01:56.750
Das ist ja das, was momentan irgendwie

01:01:56.750 --> 01:01:58.530
gefühlt für mich dabei rauskommt, ist

01:01:58.530 --> 01:02:00.750
nach so einer Pandemie

01:02:00.750 --> 01:02:02.550
nach einem Jahr, Netflix ist ja gerade was

01:02:02.550 --> 01:02:04.130
Filme angeht immer ziemlich hintendran,

01:02:05.670 --> 01:02:06.490
dann hast du eh schon alles

01:02:06.490 --> 01:02:08.570
durchgeguckt. Und jetzt

01:02:08.570 --> 01:02:10.610
empfehlen sie dir das, aber halt einmal in der

01:02:10.610 --> 01:02:11.690
und in der und in der Reihenfolge.

01:02:13.370 --> 01:02:14.690
Wie viel Machine Learning brauche ich

01:02:14.690 --> 01:02:16.790
dafür? Ja, es ist

01:02:16.790 --> 01:02:18.730
auch die Frage, ob das eben tatsächlich ein Machine Learning

01:02:18.730 --> 01:02:20.590
Problem ist oder vielleicht doch eher ein User

01:02:20.590 --> 01:02:22.470
Interface Problem. Ich finde das auch total

01:02:22.470 --> 01:02:24.590
schrecklich. Ich habe auch immer das Gefühl,

01:02:24.930 --> 01:02:26.490
ich weiß nicht, auf was sie da optimieren, aber manchmal

01:02:26.490 --> 01:02:28.470
habe ich das Gefühl, sie optimieren darauf, dass man da möglichst

01:02:28.470 --> 01:02:30.590
lange drin rumsucht. Also es ist halt irgendwo

01:02:30.590 --> 01:02:32.590
ein Incentive falsch gesetzt oder irgendein

01:02:33.150 --> 01:02:34.730
KPI geht einfach

01:02:34.730 --> 01:02:36.130
in die falsche Richtung. Es ist halt

01:02:36.130 --> 01:03:02.570
Ja, sie haben eine Variable oder irgendeine Dimension in ihrem Ding drin, wo aus Versehen drauf optimiert wird und es entspricht, und das ist ja sozusagen, als ich angefangen habe, mir so ein bisschen nochmal die mathematischen Grundlagen, bin ich da zwar relativ schnell ausgestiegen, aber so die groben Ideen davon anzugucken, ist mir schon immer mal, so ein bisschen sind mir die nicht vorhandenen Haare zu Berge gestanden,

01:03:02.850 --> 01:03:23.910
weil damit gerade in Tutorials mit anderen Nonchalance über relativ schwer wichtige Entscheidungen über was nehme ich hier, wie mache ich Feature Extraction, wie mache ich das jenes, mal so schnell drüber gebügelt wird mit einer Erklärung, wo ich dann denke von, ja, nee, du verwechselst, also die machen ein Beispiel, worum ging es da?

01:03:23.910 --> 01:03:30.570
Ich glaube, es ging um Feature Extraction und die Ähnlichkeit von Repräsentanten im System.

01:03:32.250 --> 01:03:36.870
Und sie hatten als Beispiel irgendwie Stolz und Vorurteil und irgendwie mit welchen Dimensionen

01:03:36.870 --> 01:03:44.490
und wie man jetzt eigentlich rausfindet, welche Charaktere, wenn sie über diverse Dimensionen abgebildet werden,

01:03:44.570 --> 01:03:50.410
sind eigentlich näher aneinander dran, also sind sich ähnlicher zueinander und gehen darüber hinweg.

01:03:50.410 --> 01:03:52.250
und ich sitze danach da und sage, aber das war doch jetzt gerade

01:03:52.250 --> 01:03:54.230
eben keine Erklärung für etwas, was man

01:03:54.230 --> 01:03:55.190
automatisieren kann.

01:03:56.650 --> 01:03:57.950
Das ist ja, du hast ja

01:03:57.950 --> 01:04:00.110
a posteriori

01:04:00.110 --> 01:04:02.370
einen eigentlichen

01:04:02.370 --> 01:04:30.280
der ohne Menschen laufenden Prozess sinnbildlich auf eine Art erklärt, wo ich sage, das kann der ja gerade nicht, das heißt, was du mir gerade erklärt hast, ist, der macht dann nachher irgendwas draus und du kannst nicht mal mehr nachvollziehen, ob das jetzt wirklich Hand und Fuß hat oder nicht und dann kommt man an so einen Punkt, wie wir es jetzt gerade hatten, von müssen wir jetzt darüber nachdenken, dass da ein Bias im System drin war, den keiner gesehen hat, weil das Ding sich selber irgendwo ein lokales Maximum gesucht hat in der Optimierung und eben aus Versehen darauf optimiert hat,

01:04:30.280 --> 01:04:32.140
dass die User möglichst lange den Katalog

01:04:32.140 --> 01:04:34.280
browsen und möglichst wenig gucken,

01:04:34.720 --> 01:04:36.020
damit Netflix möglichst wenig

01:04:36.020 --> 01:04:37.840
Lizenzgebühren bezahlen muss.

01:04:39.120 --> 01:04:39.960
Ja, das ist auch ein

01:04:39.960 --> 01:04:42.280
Kundenbedingungs-Effekt. Vielleicht ist das eine mögliche Erklärung.

01:04:42.400 --> 01:04:44.220
Und tatsächlich ist das

01:04:44.220 --> 01:04:46.160
ein Phänomen, dass... Ja, ich habe mich tatsächlich

01:04:46.160 --> 01:04:47.760
auf die Nutzungsdauer pro Kunde

01:04:47.760 --> 01:04:50.220
optimiert. Also wie lange gucken

01:04:50.220 --> 01:04:52.120
die Leute? Und wenn du jedes Mal

01:04:52.120 --> 01:04:54.180
10 Minuten extra guckst für eine Suche, gucken die Leute

01:04:54.180 --> 01:04:55.440
die längere Suche länger. Und UI-mäßig würde ich...

01:04:55.440 --> 01:04:58.180
Ich würde dem auch zustimmen, dass es ein UI-Problem ist, im Sinne von

01:04:58.180 --> 01:05:00.240
ich will manchmal einfach bloß den Button haben, zu sagen

01:05:00.760 --> 01:05:02.760
blend doch mal aus diesen ganzen Vorschlägen

01:05:02.760 --> 01:05:04.500
den ganzen Quatsch raus, den ich schon mal geguckt habe.

01:05:04.980 --> 01:05:06.660
Ja, es gibt bestimmte

01:05:06.660 --> 01:05:08.540
Filme, die gucke ich immer wieder. Da muss halt zum

01:05:08.540 --> 01:05:10.440
35. Mal Big Lebowski laufen.

01:05:11.740 --> 01:05:12.600
Aber das ist nicht

01:05:12.600 --> 01:05:14.540
der Standardfall, wenn ich durch den Katalog suche.

01:05:14.620 --> 01:05:16.200
Dann will ich einfach mal alles weghaben.

01:05:16.900 --> 01:05:18.520
Und dass es solche Sachen nicht mehr gibt

01:05:18.520 --> 01:05:20.380
und dass es nur noch über die Recommendation

01:05:20.380 --> 01:05:22.360
läuft.

01:05:22.700 --> 01:05:24.440
Also ich hätte gerne am liebsten einen Film

01:05:24.440 --> 01:05:26.580
angezeigt und zwar genau den, den ich gerade in dem Moment

01:05:26.580 --> 01:05:27.000
gucken will.

01:05:28.420 --> 01:05:29.280
Ja, das geht ja nicht.

01:05:30.240 --> 01:05:35.320
Das verkürzt ja die Komplexität menschlichen Daseins so massiv.

01:05:36.380 --> 01:05:39.560
Naja, aber vielleicht kann der Algorithmus ja sich mit mir irgendwie koppeln

01:05:39.560 --> 01:05:42.740
und irgendwie einen Faktor reinnehmen, dass er versteht, was ich gerade möchte.

01:05:43.500 --> 01:05:47.260
Ich glaube auch nicht, dass er aus meinem historischen Guckverhalten sowas schon wüsste.

01:05:47.260 --> 01:05:50.300
Ja, aber so durch vollständige Information.

01:05:50.900 --> 01:05:51.880
Das ist ja das andere Problem.

01:05:52.240 --> 01:05:56.660
Du kannst ja nur, also wie ist es auch in den Tutorials, bei wem war es?

01:05:56.720 --> 01:05:58.940
Ich glaube, das war bei meinem aktuellen Coursera-Kurs.

01:05:59.500 --> 01:06:03.020
Da war der Vergleich von Machine Learning hat im Prinzip zum Ziel,

01:06:03.680 --> 01:06:07.900
ungefähr das menschliche Lernverhalten, was wir im Alter von vier Jahren haben, nachzubilden.

01:06:09.360 --> 01:06:11.960
Und das würde ich sagen, das kriegen wir ziemlich gut hin.

01:06:13.840 --> 01:06:14.240
Ja.

01:06:14.860 --> 01:06:20.440
Also viele Leute machen ja Witze drüber, dass Machine Learning sich so anstellt wie ein kleines Kind.

01:06:21.180 --> 01:06:25.580
Ja, es gibt ja haufenweise Memes, die immer, ist das ein Brokkoli?

01:06:25.680 --> 01:06:27.180
Nein, das ist kein, doch, das ist ein Brokkoli.

01:06:27.240 --> 01:06:28.520
Was ist das? Es ist kein Brokkoli.

01:06:28.580 --> 01:06:29.300
Doch, das ist ein Brokkoli.

01:06:29.500 --> 01:06:30.640
Na gut, das ist jetzt ein Brokkoli.

01:06:32.380 --> 01:06:42.000
Und gleichzeitig wird dem aber eine ominöse Fähigkeit zugeschrieben,

01:06:42.120 --> 01:06:43.480
die weit über das hinausgeht.

01:06:43.620 --> 01:06:45.260
Also wenn man auf der einen Seite ehrlich sagt und sagt,

01:06:45.340 --> 01:06:48.560
okay, wir versuchen so ein biologisch inspiriertes Lernverhalten

01:06:48.560 --> 01:06:50.420
von einem Vierjährigen und der kann ja was.

01:06:50.520 --> 01:06:52.900
Also das Hirn und das ganze Pattern-Matching, was wir haben

01:06:52.900 --> 01:06:54.940
und dieses, wie trainiere ich das halt an?

01:06:55.540 --> 01:06:57.220
Das ist ja nicht so, dass das nichts kann.

01:06:58.120 --> 01:07:06.740
Aber ich kann halt auch einen Vierjährigen nicht drauf trainieren, mich anzugucken und sich zu fragen, wie geht es mir eigentlich?

01:07:07.180 --> 01:07:10.540
Oder was bräuchte, was würde mir jetzt als Erwachsener eigentlich gut tun?

01:07:11.540 --> 01:07:13.040
Dafür ist ein Vierjähriger halt nicht gemacht.

01:07:14.820 --> 01:07:19.040
Ja, ich glaube auch eher, es ist halt unklar.

01:07:19.740 --> 01:07:25.100
Deswegen sind halt die Erwartungen teilweise vielleicht völlig daneben und zu optimistisch.

01:07:25.560 --> 01:07:41.700
Teilweise aber auch vielleicht zu pessimistisch, dass man glaubt, da geht gar nichts und manche Sachen, es gibt schon sehr beeindruckende Dinge, die man damit auch machen kann und Fortschritte, die da passiert sind. Insofern ist es halt einfach momentan nicht klar, was da überhaupt geht und was passiert. Das werden wir dann halt mit der Zeit irgendwann rausfinden.

01:07:42.060 --> 01:07:57.920
Naja, ich glaube, ein wichtiger Aspekt davon ist ja die Frage, das kommt jetzt aus dem ganzen Thema Komplexität, nutze ich es, um menschliche Kognitionsprozesse zu ersetzen oder zu unterstützen? Also das ist ja Augmentation.

01:07:57.920 --> 01:07:59.740
Ja, ich würde auch augmentieren haben wollen.

01:08:00.400 --> 01:08:03.300
Also es gibt jetzt auch so neue tolle Kontaktlinsen,

01:08:03.400 --> 01:08:05.000
mit denen man sowas augmentieren kann.

01:08:05.160 --> 01:08:05.820
Ja, sehr schön.

01:08:06.400 --> 01:08:08.480
Und durch diese Augmentierung,

01:08:08.560 --> 01:08:09.860
wenn die halt machine learning gestützt ist,

01:08:09.960 --> 01:08:12.160
das ist natürlich schon super cool,

01:08:12.280 --> 01:08:14.620
weil du halt einfach Zusatzinformationen bekommst,

01:08:14.720 --> 01:08:15.640
die du vielleicht sonst nicht hättest.

01:08:15.640 --> 01:08:18.960
Und das ist auf der einen Seite viel leichter,

01:08:19.360 --> 01:08:23.240
es ist ethisch auch viel einfacher zu kontrollieren,

01:08:23.740 --> 01:08:25.940
aber natürlich hängt jedes Startup

01:08:25.940 --> 01:08:27.220
und jeder immer erstmal hin,

01:08:27.280 --> 01:08:31.260
nein, nein, das machen wir hier, wir ersetzen das, wir lösen das Problem komplett.

01:08:31.620 --> 01:08:33.520
Und ich glaube, das ist halt eine massive Sackgasse.

01:08:34.300 --> 01:08:39.380
Also ich habe so ein paar Beispiele, die man immer sieht, ist ja auch dieses Thema Krebszellen erkennen.

01:08:40.660 --> 01:08:43.060
Das ist ja gedacht als Augmentierung.

01:08:43.780 --> 01:08:47.080
Das ist ja nicht dafür gedacht, dass der Arzt das nicht mehr drauf guckt,

01:08:47.080 --> 01:08:55.180
aber das ist halt gedacht, dass wenn du halt eine gewisse Menge schon vorverarbeitete Zellbilder hast,

01:08:55.380 --> 01:09:00.580
auf denen bestimmte Parameter wie irgendwie die Klumpigkeit und der Farbton und die Schärfe von der Umrandung

01:09:00.580 --> 01:09:05.820
und ich glaube es sind so 15, 16 Dimensionen, nach denen das dann auch bewertet und gelabelt wird.

01:09:06.280 --> 01:09:11.420
Und dann kannst du mit einer relativ hohen Konfidenz von irgendwie so 90 Prozent da halt die Sachen erkennen.

01:09:11.420 --> 01:09:18.220
Und wenn ein Arzt natürlich die Unterstützung hat zu sagen, so guck mal, hier hat ein Algorithmus jetzt dir Prozentwerte drangeschrieben und gerankt,

01:09:18.760 --> 01:09:23.980
guck dir mal bitte zuerst die hier an mit besonderer Vorsicht und bei denen bin ich mir unsicher und das da glaube ich ist es übrigens nicht,

01:09:24.720 --> 01:09:36.420
Dann kann der natürlich nochmal anders rangehen, weil er hat einen Sparringspartner, er guckt selber nochmal drauf, was sagt seine professionelle Intuition zu diesem Ding, wo er sagt, das hätte ich irgendwie anders bewertet, nochmal genauer hingucken, ah ja, okay.

01:09:36.620 --> 01:09:50.620
Und dann ist das tatsächlich, das ist Augmentation, das heißt, das Hirn von dem Arzt, der das bewertet, ist weiterhin dran zu arbeiten, wird aber entlastet, irgendwie die komplette Bewertung zu machen, sondern kriegt halt schon mal so ein bisschen Sparring dazu, ist aber, er ist der, der am Steuer sitzt.

01:09:51.120 --> 01:09:52.840
Und das ist aber was anderes, als wenn du halt

01:09:52.840 --> 01:09:55.040
sagst, naja, das Ding läuft auf Vollautomatismus

01:09:55.040 --> 01:09:56.920
und wenn es tief geht, dann muss halt

01:09:56.920 --> 01:09:58.880
jemand irgendwie ein Postmortem

01:09:58.880 --> 01:10:01.140
machen. Im wahrsten Sinne des Wortes.

01:10:04.020 --> 01:10:04.420
Ja.

01:10:04.760 --> 01:10:07.040
Ja, es hat halt viele Wirklichkeiten. Das Problem ist halt,

01:10:07.320 --> 01:10:08.660
dass du halt diese Granularität

01:10:08.660 --> 01:10:10.260
nur durch vollständigere Informationen

01:10:10.260 --> 01:10:12.500
auf dem höheren, ja,

01:10:14.040 --> 01:10:15.180
Treffergrad bekommst, ja.

01:10:15.500 --> 01:10:16.800
Das heißt, wenn du jetzt wirklich irgendwie so eine

01:10:16.800 --> 01:10:18.780
Genschere machen wolltest, die die entsprechenden Teile

01:10:18.780 --> 01:10:20.380
genau an der richtigen Stelle rauszieht,

01:10:20.700 --> 01:10:22.920
dann müsstest du wahrscheinlich relativ hohe Datenmengen

01:10:22.920 --> 01:10:24.920
und relativ hohe Experimente machen.

01:10:25.420 --> 01:10:27.040
Und das Problem beim Machine Learning ist ja irgendwie,

01:10:27.100 --> 01:10:29.600
dass er irgendwie selbstständig irgendwelche Zufallsexperimente macht

01:10:29.600 --> 01:10:32.420
in irgendwelchen Datenpatterns, die wir gar nicht so genau sehen können,

01:10:32.520 --> 01:10:35.040
weil er irgendwie da, weiß ich nicht, binär reinguckt oder so.

01:10:35.600 --> 01:10:38.760
Und dann halt irgendwelche Zufallswerte generiert,

01:10:38.760 --> 01:10:43.820
aus denen er dann irgendwie die wahrscheinlichste Wiederholung bemerkt.

01:10:43.840 --> 01:10:45.060
Das sind ja keine Zufallswerte.

01:10:45.600 --> 01:10:47.000
Das sind keine Zufallswerte.

01:10:47.100 --> 01:10:49.860
Nicht alle Machine Learning Modelle haben irgendwas mit Statistik zu tun.

01:10:49.980 --> 01:10:50.560
Das ist auch nicht so.

01:10:50.700 --> 01:10:52.120
Ja, aber so ein bisschen

01:10:52.120 --> 01:10:52.980
macht es erst mal schon, oder?

01:10:53.660 --> 01:10:55.820
Kommt auf das Modell an. Es gibt sehr unterschiedliche Modelle.

01:10:57.400 --> 01:10:58.120
Okay, dann müssen wir

01:10:58.120 --> 01:10:59.880
das vielleicht nochmal in einer anderen Folge genauer

01:10:59.880 --> 01:11:01.880
auseinandersetzen. Ja, also der Klassiker, wenn du

01:11:01.880 --> 01:11:03.620
über die neuronalen Netze halt nachdenkst,

01:11:03.680 --> 01:11:05.140
mit einer Backpropagation,

01:11:05.700 --> 01:11:08.220
dann ist es halt schon so, das sieht für uns aus,

01:11:08.640 --> 01:11:09.880
ja, der kriegt dann immer,

01:11:09.980 --> 01:11:10.440
der hat sein,

01:11:11.300 --> 01:11:13.920
häufig haben sie ein random

01:11:13.920 --> 01:11:16.120
initialisiertes Modell. Das gibt's schon.

01:11:16.980 --> 01:11:18.060
Und dann ist es aber so,

01:11:18.060 --> 01:11:20.100
dass das an den Gewichten rumdrehen ist halt

01:11:20.100 --> 01:11:22.220
eine deterministische Funktion.

01:11:22.360 --> 01:11:23.040
Das ist, du hast halt,

01:11:23.420 --> 01:11:26.240
du hast ja dein gelabeltes Datenset

01:11:26.240 --> 01:11:28.080
und sagst so, hier kommt mein Input.

01:11:28.820 --> 01:11:30.380
Liebes neuronales Netz, rechne mal.

01:11:30.620 --> 01:11:31.460
Und dann kommt

01:11:31.460 --> 01:11:34.180
dann nachher raus, ich glaube

01:11:34.180 --> 01:11:36.060
der Output ist folgender und dann vergleichst du das

01:11:36.060 --> 01:11:38.000
mit dem gelabelten Output, der zu diesem Beispiel

01:11:38.000 --> 01:11:40.080
gehört hat und daraus ergibt sich ein Fehler.

01:11:40.800 --> 01:11:42.200
Und dann macht man da eine

01:11:42.200 --> 01:11:44.100
Bewertungsfunktion für den Fehler und er

01:11:44.100 --> 01:11:46.160
sagt, okay, damit

01:11:46.160 --> 01:11:48.120
dieses Bild oder dieser Input

01:11:48.120 --> 01:11:50.100
besser vom

01:11:50.100 --> 01:11:52.180
neuronalen Netz verarbeitet würde, hätten die Gewichte

01:11:52.180 --> 01:11:54.080
anders sein müssen. Und er rechnet

01:11:54.080 --> 01:11:55.980
sozusagen von dem Fehler wieder zurück,

01:11:56.080 --> 01:11:57.980
was man an jedem Gewicht ein bisschen drehen

01:11:57.980 --> 01:12:00.040
müsste. Das wird gedämpft, also nicht jedes

01:12:00.040 --> 01:12:01.920
ist es sozusagen so, wie man am Steuer sitzt.

01:12:02.000 --> 01:12:03.880
Wenn du merkst, dein Auto fährt ein bisschen in die falsche Richtung,

01:12:04.260 --> 01:12:05.440
schlägst du ja nicht volle Kanne

01:12:05.440 --> 01:12:08.020
90 Grad in die andere Richtung ein, sondern

01:12:08.020 --> 01:12:09.880
der sagt dann, okay, ich habe hier einen Fehler

01:12:09.880 --> 01:12:12.340
und der Fehler darf jetzt um 1%

01:12:12.340 --> 01:12:13.680
nachsteuern.

01:12:14.920 --> 01:12:16.100
Das heißt, wenn du 100 solche

01:12:16.100 --> 01:12:17.460
Bilder hast, dann haben die vielleicht

01:12:17.460 --> 01:12:19.900
um 30%

01:12:19.900 --> 01:12:21.880
nachgesteuert, aber

01:12:21.880 --> 01:12:24.040
es ist halt nicht so, dass es

01:12:24.040 --> 01:12:25.480
random ist, sondern er rechnet immer aus,

01:12:25.580 --> 01:12:27.980
wie hätte das aussehen müssen für die perfekte

01:12:27.980 --> 01:12:29.980
Lösung, da ich aber nicht nur dieses eine Bild

01:12:29.980 --> 01:12:31.680
bewerten können will, das wäre dann ja overfitting,

01:12:32.580 --> 01:12:34.180
muss ich mich in der

01:12:34.180 --> 01:12:35.680
Anpassung ein bisschen dämpfen

01:12:35.680 --> 01:12:37.500
und jedes Bild, was

01:12:37.500 --> 01:12:39.940
einen kleinen Fehler hat, korrigiert

01:12:39.940 --> 01:12:41.620
das Netz immer wieder ein kleines bisschen nach.

01:12:42.380 --> 01:12:43.960
Aber das ist nicht random an der

01:12:43.960 --> 01:12:46.240
Stelle, das müsste sogar eigentlich deterministisch

01:12:46.240 --> 01:12:46.540
sein.

01:12:47.460 --> 01:12:52.160
Und ich glaube, dass man sie random

01:12:52.160 --> 01:12:54.280
initialisiert macht, glaube ich, ist eine Idee,

01:12:54.420 --> 01:12:56.200
dass man halt versucht, irgendeinen Bias zu

01:12:56.200 --> 01:12:58.180
vermeiden, dass man irgendwie an einem

01:12:58.180 --> 01:13:00.080
Extremwert einsteigt, der das Modell halt

01:13:00.080 --> 01:13:00.760
völlig verzerrt.

01:13:03.780 --> 01:13:06.060
Der Frage nach dem Motto, alles steht auf Null und dann kommt

01:13:06.060 --> 01:13:08.560
er halt nie vom Fleck. Das ist so ein bisschen, wenn du dir an

01:13:08.560 --> 01:13:09.460
Newton denkst,

01:13:09.940 --> 01:13:12.300
wenn du halt eine Newton'sche Approximation

01:13:12.300 --> 01:13:14.120
probierst, da ist es auch

01:13:14.120 --> 01:13:16.100
immer so, dass du schon mal so grob in irgendeine Richtung

01:13:16.100 --> 01:13:18.080
werfen musst, weil wenn du

01:13:18.080 --> 01:13:19.940
halt irgendwie völlig bei Null oder

01:13:19.940 --> 01:13:21.780
einem blöden Punkt

01:13:21.780 --> 01:13:22.960
anfängst, dann

01:13:22.960 --> 01:13:24.940
kommst du halt nie zum Ziel.

01:13:27.700 --> 01:13:27.920
Naja.

01:13:28.320 --> 01:13:29.320
Oder es dauert sehr lange.

01:13:29.880 --> 01:13:30.020
Ja.

01:13:33.020 --> 01:13:33.540
Ja.

01:13:34.540 --> 01:13:35.640
Ich überlege gerade.

01:13:36.720 --> 01:13:37.780
Ja, also ich

01:13:37.780 --> 01:13:39.020
weiß nicht genau.

01:13:40.440 --> 01:13:42.220
Ich würde es eher allgemeiner,

01:13:42.380 --> 01:13:44.080
also auch gerade was das Lernen

01:13:44.080 --> 01:13:46.060
angeht, ich würde sagen Machine Learning oder so was,

01:13:46.100 --> 01:13:50.080
Das versucht es halt, Software hinzubekommen,

01:13:50.200 --> 01:13:51.460
die halt mit Erfahrung besser wird.

01:13:51.580 --> 01:13:53.580
Und ich würde das tatsächlich so allgemein lassen.

01:13:54.100 --> 01:13:56.200
Was das genau tut, kann man gar nicht so sagen.

01:13:56.300 --> 01:13:57.300
Es gibt alles Mögliche.

01:13:57.300 --> 01:14:03.340
Also es gibt auch, also das ist nicht immer in einer bestimmten Art,

01:14:03.540 --> 01:14:05.800
sondern das ist halt so, es gibt die unterschiedlichsten Geschichten.

01:14:07.200 --> 01:14:08.780
Ja, was man halt, ich glaube an einer Stelle,

01:14:09.160 --> 01:14:11.740
ich habe da, der Trick ist ja, das ist ja ein technisches Werkzeug.

01:14:11.840 --> 01:14:13.640
Das kann was, das kann bestimmte andere Sachen nicht.

01:14:14.020 --> 01:14:16.000
Und da habe ich erstmal ja null Probleme mit.

01:14:16.100 --> 01:14:28.100
Und ich glaube, wo wir in der Öffentlichkeit ein Problem haben, ist eben dieses Zuschreiben, es ist so komplex, dass man ja nur über Vereinfachungen, über Bilder darüber reden kann.

01:14:28.100 --> 01:14:40.700
Und wenn die Leute aber dann mit diesen vereinfachten Bildern weiterdenken wollen, dann führt das halt ganz schnell zu logischen Schlussfolgerungsfallen, weil man halt auf Basis dieser Analogien nicht mehr dem technischen Kern gerecht wird.

01:14:42.060 --> 01:15:04.860
Und ich meine, was ich spannend finde, ist erstmal, wenn man diese Unterteilung nochmal anguckt zwischen Supervised und Unsupervised, dann sind gerade die Supervised-Sachen natürlich immer interessant, weil ich kann mir die Extremwerte nochmal angucken und kann schauen, also ich kann es halt evaluieren und ich kann halt prüfen, wenn ich feststelle, ich habe hier komische Fehler drin, die ich so nicht beabsichtigt habe, woran liegt denn das?

01:15:04.860 --> 01:15:06.780
muss ich noch eine Dimension dazunehmen,

01:15:06.860 --> 01:15:08.680
fehlt mir bei einer Dimension irgendwas, ist in meinen

01:15:08.680 --> 01:15:10.880
Eingangsdaten irgendwas komisch, weshalb

01:15:10.880 --> 01:15:13.060
das Training in bestimmten Varianten

01:15:13.060 --> 01:15:14.760
halt in die falsche Richtung läuft

01:15:14.760 --> 01:15:16.580
und kann das dann halt auch immer

01:15:16.580 --> 01:15:18.440
weitertreiben, weil das ist ja was, das kann

01:15:18.440 --> 01:15:20.340
Machine Learning an der Stelle nicht,

01:15:20.480 --> 01:15:22.720
Machine Learning kann ja nicht selber feststellen und

01:15:22.720 --> 01:15:24.680
sagen, du brauchst eigentlich ganz andere

01:15:24.680 --> 01:15:26.060
Eingangsdaten für dein Problem.

01:15:27.040 --> 01:15:28.520
Das kann es dir ja nicht liefern.

01:15:28.520 --> 01:15:31.520
Doch, doch, doch.

01:15:32.400 --> 01:15:34.560
Also, naja, man kann sich schon

01:15:34.560 --> 01:15:36.340
angucken, zum Beispiel man kann sich die Kurve angucken

01:15:36.340 --> 01:15:38.820
mit zunehmenden

01:15:38.820 --> 01:15:40.460
also

01:15:40.460 --> 01:15:42.840
man trägt dann halt

01:15:42.840 --> 01:15:45.120
den Trainingserror

01:15:45.120 --> 01:15:46.760
gegen den Testerror auf

01:15:46.760 --> 01:15:48.100
zum Beispiel, dann kann man sich halt

01:15:48.100 --> 01:15:50.340
je nachdem wie das dann aussieht

01:15:50.340 --> 01:15:53.040
also wenn die beiden Kurven sehr weit auseinander liegen

01:15:53.040 --> 01:15:54.700
also sozusagen wenn man

01:15:54.700 --> 01:15:56.660
wenn der Fehler auf den

01:15:56.660 --> 01:15:58.780
Trainingsdaten gering wird

01:15:58.780 --> 01:16:00.020
aber auf den Testdaten nicht

01:16:00.020 --> 01:16:02.000
und die beiden Kurven sehr weit auseinander liegen

01:16:02.000 --> 01:16:03.400
dann weiß man, man hat zu wenig Trainingsdaten

01:16:03.400 --> 01:16:04.840
oder die falschen

01:16:04.840 --> 01:16:07.140
oder die sind halt nicht gut verteilt.

01:16:07.960 --> 01:16:08.600
Wenn das Ding

01:16:08.600 --> 01:16:11.340
sich über, wenn die Kurven

01:16:11.340 --> 01:16:13.400
anfangen sich zu überschneiden oder so, weiß man halt, okay,

01:16:14.520 --> 01:16:15.120
ja, man

01:16:15.120 --> 01:16:16.640
overfittet gerade zum Beispiel.

01:16:17.900 --> 01:16:19.460
Aber das sind ja Sachen, die werden

01:16:19.460 --> 01:16:21.100
zum Beispiel, da kommen wir in den Bereich, das ist

01:16:21.100 --> 01:16:23.220
Augmented und das ist ein Prozess, den wir als Menschen

01:16:23.220 --> 01:16:25.340
halt begleiten. Das ist halt

01:16:25.340 --> 01:16:27.280
was, also dann diese Entscheidung zu treffen,

01:16:27.420 --> 01:16:29.300
jetzt ist es so weit, dass ich das halt anders machen

01:16:29.300 --> 01:16:31.320
muss, das kann das Modell nicht

01:16:31.320 --> 01:16:33.180
für dich und das Modell kann dir auch nicht sagen, was

01:16:33.180 --> 01:16:34.560
das andere ist, was es braucht.

01:16:36.320 --> 01:16:36.720
Ja.

01:16:38.200 --> 01:16:39.340
Gehen wir nochmal auf die

01:16:39.340 --> 01:16:41.340
Krebszellen. Die haben dann halt da irgendwie

01:16:41.340 --> 01:16:43.260
ihre Dimensionen, wonach sie das Zeug

01:16:43.260 --> 01:16:45.300
bewerten. Und das sind sozusagen die

01:16:45.300 --> 01:16:47.240
Erkenntnisse von, okay, wir nehmen

01:16:47.240 --> 01:16:49.640
mal die Daten, die die Ärzte

01:16:49.640 --> 01:16:51.460
uns gesagt haben, danach bewerten

01:16:51.460 --> 01:16:52.600
sie, ob so ein Ding

01:16:52.600 --> 01:16:55.280
gut ist oder nicht. Da ist ja der Vorteil,

01:16:55.380 --> 01:16:57.200
dass in der Medizin, da ja auch die Prozesse

01:16:57.200 --> 01:16:59.200
gut standardisiert werden, dass man halt

01:16:59.200 --> 01:17:01.140
eben das auch explizieren kann, dass man nicht irgendwie

01:17:01.140 --> 01:17:03.300
fünf Leute fragen müssen, die kratzen sich am Kopf

01:17:03.300 --> 01:17:05.200
und ja, wie mache ich das eigentlich so? Und das ist ja gut

01:17:05.200 --> 01:17:07.240
standardisiert. Und aber ob du das, wenn

01:17:07.240 --> 01:17:09.220
du es im mathematischen Modell dann tatsächlich hast,

01:17:09.600 --> 01:17:11.440
über so ein, dann kannst

01:17:11.440 --> 01:17:13.240
du, ich gehe mit, man kann halt

01:17:13.240 --> 01:17:15.120
über die Evaluation,

01:17:15.440 --> 01:17:17.420
über die Qualitätskriterien

01:17:17.420 --> 01:17:18.800
nachher rausfinden,

01:17:19.280 --> 01:17:20.400
Mist, hier stimmt was nicht.

01:17:21.440 --> 01:17:23.080
Aber zu einer Entscheidung zu kommen,

01:17:23.160 --> 01:17:25.180
zu sagen, du übrigens, wir müssen

01:17:25.180 --> 01:17:27.140
uns noch angucken, ob das Ding Fransen

01:17:27.140 --> 01:17:28.380
hat oder keine Fransen.

01:17:29.600 --> 01:17:31.240
Das kann das, das ist eine semantische

01:17:31.240 --> 01:17:32.780
Ebene, die kann das Ding dir nicht sagen.

01:17:34.400 --> 01:17:35.280
Für das Bell

01:17:35.280 --> 01:17:37.260
sind das ja nur, also ich weiß

01:17:37.260 --> 01:17:37.760
es nicht, also

01:17:37.760 --> 01:17:41.260
Was macht das? Du hast ja

01:17:41.260 --> 01:17:43.300
entscheidend irgendwas da gerade in der Intention, was dir sagt,

01:17:43.480 --> 01:17:45.000
da versteckt sich was Interessantes.

01:17:46.160 --> 01:17:47.160
Finde ich jetzt interessant.

01:17:48.160 --> 01:17:48.620
Ja, also

01:17:48.620 --> 01:17:50.760
ich weiß es nicht, also

01:17:50.760 --> 01:17:51.340
ich

01:17:51.340 --> 01:17:54.540
auch, also

01:17:54.540 --> 01:17:56.420
dass da

01:17:56.420 --> 01:17:59.540
das Problem

01:17:59.540 --> 01:18:01.340
würde ich auch daran, also ich meine, gerade

01:18:01.340 --> 01:18:03.080
in der Medizin, naja gut,

01:18:03.420 --> 01:18:04.720
ist auch wieder so ein weites Feld dann direkt.

01:18:06.480 --> 01:18:07.520
Es ist ja so,

01:18:07.660 --> 01:18:09.520
dass wir momentan ja eigentlich sehr,

01:18:09.640 --> 01:18:11.620
sehr grobe

01:18:11.620 --> 01:18:13.340
Geschichten machen. Also wenn man ja

01:18:13.340 --> 01:18:15.640
so eine Diagnose und dann

01:18:15.640 --> 01:18:17.380
was macht man jetzt irgendwie, wenn man die

01:18:17.380 --> 01:18:18.900
Diagnose hat? Das ist halt

01:18:18.900 --> 01:18:21.440
sehr, sehr, auch was gibt man für

01:18:21.440 --> 01:18:23.300
Medikamente? Das ist ja alles super grob.

01:18:23.940 --> 01:18:25.460
Das ist ja überhaupt nicht angepasst auf

01:18:25.460 --> 01:18:27.660
jemanden individuell oder so.

01:18:28.160 --> 01:18:29.140
Nee, nee, das ist also

01:18:29.140 --> 01:18:57.700
Ja, und wenn jetzt, also man könnte jetzt das aber so angenommen, man nimmt jetzt, weiß ich nicht, irgendwie Daten, was auch immer, alle möglichen Daten, die man jetzt über irgendwie einen Patienten hat und ein Modell sagt einem jetzt, okay, ich nehme jetzt nicht irgendwie zwei Tabletten von der Sorte jeden Tag oder so, morgens oder abends, keine Ahnung, sondern irgendwie wir mixen jetzt folgende Wirkstoffe in der Kombination zusammen und das muss zu den Zeiten.

01:18:58.140 --> 01:19:05.020
Das könnte ein einzelner Arzt ja niemals machen, im Grunde, in der Granularität.

01:19:06.220 --> 01:19:18.560
Ja, nee, aber ich bin ja gerade an einem, ich bin, nochmal ganz kurz zu meinem, da würde ich gerne anknüpfen, aber wo ich halt davor stehe, ist, wenn wir Feature Extraction halt haben,

01:19:21.180 --> 01:19:29.260
Und ja, durchaus teilweise eine Qualität von Features, die eine sehr hohe kognitive Leistung erstmal haben.

01:19:30.140 --> 01:19:33.360
Deswegen geht mir dieses Krebszellenerkennungsding nicht aus dem Weg.

01:19:33.440 --> 01:19:40.440
Es geht ja nicht darum, dass dieses, es ist ja kein Image-Processing, was da stattfindet.

01:19:41.240 --> 01:19:44.960
Sondern, also ich habe ein ganz konkretes Modell gerade, was da steht.

01:19:44.960 --> 01:19:55.960
Und die machen halt kein Image-Processing, sondern die haben Feature-extrahierte Sachen, wo Menschen halt auf so einen Fleck drauf gucken und sagen, der hat folgende Eigenschaften.

01:19:56.000 --> 01:20:00.960
Und das sind sehr, sehr kognitiv hochwertige Eigenschaften.

01:20:01.840 --> 01:20:03.720
Also hat es eine regelmäßige Kante?

01:20:04.240 --> 01:20:06.360
Ist es irgendwie besonders scharf abgegrenzt?

01:20:06.720 --> 01:20:09.900
Hat es irgendwie kleine Ausstülpungen?

01:20:10.000 --> 01:20:11.460
Hat es dies, hat es das, hat es jenes?

01:20:11.460 --> 01:20:23.500
Und das sind die Features, die dann in das Modell reingehen, wo er sagt, okay, bei dem, mit diesen Eigenschaften würde ich sagen, das ist eine Krebszelle, bei dem anderen, das ist es nicht, bei dem nächsten, das ist es und darauf kannst du halt ein Modell trainieren.

01:20:23.820 --> 01:20:38.740
Wenn du sowas trainierst, so ein Modell, und du findest mit den Qualitätskriterien, die du zwischen deinen Tests und deinen Trainingsdaten heraus, dass das gerade nicht passt, ja, dann kannst du das als Signal nehmen, dass du als Mensch hergehen musst und sagen musst, das Modell reicht so nicht, das kann ich so nicht in Betrieb nehmen.

01:20:40.080 --> 01:20:42.600
Aber das Modell selber kann dir nicht sagen,

01:20:43.000 --> 01:20:46.440
ja, überleg dir mal noch mal, ob die Farbe eine Rolle spielt.

01:20:46.780 --> 01:20:48.200
Das kann das Modell halt nicht.

01:20:49.320 --> 01:20:52.720
Da würde ich sagen, also das kommt halt darauf an,

01:20:52.740 --> 01:20:54.160
was man für ein Modell nimmt.

01:20:54.360 --> 01:20:56.920
Aber wenn man jetzt die Bilder nimmt,

01:20:56.980 --> 01:20:59.280
ohne die ganzen menschlich extrahierten Features,

01:20:59.760 --> 01:21:01.260
würde ich sagen, also die Deep Learning-Modelle,

01:21:01.280 --> 01:21:01.880
die machen genau das.

01:21:02.340 --> 01:21:04.180
Die extrahieren die ganzen Features selber.

01:21:06.260 --> 01:21:07.160
Ja, natürlich.

01:21:07.160 --> 01:21:24.040
Aber was sie nicht können, sie können sich nicht ausmalen, welche anderen Daten ihnen helfen würden, noch akkurater zu werden. Also Beispiel, du gibst denen Bilder, das Ding kann dir ja nicht sagen, ey, und wenn du mir ein UV-Bild davon machst, kann ich es besser.

01:21:24.520 --> 01:21:25.300
Ja, nee, gut.

01:21:25.620 --> 01:21:36.380
Das meine ich gerade. Sie können nicht aus ihrem System raus. Sie sind ja selbstreferenziell, sie sind in sich beschränkt. Und das ist das, wo ich meine. Das ist ja das, was ein Vierjähriger kann.

01:21:37.160 --> 01:21:38.540
Du kannst den Vierjährigen trainieren

01:21:38.540 --> 01:21:40.240
und der kann das,

01:21:40.760 --> 01:21:43.540
aber der kann halt häufig nicht die nächste Leistung,

01:21:43.620 --> 01:21:45.560
also der kann noch nicht die nächste Leistung bringen

01:21:45.560 --> 01:21:47.340
und sagen, ja, da draußen in der Welt

01:21:47.340 --> 01:21:49.320
ist ja noch mehr, von dem ich noch nicht weiß,

01:21:50.020 --> 01:21:52.120
was hier vielleicht jetzt passen würde.

01:21:52.300 --> 01:21:54.180
Deswegen, also ja, das kann mit den Daten arbeiten,

01:21:54.280 --> 01:21:56.140
das kann auf den Daten ganz coole Sachen machen

01:21:56.140 --> 01:21:57.560
und auch diese automatischen Feature-Experiment,

01:21:57.580 --> 01:21:58.000
die können alles.

01:21:58.120 --> 01:21:59.480
Aber dann zu sagen,

01:22:00.140 --> 01:22:02.040
du hast mir jetzt Fotos gezeigt von den Zellen,

01:22:03.080 --> 01:22:04.260
ich bräuchte aber mal noch,

01:22:04.340 --> 01:22:05.560
was der die letzte Woche gegessen hat.

01:22:06.920 --> 01:22:08.620
Ja, die Auflösung beim

01:22:08.620 --> 01:22:09.960
Vieljährigen ist auch einfach viel höher.

01:22:11.460 --> 01:22:12.480
Viel mehr Informationen

01:22:12.480 --> 01:22:12.780
drin.

01:22:15.020 --> 01:22:15.580
Viel, viel mehr.

01:22:17.000 --> 01:22:18.420
Keine Ahnung, was Menschen machen,

01:22:18.500 --> 01:22:19.080
weiß ich jetzt nicht.

01:22:20.280 --> 01:22:20.760
Aber

01:22:20.760 --> 01:22:24.460
dass man andere Informationen mit reinnimmt,

01:22:24.460 --> 01:22:25.280
das geht auch.

01:22:25.840 --> 01:22:28.480
Was ich aber sage ist, das Modell kann

01:22:28.480 --> 01:22:30.520
dir nicht sagen, gib mir diese Art

01:22:30.520 --> 01:22:31.340
von anderen Informationen.

01:22:31.500 --> 01:22:32.760
Nö, aber man kann dem alle geben.

01:22:34.820 --> 01:22:36.680
Genau, und ich glaube,

01:22:36.920 --> 01:22:43.180
Aber das ist etwas, ich versuche noch irgendwie zu dem Punkt zu kommen, wo ich da stehe,

01:22:43.180 --> 01:22:49.120
ist, das ist was, wo Machine Learning einfach falsch wahrgenommen wird.

01:22:49.960 --> 01:22:53.680
Das löst irgendwie diese und jene und so Probleme und alles.

01:22:54.000 --> 01:22:58.300
Aber Machine Learning kann nie die eigenen Grenzen erkennen und überschreiten.

01:22:58.880 --> 01:22:59.700
Das geht halt nicht.

01:22:59.960 --> 01:23:03.500
Und das ist für mich dieser Punkt, weswegen Augmentation so wichtig ist,

01:23:03.640 --> 01:23:05.180
dass du dort jemanden hast,

01:23:05.360 --> 01:23:06.900
dass du dort jemanden hast, der

01:23:06.900 --> 01:23:09.020
als körperliche, biologische

01:23:09.020 --> 01:23:11.280
Entität in der Welt ist und in der Lage

01:23:11.280 --> 01:23:12.720
ist, seine eigenen Grenzen

01:23:12.720 --> 01:23:14.660
infrage zu stellen und zu überschreiten.

01:23:17.700 --> 01:23:19.140
Bei der

01:23:19.140 --> 01:23:20.180
Grenzerkennung gehe ich mit.

01:23:20.900 --> 01:23:22.940
Also, dass ein Modell Safety Belts haben kann

01:23:22.940 --> 01:23:24.780
und sagen kann, du, hier komme ich an meine Grenze.

01:23:25.160 --> 01:23:26.820
Ja, aber es kann nichts selber sagen,

01:23:26.880 --> 01:23:28.700
ich mache jetzt ein Forschungsprojekt und finde raus.

01:23:30.240 --> 01:23:31.040
Aber man könnte ja

01:23:31.040 --> 01:23:32.580
vielleicht mehrere Netze miteinander kombinieren.

01:23:32.580 --> 01:23:34.340
ja, dass du einen Cluster von Netzen hast,

01:23:34.540 --> 01:23:36.100
wo ein Netz auf sowas achtet.

01:23:36.360 --> 01:23:38.200
Das ist der Mensch. Das ist nicht das

01:23:38.200 --> 01:23:39.360
Machine Learning, was das macht.

01:23:39.740 --> 01:23:41.580
Ja, also

01:23:41.580 --> 01:23:43.500
ja, keine Ahnung.

01:23:44.120 --> 01:23:45.500
Wir sind halt noch nicht so weit.

01:23:46.180 --> 01:23:48.420
Wenn wir Katzen von Hunden unterscheiden können,

01:23:48.500 --> 01:23:50.040
sind wir total glücklich. Also insofern,

01:23:50.460 --> 01:23:52.020
ja, das mal schauen.

01:23:52.580 --> 01:23:52.960
Keine Ahnung.

01:23:53.680 --> 01:23:56.000
Ich finde, das mit den Katzen von Hunden unterscheiden wäre ein super Schlusswort

01:23:56.000 --> 01:23:57.060
für diese Machine Learning-Folge.

01:23:59.320 --> 01:23:59.760
Ja.

01:24:01.920 --> 01:24:03.280
Hattet ihr noch einen wichtigen Punkt?

01:24:03.360 --> 01:24:04.500
Ich wollte euch nicht ganz so abwägen.

01:24:04.860 --> 01:24:06.580
Ja, tatsächlich

01:24:06.580 --> 01:24:09.460
nee.

01:24:10.620 --> 01:24:11.840
Sonst machen wir einfach das nächste Mal.

01:24:12.080 --> 01:24:13.420
Stimmt, wir sind auch schon eine ganze Zeit dran.

01:24:13.980 --> 01:24:14.840
Ja, und es ist spät.

01:24:15.180 --> 01:24:17.520
Was ich noch spannend fände, wenn vielleicht auch Hörer

01:24:17.520 --> 01:24:18.340
tatsächlich an der Stelle

01:24:18.340 --> 01:24:21.080
wollen, dass wir dem Thema treu bleiben

01:24:21.080 --> 01:24:23.280
und damit nochmal, weil ich glaube, das können wir nochmal

01:24:23.280 --> 01:24:25.000
ein bisschen, wenn ich da tiefer eingegangen bin,

01:24:25.300 --> 01:24:27.560
nochmal ein bisschen praktischer und ein bisschen Python-orientierter

01:24:27.560 --> 01:24:29.600
machen, weil wonach ich tatsächlich momentan

01:24:29.600 --> 01:24:31.820
so ein bisschen Ausschau halte, ist so ein bisschen Spielprojekte.

01:24:31.920 --> 01:24:34.360
nach denen ich mir nämlich mal genau

01:24:34.360 --> 01:24:36.540
das ausprobieren will, so in welchen Anwendungsfällen

01:24:36.540 --> 01:24:38.420
von qualitativer Bewertung

01:24:38.420 --> 01:24:40.380
und für diese ganzen unterschiedlichen Teildisziplinen

01:24:40.380 --> 01:24:41.160
von Machine Learning,

01:24:42.120 --> 01:24:44.060
auf welche Arten von Daten kann man das eigentlich mal

01:24:44.060 --> 01:24:46.440
loslassen, weil da merke

01:24:46.440 --> 01:24:48.340
ich so, jetzt langsam muss ich da mal einfach

01:24:48.340 --> 01:24:50.320
irgendwas selber bauen mit

01:24:50.320 --> 01:24:51.920
den eigenen Daten, die hier so rumfliegen.

01:24:52.560 --> 01:24:53.880
Vielleicht gibt es ja auch noch ein paar Leute, die

01:24:53.880 --> 01:24:56.140
gerade ein Haus gebaut haben und

01:24:56.140 --> 01:24:57.560
ein bisschen Hausautomatisierung machen.

01:24:58.420 --> 01:25:00.220
Wir kommen so nicht. Oh ja, das ist auch noch

01:25:00.220 --> 01:25:02.140
ein großes Thema. Aber dann, genau, schreibt

01:25:02.140 --> 01:25:04.200
das doch an hallo at peißenpodcast.de

01:25:04.200 --> 01:25:06.220
und sagt uns Bescheid, wie ihr das fandet.

01:25:08.080 --> 01:25:08.300
Ja.

01:25:09.100 --> 01:25:10.280
Ja, dann einen wunderschönen

01:25:10.280 --> 01:25:11.960
guten Abend. Bleibt uns gewogen.

01:25:12.740 --> 01:25:13.900
Schön, dass Christian wieder dabei war.

01:25:15.520 --> 01:25:16.140
Gerne, jederzeit.

01:25:17.520 --> 01:25:18.260
Ja, dann

01:25:18.260 --> 01:25:20.220
hören wir uns nächstes Mal. Alles klar.

01:25:20.440 --> 01:25:21.820
Tschüss. Tschüss. Ciao.
