
Genetic Algorithms – Coden nach dem Vorbild menschlicher DNA
24. November 2017, mit Joel Kaczmarek, Johannes Schaback
Dieses Transkript wurde maschinell erstellt. Wenn dir ein Fehler auffällt, schreib uns gerne zu diesem unter redaktion@digitalkompakt.de.
Joel Kaczmarek: Hallo und herzlich willkommen zu einem neuen Blackbox-Tech-Podcast von Digital Kompakt. Mein Name ist Joel Kaczmarek und ich bin wieder in technisch kompetenter Begleitung. Heute so technisch kompetent, ich weiß nicht mal richtig, worum es geht. Johannes, jedes Mal, wenn wir im Podcast sind, müssen wir sagen, es bin a while, wir machen das zu selten, unsere Abstände sind zu groß.
Johannes Schaback: Jetzt waren die Abstände wirklich viel zu lang, ich glaube zwei Monate. Ich habe fast vergessen, wie du heißt, Joel.
Joel Kaczmarek: Lange nicht gesehen, trotzdem wiedererkannt, sagt mein Vater immer. Ja, aber gut, Johannes muss ja auch an seine Firma denken. Hier sind ja auch Unternehmer am Werke und jetzt hat er mal Sabbatical einen Monat. Müsste man bei Gelegenheit auch was erzählen, wie man sowas macht, was man da macht. Machst du das, dass du da irgendwie so, sagen wir mal, das gezielt nutzt, dass du irgendwie Paper liest oder mal Apps ausprobierst?
Johannes Schaback: Oder Podcasts aufnehme. Ja, ganz genau. Also ich habe in der Tat ein Mini-Sabbatical jetzt im Oktober und versuche eigentlich die Sachen zu machen, für die ich sonst keine Zeit habe. Also insbesondere Podcasts. Meine eigene kleine Programmiersprache immer bauen, so ein bisschen so ein akademisches Projekt, was man so tut in einem Sabbatical.
Joel Kaczmarek: Wolltest du nicht auch mal ein Punkrock-Album aufnehmen?
Johannes Schaback: Ja, das wollte ich auch mal machen, aber das habe ich ehrlicherweise abgeschrieben.
Joel Kaczmarek: Nee, du wolltest aber auch mal, weiß ich noch, so einen RPG der Internet-Szene bauen, oder? War das nicht mal so?
Johannes Schaback: Das ist richtig. Ehrlicherweise, das ist eins von vielen Projekten, was zusammen mit dem Punkrock-Album leider von der Tischkante gefallen ist.
Joel Kaczmarek: Naja, widmen wir uns heute mal den lebendigen Themen. Und da haben wir es mit einem sowohl thematisch als auch personell mit einem echten Schwergewicht zu tun. Schwergewicht nicht in Bezug auf den Body Mass Index, sondern auf Kompetenzen. Stell dich doch mal ganz kurz vor, Thorsten.
Thorsten Reil: Thorsten Reil heiße ich. Ich bin seit ungefähr drei, drei, vier Monaten in Berlin. Hab, ich glaube, mein ganzes Erwachsenenleben in England verbracht. Und bin jetzt gerade rübergezogen nach Berlin, hab da studiert in England, eine Firma gegründet, die Firma verkauft vor drei Jahren und bin jetzt damit fertig und entspann mich gerade in Berlin.
Joel Kaczmarek: Wie hat sich denn nach England verschlagen, dass dein ganzes Erwachsenenleben da war?
Thorsten Reil: Ich war in Deutschland beim Bund und wusste nicht, was ich machen wollte. Wollte vielleicht Medizin studieren oder Psychologie und habe dann ein Buch gelesen von Richard Dawkins, das hieß The Selfish Gene, weil mir so mega langweilig war bei der Bundeswehr. Und es hat mir super gut gefallen. Es ist ein Buch über Evolutionsbiologie. Ich hatte keine Biologie in der Schule gemacht, das sofort abgewählt in der 10. Klasse, aber fand das Buch mega faszinierend. Und habe mich dann in England, in Oxford, war das, beworben, weil er da Professor war. Und bin dann angenommen worden, habe da Biologie studiert und danach einen Master's gemacht in Künstliche Intelligenz und danach einen Doktor angefangen in Komplexität in biologischen Systemen und dann die Firma gegründet.
Joel Kaczmarek: So viel zum Thema Schwergewicht hier, kompetenzseitig.
Johannes Schaback: Das ist der Wahnsinn. Ich habe Thorsten letzte Woche kennengelernt bei dem Lunch und ich war sofort hin und weg, weil Thorsten eben ein absolutes Schwergewicht ist in Gaming. Also jeder von uns kennt CSR Racing, dieses Drag Racing, aber eben auch in Artificial Intelligence. Also ich habe witzigerweise True Story, einen Ted Talk mal gesehen vor einiger Zeit. Ich glaube, es ist Zwei Jahre her. Es ging um Evolution, also wie Evolution in natürlichen Bewegungen, also wie quasi eine 3D-Figur lernt zu laufen durch Evolution. Und ich wusste nicht, dass das Thorsten war. Und jetzt verstehe ich erst, jetzt kommen sozusagen diese Punkte zusammen. Also Wahnsinn. Vielen, vielen Dank, dass du heute da bist. Superspannend.
Thorsten Reil: Supercool. Ich freue mich, hier zu sein.
Joel Kaczmarek: Sag doch mal ein bisschen was zu deiner Firma, weil das ist wahrscheinlich eine ganz gute Brücke zu unserem Thema. Du stapelst ja klein. Also du hast an Singa damals verkauft für über eine halbe Milliarde. Also wirklich, der nächste Kaffee geht auf dich, so wie ich das sehe. Was habt ihr genau gemacht?
Thorsten Reil: Als wir verkauft haben, waren wir hauptsächlich ein Hersteller von Spielen, gerade besonders iPhone-Spiele und haben mit CSR Racing eins der größten Racing-Spiele auf dem Markt gemacht mit, glaube ich, über 200 Millionen Downloads. Die Firma war aber ursprünglich angefangen. Das haben wir auch weiterhin gemacht mit Technologie für. Und speziell kam die Technologie daher, dass ich, als ich damals studiert habe und gerade den Doktor gemacht habe, dass ich versucht habe, Figuren zum Laufen zu bringen, die physikalisch simuliert waren. Speziell hieß das, dass wir neuronalen Netzwerke hatten. die diese Figuren gepowert haben sozusagen und die neuronalen Netzwerke sind trainiert worden über künstliche Evolution. Das war also ursprünglich noch ein wissenschaftlicher Ansatz und es stellte sich dann raus, dass man mit diesem Ansatz das hinkriegt, dass man physikalisch simulierte Zweibeiner zum Laufen bekommt. Anfänglich strampeln sie nur auf dem Boden herum, aber nach einiger Zeit fangen sie an, die ersten Schritte zu machen und laufen immer weiter. Und das Coole daran war, dass diese Charaktere komplett interaktiv waren. Normalerweise hat man das Problem bei Animationen, ob es jetzt bei Spielen ist oder Simulationen oder auch bei Movies, vor allen Dingen bei Spielen, dass es nicht interaktiv ist. Das, was man sieht, ist wirklich nur Daten, die man abspielt und wenn man dem Menschen etwas in den Weg stellen würde, würde er entweder durchlaufen oder vielleicht anhalten, aber er würde nicht damit interagieren können. Und das zweite Problem mit Animationen im Allgemeinen ist, dass sie nicht überraschend sein kann. Normalerweise pre-animated man alles, also man macht die Animation vorher, nimmt die auf und dann weiß man auch schon, was irgendwann rauskommt. Es kann niemals eine Überraschung geben oder was witziges oder humorvolles. Und diese Herangehensweise, die wir hatten, war anders, weil wir eine komplette Simulation des Körpers hatten des Menschen und dadurch war er komplett interaktiv und konnte auch überraschend sein. Das war das Grundprinzip. Wir haben dann festgestellt, dass es kommerzielle Anwendungen hat bei Spielen, aber auch in Visual Effects für Movies und sind dann erstmal mit Visual Effects angefangen, weil es sich herausgestellt hat, dass Spiele noch nicht so weit waren. Es war damals die Zeit der Playstation und der ersten Xbox und die war einfach nicht schnell genug. Playstation 2 war es damals. Das heißt, wir haben erstmal Visual Effects Software gemacht, letztendlich Stuntmen, interaktive Stuntmen und die ist dann verkauft worden für Filme wie Lord of the Rings zum Beispiel, Troy, ich glaube Spider-Man, Harry Potter und so weiter. Und dann irgendwann haben wir es dann bekommen, dass die Technologie schnell genug lief für Konsolen und ist dann lizenziert worden von Rockstar Games und benutzt worden in Spielen wie GTA 4, das war das erste, natürlich GTA 5, dann Red Dead Redemption, Max Payne 3 und so weiter. Und die Firma arbeitet, also Natural Motion, immer noch weiter mit Rockstar zusammen. Und das ist eine Sache, auf die wir sehr stolz waren. Wenn man jetzt GTA spielt, also alle Interaktionen mit Charakteren und ehrlich gesagt manchmal halt die brutalen Sachen, das ist unsere Technologie, die da drin läuft. Und dann haben wir festgestellt zu der Zeit, dass das iPhone schnell genug wurde, diese Technologie auch in Echtzeit laufen zu lassen. Und das war dann der Zeitpunkt, wo wir sagten, wir versuchen selbst Spiele herzustellen. Und dann ist es nochmal richtig abgegangen mit der Firma und dann haben wir letztendlich verkauft.
Johannes Schaback: Weil du nämlich ein Faible hast für Autos. Ist das nicht so?
Thorsten Reil: Genau, also die ersten Sachen, die wir gemacht haben auf dem iPhone, waren wirklich ganz speziell physikalische Simulationen. Und eines unserer Spiele, wahrscheinlich das, worauf ich am stolzesten bin, ist ein Spiel, das nennt sich Clumsy Ninja. Das lässt diese Technologie, Euphoria heißt sie übrigens, in Echtzeit laufen. Aber das Spiel, was so der größte Durchbruch war kommerziell, war tatsächlich CSR Racing, was ein Autorennspiel ist, ein Drag-Racing-Spiel. Und wir haben halt versucht, die Autos so unglaublich echt aussehen zu lassen, dass du das Gefühl hast, die gehört das Auto für dich selbst. Und das liegt teilweise daran, dass ich selbst auch Autos ganz gut finde, ja.
Johannes Schaback: Und das Tolle ist, das ist alles komplett gebackt durch AI, also physikalische Simulation durch künstliche Intelligenz. Das finde ich ganz toll, weil die Anwendungen Real-World-Anwendungen sind, auf limitierter Hardware, also insbesondere Mobile Phones, und in einer Qualität dargeboten werden, die wirklich sehr, sehr, sehr, sehr beeindruckend ist. Was mich insbesondere fasziniert, ist, dass es sich bei dieser Art von Algorithmen, ein sogenanntes Genetic Algorithm, oder eine Klasse von Algorithmen handelt, die sich Genetic Algorithms handelt. Und das ist heute auch unser Thema. Das ist auch heute eigentlich der Grund, warum wir Thorsten eingeladen haben, um darüber zu sprechen. Thorsten, vielleicht kannst du den Hörern mal erklären, was Genetic Algorithms sind.
Thorsten Reil: Also genetische Algorithmen gibt es schon als Idee seit den 70er Jahren und sind wirklich zum Vorschein gekommen, also prominent geworden in den 90ern und Anfang der 2000er Jahre. Und letztendlich sind es Algorithmen, Optimierungsalgorithmen, die sich ganz stark an der natürlichen Evolution orientieren. Das heißt, es ist ein blinder Suchalgorithmus, kann man eigentlich sagen. Und er besteht darin, dass du eine Population von Individuen herstellst. Und jedes dieser Individuen hat Parameter, die komplett zufällig sind. Und diese Parameter kodieren für irgendetwas. Das könnte zum Beispiel ein neureneres Netzwerk sein. oder das könnte die Reihenfolge einer Strecke sein, zum Beispiel beim sogenannten Travelling Salesman Problem. Wenn du von Punkt A nach Punkt B nach C und so weiter kommen musst, was ist die kürzeste Strecke? Und dann kann man das Problem so lösen mit Genetic Algorithms, dass du eine Population von 100 Individuen zum Beispiel herstellst und jedes dieser Individuen hat eine andere Reihenfolge, komplett zufällig. Und dann fängst du an zu evaluieren und das nennt sich die Fitnessfunktion, Fitnessfunction. Evaluierst du, was ist die kürzeste Strecke, weil das ist das, was du hinbekommen möchtest, die kürzeste Strecke rauszufinden. Rechnest es einfach aus, addierst es einfach die ganze Strecke aus. Und nimmst dann von den Individuen, die die kürzeste Strecke haben, die nimmst du dir und kreierst davon Kopien. Und diese Kopien machst du mit Mutation. Das heißt, jede der Kopien des Originals, des Original-Elternteils sozusagen, ist etwas anders als das Elternteil. Und das heißt dann, dass diese Kopie teilweise in einigen Fällen besser ist, in einigen Fällen schlechter ist als das ursprüngliche Elternteil. Die beste nimmst du wieder, stellst davon wieder Kopien her und du wiederholst diesen Prozess immer wieder, bis irgendwann du eine Lösung hast, die vielleicht nicht die global optimale Lösung ist, weil du meistens irgendwo festhängst, aber schon eine sehr gute Lösung ist.
Johannes Schaback: einer Ebene nochmal konkreter mit einem Beispiel. Also Programmiersprachen funktionieren ja ähnlich wie ein Kochrezept. Das heißt also, es gibt eine ganze Reihe von Anweisungen und wenn ich dich jetzt richtig verstanden habe, dann funktioniert Genetic Algorithm oder Genetic Programming ist ja was anderes, aber ein genetischer Algorithmus funktioniert so, wenn ich mir ein Kochrezept vorstelle und der Computer muss dieses Kochrezept ausführen, sagen wir mal Pfannkuchen, dann habe ich irgendwie 700 Milliliter Milch, 400 Gramm Mehl, drei Eier, umrühren, in eine Pfanne tun, Pfanne muss irgendwie auf neun, weiß nicht, 100 Grad gestellt sein, darin dann 5 Minuten brutzeln und dann ist er fertig. Einmal wenden, pardon, und dann ist er fertig. Das wäre ja das perfekte Programm, das wäre das perfekte Rezept für Pfannkuchen. Das kennt man, ich will sozusagen jetzt, das übertragen würde auf einen genetischen Algorithmus. Vielleicht kannst du das an dem Beispiel nochmal erklären. Also ich habe jetzt irgendwie die einzelnen Schritte, ich habe irgendwie diese Funktion wie Eier in den Topf schlagen, ich habe Milch hinzufügen, ich habe Mehl hinzufügen und am Ende erwarte ich Ich brauche irgendwie eine Art von Fitnessfunktion, um zu sagen, dieser Algorithmus, dieses Rezept ist jetzt das beste Rezept für Pfannkuchen.
Thorsten Reil: Das ist eher Genetic Programming, genau. Und man benutzt ehrlich gesagt mehr Genetic Algorithms. Das heißt, wozu man Genetic Algorithms benutzt, ist die Optimierung von Parametern. Weniger die Optimierung von Schritten, Programmierschritten zum Beispiel. Ah, okay.
Johannes Schaback: Okay, das ist interessant, weil das war wirklich für mich auch jetzt gerade ein Learning. Ich dachte immer, Genetic Algorithms wäre primär, dass du sozusagen die Kochrezept-Schritte mehr oder weniger zufällig durcheinander würfelst und am Ende einfach ausprobierst, nachdem du möglichst alle Kombinationen durchprobiert hast, kommt am Ende der richtige Pfannkuchen raus. Das dachte ich wie immer wäre Genetic Algorithms.
Thorsten Reil: Das ginge prinzipiell auch mit Genetic Algorithms. Das Problem ist da, was ist die Mutation? Also wenn man dieses Problem sich anguckt, also Pfannkuchen zum Beispiel machen, würde man bei Genetic Algorithms die eher so benutzen, dass man weiß, was sind ungefähr die Schritte, aber die Parameter zum Beispiel, wie viel Milch, wie viel, was ist noch im Pfannkuchen drin, Eier, Mehl braucht man. Und man bräuchte dann übrigens eine Fitnessfunktion. Und die Fitnessfunktion könnte zum Beispiel sein, wie gut schmeckt der Pfannkuchen oder keine Ahnung, sieht er aus wie ein Pfannkuchen? und so weiter. Bei Genetic Algorithms ist es tatsächlich eher so, dass die Parameter optimiert werden. Das kann zum Beispiel, wie gesagt, ein neuronales Netzwerk sein mit tausenden oder Millionen von Parametern oder das ist sowas wie die Reihenfolge von Städten im Travelling-Salesman-Problem.
Johannes Schaback: Verstehe. Und wie habt ihr das angewandt für Physik-Simulationen? Weil jetzt, es klingt ja erstmal so, als müsstest du ganz viele Iterationen machen, bis du sozusagen über die Fitnessfunktion einen Satz von Parametern findest, der in irgendeiner Weise optimal ist. Wie funktioniert das bei einer physikalischen Simulation? Wie habt ihr das hingekriegt?
Thorsten Reil: Also das Erste, was man natürlich machen muss, ist erstmal sehen, was will man überhaupt simulieren. Und was wir hinbekommen wollten, ist, dass wir einen Zweibeiner, der physikalisch simuliert war, also relativ einfach, aber mit virtuellen Muskeln und mit Kollisionen und Unterbein, Oberbein und so weiter, Unterschenkel glaube ich sagt man eher, sollte das Ding erstmal gebaut werden und dann eine bestimmte Strecke zurücklegen. Das war das Ziel. Und die Frage ist erstmal, wie wird das ganze Ding kontrolliert. Und dazu haben wir ein neuronales Netzwerk benutzt und Ganz speziell ein Recurrent Neural Network, also ein Netzwerk, was nicht nur in eine Richtung Informationen überleitet hat, sondern in alle Richtungen. Und das war ganz speziell inspiriert von natürlichen neuronalen Netzwerken, sogenannte Central Pattern Generators. die in der Biologie, also von der Biologie, von der wirklichen Welt benutzt werden, um rhythmische Bewegungen herzustellen. Wir wissen zum Beispiel, dass wir sowas in unserem Herzen haben. oder auch wenn man sich kratzt oder alle rhythmischen Bewegungen in biologischen Körpern werden meistens von diesen kleinen Central Pattern Generators, also eine Anzahl von Neuronen, die rhythmische Bewegungen herstellen, hergestellt. Und das wollten wir simulieren. Das heißt, wir hatten so ein neuronales Netzwerk. Die Frage ist halt, wie stellt man das so her, dass man Parameter hat, die funktionieren und tatsächlich eine rhythmische Bewegung herstellen. Und wenn man dieses Netzwerk kreiert und anschließt an so einen physikalischen Körper und die Parameter sind alle completely random, also komplett zufällig, dann kommt wirklich gar nichts daraus. Wenn du Glück hast, kommt ein kleines Zucken von dem Charakter. Vielleicht macht er sogar eine Sache, die aussieht wie ein Schritt, eine kleine Bewegung und dann fällt er normalerweise sofort um. Und das ist so das Grundproblem. Aber wenn du von diesen zufälligen neuronalen Netzwerken 100 herstellst oder 1000 und die sind alle komplett zufällig, dann sind einige von diesen etwas besser darin, den ersten Schritt zu machen als andere. Und die sucht sich der Algorithmus aus.
Johannes Schaback: Darwinismus.
Thorsten Reil: Genau, es ist letztendlich Darwinismus. Die sucht sich der Algorithmus aus und wie er sich die aussucht, hängt von der Fitnessfunktion ab. Unsere Fitnessfunktion war die Entfernung vom Ursprungsort letztendlich, wo das Ding umfällt. Du nimmst dir also die besten Netzwerke, die besten Parameter von dieser Population von 100 und davon kreierst du Kopien. Und jede dieser Kopien hat vielleicht ein oder zwei Mutationen. Das ist also etwas anders. Und wenn du Glück hast, sind einige von diesen wieder ein kleines bisschen besser als die alten. Die werden wieder genommen und so geht das Ganze immer weiter. wie durch ein Wunder. Man lässt die Simulation laufen. Ich weiß es noch genau, als ich es das erste Mal habe laufen lassen, habe ich die abends aufgebaut und am nächsten Morgen mir angeguckt. Das hat ungefähr acht Stunden gedauert. Und auf einmal lief so ein Zweibeiner ein paar Schritte, ohne umzufallen. Am Schluss ist er dann umgefallen, aber er hat die ersten Schritte gemacht. Und das ist ein typisches Beispiel von natürlicher, von genetischen Algorithmen, die halt auf natürlicher Selektion basieren, genau wie wirkliche Biologie.
Johannes Schaback: Wahnsinn.
Joel Kaczmarek: Reicht das denn als Genpool, wenn wir jetzt mal genetisch denken, dass du 100 Leute dir anguckst und dann weiter da unter eine Ebene legst und da unter eine Ebene? Also bei Darwinismus hast du ja dann auch den Effekt, dass manche Sachen, die vielleicht sinnvoll gewesen wären, im Prinzip weggehen.
Thorsten Reil: Genau, das ist eine super Frage, weil genau das muss man halt ausprobieren. Teilweise reichen noch kleinere Populationen. Es gibt auch Algorithmen, wie teilweise Evolution Strategies heißen die, die noch kleinere Populationen haben. Du brauchst aber schon einen gewissen Genpool von einer gewissen Größe, um dich herum sozusagen die sogenannte Fitness Landscape herzustellen. auszuprobieren. Und man kann sich das wirklich so vorstellen, dass jedes einzelne Individuum irgendwo auf der Fitnesslandschaft ist. Und Fitnesslandschaft heißt nichts anderes letztendlich als in einem Gebirge drin, wo es teilweise hoch geht, teilweise runter geht. Und da, wo es hoch geht, wird die Fitness besser. Das heißt, die Länge des Laufens wird besser. Da, wo es runter geht, wird es schlechter. Und oft bleiben Algorithmen irgendwo hängen, weil diese Algorithmen nur nach oben können letztendlich.
Johannes Schaback: Im lokalen Minimum.
Thorsten Reil: Im lokalen Minimum, genau. Der Vorteil von einer größeren Population ist, dass du gleichzeitig um den Punkt, um den du rum bist, verschiedene Richtungen ausprobierst. Und einige davon vielleicht steil hochgehen, also sehr gut hochgehen, andere vielleicht nur ein kleines bisschen. Aber die, die nur ein kleines bisschen hochgehen, sind vielleicht in der nächsten Generation oder in der Generation danach, gehen dann wirklich richtig schnell hoch. Das heißt, es lohnt sich dir erstmal ein bisschen aufzubewahren und in der Population, im Genpool sozusagen drin zu lassen, weil sie vielleicht ein paar Generationen später eine bessere Performance haben als die, die ganz am Anfang schon eine mega Performance gehabt haben.
Joel Kaczmarek: Also eigentlich bist du ein Züchter auf eine Art.
Thorsten Reil: Man züchtet, ja.
Johannes Schaback: Was ich total spannend finde, also Genetic Algorithms werden verwendet, um im Grunde Parameter zu setzen, Parameter zu finden für beispielsweise neuronale Netze. Das heißt also letztendlich finde ich Modellparameter oder ich löse ein Optimierungsproblem, wenn du sozusagen das Gebirge beschreibst, um eigentlich einen darunterliegenden Unteralgorithmus zu optimieren. Jetzt haben wir gerade über Genpool-Größen gesprochen, über Gene, Mutationen, wie groß ist der, wie viele Iterationen oder wie viele Generationen Bedarf ist. Sind das nicht auch wieder Parameter, die man auch wieder finden und setzen muss? Wendet man dann da wieder Genetic Algorithm an?
Thorsten Reil: Auch eine sehr gute Frage. Die Antwort ist ja, die muss man auf jeden Fall setzen. Und im Moment setzt man die, ehrlich gesagt, Pi mal Daumen aus Erfahrung zum größten Teil. Was man eigentlich machen sollte, und was übrigens auch in der Biologie interessant ist, woher kommen überhaupt die Mutationsraten in der Biologie? Die müssen wahrscheinlich auch selbst evolviert sein. Was man eigentlich machen sollte, ist diese Mutationsraten auch zu evolvieren. Der Grund, warum man das in der Vergangenheit nicht gemacht hat, zum größten Teil ist einfach Processing-Power. Weil generische Algorithmen sehr viel Processing-Power brauchen, ist es letztendlich ein blinder Suchalgorithmus, wo du sehr viele Individuen in der Population evaluieren musst und dann weiter über viele Generationen evolvieren musst. Und deshalb hat man es meistens nicht gemacht, dass man auch noch diese sogenannten Metaparameter dazu evolviert.
Johannes Schaback: Aber das ließe sich wahrscheinlich sehr gut parallelisieren, oder? Das heißt wahrscheinlich mit moderner Hardware müsste da auch jetzt sehr viel mehr gehen als in den 90ern oder in den 80ern.
Thorsten Reil: Genau, der große Vorteil von Generation-Algorithmen im Allgemeinen ist, dass sie extrem parallelisierbar sind. Also sie laufen halt letztendlich, alle Individuen laufen komplett unterschiedlich und unverbunden mit anderen Individuen. Das heißt, die jetzige Generation von Hardware sollte eigentlich perfekt sein.
Joel Kaczmarek: Kannst du mal so ein Gefühl geben, wie lange es dauert? Also man sagt ja immer, Evolution ist ja nicht wie Revolution, sondern ist ja eher langsam, also nicht so schnell. Wie lange es dauert, ehe du von ich will dem Laufen beibringen hingekommen bist? zu Rockstar Games interessiert sich, wie kann ich meine Cowboys vom Pferd verlassen?
Johannes Schaback: Oder wie haue ich dem Protagonisten einen Baseballschläger auf den Kopf?
Thorsten Reil: Also dazwischen lagen ein paar Jahre tatsächlich, wobei da
Johannes Schaback: Aber nicht Jahre Rechenzeit oder Jahre Entwicklung?
Thorsten Reil: Nein, das größte Problem da war wirklich das Engineering selbst. Weil es hat sich herausgestellt, was ich naiv war, mir war am Anfang noch nicht ganz klar, ein Forschungsergebnis zu haben, was funktioniert, ist noch lange nicht das gleiche, wie einen Charakter zu haben, der in einem Riesenspiel läuft, wo gleichzeitig eine komplette open-ended world simuliert wird und um dich Autos herumfallen und so weiter. Also das Engineering war das, was nachher wirklich am meisten Zeit gebraucht hat, das Software-Engineering selbst. Aber die Frage zum Beispiel, wie lange dauert es, sowas zu evolvieren, ist auch interessant, weil wir haben angefangen, wie gesagt, am Anfang hat es acht Stunden gedauert und das war mit einem einfachen Charakter. Als die Charaktere komplexer wurden, um echter auszusehen, war es noch länger, ungefähr zwölf Stunden wahrscheinlich, um ein originales Netzwerk zu evolvieren. Und das haben wir nachher so optimiert, indem wir das Netzwerk immer kleiner und kleiner haben machen können, dass wir es am Schluss innerhalb von acht Minuten geschafft haben. Und zwar von Null, also Charaktere, die wirklich nur auf dem Boden rumgestrampelt haben, bis zum selbstständigen Laufen.
Johannes Schaback: Und dieses trainierte Modell wird dann eins zu eins so in das Spiel gesetzt und dann müsst ihr ja nicht innerhalb des Spiels diese acht Minuten Rechenzeit wieder investieren? Oder ist das so, dass ihr wirklich dann dynamisch nochmal nachevolviert in der Spielsituation, um irgendwie ein spezielles Obstacle zu überwinden? Oder ist das dann so, dass dann wird einfach dieses trainierte, evolvierte Netz in das Spiel eingesetzt und verwendet.
Thorsten Reil: Genau, eine Sache ist, dass das Netzwerk selbst dann sehr schnell ist in der Execution. Das, was halt dauert, ist das Trainieren, ähnlich wie Deep Learning, hätte ich gesagt. Das Trainieren dauert eine Zeit, aber die Execution ist unglaublich schnell.
Johannes Schaback: Das Interessante ist, dass das Trainieren des neuronalen Netzes kommt ja noch obendrauf in der Trainingsphase. Das heißt also, dann müsst ihr ja trotzdem noch mal jedes Netzwerk neu trainieren, oder?
Thorsten Reil: Nee, das Netzwerk ist trainiert. Der genetische Algorithmus setzt nicht zusätzlich Neuronen dazu, sondern optimiert die existierenden Parameter. der existierenden Neuronen sozusagen. Letztendlich genau wie das auch Reinforcement Learning oder Backpropagation.
Johannes Schaback: Ach, du ersetzt das Gradient Descent. Genau.
Thorsten Reil: Letztendlich ist ein generischer Algorithmus nichts anderes als ein Stochastic Gradient Descent, der nicht Backpropagation ist.
Johannes Schaback: Okay, wieder Learning? Ich dachte immer, man trainiert die Metaparameter. Weil das ist so ein bisschen wie das Auto-ML von Google, wo du versuchst, im Grunde einen Meta-Machine-Learning-Algorithmus zu bauen, der neuronale Netze baut.
Thorsten Reil: Ja, das ist allerdings auch nicht so falsch. Das könnte man prinzipiell ohne weiteres damit machen. Das wurde aber nicht gemacht, wie gesagt, einfach weil nicht genug Processing-Power da war.
Johannes Schaback: Es ist total faszinierend, weil da jetzt so zwei Welten zusammenkommen. Auf der einen Seite simulieren wir mit neuronalen Netzen die Biologie, das Gehirn. Und auf der anderen Seite kommt jetzt die Evolutionstheorie rein. Und wir bringen letztendlich da beide Welten zusammen. Beide Learnings aus der realen Welt. Also Darwinismus plus simulierte neuronale Netze. Das ist wahnsinnig mächtig. Kommt da der nächste Schritt im AI her, in Richtung General Artificial Intelligence?
Thorsten Reil: Ich glaube, das kann sein. Also erstmal auf der ersten Ebene, also der Ebene des Lernens selbst, gibt es, wie wir wissen, viele Probleme, die sich nicht über Supervised Learning lösen können. Kannst du mal sagen, was das bedeutet? Du lernst, indem dir Daten präsentiert werden, die schon die Antwort sind. Das heißt, du versuchst aus großen Datensätzen, zum Beispiel hast du eine Million Fotos von Männern und Frauen und die sind annotiert. Das heißt, du gibst dem neuronalen Netzwerk immer ein Foto und sagst übrigens Sag, was das ist und du sagst ihm, es ist ein Mann und er sagt, es war eine Frau. Und den Fehler zwischen Mann und Frau, das ist letztendlich eine Zahl, den benutzt du, um das Netzwerk ein bisschen besser zu machen beim nächsten Mal. Dafür brauchst du unglaublich große Datensätze, die annotiert sind, wo du schon vorher die Lösung weißt, damit das Netzwerk nachher generalisieren kann davon. Das funktioniert sehr gut, man braucht sehr viel Daten und das ist letztendlich die Grundlage von allem Deep Learning im Moment. Der Algorithmus Backpropagation, der dafür benutzt wird, wurde Mitte der 80er erfunden und hat jetzt wieder einen riesen zweiten Durchbruch gehabt, kann man sagen, so vor drei, vier Jahren.
Joel Kaczmarek: Wir sollten jetzt mal einordnen, was auch eigentlich dieses ganze Thema Genetic Algorithms, Genetic Programming im ganzen KI-Thema sozusagen bedeutet. Und dafür, glaube ich, müssen wir mal ein paar Leute, also inklusive mir, ein bisschen mit abholen über den ganzen Begriffen. Also wir haben jetzt solche Sachen wie Deep Learning, Machine Learning, neuronale Netze. Kannst du da mal irgendwie so ein kleines Mini-Lexikon verbaler Natur geben, was was ist und wie dann Genetic Programming da reinpasst?
Thorsten Reil: Ja, also wir haben mit neuronalen Netzwerken angefangen. Das sind letztendlich vereinfachte Simulationen des Nervensystems oder des Gehirns. Die bestehen aus sogenannten Neuronen, die miteinander verbunden sind über Weights, heißen die, also über Verbindungen. Und Es stellt sich heraus, dass diese Strukturen in der Lage sind, Muster zu erkennen und auch Generalisierung von Mustern zu machen. Zum Beispiel sind sie sehr gut in der Bilderkennung. Dafür werden sie zum großen Teil im Moment auch benutzt. Sie können Objekte in Bildern erkennen oder wie gesagt auch klassifizieren zwischen Männern und Frauen. verschiedenen anderen Dingen, können Schriften erkennen und so weiter. Und der Grund, warum das möglich ist, ist Lernen, also sogenannte Lernalgorithmen, Learning Algorithms. Und davon gibt es einen ganz bekannten, der nennt sich Backpropagation, ich weiß nicht, ob es dafür eine Übersetzung gibt. Der ist in der Mitte der 80er Jahre, ich glaube, von Rummelhardt und Hinton erfunden worden, ich glaube 1986, und hat damals in den ersten paar Jahren für sehr viel Aufsehen gesorgt, Ende der 80er Jahre, weil man dachte, man kann endlich mit diesen neuralen Netzwerken lernen wie Menschen. Und dann hat man festgestellt, es ist an Grenzen gestoßen. Es gingen einige Sachen ganz gut, andere Sachen haben überhaupt nicht funktioniert. Und dann kam der sogenannte AI Winter, der Künstliche Intelligenz Winter. Den gab es über mehrere Jahre lang. Und dann vor ein paar Jahren, ich glaube, man kann sagen 2013, 2014, haben wirklich die gleichen Leute, also der hinten, der auch an dem ursprünglichen Paper beteiligt war, mit ein paar anderen Leuten festgestellt, die Algorithmen funktionieren ja doch. Und zwar funktionieren die dann, wenn man diese Netzwerke viel, viel größer macht und nicht nur ein paar Tausend, sondern ein paar Millionen von Neuronen benutzt. Und wenn man denen viel mehr Daten gibt, als vorher der Fall war. Und was halt passiert ist in den letzten paar Jahren, ist, dass man wesentlich mehr Daten, Processing Power hat durch die Hardware, man hat GPUs, Grafikchips, die jetzt viel schneller sind und man hat teilweise durch das Internet unglaublich viel mehr Daten und teilweise auch unglaublich viel mehr annotierte Daten. Und seitdem hat man das Ganze so ein bisschen neu genannt und nennt es Deep Learning. Und das Deep steht für die Netzwerke sind tiefer. Anstatt dass man nur zwei oder drei sogenannte Lagen von Neuronen benutzt, benutzt man jetzt vielleicht 30, 40, 50, vielleicht 100 und noch mehr. Aber letztendlich ist das gleiche Prinzip. Es hat sich nicht großartig was geändert. Die Strukturen der Netzwerke sind immer noch relativ ähnlich und der Lernalgorithmus Backpropagation ist immer noch der gleiche. Damit kann man zwar viel lösen, das Problem ist aber, dass es viele Probleme in der Welt gibt, die man nicht lernen kann, indem man unglaublich viel Daten, annotierte Daten gibt und dem Netzwerk sagen kann, das sind übrigens die richtigen Antworten, kannst du davon generalisieren. Ganz viele Probleme, wie zum Beispiel Autofahren, aber auch wie zum Beispiel die Laufen zu lernen als physikalischer Körper sind keine Probleme, die man mit unglaublich viel Daten lösen kann. Man muss sie lösen, teilweise durch Ausprobieren und vielleicht teilweise auch die Imitation. Und dazu gibt es eine neue Art von Algorithmen oder zumindest eine andere. Eins davon ist Reinforcement Learning. Das heißt, man probiert Sachen aus und macht die Sachen mehr, die funktioniert haben. Simpel erklärt. Und der andere Ansatz sind genetische Algorithmen oder evolutionäre Algorithmen. Da ist es auch so, man probiert Sachen aus, komplett blind. Macht dann aber nicht mit Absicht mehr das, was funktioniert hat, sondern der Algorithmus sucht einfach sich die Individuen aus, die gut funktioniert haben und sagt, okay, ihr dürft weitermachen, verändert euch weiter, zufällig, und die Besten dürfen wieder weitermachen und so weiter. Und der Grund, warum genetische Algorithmen im Moment, glaube ich, noch nicht in aller Munde sind, ist der gleiche Grund wie bei Deep Learning und beim AI-Winter. Genetische Algorithmen waren richtig beliebt wieder so um die Jahrtausende 2000, weil die da benutzt wurden in einem Fach, das hieß Artificial Life, also künstliches Leben. Und das hat auch teilweise richtig gut funktioniert. Also man hat genetische Algorithmen oft benutzt, um Backpropagation zu ersetzen. Aber auch da gab es irgendwann dann einen Punkt, wo man sagte, okay, weiter geht es nicht. Unter anderem, weil man Parameter eigentlich hätte evolvieren sollen, wie die Metaparameter von neuronalen Netzwerken. Aber dafür war einfach nicht die Processing-Power da. Und deshalb glaube ich, was jetzt passieren wird, ist, dass genetische Algorithmen genau so ein Revival letztendlich haben, wie Deep Learning es jetzt hat, also neuronale Netzwerke, aus eigentlich genau den gleichen Gründen.
Johannes Schaback: Kannst du nochmal erzählen, was hat das mit Artificial Life auf sich? Was ist so die Grundidee?
Thorsten Reil: Die Idee von Artificial Life ist grundsätzlich gewesen, dass man von der Biologie inspiriert, Prozesse versucht zu simulieren. Das sind teilweise neuronale Netzwerke, das sind aber teilweise auch künstliche Evolutionen. Und da ging es zum Beispiel darum zu sehen, ob man Agenten herstellen kann, also Individuen, die miteinander in einem, wie soll man das sagen, letztendlich biologischen Zusammenleben leben, was ähnlich ist wie das, was man in der wirklichen Evolution findet. Man hat versucht, Gene zu simulieren, habe ich übrigens auch. Ich habe damals ein Paper gemacht über künstliche Genome und um zu verstehen zum Beispiel, was sind die Dynamiken von einem Genom, wie schalten sich Gene an und aus, lässt sich das evolvieren und so weiter. Ein relativ loser Begriff, aber es ging darum, biologische Aspekte zu simulieren.
Joel Kaczmarek: Hat aber nicht funktioniert?
Thorsten Reil: Doch, es hat teilweise funktioniert. Also zum Beispiel unsere Sache, die Evolution von Charakteren, die dann laufen lernten, das war künstliches Leben. Und das hat funktioniert, haben wir dann kommerziell angewandt. Aber andere Dinge, wie zum Beispiel die Genomsimulation, hat auch funktioniert, habe ich dann aber nie weitergemacht, weil ich keine Zeit hatte dazu. Und ich glaube, jetzt ist es um einiges interessanter, als es damals war, weil man einfach mehr Power hat. Also wir haben damals, glaube ich, auf dem Pentium noch was solche Sachen gemacht. Das war richtig Mist.
Johannes Schaback: Gibt es Forschungsgruppen, die das auf dem Schirm bekommen? Oder gibt es Startups? Oder hast du das Gefühl, es gibt einen bestimmten Anwendungsbereich, in dem Artificial Life oder genetische Algorithmen am meisten Sinn machen in der Anwendung? Wenn man jetzt irgendwie an Bots denkt, an NLP oder an andere Bereiche, hast du das Gefühl, es gibt, oder an Starcraft, also Gameplaying, hast du eine Wette darauf, dass genetische Algorithmen in einem bestimmten Bereich in der nahen Zukunft groß werden?
Thorsten Reil: Ja, ich glaube, alle Bereiche, in denen Supervised Learning nicht funktioniert, werden genetische Algorithmen wieder ausprobiert werden. Zum Beispiel, es gab jetzt gerade ein Paper, also erstmal, um deine Frage zu beantworten, es gibt noch nicht viele Forschungsgruppen, die daran arbeiten im Moment. Ich glaube, das Thema wird jetzt gerade wieder interessant und das erste wirklich richtig interessante Paper, was jetzt rauskam vor ein paar Monaten, ist ein Paper von OpenAI, die Atari-Games-Benchmarks und auch die physikalischen Simulations-Benchmarks, die es über Reinforcement-Learning gibt, nachgemacht haben mit Evolution-Strategies. Also den Research, den es ursprünglich gab von DeepMind, Atari-Spiele mit Reinforcement-Learning zu lernen, haben sie nachgemacht mit Evolution-Strategies, die letztendlich generische Algorithmen sind, und haben festgestellt, dass die Performance genau die gleiche ist. Das heißt, Performance im Sinne von, wie lange dauert es, sowas zu evolvieren. haben aber festgestellt, dass es wesentlich einfacher zu programmieren ist und wesentlich weniger Grundangnahmen gemacht werden müssen. Und das war jetzt wirklich das erste Mal, dass man gemerkt hat, dass Genetic Algorithms oder Evolution Strategies von der Performance äquivalent sind wie Reinforcement Learning, aber wesentlich einfacher auszuprobieren. Das Problem mit Genetik-Algorithms und auch übrigens Reinforcement-Learning ist, dass du sehr viel ausprobieren musst. Letztendlich ist das der große Unterschied zu Supervised-Learning. Du musst irgendwie in der Lage sein, deine Umgebung ausprobieren zu können, also zu exploren zu können.
Johannes Schaback: Zu simulieren.
Thorsten Reil: Dazu brauchst du Simulationen. Du könntest es übrigens auch theoretisch ohne Simulationen machen. Zum Beispiel könntest du dir einen Roboter bauen und dein neuronales Netzwerk hochladen und das Ding einfach mal loslaufen lassen und messen und dann das nächste neuronale Netzwerk hochladen und so weiter. Das Problem ist, dass du das Ganze so oft machen musst, wie normalerweise mehrere tausend Mal, wahrscheinlich mehrere zehntausend Mal, dass es einfach nicht realistisch ist. Dann bist du da fünf Wochen an einem Roboter dabei und wahrscheinlich geht er halbwegs kaputt. Das heißt, idealerweise macht man sowas in Simulationen. Und immer da, wo man die natürliche Welt simulieren kann, zum Beispiel physikalische Simulationen oder wo du ein Spiel hast, wie zum Beispiel Atari-Spiele, funktioniert Reinforcement Learning, aber auch klinische Algorithmen super. Weil da kannst du das Ganze zehnmal, vielleicht einhundertmal schneller als Echtzeit laufen lassen. Und auf einmal hast du diese ganzen Begrenzungen nicht mehr, die du hast von Supervised Learning.
Johannes Schaback: Und trotzdem weißt du ja nie, wann der Algorithmus in Anführungsstrichen fertig ist. Du weißt, du kannst nicht abschätzen, wenn du ihn abends um acht startest, dass er morgens um acht fertig ist. Oder zumindest eine Fitness erreicht hat, die für dich ausreichend ist. Sondern du musst immer so ein bisschen hoffen. Was gibt es da für Strategien? Also das ist, glaube ich, auch ein Unterschied zu dem klassischen Supervised Learning. Du hast irgendwie dein Trainingsset und weißt, okay, du hast das Trainingsset irgendwie 15 Mal durchgenudelt, 15 Mal gebackpropagated. Besser kann es nicht werden. Du hast einfach nicht mehr Daten. Versus die Simulation weiterlaufen lassen, das kannst du theoretisch noch 1000 Jahre. Du weißt aber nicht, ob das Modell inhärent mächtig genug ist, um sozusagen auf ein Ergebnis zu bekommen, dass du sozusagen einen Parametersatz evolvierst, der ausreichend fit ist. Gibt es da Strategien? Wie geht man da ran?
Thorsten Reil: Also das stimmt, das ist ein Problem. In Backpropagation übrigens teilweise auch, aber nicht ganz so schlimm.
Johannes Schaback: Stimmt, du kannst auch hängenbleiben.
Thorsten Reil: Genau.
Johannes Schaback: Du hast auch so Step-Width und sowas.
Thorsten Reil: Genau, also dieses Hängenbleiben im Allgemeinen, im lokalen Optimum, ist bei all diesen Algorithmen ein Problem. Und die Frage ist halt, wie löst man das Problem? Erstmal ist die Frage, muss man es überhaupt lösen? Weil wenn du irgendwo hängenbleibst und du merkst, okay, es geht nicht weiter, vielleicht ist die Lösung ja schon gut genug. Und zum Beispiel bei uns war das so, wenn wir diese Walkers, diese Läufer evolviert haben, haben wir immer ganz unterschiedlich verschiedene Gangarten dabei rausbekommen. Und das war eigentlich ganz interessant. Also der Algorithmus ist hängen geblieben. Teilweise war es ein fröhlicher Gang, teilweise ein besoffener Gang. Und da ging es auch nicht weiter, aber es war an sich ganz interessant. Das Kriterium war für uns ja eigentlich immer nur, dass es eine bestimmte Distanz läuft, ohne umzufallen. Und das Ding lief dann einfach weiter, aber auf verschiedene Art. Das ist erstmal das Erste. Wenn du aber merkst, dass es nicht so gut läuft, wie es eigentlich ist, sondern dass es umfällt immer, keine Ahnung, nach 10, 20 Metern, es wird einfach nicht besser. Da fängst du entweder nochmal vom Neuen an, mit komplett neuen zufälligen Individuen oder, was meistens effektiver ist, du machst die Anzahl der Mutationen oder die Größe der Mutationen kurzfristig höher, sodass du letztendlich die Population zwingst, aus diesem lokalen Optimum rauszukommen und auf ein nächstes springt. Und das wird gemacht, das wird gerade bei Evolution Strategies gemacht, da ist es so, dass die Mutationsraten abhängig davon, ob das Ding hängen bleibt, automatisch hochgehen. Bei genetischen Algorithmen wird es etwas weniger gemacht, unter anderem, weil es nicht biologisch ist. Und zum Beispiel ich war jemand, der teilweise ein bisschen dogmatisch war, wenn es zu unbiologisch ist, habe ich es nicht gemacht. Aber ich glaube, im Nachhinein war das ziemlich naiv. Ich hätte es eigentlich auch machen sollen.
Johannes Schaback: Man könnte ja sagen, die Evolution hat sich selbst evoliert. Es muss das Optimum sein. Deswegen ist die Annahme, wir nehmen eine Mutationsrate, die ähnlich ist wie in der Natur, doch eigentlich richtig.
Thorsten Reil: Es muss nicht unbedingt das Optimum sein, weil es kann sein, dass die Natur selbst Einschränkungen hat, über die sie nicht hinauskommt. Es gibt ja ganz viele bei uns im Menschen, ganz viele Einschränkungen, die deshalb da sind, weil die Evolution nicht das Problem hat besser lösen können. Die Evolution hat das gleiche Problem wie genetische Algorithmen. Das ist, du kannst nur kleine Schritte machen und wenn es nicht mehr weitergeht, wenn du irgendwie auf einer bestmöglichen Lösung in diesem Bereich bist, dann kommst du da nicht mehr runter von dieser Lösung. Und wir haben das gleiche Problem als Menschen. zum Beispiel, alle Säugetiere haben das Problem, wie unser Retina aufgebaut ist. Das Licht kommt durch unsere Retina durch, kommt durch den kompletten Zellkörper, muss es sich durchquetschen, also durch den ganzen Mist, der im Zellkörper durch ist. und erst ganz am Ende des Zellkörpers ist der lichtempfindliche Teil der Retinerzelle eigentlich eine totale Fehlentwicklung. Aber es ist deshalb so, weil die ersten fotosensitiven Zellen, die es gab, so rum gebaut wurden. Damals, was egal ist, musste, damals hieß es vor Millionen von Jahren, damals musste das Ding wirklich nur sehen, ob hell oder dunkel. Und es wurde halt immer Schritt für Schritt besser mit mehr Genauigkeit. Aber es gab nie den Punkt, dass es sagen konnte, okay Leute, das macht ja überhaupt keinen Sinn, dass das Licht von vorne erst durch den ganzen Mist durch muss, ganz nach hinten. Wir drehen das mal um, weil damit wäre so viel kaputt gegangen, dass die Fitness zu stark runtergegangen wäre. Und deshalb hat man im menschlichen Körper oder Säugetieren und ganz vielen anderen auch. halt diese ganzen Probleme der Evolution, wo man eigentlich denkt, das muss optimal gelöst sein von der Biologie, ist es aber nicht, weil ihr fiel nie was Besseres ein. Und was die Evolution dann zum Beispiel bei uns gemacht hat, ist zu sagen, okay, für den Teil, der am empfindlichsten ist in der Retina, ganz in der Mitte, der Fovea, da drücken wir die ganzen Zellkörper ein bisschen zur Seite, sodass das Licht ungehindert hinten auf die Wand treffen kann. Und diese ganzen Fudges, die es in der natürlichen Evolution gibt, gibt es übrigens genauso in genetischen Algorithmen. Und das liegt einfach an der Natur des Algorithmus, der nur schrittweise und nie planen kann.
Johannes Schaback: Dafür aber stabil ist. Das hat auch was. Du hast eine gewisse Flexibilität und Robustness, wenn du dich auf neue Umgebungen einstellen musst. Das funktioniert trotzdem. Das geht vielleicht nicht so schnell kaputt.
Joel Kaczmarek: Wenn du jetzt merkst, okay, ich habe etwas entwickeln lassen, was quasi gezüchtet in eine Richtung, habe aber gemerkt, es geht da noch in eine andere Richtung, das kannst du sozusagen nochmal reparieren nachträglich.
Thorsten Reil: Genau, das kannst du machen. Und übrigens ist Züchten eigentlich auch das bessere Wort als Evolvieren, weil es ist wirklich fast genau wie Hundezüchtung zum Beispiel oder Pferdezüchtung.
Joel Kaczmarek: Was sind denn so Anwendungsgebiete, wenn du sagst, man hat jetzt mehr CPU-Power, man hat jetzt irgendwie mehr Daten zur Verfügung, weshalb im Prinzip Genetic Programming eine ähnliche Evolution nehmen könnte wie das ganze Deep Learning Thema. Was für Anwendungsbereiche gibt es eigentlich dafür?
Thorsten Reil: Also ich glaube, es gibt wirklich unglaublich viel. Gerade die, wie gesagt, Algorithmen, wo es annotated data nicht gibt, wo also Backpropagation als Algorithmus nicht funktioniert. Das könnte zum Beispiel sein, bei einem selbstfahrenden Auto eine Control-Strategie zu entwickeln. Wie komme ich über? Wie komme ich über eine Kreuzung drüber? Wenn ich weiß, dass viele andere Autos auch auf dieser Kreuzung fahren, ist ein mega komplexes Problem, bei dem du nicht dem Algorithmus unglaublich viel Daten geben kannst, was eigentlich die richtige Antwort ist, weil dafür gibt es einfach zu viele Parameter, die komplett unterschiedlich sein können. Da könntest du theoretisch zum Beispiel ein neuronales Netzwerk evolvieren. und sagen, fahr mal auf diese Kreuzung und guck mal, was passiert. Und die Fitnessfunktion wäre zum Beispiel, über die Kreuzung zu fahren und du kriegst Strafpunkte für über eine rote Ampel fahren, kriegst sehr viele Strafpunkte, in ein anderes Auto rein zu crashen und du musst halt auf die andere Seite kommen. Und das sollte prinzipiell möglich sein, diesen Prozess über künstliche Evolution so hinzubekommen, über viele Generationen, dass du nachher ein Auto hast, was alle anderen Autos vermeidet und auf die andere Straßenseite kommt. Das Problem ist dann teilweise, du weißt natürlich nicht genau, wie es funktioniert. Wie es halt auch in neuronalen Netzwerken auch so ist.
Johannes Schaback: Ich hätte gerade gedacht, dass das ein Vorteil ist, weil wenn du am Ende einen Genomsatz hast, also du hast einen Satz von Parametern und angenommen, was du jetzt wiederum trainierst in sich, ist nicht ein neuronales Netz, weil dann hast du natürlich genau die gleichen Nachteile von einem neuronalen Netz auch, dass es irgendwie eine Blackbox ist. Aber wenn du jetzt eher, wir müssen bei den Begriffen gerne aufpassen, Genetic Programming machst, das heißt also du schreibst einen Computer-Code, den du randomisierst und den sozusagen als Genom verstehst, dann kannst du den Code ja lesen.
Thorsten Reil: Das stimmt. Das ging im Prinzip übrigens auch, ja. Und da ist halt die Frage, was ist das Wichtigere? Letztendlich kann man sagen, ein neues Netzwerk ist vielleicht nicht vollkommen zu verstehen, aber es ist so weit getestet worden, dass es 100-prozentige oder 99,999-prozentige Robustheit hat, ist vielleicht genauso gut wie ein anderer Algorithmus, den du besser verstehen kannst, aber der vielleicht eine etwas weniger gute Robustheit hat. Also ich glaube, beides ist möglich und auch mit genetischen Algorithmen hast du tatsächlich ein bisschen mehr Freiheit, auch andere Control-Architectures zu benutzen, das stimmt schon.
Joel Kaczmarek: Könntest du Medikamente entwickeln auf dem Weg eigentlich?
Thorsten Reil: Nur insofern, wenn du die ausprobieren könntest. Das heißt, wenn du eine Simulation hättest oder ein Modell hättest, wie Medikamente funktionieren, könntest du dich langsam rantasten an ein Medikament, was funktioniert. Genauso ist es übrigens mit Proteinstrukturen, die ein Riesenthema schon über viele Jahre sind. Es ist immer noch nicht möglich, genau vorauszusagen, wie ein Stück DNA sich übersetzt auf ein Protein. Proteine sind ja die Bausteine des Lebens. Alle Gene bauen Protein. Man weiß nicht, wie die 3D-Form aussieht. Theoretisch sollte sich das simulieren lassen und sollte sich dann evolvieren lassen, wie ein Protein sich faltet. Auch das war eine Zeit lang richtig ein großes Thema und ist dann irgendwann fallen gelassen worden. Aber lohnt sich vielleicht wieder aufzunehmen.
Joel Kaczmarek: Also kann man so ein bisschen zusammenfassen, die Anwendungsgebiete sind eigentlich dort, wo man große Datenmengen hat, aber eigentlich auch viele Parameter, die nicht annotiert sind, wo man im Prinzip lernen will und dann aber sozusagen diese Brücke schaffen möchte. Ich will hinterher auch verstehen, was eigentlich der Lerneffekt war und nicht in so eine Blackbox schauen, die zwar das Problem löst, ich aber nicht verstehe, wie.
Thorsten Reil: Ja, du, also ich glaube schon, dass man nicht unbedingt immer versteht, warum das Resultat von einem genetischen Algorithmus so funktioniert, wie es das tut. Also ich weiß in unserem Beispiel zum Beispiel, bei den evolvierten Läufern, wusste man nicht, warum die funktionieren. Das war extrem schwer zu sagen. Das Einzige, was man machen konnte, ist, wenn man sagte, okay, mir gefällt dieser Gang nicht, ist, dass man versucht hat, den zu modifizieren und die Fitnessfunktion dann so geändert hat, dass man zum Beispiel versucht hat, so energetisch effizient wie möglich zu laufen. Dann hat man nachher diese verrückten Gänge, so diese Monty-Python-Style-Walks, so ist man die losgeworden. Aber es war nicht möglich, genau in die Parameter reinzugehen und die zu verändern und das Ganze zu verstehen.
Joel Kaczmarek: Ich meine, wenn wir jetzt in Richtung von Biologie sprechen, also wenn wir sagen, im Prinzip es gibt Gene und Genpools, wie muss ich mir das eigentlich vorstellen bei einem Computer? Ist das dann eine Datei oder ist das eine Zeile in einem Code? oder wie sieht das aus?
Thorsten Reil: Es hängt vom Problem ab, aber ganz oft sind es eine ganz, ganz lange Reihe von Zahlen. Und diese Zahlen, eine Mutation zum Beispiel bei diesen vielen Zahlen mag zum Beispiel bedeuten, dass man eine Zahl von 8.3 auf 8.6 ändert. Und die Mutation selbst muss auch irgendwie definiert werden. Meistens ist es eine Normalverteilung, wo es halt mit einer hohen Wahrscheinlichkeit nur ein kleines bisschen anders wird und mit einer kleinen Wahrscheinlichkeit sehr anders wird. Auch das übrigens ließ sich prinzipiell evaluieren als Metaparameter und wäre auch übrigens nicht ganz unwichtig. Und dann gibt es noch die Möglichkeit der sogenannten Rekombination. Also es gibt nicht nur Mutation, dass ein Parameter geändert wird, sondern Rekombination, dass man einen ganzen Set von Parametern, sagen wir mal 20, einfach rausnimmt aus dieser Reihe und austauscht mit dem äquivalenten Set von diesen zehn Parametern in einem anderen Individuum. Und das gibt es natürlich in der Biologie genauso, dass Chromosome rekombiniert werden. Und das funktioniert auch extrem gut, aber nur da, wo die Probleme modular sind. Zum Beispiel, wo ein Teil des Chromosoms für eine Sache kodiert und der andere Teil des Chromosoms kodiert für eine andere Sache. Weil dann macht es Sinn, dass man zum Beispiel, wenn ein Individuum eine Lösung für Problem 1 gefunden hat und das andere für Problem 2, lohnt es sich, das auszutauschen. Dann hat man auf einmal Problem 1 und Problem 2 als Lösung zusammen in einem Chromosom. Wenn man aber rekombiniert in einem Parameterbereich der letztendlich für genau die gleiche Sache kodiert, dann hast du nichts anderes als eine riesengroße Mutation. Du hast nämlich auf einmal 20 Parameter auf einmal mutiert. Und das kann auch helfen, weil dann machst du diesen Riesensprung auf der Fitness-Landscape, aber hat eigentlich mit Rekombination nicht mehr viel zu tun.
Joel Kaczmarek: Wie ist denn jetzt, wenn wir über Biologie und über Gene sprechen und über Mutationen, könntest du sozusagen auch Programme schaffen, die eigene Kinder hervorbringen? Also dieses Stichwort, was ich bei Johannes auch mal höre, Code that writes code. Ist das auch ein gangbarer Weg?
Thorsten Reil: Prinzipiell ja und das hat man damals mit Genetic Programming auch sehr viel probiert, gerade mit Lisp als Programmiersprache. Du brauchst eine Programmiersprache, die immer noch funktioniert, wenn man sie verändert und in die man Mutationen aufbauen kann, die Sinn machen. Wenn du aber C-Code oder C++-Code nehmen würdest, dann würde es nicht funktionieren prinzipiell, es sei denn, du bist halt sehr vorsichtig, wie du es strukturierst. Was du halt nicht machen könntest, ist, C++-Code zu nehmen und sagen, okay, ich ende jetzt mal allererst auf SS, dann funktioniert der Syntax nicht mehr und dann kompiliert das Ding noch nicht mal mehr. Wenn du aber eine Sprache benutzt, die erstmal interpretiert ist und zweitens vielleicht rekursiver ist zum Beispiel, dann kann es prinzipiell schon funktionieren. Aber das habe ich jetzt lange nicht mehr gesehen, ehrlich gesagt. Vielleicht bin ich da auch nicht mehr richtig up to date.
Johannes Schaback: Das finde ich nämlich total spannend, weil ich frage mich ja immer, wie kann ich mich selbst disrupten? und ich bin ja selber Coder. Ich glaube, wir leben eigentlich in einer Welt, die ideal ist, durch AI ersetzt zu werden. Also wir Coder, weil wir können in einer komplett digitalisierten Welt leben. Und eigentlich alles schon in irgendeiner Weise in einen Algorithmus fließen könnte, alles, was wir tun. Wir haben sogar unsere Requirements mittlerweile so vorstrukturiert, also durch die Ticket-Systeme und, und, und, dass das eigentlich relativ gut möglich ist. Und ich frage mich die ganze Zeit, wie ist das möglich? Und ich finde Genetic Programming extrem spannend, weil das eben grundsätzlich ein theoretisches Framework bietet, wie Code geschrieben werden könnte. Was Thorsten beschreibt, ist absolut richtig. Also wir sind zur Zeit, sind die Programmiersprachen für Menschen gemacht, sodass Menschen das verstehen. Und nicht für Genetic Programming geschrieben oder Genetic Algorithms geschrieben, sodass Genetic Algorithms damit schreiben. Es gibt aber zum Beispiel eine Sprache, die heißt Brain Fuck. Das ist letztendlich eine Turing-Maschine, die einfach nur aus fünf Befehlen besteht und eine Sequenz aus diesen Befehlen bildet. Und wenn ich anfange, diese Befehle, also zum Beispiel Lies vom Band, Schreib vom Band, Lies vom Band, Lies vom Band, Lies vom Band, Schreib vom Band, modifiziere und genetisch sozusagen durcheinanderwürfele, dann bekomme ich ein neues Programm, was immer ausführbar ist, was sehr, sehr weil ich eben nur fünf Operationen habe, aber ich kann, und das ist eben das Gute an Turing-Maschinen, beweisen, dass sich jede Higher-Order-Funktion damit nachbauen kann. Also Addition, Subtraktion, Pipapo. Was siehst du da für Chancen, dass das in diese Richtung kommen wird? Weil es gibt ja durchaus Startups, die sehr stark in diesem Wir waren früher eine Agentur für Web-Development und jetzt werden wir eine AI-Bude, die komplette Websites mit Funktionalitäten, komplettes SAP lernt. Das ist natürlich noch ein weiter Weg, aber irgendwie so muss es ja laufen.
Thorsten Reil: Ja, das ist ein super interessantes Thema. Ich glaube, es ist mega schwierig, das hinzukriegen. Das hat unter anderem, hat man sehr viel im Artificial Life versucht hinzubekommen. Also das Problem oder das Geile am richtigen Leben ist, dass du ja wirklich nur einen digitalen String hast. Das ist die DNA. Die hat ja nur vier Buchstaben. Letztendlich ist das das Äquivalent von binär. Also es ist digital, aber vier Buchstaben anstatt zwei. Und irgendwie hat die Natur das geschafft, diese Parameter zu übersetzen über eine Programmiersprache, die die Übersetzung auf Proteine ist, die dann einen Körper bauen, die nicht kaputt gehen kann. Du kannst die evolvieren auf eine Art, dass das System keinen Syntaxerror hat, wo alles zusammenbricht, sondern du kannst Gene verändern und teilweise hat es schlechte Konsequenzen, teilweise gute, aber es geht nie komplett kaputt. Es macht immer irgendwie Sinn. Diese Art des Mappings vom Parameter auf, was man den Phänotyp nennt, also den Organismus, ist letztendlich die Programmiersprache, kann man eigentlich sagen. Die Programmiersprache sind die Proteine. Und die Natur hat das irgendwie geschafft, was Robustes hinzubauen. Und das existiert nicht beim Programmieren.
Johannes Schaback: Das sollten wir jetzt entwickeln, Thorsten.
Joel Kaczmarek: Ja, warum machst du eigentlich noch hier so eine Ladenzeile Shop-Geschichten?
Thorsten Reil: Ja, es ist nicht trivial. das hinzukriegen, glaube ich. Und es arbeiten, glaube ich, schon, ich weiß nicht, ob jetzt wieder Leute daran arbeiten, es ist lange daran gearbeitet worden, aber dieses Mapping hinzubekommen ist, glaube ich, das Problem.
Joel Kaczmarek: Jetzt musst du uns abschließend nochmal ein bisschen sagen, alle Leute, die jetzt zugehört haben und denken, was ein geiler heißer Scheiß, ich werbe den Schaback bei Ladenzeile ab und guck mal, was da so geht. Was hält die Zukunft noch bereit und was gibt es so für Spots gerade? Also welche Firmen arbeiten an sowas? Wenn ich mich für Forschung in dem Bereich interessiere, gibt es da irgendwie Standorte, die sich da hervortun? Hast du da einen Blick?
Thorsten Reil: Ich finde, der nächste große Schritt in Künstliche Intelligenz ist Simulation und speziell Simulation und Modellierung von dem Problem, was man lösen möchte, damit man in der Lage ist, das Problem zehnmal bis fünfzigmal bis einhundertmal schneller zu simulieren und dann Algorithmen benutzen kann, wie zum Beispiel chinesische Algorithmen, aber auch Reinforcement Learning, um Netzwerke zu trainieren, die gerade mit den jetzigen Algorithmen nicht trainierbar sind. Also Simulation von Künstlicher Intelligenz Umgebung ist, glaube ich, ein riesengroßes Thema und damit auch synthetische Daten. Das Thema, was halt dann dazugehört, sind neue Algorithmen, wie zum Beispiel generische Algorithmen oder auch Weiterentwicklung von Reinforcement Learning. Wo wird das jetzt gerade gemacht? Ich glaube, es hält sich noch in Grenzen. Wie gesagt, es gab dieses eine Paper, was ein bisschen so ein Durchbruch war über Evolution Strategies von OpenAI. Ich glaube, wenn man jetzt einfach googelt Evolution Strategies OpenAI, dann findet man das. Da gibt es einen ziemlich guten Blogpost drüber. Das ist noch ziemlich neu. Ich habe gerade gesehen, die haben das gerade revised, das Paper, jetzt im September, also gerade vor einem Monat. Das ist schon ziemlich cutting edge jetzt gerade. Und wo geht das Ganze hin? Ich glaube, es wird immer mehr Simulationen geben und ich glaube, dass was mit Genetic Algorithms passiert, ist das gleiche, was mit Deep Learning passiert ist. Dass man entdeckt, dass die Algorithmen prinzipiell funktionieren, aber was gefehlt hat, war Processing Power. Ich glaube, dass wir in den nächsten ein, zwei Jahren wesentlich mehr in diesem Bereich sehen werden.
Joel Kaczmarek: Wenn ich jetzt Druck habe, weil ich mich dafür interessiere, vielleicht ein junger Mensch bin, der über Studium nachdenkt, aber findet so dieses ganze Pille-Palle-Zeug öde, wo kann ich mich über sowas auf dem Laufenden halten?
Johannes Schaback: Also was ich total spannend finde, ist die aktuelle StarCraft-Challenge. Das alte StarCraft, also StarCraft 1, ist im Grunde eine sehr, sehr komplexe Welt, die simuliert wird und die eben in 10-facher oder 100-facher Geschwindigkeit in Echtzeit abgespielt werden kann. Das ist so eine Simulation. Gerade Facebook hat krachend verloren gegen so Hacker, haben aber wohlgemerkt auch einen Deep-Learning-Ansatz gefahren, während die Hacker oder die Hobby-Coder eher einen regelbasierten Ansatz gefahren. Und es gibt immer regelmäßig diese Championships und die großen Teams treten an, so ein bisschen wie was, woraus dann eben AlphaGo dann im Go entstanden ist. Das wäre, glaube ich, etwas, was ich mir anschauen würde, weil da hätte ich das Gefühl, das wäre so eine Umgebung, die sehr viel schneller simulierbar ist als real. Aber du kannst sozusagen noch en pa mit den großen Jungs noch was reißen. Das könnte ich mir vorstellen, wäre als junger Mensch interessant.
Thorsten Reil: Ich stimme dazu. und ich glaube, es gibt noch eine andere Sache. Und das ist, dass man, ich glaube, durch diese neuen Algorithmen hoffentlich geistig ein bisschen die Freiheit bekommt, über andere neuronale Netzwerkstrukturen nachzudenken. Weil fast alles, was gerade passiert, sind entweder Feed-Forward-Networks, also Informationen fließen in eine Richtung, oder LSTMs oder ähnliche Netzwerke, aber noch sehr eingeschränkt. Das ist nicht besonders realistisch. Und was wir damals benutzt haben für die Läufer, waren komplett rekurrente Netzwerke, wo alles mit allem verbunden war. Davon ist man meistens abgeschreckt im Moment, weil man nicht weiß, wie Backpropagation auch anwendbar ist. Das ist aber komplett egal. Mit genetischen Algorithmen kann man Strukturen benutzen, die mit Backpropagation nicht funktionieren würden. Und das würde ich mir zum Beispiel jetzt im Detail mehr angucken. Also was für Netzwerke gibt es, die man ausprobieren kann mit genetischen Algorithmen, die vielleicht ein Problem wesentlich schneller lösen als Feed-Forward-Networks. Und ein Beispiel ist das Gen von physikalisch simulierten Körpern. Wenn man sich zum Beispiel anguckt, diese ganzen Challenges, die es gab, die Mojoko-Challenges zum Beispiel, Da dauert es, glaube ich, momentan teilweise elf, zwölf Stunden auf 1000 Prozessoren, um einen ganz simplen physikalischen Körper zum Laufen zu bekommen mit normalen Netzwerkstrukturen. Aber ich weiß, dass wir es damals in acht Minuten geschafft haben mit einem Recurrent Neural Network. Also irgendwas scheint da gerade nochmal neu erfunden zu werden als Rad, was eigentlich schon mal gelöst worden ist. Das lohnt sich echt richtig anzugucken, mit Netzwerkstrukturen rumzuspielen, aber auch eventuell Netzwerkstrukturen selbst zu evolvieren. Das ist eigentlich alles möglich und mit ein paar guten, schnellen Grafikkarten soll das möglich sein.
Joel Kaczmarek: Was ist denn mit dir eigentlich? Was machst du denn jetzt, wenn du seit drei bis vier Monaten jetzt in Berlin bist? Singa bist du raus. Was kommt da?
Thorsten Reil: Im Moment versuche ich so ein bisschen, mich in Berlin einzuleben. Ich spiele relativ viel Gitarre im Moment. Und lese mir Papers durch über sehr viele Alben Artificial Intelligence. Übrigens, wenn jemand Lust hat, eine Bluesband aufzumachen, bitte tweet an mich.
Joel Kaczmarek: Gibt es einen Grund für Berlin?
Thorsten Reil: Ich war ein paar Mal vorher schon in Berlin und mir hat Berlin super gut gefallen. Und der andere Grund und eigentlich wichtiger ist, dass meine Freundin hier ist.
Joel Kaczmarek: Das ist ein guter Grund.
Johannes Schaback: Und Berlin kann sich sehr glücklich schätzen, dass du da bist.
Thorsten Reil: Ich freue mich super, dass ich hier bin. Mir macht es total Spaß in Berlin.
Joel Kaczmarek: Sehr gut, sehr gut. Ganz herzlichen Dank, dass du all das Wissen auch so verständlich mit uns geteilt hast. Also es wurde manchmal richtig tief und wenn man den Schaback hier noch so auf Pulslevel 180 kriegt, dann machst du was richtig. Und ich glaube aber trotzdem, dass man ein schönes Bild hingekriegt hat. Ganz herzlichen Dank.
Thorsten Reil: Vielen Dank.
Johannes Schaback: Super cool, vielen Dank.