WEBVTT

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

00:00:05.600 --> 00:00:09.140
Das ist ein bisschen wieder eine Laberfolge und zwar über Machine Learning heute.

00:00:09.900 --> 00:00:12.300
Ja, hi Jochen, du bist wieder dabei, hier ist wieder Dominik.

00:00:12.540 --> 00:00:13.560
Ja, hallo Dominik.

00:00:13.680 --> 00:00:15.040
Und heute ist auch der Christian wieder da.

00:00:15.060 --> 00:00:15.860
Christian haben wir auch dabei, ja.

00:00:16.280 --> 00:00:16.980
Hey, willkommen.

00:00:17.920 --> 00:00:18.140
Danke.

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

00:00:25.760 --> 00:00:30.440
Wir haben heute übrigens, wir wollten das ja irgendwann mal anfangen zu sagen, 4. Februar 2021.

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

00:00:37.540 --> 00:00:40.720
Wir hatten in letzter Zeit immer ganz, ganz viel Webentwicklung und so.

00:00:42.500 --> 00:00:44.700
Ja, und wir wägen uns da jetzt mal so ein bisschen.

00:00:45.700 --> 00:00:47.460
So wirklich das Thema haben wir noch nicht.

00:00:47.540 --> 00:00:48.620
Wir haben alle so ein bisschen was mitgebracht.

00:00:48.720 --> 00:00:48.960
Mal schauen.

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

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

00:00:54.000 --> 00:00:56.120
Build-in-Implementierung in Python

00:00:56.120 --> 00:00:58.080
dazu erklären, aber das wird dann eine

00:00:58.080 --> 00:00:59.540
der nächsten Folgen werden.

00:01:00.120 --> 00:01:01.940
Was wir euch aber nochmal fragen wollten, wenn ihr

00:01:01.940 --> 00:01:03.980
Feedback und Kritik und so habt, wie immer an

00:01:03.980 --> 00:01:05.960
hallo.pythonpodcast.de und sagt uns

00:01:05.960 --> 00:01:08.000
nochmal, auf welche Themen ihr so besonders Lust hättet.

00:01:08.400 --> 00:01:09.780
Dann werden wir die auch nochmal mit

00:01:09.780 --> 00:01:11.680
in unsere engere Auswahl nehmen.

00:01:13.060 --> 00:01:13.240
Ja,

00:01:14.080 --> 00:01:15.880
es gibt was Neues, es gibt eine

00:01:15.880 --> 00:01:17.380
mögliche Update von

00:01:17.380 --> 00:01:20.180
Paketen, NumPy, Pandas,

00:01:20.820 --> 00:01:21.900
Pandas auch, MyPy,

00:01:22.100 --> 00:01:24.280
Nein, Pandas nicht. Doch, Pandas tatsächlich

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

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

00:01:28.280 --> 00:01:29.880
gab es jetzt auch letztens irgendwie eine neue,

00:01:30.100 --> 00:01:32.280
größere Version 1.2.

00:01:32.600 --> 00:01:34.280
Ich bin mir nicht ganz sicher, aber tatsächlich

00:01:34.280 --> 00:01:36.440
auch NumPy hat die größte Release,

00:01:36.520 --> 00:01:37.940
also mit den meisten Pull-Requests seit

00:01:37.940 --> 00:01:40.300
x Jahren, jetzt mit

00:01:40.300 --> 00:01:42.120
1.20 und

00:01:42.120 --> 00:01:44.480
JupyterLab

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

00:01:46.380 --> 00:01:48.460
Spacey, also

00:01:48.460 --> 00:01:50.200
die ganze Natural Language Processing

00:01:50.200 --> 00:01:53.920
Geschichte, Version 3 ist jetzt gerade erschienen mit Support für Transformer.

00:01:54.900 --> 00:01:58.800
Also genau, das war mal so das Erste. Ich habe mir mal angeguckt, was ist denn alles Neues passiert, weil ich da auch schon lange nicht mehr draufgeguckt habe.

00:01:59.040 --> 00:02:01.460
Und da ist in letzter Zeit einiges...

00:02:01.460 --> 00:02:06.580
Falls ihr irgendwie tatsächlich mal den Einstieg finden wollt in NumPy und oder Pandas oder schon immer mal ein bisschen tiefer angucken wolltet,

00:02:06.600 --> 00:02:12.580
es gab einige richtig coole YouTube-Tutorials, die ich fand, die ich bis jetzt so die besten nicht kennengelernt habe, von Ben Gorman dazu.

00:02:13.100 --> 00:02:17.020
Und zwar NumPy for Grandmas und Pandas for your Grandpa.

00:02:17.420 --> 00:02:19.180
Okay, das bin ich schon als Panda.

00:02:19.180 --> 00:02:20.580
Ja, eine richtig schöne

00:02:20.580 --> 00:02:23.360
Einführungsserie für die

00:02:23.360 --> 00:02:25.380
beiden Bibliotheken, würde ich sagen, wo man mal so ein bisschen

00:02:25.380 --> 00:02:27.100
schon doch tiefer

00:02:27.100 --> 00:02:28.500
einkommen kann. Das fand ich super.

00:02:30.520 --> 00:02:30.880
Genau.

00:02:31.520 --> 00:02:31.880
Ja.

00:02:34.640 --> 00:02:35.280
Genau, weil wir

00:02:35.280 --> 00:02:37.500
so ein bisschen News machen. Also es gab noch ein paar andere

00:02:37.500 --> 00:02:39.620
Releases auch.

00:02:39.940 --> 00:02:41.540
MyPy, kann man

00:02:41.540 --> 00:02:43.400
dazu was sagen? Also ich weiß nur, das hat jetzt irgendwie

00:02:43.400 --> 00:02:44.560
Support für 3.9.

00:02:46.160 --> 00:02:46.960
Python 3.9.

00:02:49.180 --> 00:02:55.560
Dann gibt es irgendwie für PIP einen neuen Resolver. Hat sich den irgendjemand schon mal angeguckt so ein bisschen?

00:02:55.560 --> 00:02:59.620
Ich hatte drüber gelesen und

00:02:59.620 --> 00:03:01.840
mir nochmal auf die Wiedervorlage

00:03:01.840 --> 00:03:03.180
gepackt.

00:03:03.740 --> 00:03:04.860
Tatsächlich bin ich mit,

00:03:05.880 --> 00:03:07.780
was das Resolving angeht, momentan

00:03:07.780 --> 00:03:09.600
ich bin immer noch

00:03:09.600 --> 00:03:11.580
an dem anderen Ende, äh, umdoktern,

00:03:11.900 --> 00:03:13.320
wie ich irgendwie so

00:03:13.320 --> 00:03:15.200
einmal zusammengestellte Paketlisten

00:03:15.200 --> 00:03:17.460
so fix und fertig durch die Gegend

00:03:17.460 --> 00:03:19.440
verteile. Deswegen hatte ich

00:03:19.440 --> 00:03:20.580
es wieder zur Seite gelegt, aber

00:03:20.580 --> 00:03:23.260
ich merke auch, es hat uns nirgendwo gebissen,

00:03:23.260 --> 00:03:25.360
zumindest. Stand ja so ein kleines Teilchen

00:03:25.360 --> 00:03:27.240
drauf von, man kann noch den alten

00:03:27.240 --> 00:03:29.220
Reserver, glaube ich, aktivieren, wenn einen der neue

00:03:29.220 --> 00:03:31.020
irgendwie Quatsch macht.

00:03:32.100 --> 00:03:32.460
Aber

00:03:32.460 --> 00:03:35.240
nee, erst mal nicht negativ aufgefallen.

00:03:36.980 --> 00:03:37.240
Ja,

00:03:37.500 --> 00:03:39.200
nee, ich merke, ab und zu

00:03:39.200 --> 00:03:41.140
funktioniert das halt irgendwie nicht so richtig und dann

00:03:41.140 --> 00:03:42.920
irgendwie meistens hilft

00:03:42.920 --> 00:03:45.360
irgendwie das Paket, was Ärger macht, nochmal auszukommentieren

00:03:45.360 --> 00:03:47.180
und mal wieder alles neu zu installieren und dann wieder reinzunehmen

00:03:47.180 --> 00:03:47.920
und dann geht es irgendwie wieder.

00:03:48.900 --> 00:03:51.180
Ja, aber ich habe es auch

00:03:51.180 --> 00:03:53.140
eigentlich nicht, also insofern, ich habe es nicht

00:03:53.140 --> 00:03:57.200
und es hat nicht wehgetan, insofern scheint alles halbwegs gut gelaufen zu sein.

00:03:58.040 --> 00:04:00.940
Wobei, wenn du das erzählst, ist das aber genau so ein Fall von

00:04:00.940 --> 00:04:02.640
ja, nee, das kann ich nicht leiden.

00:04:03.480 --> 00:04:06.560
Ja, ja, das ist auch mal ein schlechtes Gefühl, wenn ich so etwas merke.

00:04:07.920 --> 00:04:12.020
Ich spiele halt ein bisschen rum mit so einer Form von Logfiles,

00:04:13.180 --> 00:04:15.460
dass ich halt ein Environment beschreiben kann.

00:04:15.940 --> 00:04:20.480
Ich hatte, glaube ich, an irgendeiner Stelle ja mal das AppEnv erwähnt gehabt,

00:04:20.480 --> 00:04:21.660
was ich benutze, um so

00:04:21.660 --> 00:04:24.660
fertiggebackene Virtual Envs zu erzeugen.

00:04:24.720 --> 00:04:25.340
Klingt nach Poetry.

00:04:27.200 --> 00:04:28.240
So ein bisschen

00:04:28.240 --> 00:04:29.900
das Problem bei Poetry war mir,

00:04:30.160 --> 00:04:31.580
das ist zu viel.

00:04:31.980 --> 00:04:33.960
Das ist einfach zu viel Kram. Ich brauche

00:04:33.960 --> 00:04:35.160
was ganz Kleines.

00:04:36.140 --> 00:04:37.900
Der wichtigste Teil für mich ist,

00:04:39.100 --> 00:04:39.940
wir haben so

00:04:39.940 --> 00:04:42.280
Projekte, wo wir ein Repo haben,

00:04:42.360 --> 00:04:44.220
das auschecken und dann

00:04:44.220 --> 00:04:46.080
bringt das Repo im Prinzip sein

00:04:46.080 --> 00:04:48.160
Logfile mit und das konkrete

00:04:48.160 --> 00:04:50.160
Tool, was da dran hängt,

00:04:50.480 --> 00:04:55.720
und bootstrappt sich mit dem Log-File selber durch ein kleines Bootstrap-Skript, was in dem Repo drin liegt.

00:04:56.220 --> 00:04:59.020
Also Bateau ist bei uns das große Werkzeug, was das benutzt.

00:04:59.660 --> 00:05:04.060
Und dann kannst du dort, dann kann sozusagen jeder, der mit diesem Projekt arbeitet, das Repo auschecken

00:05:04.060 --> 00:05:08.680
und tippt einfach Punkt, Schräg, Schräg, in dem Fall Bateau oder auf irgendwas anderes.

00:05:08.960 --> 00:05:11.480
Du musst gleich nochmal kurz auf Bateau eingehen, gleich.

00:05:12.160 --> 00:05:13.060
Ja, kann ich auch.

00:05:14.640 --> 00:05:19.980
Und dieses Skript, was in dem Repository eingecheckt ist, ist nur ein ganz kleines Bootstrap-Skript,

00:05:19.980 --> 00:05:28.100
zu einem Single-File, was auch über mehrere, mindestens so Python 3.4 oder 3.5 bis hoch zur aktuellsten halt,

00:05:28.420 --> 00:05:34.220
kompatibel ist. Und der ist ein kleiner Wrapper, dass wenn man ihn aufruft, guckt er,

00:05:34.400 --> 00:05:40.340
ob ein funktionierendes Virtual-Env für das Log-File oder halt auch das Requirements-Text-File vorhanden ist.

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

00:05:48.300 --> 00:05:50.120
so einmal durchgerecht wie so ein Exec

00:05:50.120 --> 00:05:52.600
und wenn das aber eben nicht der Fall ist

00:05:52.600 --> 00:05:54.600
oder wenn das Virtual Env kaputt ist oder wenn sich das

00:05:54.600 --> 00:05:57.020
Log-File geändert hat oder wenn du deinen Python-Interpreter

00:05:57.020 --> 00:05:57.660
geändert hast,

00:05:58.940 --> 00:06:00.820
dann erkennt er das und macht in dem

00:06:00.820 --> 00:06:02.580
Moment sofort eine Reinstallation,

00:06:02.720 --> 00:06:04.580
ohne dass du irgendwas tun musst. Du rufst einfach

00:06:04.580 --> 00:06:05.840
wie immer dein Tool auf,

00:06:06.360 --> 00:06:08.400
um zu sagen, ich will das XY machen und dann sagt er

00:06:08.400 --> 00:06:10.440
im schlimmsten Fall, ja Moment, weil

00:06:10.440 --> 00:06:12.420
zum Beispiel ein anderer im Projekt hat was

00:06:12.420 --> 00:06:14.280
committed, weswegen das Log-File sich geändert hat

00:06:14.280 --> 00:06:15.640
und dann zieht er das sofort gerade.

00:06:15.640 --> 00:06:25.360
und dieses Self-Contained-Ding, es ist auch so, dass du kannst dann halt dieses Tool in sieben Projekten benutzen

00:06:25.360 --> 00:06:31.860
und jedes Projekt benutzt seine eigene Versionsliste automatisch und du hast nie eine systemweite Installation dieses Tools,

00:06:32.040 --> 00:06:38.980
sondern das hängt immer konkret an den Projekten dran und das ist ein Use-Case, den habe ich nirgendswo gefunden, der das so abbildet

00:06:38.980 --> 00:06:48.520
und Poetry hatte ich gesehen und das war aber sozusagen, dafür Poetry zu verwenden, wäre viel zu aufwendig geworden, um dieses ganze Self-Bootstrapping irgendwie anzugehen.

00:06:48.600 --> 00:06:56.200
Ich merke, da habe ich auch häufig Gedanken und Ideen, wie ich möchte, dass das funktioniert, wo ich gegen andere Tools nicht mehr ankämpfen möchte.

00:06:56.580 --> 00:07:02.900
So viel Code ist es dann nicht, das selber zu bauen, als dass ich dann einem Riesentool hinterherlaufe, dem man ständig sagen muss, du, ich brauch das aber so oder so.

00:07:02.900 --> 00:07:09.900
und vielleicht, das machst du mit Bato oder das Tool heißt Bato?

00:07:10.280 --> 00:07:16.860
Also dieses Bootstrap-Tool heißt AppEnv, das ist im Prinzip nur eine einzige Datei,

00:07:16.940 --> 00:07:24.160
da gibt es bei uns auf GitHub, GitHub, Flying Circus IO, AppEnv, das ist nur eine einzige

00:07:24.160 --> 00:07:29.720
Python-Datei, die legt man sich in ein Repo und wenn in dem Repo daneben eine Datei liegt,

00:07:29.720 --> 00:07:37.640
und die Requirements Text heißt. Dann passiert folgendes, dann benennt man das Skript so wie das

00:07:37.640 --> 00:07:46.340
eigene Tool. Das muss nicht Bato sein, das kann irgendein Python Package sein, was ein

00:07:46.340 --> 00:07:54.100
Konsolenskript hat, was genauso heißt wie das Skript, was du in deinem Repo ablegst. Und dann

00:07:54.100 --> 00:08:22.800
und installiert alles, was in dem Equipment-Text-File drin steht, in eine geheime Position, also es heißt dann Punkt, dein Tool-Name, Schrägstrich und dann werden da so gehäschte Virtual-Envs drin erzeugt und auch wieder aufgeräumt und ruft im Prinzip dann bloß Punkt da aus dem Virtual-Env bin und dieses Konsol-Skript auf, viel mehr macht er nicht und das ist das App-Env, um so einen Bootstrapping-Mechanismus da einmal abzubilden.

00:08:24.100 --> 00:08:25.980
und Bato ist ein Werkzeug, was das halt benutzt.

00:08:26.100 --> 00:08:28.040
Wir haben so Bato-Projekte, also das ist ein

00:08:28.040 --> 00:08:30.040
Deployment-Werkzeug, ähnlich zu

00:08:30.040 --> 00:08:32.200
Ansible und anderen Tools

00:08:32.200 --> 00:08:34.180
und ein

00:08:34.180 --> 00:08:35.940
Charakter von dem Ding ist halt, wenn du

00:08:35.940 --> 00:08:37.980
Bato-Projekte machst und wir haben

00:08:37.980 --> 00:08:39.760
bei unseren Mitarbeitern halt gerne das,

00:08:40.700 --> 00:08:41.440
die haben 12,

00:08:41.880 --> 00:08:44.040
15, 20 so Projekte rumfliegen, die sie

00:08:44.040 --> 00:08:46.100
jonglieren und jedes davon,

00:08:46.500 --> 00:08:48.160
eins davon hat ein Kunde halt

00:08:48.160 --> 00:08:49.920
mal ein Dreivierteljahr nicht angefasst

00:08:49.920 --> 00:08:52.120
und das ist jetzt auch eine Bato-Version von vor anderthalb Jahren

00:08:52.120 --> 00:08:52.800
oder irgendwas

00:08:52.800 --> 00:08:58.660
und dann will ich nicht überlegen müssen, was muss ich tun, um diese Bateau-Version wieder zum Laufen zu kriegen,

00:08:58.760 --> 00:09:00.880
weil meine letzten drei Projekte waren eine andere Bateau-Version.

00:09:01.840 --> 00:09:06.540
Oder ist das Thema halt, nee, du brauchst nur das Repo nehmen, rufst .slash Bateau in dem Repo auf

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

00:09:09.740 --> 00:09:15.040
und du kannst dann halt in dutzenden Projekten halt die Dependencies ordentlich managen,

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

00:09:17.240 --> 00:09:22.620
Das macht er alles im Self-Bootstrapping und auch ohne, dass in deinem System was anderes installiert ist, außer Python selber.

00:09:22.800 --> 00:09:24.900
also da sind auch noch so ein paar Hacks drin

00:09:24.900 --> 00:09:27.040
dass wenn du halt kaputte Pythons

00:09:27.040 --> 00:09:28.400
hast, wie auf Debian üblich

00:09:28.400 --> 00:09:30.300
also Debian macht halt gerne

00:09:30.300 --> 00:09:32.720
Setup-Tools und Pip und so kaputt

00:09:32.720 --> 00:09:34.760
und dass die Standard-Library

00:09:34.760 --> 00:09:36.700
noch nicht mehr geht, da ist überall so dieses

00:09:36.700 --> 00:09:38.820
kleine Wissen drin von, wie ziehe ich mir das

00:09:38.820 --> 00:09:40.820
in so einem Moment halt alles gerade, dass ich mich

00:09:40.820 --> 00:09:42.800
dann aus dem luftleeren Raum, solange ich

00:09:42.800 --> 00:09:44.120
irgendwie einen Python habe

00:09:44.120 --> 00:09:46.620
was nicht nur

00:09:46.620 --> 00:09:48.640
ein bisschen kaputt gemacht wurde

00:09:48.640 --> 00:09:50.980
dass er sich daraus

00:09:50.980 --> 00:09:53.260
bootstrapen kann und dir dann ein vollfunktionelles

00:09:53.260 --> 00:09:54.940
Virtual-Env auch zusammenbaut.

00:09:55.560 --> 00:09:57.360
Und du musst nie

00:09:57.360 --> 00:09:59.120
überlegen, muss ich das Virtual-Env

00:09:59.120 --> 00:10:01.060
jetzt aufräumen oder nicht, sondern er macht es halt

00:10:01.060 --> 00:10:02.740
immer, weil er erkennt, wann das nötig ist.

00:10:05.180 --> 00:10:05.940
Das klingt klasse.

00:10:08.240 --> 00:10:08.500
Ja.

00:10:09.920 --> 00:10:10.780
Ja, ehrlich gesagt,

00:10:10.840 --> 00:10:11.940
hätte man an der Stelle schon

00:10:11.940 --> 00:10:14.520
eigentlich eine ganz gute

00:10:14.520 --> 00:10:15.600
Überleitung zu

00:10:15.600 --> 00:10:18.600
MBDev, also das ist ja so ein

00:10:18.600 --> 00:10:20.500
Ding, mit dem spiele ich in letzter Zeit so ein bisschen

00:10:20.500 --> 00:10:20.740
rum,

00:10:21.460 --> 00:10:24.300
weil das

00:10:24.300 --> 00:10:26.200
im Grunde auch einen Großteil von

00:10:26.200 --> 00:10:27.420
diesen Dingen halt tut.

00:10:27.760 --> 00:10:29.580
Probleme lösen, wie man seine

00:10:29.580 --> 00:10:32.020
MGBoG so einrichtet, dass man damit arbeiten kann, oder?

00:10:32.340 --> 00:10:34.180
Ja, wobei es halt auch

00:10:34.180 --> 00:10:35.900
sehr weit noch in den Bereich reinragt,

00:10:36.100 --> 00:10:38.220
irgendwie, wie kann man

00:10:38.220 --> 00:10:40.100
quasi ein Projekt so konfigurieren,

00:10:40.200 --> 00:10:42.000
dass hinterher dann auch Pakete für PyPI

00:10:42.000 --> 00:10:42.800
rausfallen

00:10:42.800 --> 00:10:46.600
und Dokumentation

00:10:46.600 --> 00:10:47.180
und

00:10:47.180 --> 00:10:50.160
GitHub Actions, wo dann direkt

00:10:50.160 --> 00:10:51.820
irgendwie so ein

00:10:51.820 --> 00:10:53.620
Continuous Integration

00:10:53.620 --> 00:10:55.900
Zeugs halt läuft und...

00:10:55.900 --> 00:10:58.480
Also Jochen, man hört raus, mag Notebooks, Jupyter Notebooks.

00:10:59.340 --> 00:11:00.280
Ja, also ich

00:11:00.280 --> 00:11:01.180
mag die tatsächlich

00:11:01.180 --> 00:11:04.220
und das Ding

00:11:04.220 --> 00:11:06.160
dreht halt quasi

00:11:06.160 --> 00:11:08.100
den Jupyter Notebook Level

00:11:08.100 --> 00:11:09.760
so auf 11, weil

00:11:09.760 --> 00:11:12.020
da schreibt man halt alles in Jupyter

00:11:12.020 --> 00:11:14.100
Notebooks, beziehungsweise das ist halt eigentlich

00:11:14.100 --> 00:11:15.940
so eine Art IDE und

00:11:15.940 --> 00:11:17.980
plus Projektverwaltungsdings irgendwie

00:11:17.980 --> 00:11:20.420
und

00:11:20.420 --> 00:11:22.760
genau, also

00:11:22.760 --> 00:11:25.120
ist halt quasi so die Antwort auf die Frage, was wäre,

00:11:25.540 --> 00:11:27.040
wenn ich alles in Notebooks machen

00:11:27.040 --> 00:11:29.100
wollte und dann kommt so ungefähr das

00:11:29.100 --> 00:11:31.300
dabei raus und das hat einige interessante

00:11:31.300 --> 00:11:33.080
Vorteile, also es hat auch interessante, also

00:11:33.080 --> 00:11:34.980
es ist halt auch ein bisschen komisch natürlich, also wenn man

00:11:34.980 --> 00:11:36.960
jetzt irgendwie eine IDE gewohnt ist

00:11:36.960 --> 00:11:38.920
oder irgendwie auch nur einen

00:11:38.920 --> 00:11:40.940
normalen Texteditor, dann kommt einem das alles

00:11:40.940 --> 00:11:42.900
so ein bisschen eigenartig vor, es gibt ja auch so einen

00:11:42.900 --> 00:11:43.680
sehr populären

00:11:43.680 --> 00:11:46.580
Talk, ich weiß gar nicht wo, der gehalten,

00:11:46.580 --> 00:11:49.080
Joel Gruß, der macht auch so einen

00:11:49.080 --> 00:11:50.060
Data Science

00:11:50.060 --> 00:11:52.960
Podcast, Adversarial Learning, glaube ich,

00:11:53.060 --> 00:11:55.000
heißt der und der macht viele YouTube-Videos

00:11:55.000 --> 00:11:56.980
und der hatte halt so einen Talk

00:11:56.980 --> 00:11:59.040
gehalten, I don't like Notebooks,

00:11:59.900 --> 00:12:00.980
der dann oft

00:12:00.980 --> 00:12:02.040
irgendwie immer rumgeschickt wurde

00:12:02.040 --> 00:12:05.100
und wo er

00:12:05.100 --> 00:12:05.880
sagt, ja, ja, das

00:12:05.880 --> 00:12:09.320
encouraged irgendwie einen Haufen sehr schlechte

00:12:09.320 --> 00:12:10.980
Software-Entwicklungspraktiken

00:12:12.720 --> 00:12:13.220
und

00:12:13.220 --> 00:12:14.880
macht die funktionierenden

00:12:14.880 --> 00:12:16.600
Workflows, die ich habe, halt kaputt und deswegen

00:12:16.600 --> 00:12:18.740
ich finde das alles doof und nicht deterministisch und

00:12:18.740 --> 00:12:20.440
ja,

00:12:20.800 --> 00:12:22.440
in gewisser Weise hat er da so einen Punkt, aber

00:12:22.440 --> 00:12:25.000
man kann da auch überall um diese ganzen

00:12:25.000 --> 00:12:26.280
Ecken drum herum arbeiten

00:12:26.280 --> 00:12:28.700
und manche Sachen sind halt auch sehr, sehr

00:12:28.700 --> 00:12:30.140
cool dabei. Also

00:12:30.140 --> 00:12:32.840
das, was das halt so ein bisschen möglich

00:12:32.840 --> 00:12:33.920
macht, ist

00:12:33.920 --> 00:12:36.120
halt ein Ideal, das

00:12:36.120 --> 00:12:39.000
ich glaube, Knut hatte das irgendwann mal

00:12:39.000 --> 00:12:40.760
1983 oder so aufgeschrieben,

00:12:40.880 --> 00:12:42.620
so von Literate Programming,

00:12:42.620 --> 00:12:44.480
dass man halt sozusagen nicht nur Code

00:12:44.480 --> 00:12:48.460
hinschreibt, sondern halt Dokumentation und Code oder was der Code tun soll, halt irgendwie zusammen.

00:12:49.140 --> 00:12:52.300
Gab es diverse Versuche, das irgendwie hinzukriegen. Ich glaube,

00:12:52.520 --> 00:12:56.380
mit die ersten war der erste Versuch bei Mathematica, aber das ist halt irgendwie nicht so richtig populär

00:12:56.380 --> 00:13:00.760
geworden. Matlab, RStudio,

00:13:00.880 --> 00:13:04.460
geht auch in die Richtung. Und jetzt halt Jupyter Notebooks, damit würde

00:13:04.460 --> 00:13:08.460
ich sagen, hat es in gewisser Weise einen Durchbruch gehabt und wird jetzt

00:13:08.460 --> 00:13:12.460
überall verwendet. Und halt auch JupyterLab nochmal so als komplette IDE irgendwie dafür.

00:13:12.460 --> 00:13:17.840
und genau, da gibt es dann halt auf diesem Talk auch eine Antwort von

00:13:17.840 --> 00:13:21.740
einem, der sich, also derjenige, der sich diese NBDF-Geschichte

00:13:21.740 --> 00:13:25.460
überlegt hat oder dann halt, ja, die dann entstanden ist bei der

00:13:25.460 --> 00:13:29.720
Entwicklung einer Bibliothek, das ist Jeremy Howard, der hat

00:13:29.720 --> 00:13:33.320
der hat halt FastAI,

00:13:33.740 --> 00:13:37.620
die Library, das ist ja auch so ein Wrapper um PyTorch im Grunde,

00:13:37.880 --> 00:13:41.440
damit geschrieben, auch ein Buch darüber geschrieben, das ist auch wahrscheinlich so,

00:13:41.440 --> 00:13:42.940
das empfehlenswerteste

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

00:13:44.760 --> 00:13:47.380
und das Buch ist auch komplett

00:13:47.380 --> 00:13:49.420
mit MBDev geschrieben und

00:13:49.420 --> 00:13:51.260
das ist halt schon

00:13:51.260 --> 00:13:53.100
das hat auch schon sowas sehr sehr cooles

00:13:53.100 --> 00:13:55.360
und der argumentiert halt ja, für mich ist das alles

00:13:55.360 --> 00:13:56.900
viel einfacher, also einmal diese ganzen

00:13:56.900 --> 00:13:58.980
Hässlichkeiten und da muss man leider sagen, es ist halt

00:13:58.980 --> 00:14:00.000
es gibt viele Hässlichkeiten

00:14:00.000 --> 00:14:03.100
es fällt vielen Leuten total schwer

00:14:03.100 --> 00:14:04.800
irgendwie Projekte ordentlich aufzusetzen

00:14:04.800 --> 00:14:07.220
das geht halt alles mehr oder weniger

00:14:07.220 --> 00:14:08.680
weg, wenn die Leute halt mit

00:14:08.680 --> 00:14:10.880
also es gibt ja so ein Template für GitHub zum Beispiel

00:14:10.880 --> 00:14:13.660
wo man einfach sagen kann, okay, erzeuge mir so ein MBDev-Projekt

00:14:13.660 --> 00:14:16.760
oder man sagt MBDev-New irgendwie, ich weiß jetzt gar nicht genau,

00:14:16.840 --> 00:14:20.080
wenn man das installiert hat, dann erzeugt es einem halt

00:14:20.080 --> 00:14:22.720
so eine Projektstruktur, so ähnlich wie

00:14:22.720 --> 00:14:25.080
bei Poetry, PoetryInit oder so,

00:14:25.880 --> 00:14:27.980
nur es macht noch mehr, deutlich mehr

00:14:27.980 --> 00:14:30.380
und ja,

00:14:31.360 --> 00:14:34.900
dann für ihn ist es halt total super, weil

00:14:34.900 --> 00:14:36.880
die Pull-Requests werden halt besser

00:14:36.880 --> 00:14:40.540
und er reviewt die Pull-Requests, da gibt es dann auch ein eigenes Tool für,

00:14:40.540 --> 00:14:42.760
dann direkt in einem Notebook, das halt irgendwo

00:14:42.760 --> 00:14:43.740
auf Binder oder

00:14:43.740 --> 00:14:46.620
irgendwie auf Google Colab oder so gestartet wird.

00:14:46.780 --> 00:14:48.600
Das heißt, ein Pull-Request kommt rein,

00:14:48.680 --> 00:14:50.680
er klickt halt auf einen Link, dann geht das halt in einem eigenen

00:14:50.680 --> 00:14:52.640
Notebook auf, das überhaupt nicht bei ihm läuft, sondern irgendwo

00:14:52.640 --> 00:14:54.720
in der Cloud. Und dann kann er

00:14:54.720 --> 00:14:56.700
halt auch direkt sehen, da das halt so ein bisschen

00:14:56.700 --> 00:14:58.300
Richtung Literate Programming geht,

00:14:58.740 --> 00:15:00.640
was hat sich denn geändert? Also wie

00:15:00.640 --> 00:15:02.900
verändern sich zum Beispiel auch die Visualisierungen

00:15:02.900 --> 00:15:03.720
von irgendwelchen Dingen?

00:15:04.620 --> 00:15:06.340
Das ja ansonsten auch ein Problem wäre, wenn jemand

00:15:06.340 --> 00:15:07.900
ein Pull-Request stellt, wie so

00:15:07.900 --> 00:15:10.420
die Visualisierung von irgendeiner Geschichte

00:15:10.420 --> 00:15:12.480
besser aus. Ja, da muss man

00:15:12.480 --> 00:15:14.300
erstmal, okay, die Daten zusammensammeln,

00:15:14.400 --> 00:15:16.160
das dann irgendwie ausführen und dann sich das angucken,

00:15:16.260 --> 00:15:18.200
oh, dann wo guckt man sich das an,

00:15:18.260 --> 00:15:20.240
wie generiert man so diese Grafik eigentlich, das ist alles

00:15:20.240 --> 00:15:22.320
ziemlich umständlich. Und da

00:15:22.320 --> 00:15:24.180
hat man es halt dann direkt, kann sehen, okay, ah,

00:15:24.240 --> 00:15:26.340
sieht besser aus als vorher, super, Prüfingfest

00:15:26.340 --> 00:15:27.060
akzeptieren, fertig.

00:15:28.420 --> 00:15:30.260
Und auch ein schöner Vorteil ist halt

00:15:30.260 --> 00:15:32.160
Tests und so, die sind da auch direkt mit

00:15:32.160 --> 00:15:34.340
im Notebook. Also bei

00:15:34.340 --> 00:15:36.120
so klassischer Softwareentwicklung mit einer IDE

00:15:36.120 --> 00:15:38.400
oder so hast du dann halt schon auch die Tests

00:15:38.400 --> 00:15:40.400
oft in einem sehr anderen Bereich

00:15:40.400 --> 00:15:43.620
deines Pakets als das der Code, an dem man gerade schreibt.

00:15:44.340 --> 00:15:45.720
Und das ist halt auch immer nicht so richtig.

00:15:45.900 --> 00:15:47.820
Also die liegen halt nicht nah beieinander.

00:15:48.020 --> 00:15:49.460
Während wenn man das jetzt in den Notebook schreibt,

00:15:50.240 --> 00:15:53.720
dann hat man halt irgendwie den eigentlichen Code, der irgendwas tut

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

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

00:16:01.780 --> 00:16:05.820
Und über den Teilen, die halt hinterher in der Library wirklich landen sollen,

00:16:05.820 --> 00:16:09.000
dann steht halt noch irgendwie Export in Markdown oben drüber.

00:16:09.000 --> 00:16:10.380
und dann werden die halt

00:16:10.380 --> 00:16:13.460
in eine Library gepackt.

00:16:13.940 --> 00:16:15.520
Und der ganze Dokumentationscode

00:16:15.520 --> 00:16:17.540
nicht, aber der landet dann durchaus noch in der Dokumentation.

00:16:18.380 --> 00:16:19.120
Und das ist schon

00:16:19.120 --> 00:16:21.160
sehr nett. Also ich finde es auf jeden Fall einen sehr

00:16:21.160 --> 00:16:22.100
interessanten Ansatz.

00:16:22.540 --> 00:16:25.100
Und ja, also

00:16:25.100 --> 00:16:27.240
es ist halt, ist das nicht dann irgendwie so ein

00:16:27.240 --> 00:16:29.160
ewig langes Endlos-Scrolling durch

00:16:29.160 --> 00:16:31.360
irgendwelche Projekte dann durch, von

00:16:31.360 --> 00:16:32.940
Top to Bottom, oder?

00:16:34.580 --> 00:16:35.140
Ja gut, du kannst

00:16:35.140 --> 00:16:36.740
das ja strukturieren. Natürlich können die

00:16:36.740 --> 00:16:40.700
Notebooks können schon lang werden, man kann das so strukturieren, wie man möchte, man kann auch viele

00:16:40.700 --> 00:16:42.440
Notebooks machen. Ist auch so, also

00:16:42.440 --> 00:16:48.020
man kann auch Dinge dann in der Library ändern und die werden dann in die Notebooks zurückgesynct,

00:16:48.560 --> 00:16:52.460
der Code, und umgekehrt halt. Und das ist so,

00:16:52.560 --> 00:16:56.460
man muss, wenn Dinge jetzt, wenn Klassen zum Beispiel sehr groß werden,

00:16:56.500 --> 00:17:00.320
dann muss man nicht alle Methoden direkt an die Klasse dran schreiben,

00:17:00.500 --> 00:17:04.400
sondern man kann das dann auch später machen, dann gibt es dann halt Dekoratoren, die dann

00:17:04.400 --> 00:17:07.420
irgendwie Funktionen als Methoden wieder an Klassen dranklatschen.

00:17:07.780 --> 00:17:10.460
Dem Code, der da hinterher rausfällt, den sieht man das nicht an, aber im Notebook

00:17:10.460 --> 00:17:13.080
ist es dann halt schön übersichtlich, weil die ganzen

00:17:13.080 --> 00:17:16.180
Methoden, die die Klasse groß machen, kommen dann halt erst so nach und nach dazu

00:17:16.180 --> 00:17:17.820
oder können halt auch in einem anderen Notebook dazukommen.

00:17:19.020 --> 00:17:22.440
Also es ist sehr anders, als man normalerweise

00:17:22.440 --> 00:17:24.260
so entwickelt, aber ich finde, das ist interessant.

00:17:25.500 --> 00:17:30.680
Ich muss mich manchmal so ein bisschen zwingen,

00:17:30.720 --> 00:17:32.600
da immer mal so reinzugucken in solche Dinge.

00:17:32.600 --> 00:18:02.580
und Jochen unterhalten sich über die Programmiersprache Python

00:18:02.600 --> 00:18:04.160
für manche Sachen ist das total super.

00:18:06.060 --> 00:18:06.580
Ja, und

00:18:06.580 --> 00:18:08.580
genau, deswegen gucke ich mir das jetzt gerade an und probiere

00:18:08.580 --> 00:18:10.160
das halt auch mal aus. Und

00:18:10.160 --> 00:18:12.460
das ist halt auch sowas, was der

00:18:12.460 --> 00:18:14.420
Autor von Imdingen dann

00:18:14.420 --> 00:18:16.240
in seinem Talk als Antwort auf diesen

00:18:16.240 --> 00:18:18.500
I-don't-like-notebooks-Talk erzählt hat.

00:18:19.020 --> 00:18:20.360
Also er hat immer, er findet,

00:18:20.660 --> 00:18:22.480
es funktioniert immer gut bei Anfängern oder bei

00:18:22.480 --> 00:18:23.420
sehr, sehr erfahrenen Leuten.

00:18:24.420 --> 00:18:26.480
Dazwischen, wenn die Leute so sich eingegroovt

00:18:26.480 --> 00:18:28.160
haben auf ihre Idee oder so, dann

00:18:28.160 --> 00:18:30.120
die sind alle immer sehr skeptisch zuerst.

00:18:31.720 --> 00:18:32.300
Weil das

00:18:32.300 --> 00:18:34.140
natürlich auch immer so eine harte Änderung ist.

00:18:34.360 --> 00:18:35.840
Ich merke das ja auch. Ich bin eigentlich

00:18:35.840 --> 00:18:38.360
VI-User und ich habe jetzt dieses

00:18:38.360 --> 00:18:40.180
Jahr mich mehr mit PyCharm

00:18:40.180 --> 00:18:41.540
beschäftigt.

00:18:41.540 --> 00:18:42.220
Wie es gut ist.

00:18:43.920 --> 00:18:45.340
Und das war schon schmerzhaft.

00:18:45.580 --> 00:18:47.420
Also das war irgendwie nicht...

00:18:47.420 --> 00:18:48.920
Aber muss man ab und zu wohl mal machen,

00:18:49.240 --> 00:18:51.060
um einfach mal zu gucken, wie sind andere

00:18:51.060 --> 00:18:52.080
Entwicklungsumgebungen denn so.

00:18:52.600 --> 00:18:55.180
Ja, diesen Wendel haben wir auch bei uns immer ständig.

00:18:56.060 --> 00:18:57.560
Was ich mich frage, macht ihr gerne

00:18:57.560 --> 00:18:58.280
Notebooks?

00:18:59.500 --> 00:19:00.880
Könntet bestimmt gerne mal Bescheid schreiben,

00:19:00.880 --> 00:19:02.960
uns die E-Mail dazu oder sowas. Also ich benutze zum Beispiel

00:19:02.960 --> 00:19:05.020
Notebooks auch relativ gerne, so zum

00:19:05.020 --> 00:19:07.180
schnellen Debuggen oder sowas.

00:19:07.240 --> 00:19:09.080
Wenn ich irgendwie neue Methoden, neue Funktionen baue,

00:19:09.480 --> 00:19:10.840
dann schreibe ich die gerne erstmal im Notebook,

00:19:10.960 --> 00:19:12.580
zum Beispiel in der Django-Shell dann auch oder so

00:19:12.580 --> 00:19:14.900
und probiere es dann direkt aus, ob es geht und

00:19:14.900 --> 00:19:16.900
muss dann halt nicht mehr das ganze Projekt immer starten und

00:19:16.900 --> 00:19:18.900
dann irgendwie den Web-Server hochfahren und

00:19:18.900 --> 00:19:20.700
dann da die Module oder die Routen aufrufen, sondern

00:19:20.700 --> 00:19:22.240
sehe halt irgendwie direkt, ob diese kleinen Teile

00:19:22.240 --> 00:19:24.660
gehen oder nicht. Das ersetzt so ein bisschen den

00:19:24.660 --> 00:19:26.180
Debugger vielleicht an der Stelle oder so.

00:19:27.300 --> 00:19:28.620
Finde ich sehr handlich.

00:19:28.620 --> 00:19:40.120
und ich habe das Gefühl, dass es ein Phänomen von der Komplexität der Frameworks und der Libraries ist, mit dem man zu tun hat.

00:19:41.280 --> 00:19:44.620
Im Kern ist ja die Handlichkeit, dass es Python eh schon hat.

00:19:46.980 --> 00:19:51.940
Ich habe jetzt in der letzten Zeit häufiger eher mit sehr kleinen Sachen immer wieder zu tun,

00:19:51.940 --> 00:19:58.040
weil viel Systemintegration, viel Minitooling, gerade auch verteilt durch die Gegend,

00:20:28.040 --> 00:20:29.040
verstehen möchte.

00:20:29.820 --> 00:20:32.260
Da merke ich, da bin ich halt häufig in so Systemintegrationssachen

00:20:32.260 --> 00:20:33.720
drin. Und ich habe,

00:20:33.960 --> 00:20:36.080
ich falle irgendwie, so wie du sagst, genau in diesen

00:20:36.080 --> 00:20:37.460
Mittelteil da irgendwie gerade rein.

00:20:38.680 --> 00:20:40.140
Das sozusagen, ja, für so

00:20:40.140 --> 00:20:41.940
einzelne Fälle haben mich die Notebooks immer wieder

00:20:41.940 --> 00:20:44.080
angelockt. Ich sehe

00:20:44.080 --> 00:20:46.060
auch so andere Kollegen für bestimmte Fälle, die immer wieder

00:20:46.060 --> 00:20:48.080
rausholen. Aber wenn

00:20:48.080 --> 00:20:49.920
ich es dann versuche, dann stolpere ich in meinem

00:20:49.920 --> 00:20:51.840
Workflow zu schnell

00:20:51.840 --> 00:20:53.960
drüber, dass es mit irgendwie allen

00:20:53.960 --> 00:20:55.940
anderen Sachen nicht mehr so richtig andockt, die

00:20:55.940 --> 00:20:57.580
ich bei mir so parat liegen habe.

00:20:58.040 --> 00:21:00.160
Also ich würde es zum Beispiel sehr gerne auch wie das Code

00:21:00.160 --> 00:21:02.060
und da kann man die mittlerweile

00:21:02.060 --> 00:21:04.000
sogar integrativ einfach nutzen.

00:21:04.140 --> 00:21:05.580
Das heißt, du hast den einfach nur bei liegen,

00:21:05.980 --> 00:21:08.220
wie den anderen Code, den du auch drin hast, so neben dem Terminal oder sowas

00:21:08.220 --> 00:21:10.120
und kannst halt dann direkt fast

00:21:10.120 --> 00:21:12.020
wie in der Shell irgendwie so nativ so hin und her

00:21:12.020 --> 00:21:13.960
switchen, was schon nett ist.

00:21:15.740 --> 00:21:25.925
Ja Ja interessant Ja Ja das ist schon also ich finde das f mich total Geschichte war dann halt

00:21:26.565 --> 00:21:28.085
also gerade für so Data Science oder Machine Learning

00:21:28.085 --> 00:21:30.065
Geschichten, wo man oft so Schritte hat,

00:21:30.125 --> 00:21:30.685
die lange dauern.

00:21:32.145 --> 00:21:33.945
Und das ist einfach, wenn man das anders

00:21:33.945 --> 00:21:36.085
macht, ist es halt, also kann man

00:21:36.085 --> 00:21:37.885
auch irgendwie, aber das lässt man dann manchmal weg,

00:21:37.945 --> 00:21:39.945
weil man da nicht dran denkt oder so. Man kann natürlich alles irgendwie

00:21:39.945 --> 00:21:41.645
cachen oder versuchen, das halt so

00:21:41.645 --> 00:21:43.945
hinzuschreiben, dass man es auch

00:21:43.945 --> 00:21:45.565
schnell wieder erzeugen kann oder so.

00:21:45.785 --> 00:21:48.725
aber wenn man jetzt irgendwie ein Modell eine Stunde lang trainiert hat oder ein paar Stunden

00:21:48.725 --> 00:21:51.305
und dann macht man irgendeinen blöden Fehler und dann ist halt

00:21:51.305 --> 00:21:54.125
das Ergebnis von einer Stundenberechnung ist halt einfach weg

00:21:54.125 --> 00:21:58.145
das kann einem im Notebook im Grunde nicht so wirklich passieren

00:21:58.145 --> 00:22:00.565
weil dann hat man halt die Zelle, die das irgendwie macht

00:22:00.565 --> 00:22:03.385
ausgeführt und wenn man irgendwo anders einen Fehler macht

00:22:03.385 --> 00:22:06.345
dann macht das halt erstmal nichts kaputt, sondern

00:22:06.345 --> 00:22:09.385
dann ändert man das halt und dann führt man es nochmal aus

00:22:09.385 --> 00:22:12.065
und dann geht es halt weiter und das beschleunigt

00:22:12.065 --> 00:22:15.045
viele Dinge durchaus, auch wenn man gerade mit

00:22:15.045 --> 00:22:16.585
mit großen Datenmengen

00:22:16.585 --> 00:22:19.745
viel macht und die nicht so einfach mal laden kann.

00:22:20.085 --> 00:22:21.965
Also gerade leidvolle

00:22:21.965 --> 00:22:22.985
Geschichten sind da sowas wie

00:22:22.985 --> 00:22:24.705
fürchterliche Hadoop

00:22:24.705 --> 00:22:27.545
Data Lakes oder so, aus denen man die Daten

00:22:27.545 --> 00:22:29.405
nur ganz schlecht wieder rauskriegt und dann hat man es

00:22:29.405 --> 00:22:30.765
irgendwie geschafft, die Daten rauszukriegen

00:22:30.765 --> 00:22:33.545
und dann sind sie gleich wieder weg,

00:22:33.585 --> 00:22:35.005
wenn man irgendwie einen Fehler gemacht hat oder so.

00:22:36.145 --> 00:22:36.345
Also

00:22:36.345 --> 00:22:39.365
das war auch in dem Talk von Joel

00:22:39.365 --> 00:22:41.265
Glus hat dann jemand am Schluss,

00:22:41.265 --> 00:22:42.885
als dann Fragen aus dem Publikum kamen,

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

00:22:45.045 --> 00:23:15.025
und Jochen unterhalten sich über die Programmiersprache Python

00:23:15.045 --> 00:23:19.405
und man kann es auch verstehen, okay, wenn man diesen Fall nie hat, dann okay, aber wenn man ihn hat, dann ist das sehr hilfreich.

00:23:20.805 --> 00:23:29.025
Und interessanterweise triggert aber bei mir dieses Gefühl, und das ist so diese Frage, wer bringt da welchen Erfahrungshintergrund mit,

00:23:29.645 --> 00:23:32.785
bei mir triggert, wenn du beschreibst, du willst nicht aus Versehen irgendwas verlieren,

00:23:33.685 --> 00:23:40.365
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.365 --> 00:24:10.345
und Jochen unterhalten sich über die Programmiersprache Python

00:24:10.365 --> 00:24:40.345
und

00:24:40.365 --> 00:24:42.025
zum Machine Learning rüber.

00:24:43.365 --> 00:24:46.105
Da habe ich gesehen, dass das halt tatsächlich sehr häufig

00:24:46.105 --> 00:24:49.425
auch angeboten wird als Übungsplattform,

00:24:50.025 --> 00:24:53.325
dass du irgendwie vorgefertigte Notebooks eben hast,

00:24:53.985 --> 00:24:58.045
wo du eben halt so ein bisschen erzählerische Erklärungen hast

00:24:58.045 --> 00:25:01.665
und dann Codebeispiele und dann halt auch das Zeug ausführen kannst,

00:25:01.745 --> 00:25:04.245
die Ergebnisse legen und dann halt drinnen rumeditieren,

00:25:04.345 --> 00:25:05.865
um so ein bisschen mit dem Code zu spielen.

00:25:05.865 --> 00:25:14.985
Ich bin mal gespannt, weil ich mich jetzt durch ein paar von den Sachen durcharbeite, wie mir das didaktisch als jemand, der auf der Konsumentenseite davon ist, gefällt

00:25:14.985 --> 00:25:23.585
Weil ich gleichzeitig mich selber dann eher ertappe von, wenn ich das schon so vorgesetzt kriege, ist irgendwie die Hürde

00:25:23.585 --> 00:25:30.325
Oder es gibt ein gewisses Risiko, dass ich schneller durchgehe, als ich es tatsächlich verstehen und konsumieren kann

00:25:30.685 --> 00:25:35.805
Weil es dir vorgaukelt, du hast jetzt auf Play gedrückt und jetzt kam das Ergebnis raus, aha, okay, weiter

00:25:35.805 --> 00:25:38.325
Da ist sozusagen

00:25:38.325 --> 00:25:40.845
vom E-Learning-Faktor

00:25:40.845 --> 00:25:42.905
habe ich das Gefühl, ich muss mich ja eigentlich

00:25:42.905 --> 00:25:45.065
noch viel stärker mit dem Zeug auseinandersetzen

00:25:45.065 --> 00:25:46.685
und jetzt muss ich aber noch weniger machen

00:25:46.685 --> 00:25:49.065
Also ist da so ein Gap von

00:25:49.065 --> 00:25:50.885
was hat mein Hirn noch an Chancen

00:25:50.885 --> 00:25:53.165
es zu verstehen, bin ich gespannt darauf

00:25:53.165 --> 00:25:55.005
Ja, es ist immer blöd, wenn man es

00:25:55.005 --> 00:25:56.805
nicht selber ausprobiert, dann ist es schnell wieder weg

00:25:56.805 --> 00:25:58.985
Ja, eben, also wenn man die Zeilen einfach nur

00:25:58.985 --> 00:25:59.865
nacheinander, viele

00:25:59.865 --> 00:26:02.525
Tutorials oder Videos, die man so sieht

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

00:26:05.125 --> 00:26:06.965
das hilft einem natürlich nicht so richtig, also aber

00:26:06.965 --> 00:26:09.125
was toll ist und was man machen kann

00:26:09.125 --> 00:26:11.245
ist ja selber dann halt irgendwann mal so damit rumzuspielen

00:26:11.245 --> 00:26:13.085
und halt zu gucken, okay, was ist

00:26:13.085 --> 00:26:15.145
denn da jetzt wirklich drin und das kann man halt

00:26:15.145 --> 00:26:17.045
auch einfach... Ich hatte mal so am Anfang ja

00:26:17.045 --> 00:26:18.285
diese Tutorial-Reihe, der erwähnt

00:26:18.285 --> 00:26:21.365
NumPy for Grandmas und Pandas for Grandpas

00:26:21.365 --> 00:26:23.245
der benutzt auch Google Colab

00:26:23.245 --> 00:26:25.205
was ja auch im Prinzip das Notebook ist

00:26:25.205 --> 00:26:26.885
und er hat

00:26:26.885 --> 00:26:28.325
jedes Mal nach jedem Kapitel

00:26:28.325 --> 00:26:30.945
Übungen eingestellt, die ziemlich cool sind

00:26:30.945 --> 00:26:32.425
wo man, weiß ich nicht, die

00:26:32.425 --> 00:26:57.105
anwendung direkt praktisch an so Aufgaben üben kann 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 und 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.105 --> 00:26:59.385
und mindestens ist es natürlich so, dass man

00:26:59.385 --> 00:27:01.645
auf jeden Fall erstmal eine lauffähige Umgebung hat.

00:27:01.965 --> 00:27:03.505
Also, dass man dort erstmal was hat,

00:27:03.585 --> 00:27:05.525
wo man sagt, okay, ich kann

00:27:05.525 --> 00:27:07.165
anfangen mit, also hier gibt es Code,

00:27:07.265 --> 00:27:09.265
der sich selber beweist, dass er erstmal tut.

00:27:09.985 --> 00:27:11.465
Das heißt, ich habe nicht das Problem, wenn ich dann

00:27:11.465 --> 00:27:13.465
irgendwie das Zeug aufbaue

00:27:13.465 --> 00:27:14.365
und

00:27:14.365 --> 00:27:17.425
dann noch nicht so ganz weiß, ob meine Umgebung

00:27:17.425 --> 00:27:18.845
jetzt tatsächlich irgendwie clean ist

00:27:18.845 --> 00:27:21.385
und warum kommt jetzt nicht das raus, was

00:27:21.385 --> 00:27:23.545
rauskommen soll, warum wirft man mir irgendwelche komischen Fehler,

00:27:23.545 --> 00:27:25.125
bin ich schuld oder war die Umgebung schuld?

00:27:25.125 --> 00:27:29.425
und das ist natürlich schön von einem definierten Zustand aus loszulaufen.

00:27:33.225 --> 00:27:36.045
Zumal ich auch eigentlich, eigentlich würde ich halt sagen, mir liegt das total,

00:27:36.645 --> 00:27:42.125
Sachen halt erstmal Ende-Ende zu begreifen, also wirklich mit, wo fängt es hier an,

00:27:42.185 --> 00:27:45.925
was sind die kleinen Bauteile, aus denen sich das zusammensetzt und wie löse ich jetzt ein Problem

00:27:45.925 --> 00:27:49.605
einmal von vorne bis hinten damit durch, das taugt mir total,

00:27:49.605 --> 00:27:53.505
aber trotzdem triggert es mich an so ein paar anderen Punkten.

00:27:55.125 --> 00:27:57.965
Ja, also

00:27:57.965 --> 00:28:00.425
genau, also ich würde sagen, kann man sich mal

00:28:00.425 --> 00:28:00.765
angucken,

00:28:01.265 --> 00:28:04.145
ist ganz nett, ja,

00:28:04.445 --> 00:28:06.445
genau, aber genau, eigentlich ein ganz

00:28:06.445 --> 00:28:08.405
guter Einstieg in dieses Machine Learning Ding.

00:28:08.565 --> 00:28:10.225
Ja, genau, Machine Learning. Ich würde sagen,

00:28:10.305 --> 00:28:12.545
dieses PyTorch Buch, was Jeremy Howard geschrieben hat,

00:28:12.805 --> 00:28:14.145
das kann man sich auf jeden Fall auch

00:28:14.145 --> 00:28:16.565
Wie heißt nochmal dieser Rapper um PyTorch, von dem

00:28:16.565 --> 00:28:18.225
du am Anfang sprichst? Fast.ai

00:28:18.225 --> 00:28:20.105
Fast.ai, okay.

00:28:21.145 --> 00:28:22.265
Könnte man jetzt eigentlich also direkt in

00:28:22.265 --> 00:28:24.105
Colab, also das kann man auf seinem Telefon ausprobieren,

00:28:24.105 --> 00:28:26.245
direkt Python ausführen im Browser und live

00:28:26.245 --> 00:28:27.425
und funktioniert einfach.

00:28:29.025 --> 00:28:29.885
Und dann kann man es importieren.

00:28:29.985 --> 00:28:32.045
Ich glaube, die Sachen sind alle dabei und los geht's, oder?

00:28:33.345 --> 00:28:33.565
Ja.

00:28:34.525 --> 00:28:35.705
Naja, ich weiß jetzt nicht, ob ich das

00:28:35.705 --> 00:28:37.265
auf dem Telefon machen wollte, aber gut.

00:28:38.245 --> 00:28:40.305
Ja. Wobei die Telefone,

00:28:40.465 --> 00:28:42.065
also ich war ja von dem

00:28:42.065 --> 00:28:43.365
Machine Learning Thema angetriggert,

00:28:43.985 --> 00:28:45.385
weil ich

00:28:45.385 --> 00:28:47.945
mich jetzt mal angefangen habe, ein bisschen umzugucken, was da

00:28:47.945 --> 00:28:48.865
so an Hardware auf dem

00:28:48.865 --> 00:28:51.905
Markt eigentlich rumfliegt und in den Libraries

00:28:51.905 --> 00:28:53.625
habe ich zumindest auch gesehen, tatsächlich, dass

00:28:53.625 --> 00:28:55.925
Mobil ist ja definitiv halt

00:28:55.925 --> 00:28:58.085
interessant, weil du hast halt

00:28:58.085 --> 00:29:00.245
inzwischen da überall nochmal irgendwelche Chips drin, die

00:29:00.245 --> 00:29:02.365
Machine Learning Tasks

00:29:02.365 --> 00:29:04.245
halt unterstützen, also ich meine, guck dir den

00:29:04.245 --> 00:29:05.425
bei Apple die ganze

00:29:05.425 --> 00:29:08.345
Reihe, da ist das ja irgendwie völlig klar

00:29:08.345 --> 00:29:10.365
aber auch die Androids haben da

00:29:10.365 --> 00:29:11.885
ja schon Sachen drin

00:29:11.885 --> 00:29:14.685
das ist halt, weil es ist ja

00:29:14.685 --> 00:29:16.265
für mich vom

00:29:16.265 --> 00:29:18.305
Verständnis jetzt mit dem, wie ich reingeputzelt

00:29:18.305 --> 00:29:20.005
bin über die letzten zwei Wochen ist

00:29:20.005 --> 00:29:22.285
vor allem

00:29:22.285 --> 00:29:28.165
dass es halt ein Trade-off ist, dass du mit weniger Strom mehr Punch kriegst.

00:29:28.385 --> 00:29:34.645
Also die Verhältnisse, wenn du deine Algorithmen oder deine Pipelines halt richtig aufziehst,

00:29:35.245 --> 00:29:40.265
speziell nachher für die Inferenz, müssen nachher ein bisschen in die Themen, glaube ich,

00:29:40.305 --> 00:29:44.005
die Stichworte, glaube ich, sortieren und ich habe auch noch welche, wo ich Fragezeichen im Kopf habe.

00:29:44.685 --> 00:29:49.345
Also wenn ich tatsächlich für den Benutzer etwas rechnen will,

00:29:49.345 --> 00:29:52.265
um für ihn ein Ergebnis zu erzeugen

00:29:52.265 --> 00:29:55.705
dann ist da wohl typischerweise

00:29:55.705 --> 00:29:57.345
ein Power Factor von 40 drin

00:29:57.345 --> 00:30:01.465
was ich an Geschwindigkeit rausholen kann im Vergleich zu wenn ich es

00:30:01.465 --> 00:30:04.325
auf einer normalen CPU rechne und gerade

00:30:04.325 --> 00:30:07.585
wenn ich halt ein stromlimitiertes Gerät habe

00:30:07.585 --> 00:30:10.965
wie ein Telefon, dann ist Faktor 40

00:30:10.965 --> 00:30:13.045
halt schon ein massiver Unterschied

00:30:13.045 --> 00:30:15.065
alle beschweren sich, dass sie gerade über den Tag kommen

00:30:15.065 --> 00:30:18.145
wenn ich das halt dann mal 40 mache

00:30:18.145 --> 00:30:19.865
ist der Tag halt schon früh um 8 vorbei

00:30:19.865 --> 00:30:22.725
insofern

00:30:22.725 --> 00:30:23.765
das ist so

00:30:23.765 --> 00:30:25.785
das erste Verständnis von

00:30:25.785 --> 00:30:27.605
warum fangen wir eigentlich da an

00:30:27.605 --> 00:30:29.525
an dieser Ebene drauf rein zu hauen

00:30:29.525 --> 00:30:30.005
und

00:30:30.005 --> 00:30:33.725
das ist halt auch wenn jetzt einige

00:30:33.725 --> 00:30:35.965
CPUs

00:30:35.965 --> 00:30:37.765
natürlich immer mehr Instructions kriegen

00:30:37.765 --> 00:30:39.905
die bestimmte von den Operationen

00:30:39.905 --> 00:30:42.185
die es da braucht, diese ganzen Vektor-Operationen

00:30:42.185 --> 00:30:44.005
in Hardware abbilden

00:30:44.005 --> 00:30:46.905
die fallen einem auch gerne mal auf den Fuß

00:30:46.905 --> 00:30:48.845
also mir ist dann letztens auch aufgefallen, dass

00:30:48.845 --> 00:30:50.905
einige von den etwas älteren

00:30:50.905 --> 00:30:52.365
Libraries, die sich im

00:30:52.365 --> 00:30:54.205
KI

00:30:54.205 --> 00:30:56.805
artigen Bereich bewegen, also

00:30:56.805 --> 00:30:57.705
Tesseract für

00:30:57.705 --> 00:31:01.065
OCA, also Schrifterkennung, Texterkennung

00:31:01.065 --> 00:31:04.505
die haben halt

00:31:04.505 --> 00:31:08.845
zum Beispiel jetzt Unterstützung für diese

00:31:08.845 --> 00:31:10.105
Vector Instructions von Intel

00:31:10.105 --> 00:31:12.905
und das fällt einem auf die Füße, weil du auf einem

00:31:12.905 --> 00:31:17.125
Multicore-System mit diesen großen Instructions von den Vektoren,

00:31:17.285 --> 00:31:21.065
da halt gerne mal die Pipeline für drei, vier Kerne auf einen Schlag mal für

00:31:21.065 --> 00:31:23.805
40, 50 Takte stilllegen kannst.

00:31:25.265 --> 00:31:28.965
Und ja, das durch eine so eine Vektor-Operation erledigen zu lassen,

00:31:29.065 --> 00:31:32.905
ist in Summe schneller als durch viele kleine, aber nichtsdestotrotz

00:31:32.905 --> 00:31:36.425
hat das so Auswirkungen auf die Responsivität des Systems, weil das plötzlich, also

00:31:36.425 --> 00:31:41.265
das Ding frisst Strom, dann geht dir der Turbo-Boost verloren und so Auswirkungen,

00:31:41.265 --> 00:31:43.085
die, wenn du das dann auf einer virtuellen Maschine machst,

00:31:43.545 --> 00:31:45.145
dann müssen halt gegebenenfalls noch drei virtuelle

00:31:45.145 --> 00:31:47.185
Maschinen nebenan auch noch die Luft anhalten,

00:31:47.345 --> 00:31:49.365
weil, boah, das ist aber eine dicke Instruction,

00:31:49.485 --> 00:31:51.365
die kann ich jetzt aber nicht so auf einmal

00:31:51.365 --> 00:31:53.225
rechnen. Und da

00:31:53.225 --> 00:31:55.225
merke ich, okay, ja, das macht Sinn,

00:31:55.505 --> 00:31:57.385
da nochmal über spezialisierte Hardware nachzudenken

00:31:57.385 --> 00:31:59.345
und Algorithmen, die sich genau darauf abbilden

00:31:59.345 --> 00:31:59.565
lassen.

00:32:00.905 --> 00:32:03.305
Ja, ja, ja, dieses Hardware-Thema

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

00:32:05.545 --> 00:32:07.105
hat man da nur

00:32:07.105 --> 00:32:09.085
bei einer speziellen Art von

00:32:09.085 --> 00:32:10.705
Machine Learning-Modellen

00:32:10.705 --> 00:32:12.645
irgendwie diesen Bedarf, halt bei

00:32:12.645 --> 00:32:15.085
neuronalen Netzen,

00:32:15.465 --> 00:32:17.065
bei vielen

00:32:17.065 --> 00:32:18.265
anderen Sachen, also wenn man jetzt irgendwie,

00:32:18.845 --> 00:32:20.445
weiß ich nicht, lineare Modelle macht oder

00:32:20.445 --> 00:32:23.125
Superfactor-Maschinen oder so, da hilft einem das alles nicht so richtig.

00:32:24.565 --> 00:32:25.005
Aber

00:32:25.005 --> 00:32:25.845
eben bei

00:32:25.845 --> 00:32:28.765
neuronalen Netzen halt schon, also alles, was

00:32:28.765 --> 00:32:31.405
irgendwie mit Matrizenmultiplikation

00:32:31.405 --> 00:32:32.625
irgendwie darauf dann

00:32:32.625 --> 00:32:33.865
letztlich irgendwie basiert,

00:32:34.945 --> 00:32:36.905
finde ich das sowieso auch interessant, wie sich jetzt so

00:32:36.905 --> 00:32:38.745
die Hardware im Grunde so

00:32:38.745 --> 00:32:40.965
über die Jahrzehnte so in der Mathematik

00:32:40.965 --> 00:32:42.725
hochhangelt. Also wenn man jetzt sozusagen

00:32:42.725 --> 00:32:44.485
sagt,

00:32:44.705 --> 00:32:46.725
ein Skalar ist irgendwie so ein Tensor,

00:32:46.925 --> 00:32:48.685
Nullterstufe oder sowas, und dann hat man halt irgendwie

00:32:48.685 --> 00:32:50.705
einen Vektor und dann

00:32:50.705 --> 00:32:52.405
irgendwie eine Matrix

00:32:52.405 --> 00:32:54.165
und dann irgendwie

00:32:54.165 --> 00:32:56.345
im allgemeinen Fall

00:32:56.345 --> 00:32:58.305
Tensoren oder

00:32:58.305 --> 00:33:00.745
Arrays mit N-Dimensionen.

00:33:01.665 --> 00:33:02.485
Was ist der Unterschied

00:33:02.485 --> 00:33:04.285
eines Arrays mit N?

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

00:33:07.245 --> 00:33:08.585
Das ist genau

00:33:08.585 --> 00:33:10.165
eigentlich eher, Matrix ist zweidimensional,

00:33:10.325 --> 00:33:12.185
Tensor ist quasi n-dimensional,

00:33:12.745 --> 00:33:14.285
wobei das halt in unterschiedlichen Communities

00:33:14.285 --> 00:33:15.825
auch unterschiedlich genannt wird.

00:33:16.225 --> 00:33:18.325
Wenn ich dann sowas sage, dann sagen

00:33:18.325 --> 00:33:19.585
die Leute, die aus der Mathematik kommen,

00:33:19.685 --> 00:33:22.425
das ist doch Quatsch, dann die Leute, die aus der Physik kommen,

00:33:22.525 --> 00:33:24.705
sagen so, nee, Moment, Tensor, das ist für uns was ganz anderes.

00:33:26.885 --> 00:33:28.345
Ja, da musst du jetzt nochmal genau sagen,

00:33:28.405 --> 00:33:29.525
was denn Tensor für dich ist.

00:33:30.125 --> 00:33:32.445
Also das Konzept

00:33:32.445 --> 00:33:34.205
sozusagen ist eigentlich quasi, du hast einen Skalar,

00:33:34.685 --> 00:33:36.525
das ist halt irgendwie sozusagen ein Ding,

00:33:37.065 --> 00:33:38.085
irgendwie eine Zahl.

00:33:38.585 --> 00:33:42.825
Die nächste Stufe wäre für mich jetzt halt irgendwie ein Vektor.

00:33:43.885 --> 00:33:45.785
Eine Richtung in einem Raum.

00:33:47.025 --> 00:33:52.725
Ja, das ist dann schon eine Interpretation, was das dann nun ist, aber das einfach nur so als Struktur.

00:33:52.945 --> 00:33:54.185
Das nächste wäre halt eine Matrix.

00:33:54.185 --> 00:33:59.205
Also ein Skalar ist ja tatsächlich erstmal bloß ein Wert, der für sich steht.

00:34:00.185 --> 00:34:01.505
Der ist dimensionslos.

00:34:02.925 --> 00:34:06.945
Und ein Vektor kann ja n Dimensionen haben.

00:34:06.945 --> 00:34:09.105
und es ist ein Punkt in einem

00:34:09.105 --> 00:34:10.185
n-dimensionalen Raum.

00:34:10.845 --> 00:34:13.185
Genau, aber da sieht man schon, dass das mit den

00:34:13.185 --> 00:34:15.105
Dimensionen nicht so ganz hinkommt, weil klar, natürlich hat er

00:34:15.105 --> 00:34:17.065
n Dimensionen, aber tatsächlich würde ich jetzt sagen,

00:34:17.445 --> 00:34:19.045
der hat halt irgendwie, ist halt

00:34:19.045 --> 00:34:20.945
eine Liste von Zahlen, hat halt

00:34:20.945 --> 00:34:23.025
als Struktur eine Achse.

00:34:23.265 --> 00:34:24.465
Vielleicht einfach mal ein anderes Wort nehmen.

00:34:24.465 --> 00:34:26.305
Ich kann, ja die Frage ist

00:34:26.305 --> 00:34:28.305
von welchem Ende komme ich halt erstmal, aber

00:34:28.305 --> 00:34:30.285
ich bilde ja mit einem Vektor

00:34:30.285 --> 00:34:32.125
einen Punkt in einem

00:34:32.125 --> 00:34:34.425
n-dimensionalen Raum ab und dafür brauche ich

00:34:34.425 --> 00:34:36.445
eine Liste, weil ich nämlich halt

00:34:36.445 --> 00:35:06.425
und Jochen unterhalten sich über die Programmiersprache Python

00:35:06.445 --> 00:35:08.245
wo man dann halt bestimmte Dinge rechnen kann

00:35:08.245 --> 00:35:10.725
Ja, aber genau, das wäre halt für mich

00:35:10.725 --> 00:35:12.825
die nächste Stufe sozusagen, dass du dann zwei Achsen

00:35:12.825 --> 00:35:14.785
hast, so in zwei unterschiedliche

00:35:14.785 --> 00:35:16.325
Richtungen und das nächste wären dann halt drei

00:35:16.325 --> 00:35:18.785
das hast du dann halt bei Bildern, da hast du dann halt

00:35:18.785 --> 00:35:20.525
nicht nur, also du kannst es ja auch schon

00:35:20.525 --> 00:35:22.725
in der Matrix als Modell

00:35:22.725 --> 00:35:24.385
für ein Bild nehmen, wenn du jetzt nur

00:35:24.385 --> 00:35:26.285
schwarz und weiß hättest oder nur irgendwie

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

00:35:28.805 --> 00:35:30.845
oder so, aber wenn du jetzt Farben

00:35:30.845 --> 00:35:32.245
hast, dann hast du schon Rot, Grün, Blau

00:35:32.245 --> 00:35:35.225
das kannst du jetzt in eine Matrixzelle

00:35:35.225 --> 00:35:37.285
ja schon nicht mehr so richtig reinpacken. Und was man dann

00:35:37.285 --> 00:35:38.945
macht, ist halt, dann geht man halt noch

00:35:38.945 --> 00:35:41.245
eine Achse in die nächste Richtung

00:35:41.245 --> 00:35:42.925
sozusagen. Und dann hast du halt sozusagen

00:35:42.925 --> 00:35:45.085
eine Matrix pro

00:35:45.085 --> 00:35:46.445
Farbkanal sozusagen.

00:35:47.265 --> 00:35:49.145
Das kannst du ja abbilden sozusagen über eine Matrix

00:35:49.145 --> 00:35:50.905
von Vektoren oder über eine

00:35:50.905 --> 00:35:53.025
3D-Dimension statt einem Quadrat

00:35:53.025 --> 00:35:54.285
über einen Würfel. Ja, genau.

00:35:54.505 --> 00:35:56.925
Mit dem Würfel darstellen, glaube ich, das wird schwierig, weil

00:35:56.925 --> 00:35:58.845
was ist dann die vierte Dimension und die fünfte

00:35:58.845 --> 00:36:00.505
und so? Ja, das geht immer weiter.

00:36:01.285 --> 00:36:02.785
Für Masse halt ein Hyperwürfel.

00:36:03.365 --> 00:36:04.445
Genau. Also das

00:36:04.445 --> 00:36:19.505
Tatsächlich, Bilder sind halt im Rechner, also für Machine Learning-Geschichten sind halt einzelne Bilder, sind halt sozusagen Arrays mit drei Achsen, so einer für halt Höhe, Breite.

00:36:19.505 --> 00:36:26.365
Also wenn man die so nebeneinander macht, dann hast du da drei Matrizen nebeneinander und dann hast du hinterher Reihen von Matrizen nebeneinander.

00:36:26.365 --> 00:36:36.385
Ja, aber die legt man übereinander und das spielt auch tatsächlich eine Rolle, dass das halt irgendwie nicht einfach getrennte Dinger sind, sondern dass es halt ein Array ist mit drei Achsen und nicht drei Matrizen.

00:36:37.285 --> 00:36:46.365
Und es ist so, tatsächlich ist es eher sogar so, dass man jetzt ein Trainingsset als ein Array mit vier Achsen begreift, nämlich du hast dann halt auch noch deine Trainingsbeispiele.

00:36:47.785 --> 00:36:48.245
Die Labels.

00:36:50.085 --> 00:36:54.365
Die Labels sind getrennt davon, aber du hast halt sozusagen mehrere Trainingsbeispiele.

00:36:56.365 --> 00:37:18.365
und

00:37:26.365 --> 00:37:27.465
Puppe, dann

00:37:27.465 --> 00:37:31.245
das heißt ein bisschen visualisierbarer.

00:37:31.385 --> 00:37:32.465
Ja, kann man auch.

00:37:33.205 --> 00:37:34.925
Auf jeden Fall. Aber genau.

00:37:35.525 --> 00:37:36.945
Jedenfalls, das wird dann halt immer

00:37:36.945 --> 00:37:39.145
von der

00:37:39.145 --> 00:37:40.485
Struktur her schwieriger.

00:37:41.025 --> 00:37:42.985
Und was ich eigentlich nur am Anfang sagen wollte,

00:37:43.145 --> 00:37:45.065
was ich interessant finde, ist, dass jetzt sozusagen die Hardware

00:37:45.065 --> 00:37:46.565
halt diesen Prozess mitmacht.

00:37:47.945 --> 00:37:49.185
Nämlich halt von

00:37:49.185 --> 00:37:50.445
irgendwie, keine Ahnung,

00:37:50.725 --> 00:37:52.365
Vektorrechnern, wo man halt eine

00:37:52.365 --> 00:37:55.105
Instruktion hat, die dann nicht nur auf einem

00:37:55.105 --> 00:37:57.245
mit einem Skalar quasi rechnet.

00:37:57.525 --> 00:37:59.205
Das ist der Aberkurs, der dann hin und her schiebt.

00:37:59.845 --> 00:38:01.465
Ja, sondern wo man

00:38:01.465 --> 00:38:02.925
die halt auf vielen

00:38:02.925 --> 00:38:05.285
Datendingern dann halt ausführt,

00:38:05.465 --> 00:38:07.285
sozusagen diese Sindiergeschichten oder Vektorrechner halt.

00:38:08.085 --> 00:38:08.665
Und jetzt

00:38:08.665 --> 00:38:11.425
haben wir halt Tensor Cores in den

00:38:11.425 --> 00:38:12.805
Grafikkarten und den GPUs

00:38:12.805 --> 00:38:15.505
und da ist halt sozusagen

00:38:15.505 --> 00:38:16.805
die rechnen dann halt nicht mit Vektoren,

00:38:17.345 --> 00:38:19.245
sondern die rechnen halt direkt mit Matrizen.

00:38:20.165 --> 00:38:21.565
Also klein, so 4x4

00:38:21.565 --> 00:38:22.705
Matrizen, aber immerhin.

00:38:23.145 --> 00:38:24.705
Die machen halt dann in einem Takt schon

00:38:24.705 --> 00:38:27.525
Multiplikation von zwei 4x4-Matrizen,

00:38:28.325 --> 00:38:29.325
wo du normalerweise

00:38:29.325 --> 00:38:31.165
viel, viel mehr Takte brauchst, wenn du das halt

00:38:31.165 --> 00:38:33.545
irgendwie dann halt in Vektor-Operationen

00:38:33.545 --> 00:38:34.305
machst oder halt

00:38:34.305 --> 00:38:37.265
in der CPU als Skalar.

00:38:39.405 --> 00:38:41.485
Und ja, das ist eigentlich ganz faszinierend

00:38:41.485 --> 00:38:43.225
zu sehen, dass das jetzt so gerade mit der Zeit passiert.

00:38:45.565 --> 00:38:47.445
Das ist auch der Hauptgrund dann, warum

00:38:47.445 --> 00:38:49.745
die Grafik-Hardware

00:38:49.745 --> 00:38:51.325
so gerne dafür benutzt wird, weil halt

00:38:51.325 --> 00:38:53.485
die Dimensionalität bei Grafik-Operationen

00:38:53.485 --> 00:38:55.445
schon so hoch gewesen sein muss?

00:38:56.565 --> 00:38:57.325
Ja, weil halt die

00:38:57.325 --> 00:38:59.545
Geschichten, auf die das optimiert ist, die mappen halt super

00:38:59.545 --> 00:39:01.325
auf die Operationen, die man halt für

00:39:01.325 --> 00:39:03.385
Machine Learning braucht. Also diese

00:39:03.385 --> 00:39:05.265
ganzen Matrix-Multiplikationen

00:39:05.265 --> 00:39:07.805
beziehungsweise halt diese Convolution-Operationen,

00:39:07.885 --> 00:39:09.785
die man für diese Convolutional

00:39:09.785 --> 00:39:11.105
Neural Nets halt braucht, die

00:39:11.105 --> 00:39:13.345
sind halt damit super umzusetzen. Die brauchen

00:39:13.345 --> 00:39:15.345
halt auch Spiele und so. Die machen ja auch im Grunde

00:39:15.345 --> 00:39:16.125
solche Sachen.

00:39:17.045 --> 00:39:19.725
Jetzt musst du vielleicht nochmal für all die Hörer erklären, was ein Convolutional

00:39:19.725 --> 00:39:21.585
Neural Network ist. Vielleicht einmal ganz kurz.

00:39:23.485 --> 00:39:27.325
Da hatten wir doch schon mal eine Episode zu, da war das nicht die Folge 8.

00:39:29.165 --> 00:39:30.525
Ehrlich gesagt, ich weiß nicht, ob ich das so

00:39:30.525 --> 00:39:34.785
kann ich jetzt aus dem Stehgreif auch nicht. Also im Grunde, das ist halt eine spezielle Art von

00:39:34.785 --> 00:39:36.665
neuronalen Netz, wo halt

00:39:36.665 --> 00:39:42.765
zwischen den verschiedenen Layern, zwischen den Ebenen irgendwelche Dinge passieren.

00:39:42.785 --> 00:39:46.585
Das eignet sich halt vor allen Dingen, also es ist nicht nur Bildverarbeitung, also man kann das auch

00:39:46.585 --> 00:39:50.305
eindimensional dann halt für Audio machen oder für halt Texte, aber

00:39:50.305 --> 00:39:55.825
Es ist halt eine Operation, man kann sich das, muss man sich eigentlich auch mal im Bild so angucken.

00:39:56.285 --> 00:39:58.405
Ich glaube, das kann man nicht so wirklich gut erklären.

00:39:59.145 --> 00:40:01.305
Kriege ich irgendwie nicht so richtig hin.

00:40:02.045 --> 00:40:05.325
Aber genau, es gibt auch noch andere Arten von Netzen,

00:40:05.425 --> 00:40:09.105
die jetzt gerade eine große Rolle spielen mit Transformer, ist zum Beispiel total heiß gerade.

00:40:10.485 --> 00:40:16.305
Und ja, das funktioniert, es gibt so unterschiedliche Architekturen, TPUs und so, TensorFlow.

00:40:16.305 --> 00:40:18.245
Kurs. Und das

00:40:18.245 --> 00:40:20.105
einzig Blöde ist jetzt, dass außerhalb von

00:40:20.105 --> 00:40:22.305
das eigentliche, was halt

00:40:22.305 --> 00:40:24.245
wirklich doof ist, dass halt Nvidia da so ein Monopol

00:40:24.245 --> 00:40:25.725
auf den ganzen Kram hat. Das ist richtig

00:40:25.725 --> 00:40:28.205
ätzend. Das macht das mit der Hardware auch ziemlich

00:40:28.205 --> 00:40:30.125
schwierig, finde ich, irgendwie. Und gut,

00:40:30.245 --> 00:40:32.105
ich meine, es gibt noch Google und so, die mit ihren TPUs

00:40:32.105 --> 00:40:34.165
dann auch mal eine eigene Geschichte machen, aber da kommt man ja auch nicht

00:40:34.165 --> 00:40:35.965
so richtig ran. So einen Laden kaufen kann man ja auch nicht.

00:40:38.245 --> 00:40:38.545
Und

00:40:38.545 --> 00:40:40.225
tja, das ist

00:40:40.225 --> 00:40:41.665
halt, das macht das Ganze etwas unschön.

00:40:42.285 --> 00:40:43.945
Alles andere ist super toll, aber das ist

00:40:43.945 --> 00:40:45.925
diese ganzen Geschichten sind etwas

00:40:45.925 --> 00:40:47.745
etwas fies und natürlich ist es dann auch schwierig,

00:40:47.865 --> 00:40:50.005
die Dinger zu betreiben, weil wenn man jetzt zu Nvidia geht und sagt,

00:40:50.445 --> 00:40:51.865
also ich habe da so ein Rechenzentrum und da würde ich

00:40:51.865 --> 00:40:52.985
jetzt gerne irgendwie Machine Learning

00:40:52.985 --> 00:40:55.945
Server irgendwie

00:40:55.945 --> 00:40:57.745
mir hinstellen oder so, dann sagen die, ja gern,

00:40:57.825 --> 00:40:59.685
klar, super, hier, nimm doch mal die,

00:41:00.505 --> 00:41:01.605
weiß ich nicht, was haben wir da,

00:41:01.885 --> 00:41:03.245
A100 Karten oder so,

00:41:04.425 --> 00:41:06.165
aber die kosten halt ein Arm und ein Bein.

00:41:07.485 --> 00:41:07.965
Wobei das

00:41:07.965 --> 00:41:10.045
finde ich, also ob die ein Arm und ein Bein kosten,

00:41:10.125 --> 00:41:11.965
kommt es ein bisschen darauf an, du hast halt das Thema,

00:41:11.965 --> 00:41:13.865
du kannst nicht unter einer gewissen Mindestgröße

00:41:13.865 --> 00:41:16.125
einsteigen. Und was mir bei

00:41:16.125 --> 00:41:18.025
Nvidia mit dem Monopol tatsächlich aufgefallen ist,

00:41:18.205 --> 00:41:18.365
die

00:41:18.365 --> 00:41:22.205
segmentieren sich den Markt zurecht.

00:41:22.865 --> 00:41:23.985
Die haben sehr stark

00:41:23.985 --> 00:41:26.025
angefangen über Lizenzverträge zu knebeln.

00:41:27.425 --> 00:41:28.025
Also speziell

00:41:28.025 --> 00:41:28.825
mit dem Thema, dass

00:41:28.825 --> 00:41:31.325
die meisten Puppel-Grafikkarten

00:41:31.325 --> 00:41:34.025
können genau den Kram, den man da

00:41:34.025 --> 00:41:35.605
braucht. Die haben inzwischen auch ausreichend RAM.

00:41:35.785 --> 00:41:37.685
Es ist immer noch die Frage, nach welchen Modellgrößen

00:41:37.685 --> 00:41:39.865
man zu rechnen kann. Und Nvidia will ja

00:41:39.865 --> 00:41:41.445
nun mal die Gamerszene bedienen

00:41:41.445 --> 00:41:43.745
und verbietet dir aber

00:41:43.745 --> 00:41:45.485
halt für die normalen

00:41:45.485 --> 00:41:47.605
Gamer-Grafikkarten. Sie verbieten es

00:41:47.605 --> 00:41:49.705
die Lizenz technisch einfach, sie dafür einzusetzen.

00:41:50.425 --> 00:41:51.465
Sie sagen, auf diesen Karten

00:41:51.465 --> 00:41:53.165
darfst du kein Machine Learning machen.

00:41:54.925 --> 00:41:55.485
So, und dann

00:41:55.485 --> 00:41:57.345
nimmst du bitte unsere,

00:41:57.525 --> 00:41:59.805
die A100 oder halt auch ein paar kleinere oder irgendwas

00:41:59.805 --> 00:42:01.805
und es ist schon krass, was die auf dem Gebrauchtmarkt

00:42:01.805 --> 00:42:03.385
teilweise ziehen. Also es gibt jetzt irgendwie

00:42:03.385 --> 00:42:04.885
bei Azure

00:42:04.885 --> 00:42:07.605
gibt es die K80 unter anderem.

00:42:07.765 --> 00:42:09.745
Die ist jetzt schon ganz schön in die Jahre gekommen,

00:42:09.745 --> 00:42:11.925
glaube ich. Aber die kostet

00:42:11.925 --> 00:42:13.505
das Stück immer noch 2500 Mark

00:42:13.505 --> 00:42:15.505
als eine 1.000 Euro auf dem

00:42:15.505 --> 00:42:16.805
freien Markt.

00:42:17.525 --> 00:42:19.605
Und wenn du mit einer A100 einsteigen willst,

00:42:19.725 --> 00:42:21.845
bist du halt bei so 8.000, 9.000 Euro

00:42:21.845 --> 00:42:22.705
etwa dabei netto.

00:42:23.785 --> 00:42:25.705
Und dann muss man aber im Hintergrund wissen, naja, das ist halt

00:42:25.705 --> 00:42:27.825
schon genau für das High-End-Data-Center-Zeug

00:42:27.825 --> 00:42:29.825
gedacht. Das heißt, eine davon kannst

00:42:29.825 --> 00:42:31.465
du halt im Prinzip auch in sieben Teile

00:42:31.465 --> 00:42:33.485
zerteilen, in virtuelle Maschinen reinpacken,

00:42:33.565 --> 00:42:34.825
kannst die irgendwie in unterschiedliche

00:42:34.825 --> 00:42:47.710
Zuschnitte von irgendwie unterschiedlichen RAM und was du denen an Ressourcen zuweist Also 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

00:42:48.830 --> 00:42:50.590
Aber es braucht halt diese Mindestgröße.

00:42:50.590 --> 00:42:57.030
Und klar, Nvidia verkauft ja halt auch, es gibt so ein A100, irgendwie vier Höheneinheiten, glaube ich,

00:42:57.250 --> 00:42:59.590
Riesenchassis mit acht von den Stück drin oder so.

00:42:59.970 --> 00:43:04.350
Mit den tollen, irgendwie auch noch speziellen Bussystemen, die die Karten untereinander verbinden.

00:43:04.350 --> 00:43:07.630
da kostet halt das Stück nur 250.000 Euro

00:43:07.630 --> 00:43:09.890
und das ist natürlich

00:43:09.890 --> 00:43:11.710
für mal anfangen und irgendwie loslegen

00:43:11.710 --> 00:43:13.670
und gucken, wie experimentiere ich jetzt eigentlich damit

00:43:13.670 --> 00:43:15.950
und du brauchst halt, ich habe noch nicht verstanden

00:43:15.950 --> 00:43:17.730
welche dieser Hardware, welche

00:43:17.730 --> 00:43:19.730
Operationen zum Beispiel in vergleichbarem

00:43:19.730 --> 00:43:20.910
Umfang, vergleichbarem Takt,

00:43:21.070 --> 00:43:23.030
welche Modellgröße, wie viel RAM

00:43:23.030 --> 00:43:24.490
und haben die nochmal

00:43:24.490 --> 00:43:27.470
inzwischen auch 8 Generationen glaube ich

00:43:27.470 --> 00:43:29.590
in Summe am Start, was die

00:43:29.590 --> 00:43:32.050
tatsächlich können, welche Befehlssätze

00:43:32.050 --> 00:43:33.370
das ist alles relativ unübersichtlich

00:44:03.370 --> 00:44:09.450
und da findet man im Netz auch für die ganzen klassischen Frameworks, die man jetzt so hat, wie PyTorch etc. Anleitung,

00:44:09.870 --> 00:44:11.430
wie man die auf den Teilen dann betreibt.

00:44:11.570 --> 00:44:16.690
Das heißt, das ist so für mich gerade der Vektor mal zu gucken, okay, so ein Stück Hardware mal zu kriegen,

00:44:16.690 --> 00:44:20.690
wo man das Zeug tatsächlich sehen kann von, bringt mir das jetzt wirklich was in der Beschleunigung

00:44:21.230 --> 00:44:23.450
oder ist das alles bloß heiße Luft.

00:44:24.790 --> 00:44:25.790
Das ist so ein Ende.

00:44:25.890 --> 00:44:30.190
Ansonsten würde ich ja gerne immer lieber noch ein bisschen AMD kaufen

00:44:30.190 --> 00:44:32.650
und da macht sich aber auch wieder Nvidia

00:44:32.650 --> 00:44:34.770
als Platzhirsch bemerkbar, dass viele von den

00:44:34.770 --> 00:44:36.670
Frameworks dann mit den AMD-Karten

00:44:36.670 --> 00:44:37.570
wieder nichts anfangen können.

00:44:38.770 --> 00:44:39.950
Das ist so ein bisschen, ja.

00:44:41.090 --> 00:44:42.210
Ja, das ist ganz blöd.

00:44:42.710 --> 00:44:44.610
Nicht, dass ich wüsste, dass mit AMD da irgendwas

00:44:44.610 --> 00:44:45.570
zu machen wäre zur Zeit.

00:44:46.670 --> 00:44:48.150
Das kann man ja auch nicht kaufen können.

00:44:48.590 --> 00:44:49.250
Ja, okay.

00:44:50.470 --> 00:44:52.430
Zum einen muss die Playstation mal noch irgendwie

00:44:52.430 --> 00:44:54.470
gefertigt werden, die ziehen da ja

00:44:54.470 --> 00:44:56.450
Kapazität ab und zum anderen die ganzen

00:44:56.450 --> 00:44:58.130
Bitcoin-Miner,

00:44:58.130 --> 00:45:00.410
die scheinen das Zeug schon direkt an der Fabrik

00:45:00.410 --> 00:45:02.570
abzuzweigen. Ich habe ein paar Lieferanten

00:45:02.570 --> 00:45:04.490
gesprochen, die eigentlich gern AMD anbieten würden

00:45:04.490 --> 00:45:06.090
sie meinen, sie haben noch nicht einmal

00:45:06.090 --> 00:45:08.450
irgendeine der Karten jemals in echt gesehen

00:45:08.450 --> 00:45:09.770
Oh, okay, ja gut

00:45:09.770 --> 00:45:12.510
Ja, ja, das ist natürlich auch

00:45:12.510 --> 00:45:14.010
so ein Problem, die Verfügbarkeit

00:45:14.010 --> 00:45:16.590
das ist auch teilweise bei den Nvidia-Karten

00:45:16.590 --> 00:45:17.910
auch immer so ein Problem

00:45:17.910 --> 00:45:19.250
wirklich zu bekommen

00:45:19.250 --> 00:45:21.410
ist manchmal gar nicht so einfach

00:45:21.410 --> 00:45:24.450
Ja, also genau diese

00:45:24.450 --> 00:45:26.290
Marktskipentierungsgeschichte ist halt das, was man dann

00:45:26.290 --> 00:45:28.130
Das ist halt im Grunde die Art,

00:45:28.450 --> 00:45:30.370
wenn man jetzt ein Monopol hat, wie man das

00:45:30.370 --> 00:45:30.890
zu Geld macht.

00:45:33.050 --> 00:45:34.450
IBM hat das früher ja dann auch schon

00:45:34.450 --> 00:45:36.350
gemacht. Man macht dann halt Functional Pricing.

00:45:36.510 --> 00:45:38.570
Man macht den Preis

00:45:38.570 --> 00:45:40.130
halt so, dass es zu dem Markt,

00:45:40.290 --> 00:45:42.310
das man bedienen möchte, passt. Im Grunde können die

00:45:42.310 --> 00:45:43.890
ganzen Dinger mehr oder weniger das Gleiche.

00:45:44.110 --> 00:45:46.190
Die RTX-Karten,

00:45:46.310 --> 00:45:48.450
die können

00:45:48.450 --> 00:45:50.350
im Grunde fast das, also die Gamer-Karten können

00:45:50.350 --> 00:45:51.690
halt im Grunde das Gleiche, was halt

00:45:51.690 --> 00:45:52.970
auch die

00:45:52.970 --> 00:45:56.190
großen Server-Karten

00:45:56.190 --> 00:45:58.250
können. Sie sind halt in bestimmten Operationen

00:45:58.250 --> 00:45:59.990
ein bisschen künstlich langsamer gemacht, damit

00:45:59.990 --> 00:46:01.770
man sie halt jetzt nicht so verwenden kann.

00:46:02.610 --> 00:46:04.110
Übrigens, ich weiß auch nicht, ob das

00:46:04.110 --> 00:46:06.110
irgendwie überhaupt geht. Also in den USA geht's

00:46:06.110 --> 00:46:07.770
vielleicht, aber ob man jetzt in Deutschland

00:46:07.770 --> 00:46:10.010
jemandem, der

00:46:10.010 --> 00:46:12.330
irgendwas abgekauft hat, dann hinterher

00:46:12.330 --> 00:46:14.050
vermieten kann, damit irgendwas zu tun. Ich glaube, das

00:46:14.050 --> 00:46:16.150
geht überhaupt gar nicht. Also auch in die Trends oder

00:46:16.150 --> 00:46:18.090
sowas, schwierig wahrscheinlich.

00:46:20.330 --> 00:46:22.090
Insofern, ja,

00:46:22.350 --> 00:46:24.130
also vielleicht kann man

00:46:24.130 --> 00:46:26.050
das einfach trotzdem machen,

00:46:26.050 --> 00:46:28.150
auf der anderen Seite ist es natürlich auch so, es ist

00:46:28.150 --> 00:46:29.990
nicht so einfach.

00:46:30.670 --> 00:46:32.130
Ja, es ist halt für eine Geschäftsbeziehung

00:46:32.130 --> 00:46:33.170
keine Grundlage, also

00:46:33.170 --> 00:46:36.030
was machst du denn? Damit machst du dich deinem Hersteller

00:46:36.030 --> 00:46:37.970
gegenüber nackig und der sagt

00:46:37.970 --> 00:46:40.090
so, jetzt hast du da dein Produkt aufgebaut und

00:46:40.090 --> 00:46:42.250
wir sollen dich beliefern, wäre aber schade

00:46:42.250 --> 00:46:43.470
wenn du nicht mehr beliefert wirst.

00:46:43.770 --> 00:46:45.010
Ja, gut, klar, natürlich.

00:46:45.730 --> 00:46:48.390
Das ist halt die Frage, ob man das

00:46:48.390 --> 00:46:48.710
machen kann.

00:46:49.710 --> 00:46:51.310
Das ist natürlich so ein Punkt.

00:46:52.350 --> 00:46:54.010
Ja, und ein weiterer Punkt ist halt,

00:46:54.010 --> 00:46:56.210
Es ist schwer, die Dinger zu betreiben nach wie vor.

00:46:57.550 --> 00:47:02.490
Die Leistung steigt zwar auch immer noch, aber auch die Leistungsaufnahme

00:47:02.490 --> 00:47:04.270
steigt halt so einfach an Strom.

00:47:05.850 --> 00:47:10.510
Bei den RTX 3090 Karten,

00:47:10.590 --> 00:47:12.910
die aktuellsten, da musst du halt dann

00:47:12.910 --> 00:47:18.630
die größten Netzteile, das funktioniert nicht mehr,

00:47:18.630 --> 00:47:22.530
du brauchst dann nochmal externen Strom da dran und wenn du dann mehrere in ein Gehäuse steckst,

00:47:22.530 --> 00:47:52.510
und Jochen unterhalten sich über die Programmiersprache Python

00:47:52.530 --> 00:47:54.650
gekauft, beziehungsweise wenn du es dir halt aus irgendeinem

00:47:54.650 --> 00:47:56.530
Cloud-Ding rausziehst, der Unterschied

00:47:56.530 --> 00:47:58.370
dort ist halt, naja, du kannst halt hinklicken,

00:47:58.450 --> 00:48:00.470
dann kostet es zwar auch einen Arm und ein Bein, aber du kannst

00:48:00.470 --> 00:48:02.550
es halt auch jederzeit wieder abschießen und du

00:48:02.550 --> 00:48:04.610
musst nicht fünf Monate lang

00:48:04.610 --> 00:48:05.850
ein Projekt machen, dir zu überlegen,

00:48:06.230 --> 00:48:08.230
was kaufe ich jetzt und wie stecke ich es zusammen, etc.

00:48:08.490 --> 00:48:09.810
Insofern finde ich das schon legitim.

00:48:10.910 --> 00:48:12.310
Aber ich merke halt, also

00:48:12.310 --> 00:48:14.190
man darf das

00:48:14.190 --> 00:48:16.970
nicht unterschätzen, was Flexibilität

00:48:16.970 --> 00:48:18.650
und das ist ja eine

00:48:18.650 --> 00:48:19.670
betriebswirtschaftliche

00:48:19.670 --> 00:48:21.350
Grund,

00:48:21.350 --> 00:48:23.870
Erkenntnis

00:48:23.870 --> 00:48:26.190
Flexibilität oder Optionen

00:48:26.190 --> 00:48:26.890
kosten Geld.

00:48:27.890 --> 00:48:29.570
Die kosten immer irgendwas und

00:48:29.570 --> 00:48:31.410
wenn man Investitionskosten,

00:48:31.410 --> 00:48:32.970
und alle wollen immer alles auf

00:48:32.970 --> 00:48:35.270
möglichst OPEX umlegen heutzutage und

00:48:35.270 --> 00:48:37.450
wenig kapitalintensiv irgendwie vorfinanzieren,

00:48:38.030 --> 00:48:39.510
aber es kann halt manchmal passieren,

00:48:39.630 --> 00:48:41.510
dass wenn du deine Lebensdauer von 12 bis 14,

00:48:41.970 --> 00:48:43.590
äh von 12, 36

00:48:43.590 --> 00:48:45.430
oder 60 Monaten anguckst,

00:48:45.790 --> 00:48:47.390
dann ist das Ding in Summe 3 bis 4,

00:48:47.470 --> 00:48:49.310
5 mal so teuer, als wenn du es dann irgendwann mal

00:48:49.310 --> 00:48:50.970
selber in die Hand genommen hättest.

00:48:50.970 --> 00:48:55.930
Da muss man sich dann fragen, ist das für eine Basislast, ist das halt eigentlich dann irgendwann nicht mehr gerechtfertigt?

00:48:57.770 --> 00:49:01.390
Also ich meine, die A100 fand ich sogar relativ zahm in der Hinsicht noch.

00:49:01.530 --> 00:49:06.870
Also ich gucke gerade nochmal in das Specsheet rein und wenn du halt eine PCIe-Karte von der A100 ziehst

00:49:06.870 --> 00:49:17.630
und die hat, was hat die an RAM drin, 40 Gig und die zieht halt 250 Watt.

00:49:17.630 --> 00:49:19.350
Das ist halt schon noch überschaubar.

00:49:20.030 --> 00:49:21.690
Also da habe ich bei den Netzleinern,

00:49:21.710 --> 00:49:23.210
was wir so typischerweise Zeug verbauen,

00:49:24.030 --> 00:49:25.410
ich würde ja in so einer Hinsicht halt auch

00:49:25.410 --> 00:49:27.510
weniger gucken, irgendwie eine Karre

00:49:27.510 --> 00:49:29.550
möglichst voll zu machen, sondern

00:49:29.550 --> 00:49:31.250
mehr zuzusehen, dass man halt irgendwie dann

00:49:31.250 --> 00:49:33.550
in seinem Pool vier, fünf,

00:49:33.650 --> 00:49:34.770
sechs Maschinen damit bestückt,

00:49:35.450 --> 00:49:37.110
weil man es ja auch irgendwie verteilen möchte,

00:49:37.270 --> 00:49:38.410
wenn mal was kaputt geht, etc.

00:49:39.310 --> 00:49:40.690
Da bin ich halt auch noch gespannt,

00:49:41.350 --> 00:49:43.170
weil dann halt

00:49:43.170 --> 00:49:45.810
die Kundenseite

00:49:45.810 --> 00:49:52.370
für, ich rechne Modelle, um dir irgendwie Vorschläge oder Klassifizierung oder irgendwie so ein Kram zu rechnen.

00:49:53.970 --> 00:49:56.550
Das ist ja immer sehr kurz von den Transaktionen her.

00:49:56.670 --> 00:50:00.270
Da willst du ja innerhalb von einer halben Sekunde deine Antwort haben und dann ist es vorbei.

00:50:01.390 --> 00:50:06.110
Wenn du aber tatsächlich so ein Ding hast mit, ich rechne hier mein Training,

00:50:06.970 --> 00:50:10.510
da habe ich noch nicht herausgefunden, was dann typische Trainingsdauern sind.

00:50:10.510 --> 00:50:12.050
aber wenn das halt mal Stunden dauert

00:50:12.050 --> 00:50:14.470
und die ganze

00:50:14.470 --> 00:50:16.410
Virtualisierung das noch nicht hergibt, so ein Zeug

00:50:16.410 --> 00:50:18.710
transparent halt dann zwischen A und B zu verschieben

00:50:18.710 --> 00:50:20.390
dann muss ich halt

00:50:20.390 --> 00:50:22.210
mittendrin operativ eingreifen können

00:50:22.210 --> 00:50:23.610
zu sagen, du, ne jetzt

00:50:23.610 --> 00:50:26.410
die eine Grafik da drüben

00:50:26.410 --> 00:50:27.210
die fliegt jetzt mal weg

00:50:27.210 --> 00:50:30.230
Ja, also es kommt halt darauf an, was

00:50:30.230 --> 00:50:32.290
man damit macht, also die Leute, die das halt

00:50:32.290 --> 00:50:34.370
also die ganze Kegel-Community

00:50:34.370 --> 00:50:36.190
die da so kompetitives Machine Learning machen

00:50:36.190 --> 00:50:38.430
die versuchen sich alle

00:50:38.430 --> 00:50:40.530
möglichst viele Karten in einen Rechner zu basteln

00:50:40.530 --> 00:50:42.470
halt irgendwie und das ist natürlich irgendwie

00:50:42.470 --> 00:50:44.410
auch, das ist nicht so einfach,

00:50:45.130 --> 00:50:46.510
aber weil du damit

00:50:46.510 --> 00:50:47.830
halt die Trainingszeiten runterkriegst.

00:50:48.250 --> 00:50:50.450
Wenn du jetzt viele Karten, also wenn du mehrere Karten

00:50:50.450 --> 00:50:52.270
in unterschiedlichen Rechnern hast, das hilft dir nicht so viel.

00:50:52.830 --> 00:50:53.550
Also insofern,

00:50:53.690 --> 00:50:55.070
aber

00:50:55.070 --> 00:50:58.310
das hängt da,

00:50:58.570 --> 00:51:00.570
also das Ende, an dem ich noch dran bin,

00:51:00.690 --> 00:51:01.950
ist ein Gefühl dafür zu kriegen,

00:51:02.230 --> 00:51:04.410
dann welche Modellgrößen sich dann in welcher

00:51:04.410 --> 00:51:06.030
Geschwindigkeit aufhäufen, weil

00:51:06.030 --> 00:51:08.110
da wir über Mehrdimensionalität reden,

00:51:08.110 --> 00:51:10.210
ist es natürlich immer so, irgendwann kommt der Punkt,

00:51:10.330 --> 00:51:11.830
wo jede neue Dimension

00:51:11.830 --> 00:51:13.490
das ganze Ding natürlich

00:51:13.490 --> 00:51:15.650
dir schnell weglaufen lässt und wenn du also

00:51:15.650 --> 00:51:17.850
keine Ahnung, dein Modell zu trainieren

00:51:17.850 --> 00:51:20.070
schon 20 Gig frisst und du kriegst noch eine Dimension

00:51:20.070 --> 00:51:21.890
rein, dann kann ich mir gut vorstellen, bist du plötzlich

00:51:21.890 --> 00:51:23.790
bei 40 und damit bist du schon beim

00:51:23.790 --> 00:51:25.470
oberen Ende, was eine so eine Karte halt kann.

00:51:25.750 --> 00:51:27.410
Ja, kommt halt drauf an, was man macht. Also wenn man

00:51:27.410 --> 00:51:28.570
halt irgendwie so

00:51:28.570 --> 00:51:33.870
so klassische

00:51:33.870 --> 00:51:34.190
Bild,

00:51:35.190 --> 00:51:37.530
was ImageNet mäßiges macht, halt

00:51:37.530 --> 00:51:39.570
Klassifikation von Bildern oder so und da Modelle trainiert.

00:51:40.330 --> 00:51:41.670
Da braucht man nicht so viel

00:51:41.670 --> 00:51:43.610
Hauptspeicher, aber wenn man jetzt Transformer-Geschichten macht,

00:51:44.050 --> 00:51:45.770
also Natural Language

00:51:45.770 --> 00:51:47.770
Processing auf irrsinnig

00:51:47.770 --> 00:51:48.990
großen Mengen Text oder so,

00:51:49.570 --> 00:51:51.710
da braucht man eigentlich so viel Hauptspeicher, wie man kriegen kann

00:51:51.710 --> 00:51:53.570
und da sind halt auch 24 Gig oder so,

00:51:53.630 --> 00:51:55.730
das ist halt so das, glaube ich, maximale,

00:51:55.790 --> 00:51:57.650
was man im Computer-Summer-Bereich kriegt, halt schnell

00:51:57.650 --> 00:51:59.890
vorbei und dann...

00:51:59.890 --> 00:52:01.290
Kann man auch

00:52:01.290 --> 00:52:03.550
in seinen Gaming-PC einbauen? Ich frage nur

00:52:03.550 --> 00:52:05.250
aus Interesse. Ja, ja, kann man

00:52:05.250 --> 00:52:06.490
machen, aber

00:52:06.490 --> 00:52:09.110
Die A hat glaube ich, die hat keine

00:52:09.110 --> 00:52:11.050
Grafik-Outputs, glaube ich. Ich weiß nicht, ob die

00:52:11.050 --> 00:52:12.930
tatsächlich was hilft.

00:52:15.110 --> 00:52:17.470
Also für die Enthusiasten dann in der Szene.

00:52:18.030 --> 00:52:19.350
Ne, ne, also das sind ja

00:52:19.350 --> 00:52:20.710
viele von den Karten

00:52:20.710 --> 00:52:23.310
benutzt man ja auch so, benutzen Spieler ja auch

00:52:23.310 --> 00:52:24.170
weiß ich jetzt nicht genau

00:52:24.170 --> 00:52:26.710
welche davon, aber

00:52:26.710 --> 00:52:28.890
das sind also die

00:52:28.890 --> 00:52:31.470
günstigen

00:52:31.470 --> 00:52:32.930
Dinger, das sind halt alles eigentlich

00:52:32.930 --> 00:52:35.070
Karten für den

00:52:35.070 --> 00:52:36.370
Gamermarkt.

00:52:36.490 --> 00:52:49.390
Genau. 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.090 --> 00:52:53.770
Ich meine, man schließt die direkt an, ja.

00:52:53.770 --> 00:53:23.530
Ja, das ja auch, weil es gibt auch NVIDIA hat an der Stelle halt von ihren, von den Sachen, die haben ja dann auch zum Beispiel noch Spezialkarten, siehe Marktsegmentierung, die so für AI-Unterstützung, Maschinenunterstützung zum Beispiel für Architekten ist und das sind dann Karten, die haben halt entsprechend auch wieder ein Output dran und dann gibt es halt noch, da gibt es ja noch dann wieder die Karten, die für Desktop-Sozialisierung gemacht sind, da ich auch gerade einen Kollegen, der da an dem Ende bei sich rumarbeitet, also das ist nicht bei uns eine Firma, sondern

00:53:23.770 --> 00:53:29.870
woanders, die halt jetzt dank Corona und Homeoffice haben sich anscheinend viele Unternehmen

00:53:29.870 --> 00:53:34.430
entschieden, die Windows-Desktops ihrer User, damit die Daten nicht bei den Usern zu Hause

00:53:34.430 --> 00:53:39.290
liegen, alles über so Remote-Desktop zu machen. Und die musst du aber tatsächlich auch durch

00:53:39.290 --> 00:53:46.710
eine Acceleration durchschicken. Naja, weil auch das Windows auf der VM rechnet dir irgendwelche

00:53:46.710 --> 00:53:51.410
Transparenzen aus und das willst du nicht mehr in CPU machen.

00:53:51.410 --> 00:53:54.810
und da haben sie dann auch wieder

00:53:54.810 --> 00:53:57.270
Spezialkarten für, die halt genau dafür

00:53:57.270 --> 00:53:58.670
wiederum getrimmt sind und

00:53:58.670 --> 00:54:01.970
ja

00:54:01.970 --> 00:54:04.690
naja, also

00:54:04.690 --> 00:54:07.310
gut, ich kenne es halt nur von den Leuten,

00:54:07.450 --> 00:54:08.690
die das halt, ja,

00:54:08.930 --> 00:54:10.710
die das jetzt nicht, also

00:54:10.710 --> 00:54:13.030
mit den ganzen Enthusiasten sozusagen, die nehmen

00:54:13.030 --> 00:54:15.150
alle die Gamer-Karten und basteln halt

00:54:15.150 --> 00:54:16.810
selber, dann gut,

00:54:17.130 --> 00:54:18.950
wenn man jetzt ein Data Center machen will, dann

00:54:18.950 --> 00:54:20.930
ja, nimmt man vielleicht halt

00:54:20.930 --> 00:54:23.030
einfach und kauft das Zeug halt zehnmal so teuer.

00:54:24.470 --> 00:54:25.210
Die sind dann auch

00:54:25.210 --> 00:54:26.570
in den Nernchenbereich noch ein bisschen schneller,

00:54:27.010 --> 00:54:28.810
aber da kommt es halt darauf an, was man damit machen möchte.

00:54:28.970 --> 00:54:30.750
Für Transformer braucht man halt viel Hauptspeicher,

00:54:30.950 --> 00:54:33.110
für viele andere kleinere Sachen

00:54:33.110 --> 00:54:34.470
reichen halt auch die

00:54:34.470 --> 00:54:36.030
mit weniger Hauptspeicher.

00:54:36.890 --> 00:54:38.870
Es ist sowieso so, dass man ja im Grunde braucht man

00:54:38.870 --> 00:54:40.850
diese ganze Power eigentlich nur dann, wenn man

00:54:40.850 --> 00:54:42.130
tatsächlich größere

00:54:42.130 --> 00:54:45.110
Trainingsdatenmengen halt hat

00:54:45.110 --> 00:54:46.490
und irgendwie Modelle

00:54:46.490 --> 00:54:48.650
quasi von Grund auf trainiert.

00:54:48.650 --> 00:54:49.690
Also wenn man jetzt irgendwie

00:54:49.690 --> 00:54:55.510
und das würde ich jetzt, ist halt die Frage, was das für ein Anwendungsfall ist, aber wenn man jetzt den Anwendungsfall hat,

00:54:55.850 --> 00:54:57.730
wo ich denke, der kommt ja in der Praxis sehr, sehr häufig vor,

00:54:58.870 --> 00:55:03.090
man hat im Grunde, man nimmt irgendwie fertig trainierte Modelle von irgendwo her

00:55:03.090 --> 00:55:05.590
und feintunt die jetzt auf das Problem, das man hat.

00:55:06.270 --> 00:55:08.990
Also man hat halt irgendwie, keine Ahnung, möchte irgendein Produkt für was,

00:55:08.990 --> 00:55:12.070
irgendwie, das kriegt halt Bilder und soll dann irgendwas zu den Bildern sagen,

00:55:12.830 --> 00:55:17.090
die irgendwie klassifizieren oder da halt irgendwie, weiß ich nicht, irgendwas drauf erkennen oder so,

00:55:17.090 --> 00:55:47.070
und Jochen unterhalten sich über die Programmiersprache Python

00:55:47.090 --> 00:55:48.410
also schon so paar hundert,

00:55:48.610 --> 00:55:50.570
jenseits von 100 Gigabyte irgendwie Bilder

00:55:50.570 --> 00:55:52.710
und dann halt

00:55:52.710 --> 00:55:54.930
von Grund auf das Trainieren, dann

00:55:54.930 --> 00:55:56.710
braucht man eigentlich alles, was man an

00:55:56.710 --> 00:55:58.990
Power kriegen kann, weil dann kann es sein,

00:55:59.090 --> 00:56:01.110
dass ein Trainingslauf halt einmal eine Woche läuft

00:56:01.110 --> 00:56:03.010
und ob der eine Woche läuft oder eine halbe Woche

00:56:03.010 --> 00:56:04.990
läuft, macht dann einen großen Unterschied, weil dann kann

00:56:04.990 --> 00:56:06.790
man halt unter Umständen doppelt so schnell iterieren

00:56:06.790 --> 00:56:09.130
und ja, also

00:56:09.130 --> 00:56:12.370
tja,

00:56:13.630 --> 00:56:14.970
ich denke mal, die allermeisten Leute

00:56:14.970 --> 00:56:16.630
brauchen das gar nicht so wirklich, die Power,

00:56:16.630 --> 00:56:17.510
ehrlich gesagt.

00:56:18.950 --> 00:56:20.650
Aber wir hätten gerne

00:56:20.650 --> 00:56:22.570
alle so ein Machine Learning Ding dabei, wenn wir

00:56:22.570 --> 00:56:24.770
zum Beispiel irgendwelche Geräte bewegen

00:56:24.770 --> 00:56:26.450
oder sowas, die alles dann direkt selber

00:56:26.450 --> 00:56:28.030
wahrnehmen können.

00:56:28.590 --> 00:56:30.330
Genau, aber das ist ja immer sozusagen das Ende von

00:56:30.330 --> 00:56:32.510
die benutzen die Modelle ja nur und

00:56:32.510 --> 00:56:33.970
schärfen sie vielleicht noch ein bisschen nach,

00:56:34.650 --> 00:56:36.370
aber die rechnen ja die Modelle nicht.

00:56:36.710 --> 00:56:38.070
Nee, nicht von Grund auf, genau.

00:56:39.350 --> 00:56:40.430
Wäre doch schön, wenn sich das Modell

00:56:40.430 --> 00:56:42.730
parallel anpasst, aber naja, wir träumen

00:56:42.730 --> 00:56:44.670
hier ein bisschen. Doch, kann man ja tun,

00:56:44.670 --> 00:56:46.310
aber die unteren Ebenen, also

00:56:46.310 --> 00:57:02.210
sozusagen, du trainierst halt bei diesem Feintuning, was du da machst, ist halt, du passt halt nur die oberen, also sozusagen nur einen Teil der Layer an, also du befrierst halt die Gewichte für den Großteil deines Modells ein und passt halt nur noch Details davon an.

00:57:02.210 --> 00:57:04.110
Wenn jetzt irgendwas über ImageNet gelaufen ist,

00:57:04.150 --> 00:57:07.070
was halt jetzt

00:57:07.070 --> 00:57:10.190
ein Modell, was jetzt super gelernt hat,

00:57:10.250 --> 00:57:12.370
wie man Haare erkennt oder Augen

00:57:12.370 --> 00:57:14.270
oder sowas, das macht

00:57:14.270 --> 00:57:16.190
eigentlich keinen großen Sinn, wenn du jetzt

00:57:16.190 --> 00:57:17.850
eine spezielle Art von Tier irgendwie

00:57:17.850 --> 00:57:19.950
erkennen willst auf Bildern,

00:57:20.390 --> 00:57:22.110
das nochmal alles von Grund auf neu zu machen,

00:57:22.430 --> 00:57:24.290
zu trainieren, wie man Fälle erkennt oder so,

00:57:24.310 --> 00:57:26.190
weil das funktioniert schon super. Du willst

00:57:26.190 --> 00:57:28.250
halt nur, dass deine Klasse von Tier jetzt da noch

00:57:28.250 --> 00:57:29.870
gut erkannt wird, aber dafür musst du eigentlich nur

00:57:29.870 --> 00:57:31.430
ein paar Layer irgendwie...

00:57:31.430 --> 00:57:33.390
bei Live-Videodaten oder sowas, ist das vielleicht

00:57:33.390 --> 00:57:34.450
noch anders?

00:57:35.570 --> 00:57:37.410
Natürlich, also es kommt halt auch, ich meine Video ist

00:57:37.410 --> 00:57:38.810
sowieso ein Ding, wo es noch nicht so viel gibt.

00:57:39.870 --> 00:57:41.310
Das wäre, wenn, also

00:57:41.310 --> 00:57:43.430
klar, wenn du jetzt eine neue Geschichte machst,

00:57:43.510 --> 00:57:45.230
die sonst noch keiner gemacht hat, dann hast du natürlich genau,

00:57:45.310 --> 00:57:47.050
oder wenn du auch neue Modelle ausprobieren willst,

00:57:47.130 --> 00:57:49.210
wenn du die Architektur änderst und sagst,

00:57:49.430 --> 00:57:51.110
mir ist jetzt eingefallen, wie man das jetzt,

00:57:51.370 --> 00:57:53.130
wie man eine ganz neue, tolle Art von

00:57:53.130 --> 00:57:55.330
Maschinenmodell hat, bauen kann,

00:57:55.490 --> 00:57:57.190
die alles viel besser macht und

00:57:57.190 --> 00:57:59.030
da musst du halt von Grund auf neu trainieren, weil

00:57:59.030 --> 00:58:01.410
ja, du willst ja demonstrieren, dass es besser ist.

00:58:01.430 --> 00:58:31.430
dann, ja, also wenn du Maschinenleitung und Forschung machst und so, klar, dann musst du, brauchst du, aber auch da brauchst du unter Umständen keine so wahnsinnig, wahnsinnig große Rechenleistung für, du brauchst die, ja, wenn du Forschung im Bereich von Transformer machen willst, dann brauchst du halt richtig viel Hauptspeicher und richtig viele Leistungen, aber ich meine, wer macht denn sowas, also so, also ich, die Leute, die Werbung, die Leute, die die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Werbung, die Wer

00:58:31.430 --> 00:58:31.450


00:59:01.430 --> 00:59:09.870
und die Modelle, die da aber gewonnen haben, gut, das ist jetzt auch schon lange her, aber das war alles total einfach, das war alles linear, das war alles so Logistic Regression-mäßig.

00:59:11.950 --> 00:59:29.230
Ich bin mal gespannt, ich habe mich ja jetzt mal, 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

00:59:29.230 --> 00:59:33.490
und ich wollte ja ganz kurz irgendwie den Schreibtisch abräumen und alles in die Ecke pfeffern,

00:59:33.870 --> 00:59:39.170
als dann die Aussage war, dass ja irgendwie so die tollen positiven Beispiele die sind,

00:59:39.270 --> 00:59:41.550
wie Netflix dir halt neue Sachen empfiehlt und Amazon.

00:59:41.770 --> 00:59:46.390
Und ich denke mir so, ja, aber das sind doch die Beispiele für, das hilft gerade genau gar nicht.

00:59:47.730 --> 00:59:50.930
Also ich meine, wofür brauche ich Machine Learning, damit mir meine Plattform sagt,

00:59:51.490 --> 00:59:55.530
du hast gerade einen Schraubenzieher gekauft, ich glaube, du willst einen Schraubenzieher kaufen.

00:59:55.530 --> 00:59:58.270
Ich habe es ja noch nie

00:59:58.270 --> 01:00:01.530
in Funktionierend gesehen, dass da irgendwie

01:00:01.530 --> 01:00:02.730
sinnvolles Zeug rauskam

01:00:02.730 --> 01:00:04.770
Mich würde wirklich interessieren

01:00:04.770 --> 01:00:07.610
wo die Teile, also wo jemand

01:00:07.610 --> 01:00:09.650
nachgewiesen hat, dass

01:00:09.650 --> 01:00:10.470
das was bringt

01:00:10.470 --> 01:00:13.410
Also vielleicht bin ich auch einfach als Nerd so ein bisschen

01:00:13.410 --> 01:00:14.330
komisch an der Stelle

01:00:14.330 --> 01:00:17.790
Das ist ganz wichtig, Recommendation-Systeme

01:00:17.790 --> 01:00:19.490
Das geht gerade besonders gut

01:00:19.490 --> 01:00:21.630
Einfach die Sachen, die am häufigsten gekauft werden

01:00:21.630 --> 01:00:23.650
die viralisieren sich dann einfach weiter

01:00:23.650 --> 01:00:25.770
Scheint ja auch so funktionieren

01:00:25.770 --> 01:00:27.030
Naja, also

01:00:27.030 --> 01:00:29.970
das ist jetzt aber auch schon da ganz lange her

01:00:29.970 --> 01:00:31.730
aber zum Beispiel Netflix hat da ja tatsächlich mal

01:00:31.730 --> 01:00:33.670
einen Preis für ausgelobt

01:00:33.670 --> 01:00:35.690
für eben

01:00:35.690 --> 01:00:37.830
Leuten Videos empfehlen

01:00:37.830 --> 01:00:39.650
und

01:00:39.650 --> 01:00:41.510
das weiß gar nicht, wann das war, das muss

01:00:41.510 --> 01:00:43.710
das ist jetzt auch schon über 10 Jahre her, oh mein Gott

01:00:43.710 --> 01:00:45.590
und sie haben da

01:00:45.590 --> 01:00:46.690
eine Million Dollar drauf

01:00:46.690 --> 01:00:49.090
ausgesetzt und das, was die Leute

01:00:49.090 --> 01:00:51.470
da gemacht haben, war auch sehr interessant

01:00:51.470 --> 01:00:52.430
und

01:00:52.430 --> 01:00:55.470
die Verbesserung in diesem

01:00:55.470 --> 01:00:57.350
Wettbewerb von, wie war das

01:00:57.350 --> 01:00:59.010
am Anfang oder was hat Netflix

01:00:59.010 --> 01:01:01.290
quasi, sie haben als Baseline auch angegeben,

01:01:01.590 --> 01:01:03.270
was sie momentan verwenden für ein Verfahren und

01:01:03.270 --> 01:01:04.930
wie gut das ist und

01:01:04.930 --> 01:01:07.110
das, was dann hinterher gewonnen hat,

01:01:07.170 --> 01:01:08.970
das war schon deutlich besser. Also

01:01:08.970 --> 01:01:11.210
das hat richtig was gebracht, aber

01:01:11.210 --> 01:01:13.050
ehrlich gesagt, natürlich, es ist immer noch nicht

01:01:13.050 --> 01:01:13.790
wirklich gut.

01:01:15.010 --> 01:01:16.490
Ja, es war so mittelgut, ne?

01:01:16.670 --> 01:01:16.950
Ja.

01:01:19.250 --> 01:01:21.110
Gerade Netflix muss sich halt dann an der Stelle

01:01:21.110 --> 01:01:24.030
auch gefallen lassen, ihr Katalog ist halt nicht so groß.

01:01:25.130 --> 01:01:31.050
Also wenn ich es halt vergleiche, auch die eingeschränkte Art, wie man es häufig browsen kann,

01:01:31.130 --> 01:01:35.130
dass du gar nicht mehr so richtig wirklich strukturiert durch die Kataloge durchkommst,

01:01:35.130 --> 01:01:42.230
sondern immer nur noch nach irgendwelchen vorgefertigten Kategorien, die so ein bisschen merkwürdig sind

01:01:42.230 --> 01:01:46.010
und dann irgendwie so Unterkategorien haben, die Netflix irgendwie gefallen,

01:01:46.010 --> 01:01:49.470
dann hilft es mir ja nichts, wenn er mir

01:01:49.470 --> 01:01:52.170
die 20 Filme, die er für mich gut findet

01:01:52.170 --> 01:01:54.510
mal in der und mal in der und mal in der Reihenfolge anzeigt

01:01:54.510 --> 01:01:58.270
das ist ja das, was momentan gefühlt für mich dabei rauskommt

01:01:58.270 --> 01:02:01.310
ist, nach so einer Pandemie nach einem Jahr

01:02:01.310 --> 01:02:04.130
Netflix ist ja gerade was Filme angeht immer ziemlich hinten dran

01:02:04.130 --> 01:02:07.090
da hast du eh schon alles durchgeguckt

01:02:07.090 --> 01:02:09.910
und jetzt empfehlen sie dir das, aber halt

01:02:09.910 --> 01:02:11.690
einmal in der und in der und in der Reihenfolge

01:02:11.690 --> 01:02:14.930
wie viel Machine Learning brauche ich dafür?

01:02:16.010 --> 01:02:17.690
Ja, es ist auch die Frage, ob das eben

01:02:17.690 --> 01:02:19.530
tatsächlich ein Machine Learning Problem ist oder

01:02:19.530 --> 01:02:21.110
vielleicht doch eher ein User Interface Problem.

01:02:21.270 --> 01:02:22.790
Ich finde das auch total schrecklich.

01:02:23.490 --> 01:02:25.610
Ich habe auch immer das Gefühl, ich weiß nicht, auf was sie da

01:02:25.610 --> 01:02:27.630
optimieren, aber manchmal habe ich das Gefühl, sie optimieren darauf,

01:02:27.690 --> 01:02:29.430
dass man da möglichst lange drin rumsucht.

01:02:29.970 --> 01:02:31.730
Also es ist ja irgendwo ein Incentive falsch gesetzt

01:02:31.730 --> 01:02:33.810
oder irgendein KPI

01:02:33.810 --> 01:02:35.390
geht einfach in die falsche Richtung.

01:02:36.390 --> 01:02:37.710
Ja, sie haben eine Variable

01:02:37.710 --> 01:02:39.650
oder irgendeine Dimension in ihrem

01:02:39.650 --> 01:02:41.730
Ding drin, wo aus Versehen

01:02:41.730 --> 01:02:42.810
darauf optimiert wird

01:02:42.810 --> 01:02:45.570
und es entspricht, und das ist ja

01:02:45.570 --> 01:02:53.970
und die

01:02:53.970 --> 01:02:55.970
und die

01:03:23.970 --> 01:03:53.950
Feature Extraction

01:03:53.970 --> 01:04:27.335
und die Technik und Jochen unterhalten sich die Programmiersprache Python

01:04:27.355 --> 01:04:31.855
Optimierung und eben auszusehen drauf optimiert hat, dass die User möglichst lange den Katalog

01:04:31.855 --> 01:04:35.735
browsen und möglichst wenig gucken, damit Netflix möglichst wenig

01:04:35.735 --> 01:04:37.575
Lizenzgebühren bezahlen muss.

01:04:40.375 --> 01:04:42.015
Vielleicht ist das eine mögliche Erklärung.

01:04:42.135 --> 01:04:44.975
Ist das ein Phänomen?

01:04:45.235 --> 01:04:48.615
Vielleicht haben sie sich tatsächlich auf die Nutzungsdauer pro Kunde optimiert.

01:04:48.615 --> 01:04:52.675
Also wie lange gucken die Leute und wenn du jedes Mal 10 Minuten extra guckst

01:04:52.675 --> 01:04:54.155
für eine Suche, gucken die Leute jetzt länger.

01:04:54.155 --> 01:05:24.135
und die Programmiersprache Python.

01:05:24.155 --> 01:05:26.275
angezeigt und zwar genau den, den ich gerade in dem Moment

01:05:26.275 --> 01:05:26.715
gucken will.

01:05:28.135 --> 01:05:28.975
Ja, das geht ja nicht.

01:05:29.635 --> 01:05:32.615
Das verkürzt ja die Komplexität

01:05:32.615 --> 01:05:34.035
menschlichen Daseins so

01:05:34.035 --> 01:05:35.035
massiv.

01:05:36.095 --> 01:05:37.695
Naja, aber vielleicht kann der Algorithmus

01:05:37.695 --> 01:05:40.095
sich mit mir irgendwie koppeln und irgendwie einen Faktor

01:05:40.095 --> 01:05:41.955
reinnehmen, dass er versteht, was ich gerade

01:05:41.955 --> 01:05:44.035
möchte. Ich glaube auch nicht,

01:05:44.115 --> 01:05:46.135
dass er durch meinen historischen Guckverhalten

01:05:46.135 --> 01:05:46.975
sowas schon wüsste.

01:05:47.295 --> 01:05:50.595
Aber durch vollständige Information...

01:05:50.595 --> 01:05:51.595
Das ist ja das andere Problem.

01:05:51.935 --> 01:05:53.095
Du kannst ja nur...

01:05:53.095 --> 01:05:58.655
Also, wie ist es auch in den Tutorials, bei wem war es? Ich glaube, das war bei meinem aktuellen Coursera-Kurs.

01:05:59.235 --> 01:06:07.615
Da war der Vergleich von Machine Learning hat im Prinzip zum Ziel, ungefähr das menschliche Lernverhalten, was wir im Alter von vier Jahren haben, nachzubilden.

01:06:09.075 --> 01:06:11.695
Und das würde ich sagen, das kriege ich ziemlich gut hin.

01:06:14.415 --> 01:06:20.155
Also, viele Leute machen ja Witze drüber, dass Machine Learning sich so anstellt wie ein kleines Kind.

01:06:20.155 --> 01:06:22.075
ja, gibt es ja haufenweise

01:06:22.075 --> 01:06:23.415
Memes, die immer

01:06:23.415 --> 01:06:25.895
ist das ein Brokkoli? Nein, das ist kein

01:06:25.895 --> 01:06:27.455
doch, das ist ein Brokkoli, was ist das?

01:06:27.535 --> 01:06:30.355
Das ist ein Brokkoli, na gut, das ist ein Brokkoli

01:06:30.355 --> 01:06:32.435
und

01:06:32.435 --> 01:06:34.555
gleichzeitig

01:06:34.555 --> 01:06:36.235
wird dem aber

01:06:36.235 --> 01:06:38.175
eine

01:06:38.175 --> 01:06:40.295
ominöse Fähigkeit

01:06:40.295 --> 01:06:42.235
zugeschrieben, die weit

01:06:42.235 --> 01:06:44.135
über das hinausgeht, also wenn man auf der einen Seite

01:06:44.135 --> 01:06:46.015
ehrlich sagt und sagt, okay, wir versuchen

01:06:46.015 --> 01:06:48.275
so ein biologisch inspiriertes Lernverhalten

01:06:48.275 --> 01:06:50.135
von einem Vierjährigen und der kann ja was

01:06:50.135 --> 01:06:54.655
und das ganze Pattern-Matching, was wir haben, und wie trainiere ich das halt an.

01:06:55.175 --> 01:06:56.935
Das ist ja nicht so, dass das nichts kann.

01:06:58.075 --> 01:07:05.355
Aber ich kann halt auch einen Vierjährigen nicht drauf trainieren, mich anzugucken und sich zu fragen,

01:07:05.435 --> 01:07:10.255
wie geht es mir eigentlich? Oder was bräuchte, was würde mir jetzt als Erwachsener eigentlich gut tun?

01:07:11.235 --> 01:07:12.755
Dafür ist ein Vierjähriger halt nicht gemacht.

01:07:14.695 --> 01:07:18.755
Ja, ich glaube auch eher, es ist halt unklar.

01:07:18.755 --> 01:07:22.635
unklar. Deswegen sind halt die Erwartungen teilweise vielleicht völlig daneben

01:07:22.635 --> 01:07:26.435
und zu optimistisch, teilweise aber auch vielleicht

01:07:26.435 --> 01:07:30.875
zu pessimistisch, dass man glaubt, da geht gar nichts. Es gibt schon sehr beeindruckende

01:07:30.875 --> 01:07:34.255
Dinge, die man damit auch machen kann und Fortschritte, die da

01:07:34.255 --> 01:07:38.235
passiert sind. Insofern ist es halt einfach momentan nicht klar, was da überhaupt geht und was passiert.

01:07:38.935 --> 01:07:41.415
Das werden wir dann halt mit der Zeit irgendwann rausfinden.

01:07:42.075 --> 01:07:45.675
Naja, ich glaube, ein wichtiger Aspekt davon ist ja die Frage,

01:07:45.675 --> 01:07:49.095
benutzt, also das kommt jetzt aus dem ganzen Thema Komplexität,

01:07:50.395 --> 01:07:51.515
nutze ich es, um

01:07:51.515 --> 01:07:54.615
menschliche Kognitionsprozesse zu ersetzen

01:07:54.615 --> 01:07:57.635
oder zu unterstützen? Also das ist ja Augmentation

01:07:57.635 --> 01:07:58.855
über Cognitive Augmentation.

01:07:59.755 --> 01:08:03.435
Also es gibt jetzt auch so neue tolle Kontaktlinsen, mit denen man

01:08:03.435 --> 01:08:05.535
sowas augmentieren kann. Ja, sehr schön.

01:08:06.115 --> 01:08:09.095
Und durch diese Augmentierung, wenn die halt Machine Learning

01:08:09.095 --> 01:08:12.375
gestützt ist, das ist natürlich schon super cool, weil du halt

01:08:12.375 --> 01:08:15.355
einfach Zusatzinformationen bekommst, die du vielleicht sonst nicht hast.

01:08:15.355 --> 01:08:22.975
und das ist auf der einen Seite viel leichter, es ist ethisch auch viel einfacher zu kontrollieren,

01:08:23.535 --> 01:08:28.015
aber natürlich hängt jedes Startup und jeder immer erstmal hin, nein, nein, das machen wir hier,

01:08:28.395 --> 01:08:33.255
wir ersetzen das, wir lösen das Problem komplett und ich glaube, das ist halt eine massive Sackgasse.

01:08:33.975 --> 01:08:39.095
Also ich habe so ein paar Beispiele, die man immer sieht, ist halt auch dieses Thema Krebszellen erkennen.

01:08:39.095 --> 01:08:42.795
das ist ja gedacht als Augmentierung

01:08:42.795 --> 01:08:44.915
das ist ja nicht dafür gedacht

01:08:44.915 --> 01:08:46.795
dass der Arzt das nicht mehr drauf guckt

01:08:46.795 --> 01:08:48.735
aber das ist halt gedacht, dass wenn du halt

01:08:48.735 --> 01:08:50.275
eine gewisse Menge schon

01:08:50.275 --> 01:08:52.315
vorverarbeitete

01:08:52.315 --> 01:08:54.895
Zellbilder hast

01:08:54.895 --> 01:08:56.875
auf denen bestimmte Parameter wie irgendwie

01:08:56.875 --> 01:08:58.875
die Klumpigkeit und der Farbton

01:08:58.875 --> 01:09:00.555
und die Schärfe von der Umrandung und

01:09:00.555 --> 01:09:03.215
ich glaube es sind so 15, 16 Dimensionen

01:09:03.215 --> 01:09:04.855
nach denen das dann auch bewertet

01:09:04.855 --> 01:09:06.775
und gelabelt wird und dann kannst du mit einer

01:09:06.775 --> 01:09:36.755
und Jochen unterhalten sich über die Programmiersprache Python

01:09:36.775 --> 01:09:38.355
dann ist das tatsächlich, das ist Augmentation.

01:09:38.695 --> 01:09:40.515
Das heißt, das Hirn von dem Arzt,

01:09:40.595 --> 01:09:42.475
der das bewertet, ist weiterhin dran zu arbeiten,

01:09:42.915 --> 01:09:44.675
wird aber entlastet, irgendwie die komplette

01:09:44.675 --> 01:09:46.755
Bewertung zu machen, sondern kriegt halt schon mal so ein bisschen

01:09:46.755 --> 01:09:48.255
Sparring dazu, ist aber,

01:09:48.695 --> 01:09:50.335
er ist der, der am Steuer sitzt.

01:09:50.815 --> 01:09:52.555
Und das ist aber was anderes, als wenn du halt

01:09:52.555 --> 01:09:54.735
sagst, naja, das Ding läuft auf Vollautomatismus

01:09:54.735 --> 01:09:56.635
und wenn es tief geht, dann muss halt

01:09:56.635 --> 01:09:58.595
jemand irgendwie ein Postmortem

01:09:58.595 --> 01:10:00.855
machen, im wahrsten Sinne des Wortes.

01:10:03.775 --> 01:10:04.135
Ja.

01:10:04.135 --> 01:10:05.895
Ja, es hat halt viele Möglichkeiten.

01:10:05.895 --> 01:10:35.875
und Jochen unterhalten sich über die Programmiersprache Python

01:10:35.895 --> 01:10:39.415
halt irgendwelche Zufallswerte generiert, aus denen er dann irgendwie

01:10:39.415 --> 01:10:43.515
die wahrscheinlichste Wiederholung irgendwie bemerkt.

01:10:43.535 --> 01:10:44.775
Das sind ja keine Zufallswerte.

01:10:46.555 --> 01:10:50.275
Auch nicht alle Maschinenmodelle haben irgendwas mit Statistik zu tun, das ist auch nicht so.

01:10:51.055 --> 01:10:52.695
Ja, aber so ein bisschen macht er es schon, oder?

01:10:53.355 --> 01:10:55.555
Kommt auf das Modell an, es gibt sehr unterschiedliche Modelle.

01:10:57.095 --> 01:10:59.815
Okay, dann müssen wir das vielleicht nochmal in einer anderen Folge genauer...

01:10:59.815 --> 01:11:03.335
Ja, also der Klassiker, wenn du über die neuronalen Netze halt nachdenkst,

01:11:03.335 --> 01:11:15.855
mit einer Backpropagation, dann ist es halt schon so, das sieht für uns aus, ja, der kriegt dann immer, der hat sein, häufig haben sie ein random initialisiertes Modell, das gibt es schon.

01:11:16.775 --> 01:11:21.955
Und dann ist es aber so, dass das an den Gewichten rumdrehen ist halt eine deterministische Funktion.

01:11:21.955 --> 01:11:27.795
und das ist, du hast halt, du hast ja dein gelabeltes Datenset und sagst so, hier kommt mein Input,

01:11:28.535 --> 01:11:34.935
liebes neuronales Netz, rechne mal und dann kommt dann nachher raus, ich glaube der Output ist folgender

01:11:34.935 --> 01:11:39.795
und dann vergleichst du das mit dem gelabelten Output, der zu diesem Beispiel gehört hat und daraus ergibt sich ein Fehler

01:11:39.795 --> 01:11:47.835
und dann macht man da eine Bewertungsfunktion für den Fehler und er sagt, okay, damit dieses Bild oder dieser Input

01:11:47.835 --> 01:11:49.835
und der

01:12:17.835 --> 01:12:25.215
um 30% nachgesteuert, aber es ist halt nicht so, dass es random ist, sondern er rechnet immer aus,

01:12:25.895 --> 01:12:30.415
wie hätte das aussehen müssen für die perfekte Lösung, da ich aber nicht nur dieses eine Bild bewerten können will,

01:12:30.475 --> 01:12:36.635
das wäre dann ja overfitting, muss ich mich in der Anpassung ein bisschen dämpfen und jedes Bild,

01:12:37.115 --> 01:12:41.335
was einen kleinen Fehler hat, korrigiert das Netz immer wieder ein kleines bisschen nach.

01:12:42.015 --> 01:12:46.255
Aber das ist nicht random an der Stelle, das müsste sogar eigentlich deterministisch sein.

01:12:47.835 --> 01:12:50.635
Ja, ja.

01:12:50.635 --> 01:12:52.535
Und ich glaube, dass man sie random initialisiert

01:12:52.535 --> 01:12:54.555
macht, glaube ich, ist eine Idee, dass man halt

01:12:54.555 --> 01:12:56.395
versucht, irgendeinen Bias zu vermeiden,

01:12:56.835 --> 01:12:58.415
dass man irgendwie an einem Extremwert

01:12:58.415 --> 01:13:00.635
einsteigt, der das Modell halt völlig verzerrt.

01:13:02.695 --> 01:13:02.975
Ja.

01:13:03.755 --> 01:13:06.475
Du alles steht auf Null und dann kommt er halt nie vom Fleck.

01:13:06.535 --> 01:13:08.555
Das ist so ein bisschen, wenn du dir an Newton

01:13:08.555 --> 01:13:10.655
denkst, wenn du halt

01:13:10.655 --> 01:13:12.695
eine Newton'sche Approximation probierst,

01:13:13.135 --> 01:13:14.475
da ist es auch immer so, dass du

01:13:14.475 --> 01:13:16.535
schon mal so grob in irgendeine Richtung werfen musst,

01:13:16.535 --> 01:13:22.695
weil wenn du halt irgendwie völlig bei Null oder einem blöden Punkt anfängst, dann

01:13:22.695 --> 01:13:24.655
kommst du halt nie zum Ziel.

01:13:27.435 --> 01:13:29.035
Naja, das dauert sehr lange.

01:13:32.755 --> 01:13:41.935
Ja, ich überlege gerade, ich weiß nicht genau, ich würde es eher allgemeiner,

01:13:42.095 --> 01:13:45.775
auch gerade was das Lernen angeht, ich würde sagen Machine Learning oder so was,

01:13:45.775 --> 01:13:47.475
und versucht es halt

01:13:47.475 --> 01:13:49.795
Software hinzubekommen,

01:13:49.915 --> 01:13:51.175
die halt mit Erfahrung besser wird.

01:13:51.595 --> 01:13:53.295
Ich würde das tatsächlich so allgemein lassen.

01:13:53.815 --> 01:13:55.715
Was das genau tut, kann man gar nicht so

01:13:55.715 --> 01:13:57.035
sagen. Es gibt alles mögliche.

01:13:57.235 --> 01:13:57.695
Also es gibt auch

01:13:57.695 --> 01:14:01.755
das ist nicht

01:14:01.755 --> 01:14:03.415
immer in einer bestimmten Art, sondern

01:14:03.415 --> 01:14:05.495
es gibt die unterschiedlichsten Geschichten.

01:14:06.935 --> 01:14:07.455
Ja, was man halt,

01:14:07.595 --> 01:14:08.495
ich glaube an einer Stelle,

01:14:08.895 --> 01:14:11.455
der Trick ist ja, das ist ja ein technisches Werkzeug.

01:14:11.555 --> 01:14:13.355
Das kann was, das kann bestimmte andere Sachen nicht

01:14:13.355 --> 01:14:15.715
und da habe ich erstmal ja null Probleme mit.

01:14:15.775 --> 01:14:21.415
und ich glaube, wo wir in der Öffentlichkeit so ein Problem haben, ist dieses Zuschreiben,

01:14:21.595 --> 01:14:27.815
es ist so komplex, dass man ja nur über Vereinfachungen, über Bilder darüber reden kann

01:14:27.815 --> 01:14:32.215
und wenn die Leute aber dann mit diesen vereinfachten Bildern weiterdenken wollen,

01:14:32.955 --> 01:14:35.515
dann führt das halt ganz schnell zu logischen Schlussfolgerungsfallen,

01:14:35.835 --> 01:14:40.415
weil man halt auf Basis dieser Analogien nicht mehr dem technischen Kern gerecht wird.

01:14:40.415 --> 01:14:41.775
und

01:14:41.775 --> 01:14:44.695
ich meine, was ich spannend finde, ist erstmal, wenn man

01:14:44.695 --> 01:14:46.635
diese Unterteilung nochmal anguckt zwischen Supervised

01:14:46.635 --> 01:14:48.795
und Unsupervised, dann sind gerade

01:14:48.795 --> 01:14:50.615
die Supervised-Sachen natürlich

01:14:50.615 --> 01:14:52.875
immer interessant, weil ich kann mir

01:14:52.875 --> 01:14:54.815
die Extremwerte nochmal angucken

01:14:54.815 --> 01:14:55.615
und kann schauen,

01:14:56.835 --> 01:14:58.795
also ich kann es halt evaluieren und ich kann halt

01:14:58.795 --> 01:15:00.915
prüfen, wenn ich feststelle,

01:15:00.975 --> 01:15:02.775
ich habe hier komische Fehler drin, die ich

01:15:02.775 --> 01:15:04.575
so nicht beabsichtigt habe, woran liegt denn das?

01:15:04.915 --> 01:15:06.475
Muss ich noch eine Dimension dazunehmen?

01:15:06.575 --> 01:15:09.055
Fehlt mir bei einer Dimension irgendwas? Ist in meinen Eingangsdaten

01:15:09.055 --> 01:15:13.075
irgendwas komisch, weshalb das Training in bestimmten Varianten halt

01:15:13.075 --> 01:15:17.295
in die falsche Richtung läuft und kann das dann halt auch immer weiter treiben, weil das ist ja

01:15:17.295 --> 01:15:21.215
was, das kann Machine Learning an der Stelle nicht, Machine Learning kann ja

01:15:21.215 --> 01:15:25.075
nicht selber feststellen und sagen, du brauchst eigentlich ganz andere Eingangsdaten

01:15:25.075 --> 01:15:28.235
für dein Problem. Das kann es dir dann nicht liefern.

01:15:28.235 --> 01:15:32.115
Doch, doch, doch.

01:15:32.115 --> 01:15:36.035
Naja, man kann sich schon angucken, zum Beispiel man kann sich die Kurve angucken

01:15:36.035 --> 01:15:38.535
mit zunehmenden

01:15:38.535 --> 01:15:40.175
also

01:15:40.175 --> 01:15:42.555
man trägt dann halt

01:15:42.555 --> 01:15:44.835
den Trainingserror

01:15:44.835 --> 01:15:46.475
gegen den Testerror auf

01:15:46.475 --> 01:15:47.815
zum Beispiel. Dann kann man sich halt

01:15:47.815 --> 01:15:50.055
je nachdem, wie das dann aussieht,

01:15:50.495 --> 01:15:52.735
also wenn die beiden Kurven sehr weit auseinander liegen,

01:15:53.635 --> 01:15:54.395
also sozusagen, wenn man

01:15:54.395 --> 01:15:56.375
wenn der Fehler auf den

01:15:56.375 --> 01:15:58.495
Trainingsdaten gering wird,

01:15:58.495 --> 01:15:59.715
aber auf den Testdaten nicht,

01:16:00.075 --> 01:16:02.595
und die beiden Kurven sehr weit auseinander liegen, dann weiß man, okay, man hat zu wenig

01:16:02.595 --> 01:16:04.535
Trainingsdaten. Oder die falschen.

01:16:04.535 --> 01:16:06.835
oder die sind halt nicht gut verteilt.

01:16:07.615 --> 01:16:08.315
Wenn das Ding

01:16:08.315 --> 01:16:11.055
sich über, wenn die Kurven

01:16:11.055 --> 01:16:12.755
anfangen sich zu überschneiden oder so, weiß man halt,

01:16:12.895 --> 01:16:14.835
okay, ja, man

01:16:14.835 --> 01:16:16.335
overfettet gerade zum Beispiel.

01:16:17.595 --> 01:16:19.175
Aber das sind ja Sachen, die werden

01:16:19.175 --> 01:16:20.795
zum Beispiel, da kommen wir in den Bereich, das ist

01:16:20.795 --> 01:16:22.935
Augmented und das ist ein Prozess, den wir als Menschen

01:16:22.935 --> 01:16:25.055
halt begleiten. Das ist halt

01:16:25.055 --> 01:16:26.995
was, also dann diese Entscheidung zu treffen,

01:16:27.135 --> 01:16:29.015
jetzt ist es so weit, dass ich das halt anders machen

01:16:29.015 --> 01:16:31.035
muss, das kann das Modell nicht

01:16:31.035 --> 01:16:32.875
für dich und das Modell kann dir auch nicht sagen, was

01:16:32.875 --> 01:16:34.275
das andere ist, was es braucht.

01:17:04.535 --> 01:17:34.515
und Jochen unterhalten sich über die Programmiersprache Python

01:17:34.535 --> 01:17:36.195
und das ist ja nur...

01:17:36.195 --> 01:17:37.255
Also ich weiß es nicht.

01:17:38.855 --> 01:17:39.895
Was macht das?

01:17:40.275 --> 01:17:42.435
Du hast ja entscheidend irgendwas gerade in der Intention,

01:17:42.535 --> 01:17:44.695
was du gesagt hast, da versteckt sich was Interessantes.

01:17:45.815 --> 01:17:46.855
Finde ich jetzt interessant.

01:17:47.855 --> 01:17:48.315
Ja, also

01:17:48.315 --> 01:17:50.215
ich weiß es nicht.

01:17:53.215 --> 01:17:54.255
Auch, also

01:17:54.255 --> 01:17:56.095
dass da

01:17:56.095 --> 01:17:58.535
das Problem

01:17:59.335 --> 01:18:00.515
würde ich auch daran, also ich meine

01:18:00.515 --> 01:18:01.795
gerade der Medizin,

01:18:01.795 --> 01:18:03.735
naja gut, das ist auch wieder so ein

01:18:03.735 --> 01:18:04.435
Weitersfeld dann direkt.

01:18:06.175 --> 01:18:07.755
Es ist ja so, dass wir

01:18:07.755 --> 01:18:09.615
momentan ja eigentlich sehr, sehr

01:18:09.615 --> 01:18:11.775
grobe Geschichten

01:18:11.775 --> 01:18:13.055
machen. Also wenn man ja

01:18:13.055 --> 01:18:15.355
so eine Diagnose und dann

01:18:15.355 --> 01:18:17.675
was macht man jetzt, wenn man die Diagnose hat?

01:18:18.155 --> 01:18:19.955
Das ist halt sehr, sehr

01:18:19.955 --> 01:18:21.655
auch, was gibt man für Medikamente?

01:18:21.835 --> 01:18:23.015
Das ist ja alles super grob.

01:18:23.655 --> 01:18:25.175
Das ist ja überhaupt nicht angepasst auf

01:18:25.175 --> 01:18:27.375
jemanden individuell oder so.

01:18:28.175 --> 01:18:28.875
Nee, nee, das ist also

01:18:28.875 --> 01:18:31.215
ja. Und

01:18:31.215 --> 01:18:33.635
wenn jetzt, also

01:18:33.635 --> 01:18:57.415
Also man könnte jetzt, das ist aber so angenommen, man nimmt jetzt, weiß ich nicht, irgendwie Daten, was auch immer, alle möglichen Daten, die man jetzt über 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:57.415 --> 01:18:59.715
das könnte ein einzelner

01:18:59.715 --> 01:19:01.575
Arzt ja niemals machen

01:19:01.575 --> 01:19:02.715
im Grunde in der

01:19:02.715 --> 01:19:04.815
Granularität

01:19:04.815 --> 01:19:07.735
ja ne, aber ich bin ja gerade

01:19:07.735 --> 01:19:09.815
an einem, ich bin, nochmal ganz kurz

01:19:09.815 --> 01:19:11.555
zu meinem, da würde ich gerne einknüpfen, aber

01:19:11.555 --> 01:19:13.835
wo ich halt davor stehe ist, wenn

01:19:13.835 --> 01:19:14.295
wir

01:19:14.295 --> 01:19:17.375
Feature Extraction

01:19:17.375 --> 01:19:18.275
halt haben

01:19:18.275 --> 01:19:20.655
wo

01:19:20.655 --> 01:19:23.095
ja durchaus teilweise

01:19:23.095 --> 01:19:26.055
eine Qualität von Features

01:19:26.055 --> 01:19:28.295
die eine sehr hohe kognitive Leistung

01:19:28.295 --> 01:19:28.975
erstmal haben

01:19:28.975 --> 01:19:30.815
deswegen geht mir dieses

01:19:30.815 --> 01:19:33.075
Krebszellenerkennungsding nicht aus dem Weg

01:19:33.075 --> 01:19:35.375
es geht ja nicht darum, dass

01:19:35.375 --> 01:19:38.655
das ist ja kein Imageprocessing

01:19:38.655 --> 01:19:40.355
was da stattfindet

01:19:40.355 --> 01:19:41.135
sondern

01:19:41.135 --> 01:19:43.495
ich habe ein ganz konkretes Modell gerade

01:19:43.495 --> 01:19:45.975
die machen halt kein

01:19:45.975 --> 01:19:47.075
Imageprocessing

01:19:47.075 --> 01:19:48.855
sondern die haben

01:19:48.855 --> 01:19:51.995
Feature-extrahierte Sachen, wo Menschen halt

01:19:51.995 --> 01:19:53.275
auf so einen Fleck drauf gucken

01:19:53.275 --> 01:19:55.675
und sagen, der hat folgende Eigenschaften

01:19:55.675 --> 01:20:01.235
und das sind sehr, sehr kognitiv hochwertige Eigenschaften.

01:20:01.555 --> 01:20:03.455
Also hat es eine regelmäßige Kante?

01:20:03.955 --> 01:20:06.075
Ist es irgendwie besonders scharf abgegrenzt?

01:20:06.435 --> 01:20:09.615
Hat es irgendwie kleine Ausschlümpfungen?

01:20:09.715 --> 01:20:11.175
Hat es dies, hat es das, hat es jenes?

01:20:11.295 --> 01:20:13.555
Und das sind die Features, die dann in das Modell reingehen,

01:20:13.675 --> 01:20:17.355
wo er sagt, okay, bei dem mit diesen Eigenschaften würde ich sagen,

01:20:17.855 --> 01:20:20.655
das ist eine Krebszelle, bei dem anderen, das ist es nicht,

01:20:20.755 --> 01:20:23.215
bei dem nächsten, das ist es und darauf kannst du halt ein Modell trainieren.

01:20:23.215 --> 01:20:25.055
und so. Wenn du sowas trainierst,

01:20:25.095 --> 01:20:26.875
so ein Modell, und du findest mit den

01:20:26.875 --> 01:20:29.095
Qualitätskriterien, die du zwischen deinen Tests und deinen

01:20:29.095 --> 01:20:31.055
Trainingsdaten heraus, dass das gerade nicht

01:20:31.055 --> 01:20:33.055
passt, dann kannst du das

01:20:33.055 --> 01:20:34.575
als Signal nehmen, dass du als Mensch

01:20:34.575 --> 01:20:37.055
hergehen musst und sagen musst, das Modell reicht

01:20:37.055 --> 01:20:38.455
so nicht, das kann ich so nicht in Betrieb nehmen.

01:20:39.775 --> 01:20:41.015
Aber das Modell

01:20:41.015 --> 01:20:42.875
selber kann dir nicht sagen, ja,

01:20:43.575 --> 01:20:45.315
überleg dir mal nochmal, ob die Farbe

01:20:45.315 --> 01:20:47.095
eine Rolle spielt. Das kann das

01:20:47.095 --> 01:20:47.915
Modell halt nicht.

01:20:49.015 --> 01:20:50.055
Da würde ich sagen,

01:20:50.055 --> 01:20:52.155
also das kommt halt

01:20:52.155 --> 01:21:22.135
und Jochen unterhalten sich über die Programmiersprache Python

01:21:22.155 --> 01:21:52.135
und Jochen unterhalten sich über die Programmiersprache Python

01:21:52.155 --> 01:22:05.315
Ja, das kann mit den Daten arbeiten, das kann auf den Daten ganz coole Sachen machen und auch diese automatischen Feature-Experimente, die können alles. Aber dann zu sagen, du hast mir jetzt Fotos gezeigt von den Zellen, ich bräuchte aber mal noch, was der die letzte Woche gegessen hat.

01:22:07.055 --> 01:22:09.695
Ja, die Auflösung beim Vieljährigen ist auch einfach viel höher.

01:22:11.255 --> 01:22:12.495
Viel mehr Informationen drin.

01:22:14.735 --> 01:22:15.295
Viel, viel mehr.

01:22:15.295 --> 01:22:18.815
Keine Ahnung, was Menschen machen, weiß ich jetzt nicht

01:22:18.815 --> 01:22:20.475
aber

01:22:20.475 --> 01:22:23.995
dass man andere Informationen mit rein

01:22:23.995 --> 01:22:25.015
nimmt, das geht auch

01:22:25.015 --> 01:22:27.975
Was ich aber sage ist, das Modell

01:22:27.975 --> 01:22:29.995
kann dir nicht sagen, gib mir diese

01:22:29.995 --> 01:22:31.055
Art von anderen Informationen

01:22:31.055 --> 01:22:32.475
Nö, aber dann können die alle gehen

01:22:32.475 --> 01:22:34.055
Genau

01:22:34.055 --> 01:22:37.535
Ich glaube aber, das ist etwas

01:22:37.535 --> 01:22:40.135
Ich versuche

01:22:40.135 --> 01:22:41.875
noch zu dem Punkt zu kommen

01:22:41.875 --> 01:22:42.915
wo ich da stehe

01:22:42.915 --> 01:22:43.915
und die Technik.

01:22:43.915 --> 01:22:48.915
Das ist was, wo Machine Learning einfach falsch wahrgenommen wird.

01:22:48.915 --> 01:22:53.715
Von, das löst irgendwie diese und jene und so Probleme und alles.

01:22:53.715 --> 01:22:58.575
Aber Machine Learning kann nie die eigenen Grenzen erkennen und überschreiten.

01:22:58.575 --> 01:22:59.575
Das geht halt nicht.

01:22:59.575 --> 01:23:05.795
Und das ist für mich dieser Punkt, weswegen Augmentation so wichtig ist, dass du dort

01:23:05.795 --> 01:23:11.475
jemanden hast, der als körperliche, biologische Entität in der Welt ist und in der Lage ist,

01:23:11.475 --> 01:23:14.355
eigenen Grenzen in Frage zu stellen und zu überschreiten.

01:23:17.395 --> 01:23:19.895
Bei der Grenzerkennung gehe ich mit.

01:23:20.615 --> 01:23:24.095
Also dass ein Modell Safety Belts haben kann und sagen kann, du hier komme ich an meine

01:23:24.095 --> 01:23:27.835
Grenze, ja, aber es kann nicht selber sagen, ich mache jetzt ein Forschungsprojekt und

01:23:27.835 --> 01:23:28.415
finde raus.

01:23:29.975 --> 01:23:33.855
Man könnte ja vielleicht mehrere Netze miteinander kombinieren, dass du einen Cluster von Netzen

01:23:33.855 --> 01:23:35.815
hast, wo ein Netz auf sowas achtet.

01:23:35.915 --> 01:23:39.055
Das ist der Mensch, das ist nicht das Machine Learning, was das macht.

01:23:39.055 --> 01:23:43.235
Ja, also, ja, keine Ahnung.

01:23:43.795 --> 01:23:45.215
Also, wir sind halt noch nicht so weit.

01:23:45.955 --> 01:23:48.135
Wenn wir Katzen von Hunden unterscheiden können,

01:23:48.215 --> 01:23:49.075
sind wir total glücklich.

01:23:49.355 --> 01:23:51.735
Also insofern, ja, das mal schauen.

01:23:52.275 --> 01:23:52.675
Keine Ahnung.

01:23:53.395 --> 01:23:54.895
Ich finde, das mit den Katzen von Hunden unterscheiden

01:23:54.895 --> 01:23:56.775
war ein super Schlusswort für diese Machine Learning-Folge.

01:23:59.055 --> 01:23:59.455
Ja.

01:24:01.755 --> 01:24:02.995
Hattet ihr noch einen wichtigen Punkt?

01:24:03.055 --> 01:24:04.215
Ich wollte euch nicht ganz so abwürgen.

01:24:04.215 --> 01:24:07.215
Ja, äh, tatsächlich...

01:24:07.215 --> 01:24:10.015
Nee...

01:24:10.015 --> 01:24:11.575
Sonst machen wir einfach das nächste Mal.

01:24:11.815 --> 01:24:13.495
Stimmt, wir sind auch schon eine ganze Zeit dran, ne?

01:24:13.735 --> 01:24:14.575
Ja, und es ist spät.

01:24:14.875 --> 01:24:17.235
Was ich noch spannend fände, wenn vielleicht auch Hörer

01:24:17.235 --> 01:24:19.635
an der Stelle wollen, dass wir

01:24:19.635 --> 01:24:21.615
dem Thema treu bleiben und damit

01:24:21.615 --> 01:24:23.355
nochmal, weil ich glaube, das können wir nochmal ein bisschen,

01:24:23.455 --> 01:24:24.715
wenn ich da tiefer angekommen bin,

01:24:25.015 --> 01:24:27.475
nochmal ein bisschen praktischer, ein bisschen Python-orientierter machen,

01:24:27.895 --> 01:24:29.575
weil wonach ich tatsächlich momentan so ein bisschen

01:24:29.575 --> 01:24:31.575
Ausschau halte, ist so ein bisschen Spielprojekte,

01:24:32.415 --> 01:24:33.715
nach denen ich nämlich

01:24:33.715 --> 01:24:35.415
mal genau das ausprobieren will, so in welchen

01:24:35.415 --> 01:24:37.595
Anwendungsfällen von qualitativer

01:24:37.595 --> 01:24:39.315
Bewertung und für diese ganzen unterschiedlichen

01:24:39.315 --> 01:24:40.875
Teildisziplinen von Machine Learning

01:24:40.875 --> 01:24:43.415
auf welche Arten von Daten kann man das

01:24:43.415 --> 01:24:44.715
eigentlich mal loslassen, weil

01:24:44.715 --> 01:24:47.375
da merke ich so, jetzt langweilig muss ich

01:24:47.375 --> 01:24:49.255
da mal einfach irgendwas selber bauen

01:24:49.255 --> 01:24:51.635
mit den eigenen Daten, die hier so rumfliegen.

01:24:52.315 --> 01:24:53.455
Vielleicht gibt es ja auch noch ein paar Leute,

01:24:53.595 --> 01:24:55.375
die gerade ein Haus gebaut

01:24:55.375 --> 01:24:57.275
haben und ein bisschen Hausautomatisierung machen.

01:24:58.135 --> 01:24:58.935
Wir kommen so nicht.

01:24:58.935 --> 01:25:00.495
Oh ja, das ist auch noch ein großes Thema.

01:25:01.155 --> 01:25:02.475
Genau, schreibt das doch an

01:25:02.475 --> 01:25:03.915
hallo.pythonpodcast.de

01:25:03.915 --> 01:25:05.815
und sagt uns Bescheid, wie er das fand.

01:25:07.795 --> 01:25:08.015
Ja.

01:25:08.755 --> 01:25:10.395
Ja, dann einen wunderschönen guten Abend.

01:25:10.715 --> 01:25:11.675
Bleibt uns gewogen.

01:25:12.395 --> 01:25:13.615
Schön, dass Christian wieder dabei war.

01:25:15.235 --> 01:25:15.855
Gerne, jederzeit.

01:25:17.215 --> 01:25:18.275
Ja, dann hören wir uns

01:25:18.275 --> 01:25:19.955
nächstes Mal. Alles klar.

01:25:20.135 --> 01:25:21.555
Tschüss. Tschüss. Ciao.
