 Ja und damit herzlich willkommen auch auf dem Übersetzungsstream aus der Kabine. Es begrüßen euch Stefan, Alpern und Tribut. Wir werden heute den Talk Deep Learning von Toyby übersetzen und Toyby wird uns heute zeigen, warum sich Leute so häufig an die Stirn fassen müssen, die mit Deep Learning arbeiten, wenn sie die Nachrichten lesen. Eine große Runde von Applaus bitte. Ja, hallo, guten Morgen. Herzlich willkommen zur Einführung für Deep Learning. Der Titel wird euch schon sagen, worum es hier heute geht. Ich will eine Einführung geben, wie die Deep Learning funktioniert. Was passiert in dieser schwarzen Box? Aber ganz am Anfang, wer bin ich eigentlich? Ich bin Toyby, das ist ein Name aus dem Deutschen. Es hat mit Spielzeug oder Bienen nichts zu tun. Ihr werdet meine Stimme vielleicht schon mal gehört haben. Ich bin im Nussschale-Podcast zu hören. Heute habe ich ein bisschen mehr Zeit und es gibt hübsche Animationen, die hoffentlich helfen bei der Erklärung. Tagtäglich bin ich Forscher bei einem Forschungsinstitut für Computer sehen und ich versuche Arten zu finden, wie man dem Computer beibringen kann, zu verstehen, was er sieht. Also insbesondere, wie man Zellen erkennen kann oder zu allererst Zellen erkennen kann. Und das ist tatsächlich komplizierter, als es auf den ersten Blick klingt. Fangen wir also an mit einem Intro für Deep Learning. Wir wissen alle, wie man programmiert. Wir programmieren auf eine sehr einfache Art und Weise. Es gibt eine gewisse Menge An-Eingabe und dann gibt es einen Algorithmus, der sagt, mach das, mach das. Wenn wir das machen, dann machen wir irgendwas anderes und dann erzeugen wir irgendeine Art von Ausgaben. Und das ist überhaupt nicht, wie Machine Learning funktioniert. Bei Machine Learning geht man davon aus, dass man Eingabe und Ausgabe hat. Und man hat ein statistisches Modell. Und das statistische Modell ist flexibel innerhalb gewisser Parameter. Und das kann es auch lernen anhand der Ein- und Ausgaben, die man ihm zum Training gibt. Das heißt, man erzeugt das statistische Modell aus dem Input, den man haben will und dem Output, den man haben will. Also schauen wir uns mal an, wie das zum Beispiel funktionieren könnte. Wenn man sagt, wir haben zwei Arten von Tieren. Also Einhörner und Hasen. Und wenn wir jetzt einen Algorithmus suchen, der uns sagt für eine gewisse Eingabe, ist das jetzt ein Einhorn oder ist das jetzt ein Hase? Jetzt können wir einen einfachen Algorithmus schreiben, der das kann. Aber wir können es auch mit Machine Learning machen. Das erste, was wir dafür brauchen, ist eine gewisse Menge an Eingaben. Also ich suche mir zwei Merkmale, die mir sagen, das ist entweder ein Einhorn oder ein Hase. Also diese Dinger, die nennen wir Features, Eigenschaften. Und die beschreiben eine gewisse Sache, was wir klassifizieren wollen. Und die Klasse ist in dem Fall das Tier. Also jetzt brauchen wir Trainingsdaten, also Eingabe. Also Pappärchen von Geschwindigkeit und Größe in dem Fall. Und was ich auch brauche, ist Information über den Output, den ich dafür sehen will. Also in dem Fall die Klasse, also Einhorn oder Hase. Also schauen wir uns mal an, ein statistisches Modell zu finden, so dass wir diese beiden Klassen auseinanderhalten können. Eine Klasse für die Hasen, eine für die Einhörner. Hier können wir ein sehr einfaches statistisches Modell verwenden. Hier nehmen wir einfach eine gerade Linie. Der Learn-Prozess findet nun heraus, wo wir genau die gerade hinlegen wollen, wo in diesem Featurespace. Und da kommt dann diese orangene Linie raus, genau in der Mitte zwischen dem Einhorn und dem Hasen. In der realen Welt ist es aber nicht so einfach, hier war das simplifiziert. Hier sehen wir eher einen Datenpunkte, wo die beiden Klassen nicht klar separierbar sind. Zum Beispiel hier gibt es einige Punkte, die nicht klar identifiziert werden können. Wenn wir hier wieder auf die gerade schauen, dann separiert das Training-Set nicht genau. Das heißt, wir müssen nochmal genau kontrollieren, ob alles stimmt. Dieses Problem, den wir zu wenig trainiert haben, das Modell kann nicht voll abdecken, was wir ans Output sehen wollen. Das entgegengesetzte Modell ist, dass wir für jedes Beispiel auswendig gelandt haben, was die richtige Ausgabe wäre, ein übertrainiert. Das Ergebnis ist eine perfekte Unterteilung zwischen Einhornern und Hasen, aber das nur für die gegebenen Daten, nicht für neue Daten. Das heißt, wenn wir neue Daten geben, wird das wahrscheinlich falsch bewertet werden. Perfekt für dieses Modell wäre vielleicht die dieser Klassifier, dann könnte man ... Und bei Machine Learning, da ist die Aufgabe eben, diesen perfekten, diese perfekte Kurve zu finden. Also schauen wir uns mal ein anderes Modell an, eines, das ihr euch vielleicht schon mal angeschaut habt. Neuronale Netze. Neuronale Netze sind inspiriert vom Gehirn oder genau genommen von den Neuronen im Gehirn. Neuronen sind sehr, sehr kleine Objekte im Gehirn, die eine gewisse Menge an Eingaben in Ausgabe verwandelt. Das kommt euch bekannt vor. Und die Eingaben sind hier üblicherweise elektrische Signale. Und wenn die stark genug sind, dann werden sie auch ein elektrisches Signal raus senden. Und das können wir modellieren in einem Computer als Ingenieure. Das heißt, wir nehmen ein einzelnes Neuron. Das ist einfach eine Kombination Eingaben. Hier einfach nur in dem Beispiel drei Eingaben. Wir nennen die hier ein i1, i2, i3 und eine Ausgabe, die nennen wir o. Und jetzt schauen wir uns tatsächlich auch ein paar mathematische Gleichungen an. Das wird aber nicht sehr viele geben. Also macht euch da keine Gedanken drüber, ist auch sehr, sehr einfach. Und wir brauchen noch eine Sache, wenn wir Eingabe auf Ausgabe umrechnen wollen, nämlich die Gewichte. Gewichte sind einfach nur Zahlen, die wir jetzt w1, w2 und w3 nennen. Und wir nehmen diese Gewichte und wir multiplizieren sie mit ihrer Eingabe. Also Eingabe 1 mal Gewicht 1, Eingabe 2 mal Gewicht 2 und so weiter. Und diese Summe, das ist einfach unsere Ausgabe. Aber das stimmt jetzt nicht ganz, denn es gibt hier noch, es wird noch etwas komplizierter. Wir machen hier noch eine Aktivierungsfunktion dazu. Eine Aktivierungsfunktion ist nur eine Abbildung von einem Skalawert auf einem anderen Skalawert, in dem Fall von dem, was wir als Ausgabe gekriegt haben, auf irgendwas, das besser darauf passt, was wir brauchen. Das könnte in dem Fall etwas Binäres sein, wo wir alle negativen Zahlen auf Null abbilden und alle positiven Zahlen auf 1. Und diese Null und 1 wird dann zum Beispiel was darstellen, zum Beispiel Hase oder Einhorn. Schauen wir uns also zum Beispiel an, wie wir das Beispiel von gerade mit Hasen und Einhornen hier abbilden. Wir benutzen einfach Größe und Geschwindigkeit und eine Nummer 10, die wir einfach nur zufällig gewählt haben. Und wenn wir jetzt uns die Quellungen angucken, dann kriegen wir für alle negative Zahlen, also Geschwindigkeit plus Größe kleiner als 10, kriegen wir Null und 1 für alle Zahlen, wenn Geschwindigkeit und Größe größer als 10 sind. Und auf die Art und Weise haben wir wieder eine Trennlinie zwischen Einhörnern und Hasen. Aber es ist wieder ein sehr, sehr einfaches Modell. Wir wollen komplizierter werden, um komplizierter Dinge auch darstellen zu können. Also was machen wir? Wir nehmen mehr von diesen Neuronnen. Wir nehmen die drei Eingabewerte und tun sie in ein Neuron und auch in ein zweites und ein drittes Neuron. Und die Ausgabe von diesen drei Neuronen, die tun wir als Eingabe für ein weiteres Neuron. Und das nennen wir mehr Ebenen per Zeptron. Und die ganze Konstruktion nennt man dann Neurales Netzwerk. Also wie trainieren wir das? Wie lernen wir, was dieses Netzwerk abbilden soll? Wir wollen Eingabe auf Ausgabe abbilden und wir können unsere Gewichte ändern. Also zuerst nehmen wir eine Menge an Trainingsbildern und kriegen dann eine gemisse Menge an Ausgaben. Und dann kriegen wir Ausgaben, aber die sind möglicherweise nicht die richtigen. Die kennen wir ja. Also wir schauen uns hier die berechneten Ausgaben an und den erwarteten Ausgaben. Und in dem Fall wäre der beste Fall 0101. Aber wir haben in diesem Fall zwei falsche Fehler, da können wir jetzt was lernen. Nämlich in welche Richtung wir die Gewichte ändern müssen. Das ist jetzt etwas vereinfacht, aber prinzipiell erhöht man die Gewichte, wenn man eine größere Zahl braucht oder man reduziert die Gewichte, wenn man eine kleinere braucht. Und um rauszufinden, wie weit wir das ändern müssen, schauen wir uns den Fehler an. Also einfach nur den Abstand zwischen erwarteten und tatsächlichem, tatsächlicher Ausgabe. Das wird hier Verlustfunktion genannt. Und es gibt einen zweiten Term. Denen wir die Rate des Lernens. Die zeigt uns, wie schnell wir die Gewichte ändern sollen oder wie schnell wir die anpassen sollen. So können wir jetzt ein Modell lernen. Wir haben ein paar mathematische Gleichungen, die uns sagen, wie wir unsere Gewichte ändern müssen, basierend auf dem Fehler und den Gewichten. Und das ist dann auch schon der komplette Lernprozess. Schauen wir uns das nochmal an. Wir haben hier ein Eingabe-Layer, eine Eingabe-Ebene und wir haben mehrere kleine versteckte Ebenen und wir haben eine Ausgabe-Ebene und wir haben möglicherweise mehrere Neuronen da, falls wir mehrere Klassen haben. Überall da drin haben wir Gewichte, die wir bestimmen müssen, aber wir haben auch mehr Parameter, nämlich die Anzahl der Ebenen, die Anzahl der Neuronen in den Ebenen, die Aktivierungsfunktion, die Lernrate usw. Und das müssen wir alles bestimmen und das liegt dann an der eigentlichen Problem, was wir dafür nehmen. Die Frage, die wir also beantworten müssen, ist, was voll soll unser neue Ronalesnetz erzielen? Soll unterschieden werden Tier, Hase, Einhorn, Text, Spam, Keinsbam, Patient, gesund, krank, ein Bild, Katze oder Hund. Wir haben bereits gesehen, dass wir bei den Tieren sehen müssen, was für Eigenschaften es hat, zum Beispiel eine Größe, Geschwindigkeit, Farbe. Das heißt, irgendeine Art von Eigenschaft, die das Tier beschreiben kann. Diese Eigenschaften, denn wir auch Feature. Bei den Eigenschaften kann auch die sein, dass sie mehrere Untereigenschaften haben, zum Beispiel RGB für Farbe. Beim Text müssen wir uns wieder überlegen, wie wir das aus den Daten rauslesen können. Das heißt, wie das drinsteckt. Zum Beispiel, ob bestimmte Worte vorhanden sind oder es wird immer komplexer, je schwieriger die Unterscheidungsaufgabe ist. Zum Beispiel beim Patienten, wie können wir die medizinische Geschichte des Patienten so aufschreiben, dass wir das klassifizieren können? Wie können wir aufschreiben, ob bestimmte Symptome vorhanden sind? Beim Bild, also das, worauf das, womit ich tatsächlich arbeite, ist es wiederum sehr kompliziert. Wir haben viele Werte, aber eben nur Werte für einzelne Pixel. Das ist sehr schwierig, wiederum zu überführen in ein neuronales Netzwerk. Ich zeige euch jetzt ein Beispiel. Dieses Bild ist ein sehr berühmtes Bild und jeder benutzt es in Computersäen. Dieses Bild hat viele unterschiedliche Eigenschaften, unterschiedliche Formen, unterschiedliche Kanten. Es handelt sich um ein Ausschnitt des Frontbilds, des Playboys, weswegen es sehr populär war bei der üblicherweise männlichen Zuhörerschaft. Lass es uns zum Teil in eine 6x6 in 5x5-Pixel-Bild. Man kann sehr schnell sehen, dass wenn man in 5x5-Pixel unterteilt und dann in jede Neurone alle diese 25-Pixel einführt, das ist ein sehr kompliziertes Modell. Aber es gibt noch mehr Probleme. Zum einen haben wir die Pixel voneinander getrennt. Wir haben keine Verbindung mehr zwischen den Pixel. Wir haben keine Informationen mehr über die Verbindung relativ zwischen den Pixel. Das heißt, bei Bewegungen des gesamten Bildes können wir nicht verstehen. Wenn man das gesamte Bild um ein Pixel nach rechts oder links bewegt, geht das gesamte gelernte verloren. Das kann man verbessern, indem man einen Zwischenschritt macht. Indem man einfach ein zusätzliches, ein zusätzliche Ebene hinzufügt. Und da schaut man sich jetzt vier Eingabe-Werte an. Und das selbe Netzwerk wird dann auch wieder um ein Pixel nach rechts geschoben und so weiter, sodass wir jetzt quasi ein 2D-Bild erzeugen, dass Informationen über die Nachbarschaftsbeziehungen behält. Und wir haben eine sehr kleine Anzahl an Gewichte, nicht wie die große Anzahl von Parametern, die wir vorhin hatten. Und das können wir jetzt benutzen, einmal oder zweimal oder mehrere hundert Male. Und das wird dann gemacht, wenn wir von Deep Learning sprechen, also Tiefen lernen. Hier werden nur wenige Verbindungen benutzt und das erlaubt uns dann, sehr tiefe Dinge auszudrücken. Wir können ein ganzes Bild in nur sehr wenigen Werten ausdrucken. Und was die bedeuten, das wird jetzt über den Lernprozess beigebracht. Wir können zum Beispiel diese wenigen Werte jetzt benutzen, für ein Klassifizierungs-Netzwerk benutzen. Zum Beispiel das Netzwerk, was wir vorhin gesehen haben. Aber wir können auch was Smarteres benutzen. Wir können die inverse Operation benutzen. Zum Beispiel das selbe Bild, das nennt man dann ein Autoencoder. Die sind extrem hilfreich, aber auf den ersten Blick wirken sie nicht so. Also wenn ich zum Beispiel prüfen will, ob ein Bild einen Fehler hat, zum Beispiel von einem Stoff oder sowas, dann trainieren wir das Bild mit normalen Bildern. Und wenn wir dann ein defektes Bild haben, dann ist das Netzwerk nicht in der Lage, diesen Fehler zu finden. Und der Unterschied zwischen dem Bild, dem echten Bild und dem Bild aus dem neuronalen Netz, das wird euch dann zeigen, wo die Fehler sind. Aber wir können auch noch einen Schritt weitergehen. Also sagen wir mal, wir wollen was völlig anderes kodieren, die Informationen in dem Bild, aber in einer anderen Repräsentierung. Also wenn wir zum Beispiel wieder drei Klassen haben, also Hintergrund in grau, Hut oder Hutschmuck in blau oder und Person in grün. Und das kann man in anderen Dingen auch benutzen, zum Beispiel wenn wir hier das Bild einer Straße haben und wir wollen zeigen, wo es einen Fußgänger gibt. Es ist super nützlich. Oder wir haben ein MRI-Scan von einem Gehirn. Wo ist der Tumor? Können wir das möglicherweise lernen? Und ja, das können wir mit Methoden wie diesen hier. Wenn sie sinnvoll trainiert werden, da sprechen wir nachher noch drüber. Also wir hoffen sowas kommt raus, aber die Wahrheit ist eher nahe an sowas. Wir haben nicht die wahre Form, sondern etwas verzerrtes. Und auch hier müssen wir wieder lernen. Wir nehmen ein Bild, tun es durch, das geben wir es als Input in das Netzwerk und wir haben eine Information, wie wir wollen, dass es aussieht. Und dann kriegen wir wieder so eine Art Verlustfunktion. Also in dem Fall die Überlappung zwischen dem der Form, die wir bekommen und der Form, die wir haben wollen. Und wir benutzen diesen Fehler, diese Verlustfunktion, um die Gewichte von dem Original-Netzwerk zu verändern. In Wirklichkeit ist es noch komplizierter. Wir haben mehr Ebenen und wenn die Ebenen auch nur ein bisschen anders aussehen, dann müssen wir da komplett wieder von vorne anfangen. Und wir brauchen sehr viel Trainingsdaten. Das werdet ihr auch sehr häufig hören in Zusammenhang mit Deep Learning. Ihr braucht unglaublich viele Trainingsdaten, damit das funktioniert. Bilder sind sehr, sehr komplexe Dinge und damit man da Bedeutung herausziehen kann, braucht das Netzwerk eine große Anzahl von verschiedenen Bildern. Also ich habe euch jetzt schon einige Dinger gezeigt, die wir als Architektur für diese Netzwerke benutzen und der komplette Faltungskodierer benutzt viele Bilder, um quasi diese Bilder zu erzeugen. Um es nur in ein paar Parameter umzuformen und der Decoder nimmt dann diese paar besonderen Zahlen und versucht das ursprüngliche Bild wieder herzustellen. Entweder das gleiche Bild oder irgendeine andere Präsentation dieses Bildes. Wir haben auch schon das komplett verbundene Netzwerk gesehen, wo jedes Neuron in der nächsten Ebene verbunden ist. Das könnte natürlich gefährlich sein, falls wir zu viele Parameter haben. Hier in diesem Netzwerk haben wir die meisten Parameter, weil wir für jeden Knoten und jeden Zielknoten ein eigenes Gewicht haben. Wir können auch einen Pulling Layer haben. Das ist das gleiche wie ein Convolution Layer, also ein Faltungslayer. Und das funktioniert, weil dieses Neuron sich raus sucht, welcher Wert am höchsten ist und nimmt dann nur diesen Wert. Das funktioniert super, wenn man das Bild verkleinern möchte, insbesondere wenn man irgendwie Informationen wegwerfen möchte, die nicht wichtig ist. Wir können auch noch andere Techniken verwenden, zum Beispiel ein Dropout Layer, also ein Backware Flayer. So können wir dafür sorgen, dass Daten ab und zu weggeworfen werden und das gesamte Netzwerk bekommt, wird widerstandsfähiger gegenüber Fehlerdaten. Als nächstes möchte ich einige Modelle zeigen, wie wir die trainieren und wie die funktionieren. Wir fangen an mit einem vollständigen Faltungsdekodierer. Ich möchte gerne dieses Modell nehmen, eine Zahl hineintun und bekomme am Ende eine Zahl hinaus, zum Beispiel ein Bild von einem Pferd. Wenn ich eine andere Zahl benutze, soll ein Weiterhin ein Bild eines Pferdes herauskommen, aber eines anderen Pferdes. Das heißt, irgendwie es steckt in den Zahlen, die ich reinstecke, die Eigenschaft des Pferdes drin. Aber das ist schwierig, weil es natürlich keine Verknüpfung gibt zwischen der Eigenschaften eines Pferdes und diesen Zahlen. Das heißt, man muss irgendwie lernen, wie man diese Verknüpfung herstellen kann. Aber Computer-Ingenieure sind schlau und haben kreative Ideen. Das heißt, dieses Teil nennt sich ein Generator, das heißt, eine Funktion, die aus Zahlen etwas herstellen kann. Aber wir müssen das erst trainieren, das heißt, am Anfang sind es nicht nur Pferde, die wir raus bekommen, sondern am Anfang bekommen wir auch besondere Pferde heraus, zum Beispiel ein Hörner. Man kann also mit diesen Daten nicht direkt trainieren, sondern man muss noch ein zweites Netzwerk bauen, um das weiter zu bearbeiten. Dieses Netzwerk nennen wir Unterscheider, also Discriminator. Diesen Netzwerk geben wir die Daten aus dem Generator und echte Bilder von Pferden. Der Unterscheider sagt mir, ist es ein echtes Bild von einem Pferd oder kein echtes Bild von einem Pferd. Das heißt, dieser Unterscheider liefert mir ein Wahrheitswert des Bildes. Ich möchte also dieses Netzwerk am Ende benutzen, um damit der Unterscheider mir etwas darüber sagt, wie gut der Generator funktioniert. Die Verknüpfung davon nennt man dann generative, gegeneinander arbeitende Netze. Und als Nächstes kommt dann der eigentliche Trainingsprozess. Hierfür habe ich als Beispiel, hierfür zunächst einmal als Beispiel, es gibt eine Datenbank vieler handschriftlich geschriebener Ziffern, also der Zahlen von 0 bis 9. Zunächst habe ich zufällige einige dieser Beispiele genommen und habe sie benutzt, um den Discriminator zu trainieren. Und hier, als Beispiel, was aus dem Generator herausgekommen ist, am Anfang geht es los mit nur Rauschen und umso mehr Trading-Zyklen gelaufen sind, umso besser wird die Ausgabe des Generators und schließlich keine Generator handschriftlich aussehende Ziffern produzieren. Und das passiert, wird hergestellt aus im Wesentlichen nur Rauschen und das finde ich total faszinierend. Das ist jetzt natürlich ein Beispiel, wo es funktioniert. Es hängt sehr viel davon ab, was für ein Datensatz man hat und wie man das trainiert. Aber wenn es funktioniert, dann kann man auf diese Art und Weise Schriftarten generieren. Zeichen, 3D-Objekte, Bilder von Tieren, was auch immer ihr wollt. Also jetzt schauen wir uns was noch Verrückteres an. Wir benutzen jetzt zwei von diesen Gewals und sagen, wir haben Bilder von Pferden und Bilder von Zebras. Und ich möchte jetzt gerne diese Pferdebilder zu Zebra-Bilder konvertieren und umgekehrt. Das heißt, ich möchte dasselbe Bild haben, nur dass das andere Pferd, das andere Tier darin steht. Und ich habe jetzt aber natürlich keine Trainingssituation, wo ich sage, ich habe nur, ich habe dasselbe Bild mit einmal Pferd und einmal mit Zebra. Kein Problem. Wir nehmen ein neuronales Netzwerk, wir nennen jetzt eines, das nennen wir Generator, also eines das Pferde zu Zebras und eines was Zebras zu Pferden umwandelt. Und dann haben wir auch noch zwei Unterscheider, die also entscheiden können, ist das ein echtes Pferd und ein echtes Zebra oder nicht. Und jetzt müssen wir noch eine gewisse Menge an Training da reinstecken. Das heißt, wir müssen rausfinden, hat es funktioniert, was wir machen wollen und wir nehmen das Bild von einem Pferd, tun das durch einen Generator und erzeugen einen Zebra. Und wenn wir jetzt, wenn wir jetzt ja am Ende wieder mit dem selben, dasselbe Bild rauskommt, dann hat unser Model funktioniert. Ich habe jetzt einfach normalen zufälliges Bild von einer kostenlosen Bildbibliothek aus dem Internet, von einem Pferd und einem Zebra und das funktioniert überraschend gut. Also es muss auch kein Bild sein, man kann auch Text zu Bildern konvertieren. Ihr beschreibt das Bild, ihr könnt daraus dann ein Bild bekommen. Ihr könnt sagen, dass das Alter beschreiben oder ihr könnt den Stil von Bildern verändern. Ihr könnt ein Bild von Van Gogh nehmen und es sieht plötzlich aus wie aus einer komplett anderen Kunst-Epoche. Was man zum Beispiel machen kann, ist nehmen wir mal an, wir haben so ein Klassifizierungs-Netzwerk. Das hier ist ein Bild von einer Zahnbürste. Klar, das ist eine Zahnbürste. Aber wie widerstandsfähig ist das? Funktioniert es tatsächlich auch, wenn wir von Eingaben angehen, die bösartig sind. Also wir haben ein zweites Netzwerk, das nennen wir bösartiges Netzwerk. Also wir suchen jetzt quasi nach nur einem einzelnen Punkt im Bild, nur ein ganz kleiner Punkt und wir wollen das ändern, sodass dann das Netzwerk sagt, das war in Wirklichkeit ein Octopus. Oder wir ändern ganz viele Punkte, aber nur ganz, ganz wenig. Ja, klingt schlecht, wenn das passiert. Ist auch schlecht, wenn man das nicht anschaut. Aber das können wir benutzen, um das Netzwerk zu trainieren. Es gibt immer einen Vorteil und einen Nachteil. Jetzt werde ich euch etwas über Text zeigen. Ich möchte Sätze für meinen Podcast generieren. Ich habe eine Neurende, was mir ein Wort gibt und ich benutze jetzt das letzte Wort, um das nächste Wort auch zu generieren, sodass wir in der nächsten Iteration immer wissen, was das Wort davor war. Ich habe versucht, ein Netzwerk so zu generieren, das zu meinen Podcast generiert. Das hat nicht funktioniert. Was ich gelernt habe, ist, dass ich nicht genug Trainingdaten habe. Man braucht sehr viele Podcast-Episoden, um ein Modell so zu trainieren. Und das ist ein sehr wichtiger Punkt. Wir brauchen sehr viel Trainingsdaten. Und je komplizierter unser Trainingsmodell oder unser Prozess wird, desto mehr Daten benötigen wir. Im einfachen Fall, wo wir einen beobachteten Lernprozess haben, also wo wir die Daten jeweils mit den Output-Daten haben, ist es einfach. Aber es gibt auch den komplizierter Fall, wo wir zwischen Pferden und Zebras transformieren wollten, wo wir keinen solchen Fall hatten. Noch schlimmer wird das Ganze, wenn wir keine gute Beschreibung haben, der Daten, die wir bereits haben. Das heißt, wenn wir nur wenig Information über die Daten haben, die wir einen Sicht einlernen wollen, dann müssen wir ohne vorher vorhandenes Wissen anfangen und bekommen am Ende bestenfalls ein Ja, das war toll zurück. Aber auch hierfür gibt es Methoden, wie man das automatisiert machen kann, wie man also auch ohne bekannte Vorwissen, ohne Bezeichnungen der Daten arbeiten kann. So, ich habe über Bilder geredet, ich habe über Eigenschaften geredet, ich habe darüber geredet, wie wir herausfinden können, welche Eigenschaften wichtig sind und wie man herausfinden kann, was darauf man lernen muss. Es gibt viele tolle Bildquellen, z.B. Flickr, aber es gibt aber auch vorbereitete Datenquellen, wo man sich nur anmelden muss und dann kann man einen Wettbewerb mit anderen Forschern treten, beim Klassifizieren, z.B. im medizinischen Bereich. Aber natürlich hat nicht jeder auch die Fähigkeit und die Ressourcen solche Klassifizierungen durchzuführen. Dieses ging primär darum, dass man Bilder sehr gut verarbeiten kann mit Deep Learning, vorausgesetzt man die Notwending heraus, man hat die Notwending-Ressourcen, aber man kann auch Text prozessieren oder Tonen, Daten aus zeitliche Daten. Man kann eigentlich fast alles benutzen als Datengwelle. Hört sich erstmal toll an, aber wir brauchen wirklich viele, viele Daten. Es gibt Firmen, die haben viele Daten, aber öffentlich verfügbar sind typischerweise deutlich weniger Daten. Aber die Gefahr davon ist natürlich, dass man am Ende etwas hat, was eine schwarze Kiste ist. Das heißt, wo man nicht weiß, was drin passiert. Man kann aber da auch herausliegen, wie wir selber lernen und wie das Netzwerk strukturiert ist und funktioniert. Für uns als Computer-Engineure ist es sehr schön, dass wir uns vorstellen können, was ungefähr die neuronale Netze tun, zumindest die ersten paar Ebenen. Aber man kann nicht mathematisch beweisen, wie es funktioniert und was es tun wird. Das heißt, es kann sein, dass die Beispiele sehr gut funktioniert, aber man kann sich nicht sicher sein, dass es auch in Zukunft passieren wird. Das heißt, ihr alle könnt damit anfangen, ihr müsst dafür nicht viel machen, ihr müsst nicht viel lernen, das Modell lernt für euch. Aber es ist sehr schwierig, sehr gut darin zu werden, damit man sie auch in Produktionen einsetzen könnte. Wenn ihr es wirklich ernsthaft verwenden wollt, stellt sicher, dass es tatsächlich das tut, was ihr wollt, dass es nicht irgendein Unsinn gelernt hat. Ihr habt bestimmt einen Talkie darüber gesehen, was für uns in dabei rauskommen können. Deswegen stellt sicher, dass es bei euch nicht passiert. Wenn ihr das tut, werdet ihr großartige Dinge erreichen. Das war die Einführung zu Deep Learning. Danke. Nun, jetzt ist Zeit für Fragen und Antworten. Wenn ihr eine Frage habt, stellt euch bitte an. Bitte stellt euch an. Eine Frage besteht aus einem Satz mit einem Fragezeichen, nicht drei Minuten sinnloses Gerede. Frage vom Nr. 7. Meine Frage ist, wie hast du die Beispiele für die Schreibweite nicht verstanden, wie du es gemacht hast? Wie hast du aus Rauschen die Bilder hergestellt? Ich werde es nochmal ganz kurz zusammenfassen. Ich habe euch gezeigt, wir haben ein Modell, da kann man ein Bild in nur ganz wenigen Werten darstellen können. Was hier passiert, ist genau der umgekehrte Weg. Also wir haben nur sehr wenige Werte, zufällige Werte. Wir wissen überhaupt nichts über diese Werte. Und wir können aus diesen Werten Bilder erzeugen. Das heißt, ich habe dieses Modell jetzt trainiert aus zufälligen Werten, Bilder zu erzeugen und die Bilder anzuzeigen. Und der Trainingprozess war ein Minimierungs- maximierungsspiel, so heißt das Minmax Game, wo zwei Netzwerke gegeneinander antreten, wobei ein Netzwerk versucht zu entscheiden, ob das Bild wahr ist oder fake und ein anderes Netzwerk, das diese Bilder erzeugt. Und indem wir das Netzwerk trainieren zwischen diesen zwei Typen von Bildern zu unterscheiden, können wir auch Informationen kriegen, die wir zum Training für das Netzwerk, das die Bilder erzeugt, benutzen können. Und was das Video zeigt, was bei diesem Trainingsprozess passiert. Wenn man Rauschen reintut, dann kriegt man Rauschen raus. Aber während das Netzwerk besser wird, wird also in dem Fall wir diese Bilder von handgeschriebenen Bildern, umso mehr wird das gemacht haben, umso mehr wurden die Ausgaben auch ähnlich zu diesen handgeschriebenen Ziffern. Jetzt Frage aus dem Internet. Können wir Grund für den Signalengel haben? Endlich geht es zum Interway. Josh fragt, gibt es Empfehlungen für einen Anfänger? Also ich habe da natürlich heftige Bias, also ich bin da voreingenommen. Aber ich denke, es ist ein großer, großartiger Anfang mit Python und PyTorch anzufangen. Viele Leute werden da jetzt eine andere Meinung haben und sagen, TensorFlow ist besser. Das mag schon sein, aber ich bin der Meinung fürs Anfangen auf jeden Fall nicht. Es gibt auch einige echt großartige Tutorials auf der PyTorch-Webseite. Und ihr könnt euch auch Webseiten anschauen wie OpenAI, wo man so ein Trainingsraum hat, wo man schon vorgegebene Datensätze hat. Und meine Empfehlung ist, schaut euch Python an und fängt mit den PyTorch-Einführungen an. Und es gibt auch von da aus einige GitHub-Repositories, die verlinkt sind. Zum Beispiel, also alle möglichen von Netzwerken, da gibt es ein Repository, das man benutzen kann, um damit anzufangen. Wir bleiben beim Internet. Mehr Fragen aus dem Internet. Ruminate fragt, bist du schon mal über ein Beispiel gestolpert, das sich mit Audio beschäftigt? Also ich persönlich, nein, also zumindest nicht direkt. Ich habe davon gehört, dass es Beispiele gibt, wo man zum Beispiel die Stimme ändern kann, sodass sie so klingt wie eine andere Person. Aber ich kann da nicht viel zuverlässiges sagen, meine Kompetenz ist bei Bildbearbeitung, tut mir leid. Ich denke, wir haben noch Zeit für eine weitere Frage. Wir haben jemanden bei Nummer 8. Die aktuelle Technologie und bitte um Gesichter zu erkennen, auf dem iPhone X. Ist es auch Git-Learning oder ist es was Einfaches? Ja, soweit ich weiß, ja. Das ist das Einzige, wo ich verlässlich was dazu sagen kann, aber es geht da nicht nur um Bilder, sondern benutzt auch andere Informationen. Also zum Beispiel Abstandsinformationen, die kodiert sind in Infrarotsignale. Wie genau das funktioniert weiß ich auch nicht. Aber iPhones zum Beispiel haben schon so eine Einheit eingebaut, die ein Chip, der nichts anderes macht als neurale Netzwerke, also nur diese Art von Berechnungen zu machen. Und viele Sachen, die da passieren, können parallel ausgeführt werden und diese Hardware-Architekturen, die können parallelisiert werden. Wie sie es genau machen, das weiß ich nicht. Ich selber habe noch eine komplett unabhängige Frage. Hast du das Design selber hergestellt für diese Folien? Ja, ich hatte etwas Hilfe. Es gibt ein großartiges Kongress-Design und ich habe das als Inspiration benutzt, um dieses Slides zu erzeugen. Also ja. Das ist ein wirklich tolles Design. Ja, herzlichen Dank und damit verabschieden wir uns auch.