So funktionieren neuronale Netze | KI-Basics c't uplink https://www.youtube.com/watch?v=1fQrOek4buQ Transkript (automatisch erstellt) 0:00 Neuronen, also Nervenzellen, können elektrische Impulse an 0:03 ihren Synapsen wahrnehmen. Wenn sie von diesen Impulsen genug 0:06 gereizt werden, dann feuern sie, indem sie selbst einen Impuls erzeugen. 0:10 Biologisch ist das ein komplexer Vorgang, aber die Grundidee lässt sich 0:14 ziemlich leicht am Rechner simulieren. Echte Neuronen werden kontinuierlich aus 0:17 wie schnell Impulse ankommen. Das ist aufwendig zu simulieren. 0:21 Stattdessen kann die Simulation einfach alles in einem Schritt rechnen. 0:25 Viele oder starke Impulse stellt sie durch größere Zahlen dar, wenige oder 0:29 schwache durch kleinere Zahlen. Das ist viel einfacher zu berechnen. 0:32 Unterschiedlich starke Reize werden dann einfach über die Summe aller Werte 0:36 dargestellt, die über die Synapsen reinkommen. 0:38 Je höher diese Summe, umso höher der Reiz. 0:41 Synapsen sind unterschiedlich reizbar, aber auch sehr anpassungsfähig. 0:45 Nach neuen Erfahrungen verändern sie ihre Reizbarkeit. 0:48 Und das ist der biologische Prozess hinter dem Begriff „Lernen“. 0:52 Die einfachste Art, diesen Prozess mathematisch zu simulieren, ist, 0:56 wenn man jede Eingabe mit einem eigenen Wert multipliziert. 0:59 Irrelevante Eingaben kann das Neuron dann mit einem ganz kleinen Wert wie 1:03 zum Beispiel 0,01 multiplizieren. Ganz wichtige mit 1,8 - oder so ähnlich. 1:08 Normalerweise würde diese Summe dann immer nur um den Nullpunkt oszillieren. 1:13 Und um das zu vermeiden, addiert die Simulation einfach noch 1:16 pro Neuron einen festen Wert dazu. Das ist der sogenannte „Bias“. 1:20 Was jetzt noch fehlt, ist das Feuern. Unser Modell muss vor allem simulieren, 1:23 dass Neuronen einfach nichts tun, wenn sie nur wenig gereizt werden. 1:26 Und genau dafür ist jetzt die Aktivierungsfunktion zuständig. 1:30 Der einfachste Fall von so einer Aktivierungsfunktion, der hat einen 1:33 ziemlich fancy Namen: „Rectified Linear Unit“, kurz: „ReLU“. 1:37 Die Funktion ist aber extrem einfach. Sie reicht die Werte einfach unverändert durch, 1:41 außer die Eingabe wäre negativ, dann gibt sie stattdessen 0 zurück. 1:46 Programmiert ist das einfach das Maximum aus 0 und der Eingabe x. 1:51 Den Wert, den wir vorhin berechnet haben, - also die Profis nennen 1:54 solche Werte oft „Logits“ - schieben wir jetzt 1:56 noch einmal durch die ReLU. Und das war es eigentlich schon! Das ist 1:59 im Prinzip die komplette Mathematik, die in neuronalen Netzen steckt. 2:03 Der nächste Schritt, der jetzt kommt, der ist für Informatiker gewohnt, für 2:07 den Rest der Welt aber ein bisschen verwirrend: 2:09 Da wir jetzt wissen, wie wir ein einzelnes Neuron simulieren, können wir 2:12 das Gleiche ein paar Millionen mal machen und auch die Logits von Neuronen als 2:16 Eingaben für andere Neuronen benutzen. Und wenn ihr jetzt sagt: „Hey, Moment mal! 2:20 Ein paar Millionen mal! Und jedes Neuron hat einen eigenen Wert, 2:22 die dann alle miteinander multipliziert werden. - Das ist doch 2:25 eigentlich viel zu komplex! Das versteht doch kein Mensch!“ 2:30 Dann habt ihr eigentlich so den wichtigsten Aspekt von KI verstanden. 2:34 Es ist wirklich so komplex, dass es selbst die Entwickler nicht verstehen. 2:37 Aber dafür gibt es dann eben einige Algorithmen, die das 2:41 Ganze automatisch berechnen. Und die Algorithmen sind alle so 2:46 optimiert, dass der Mensch überhaupt keinen Überblick behalten muss. 2:50 Aber damit man trotzdem versteht, was darin eigentlich passiert und wie das 2:54 Ganze innerhalb dieser Netze berechnet wird, 2:57 hat sich meine Kollegin Pina mal ein Beispiel überlegt, an dem man das alles 3:02 auch selbst nachrechnen kann. Stellt euch für mein Beispiel vor, 3:06 dass ich Smart-Home-Sensoren habe. Einer erkennt, ob mein Fahrrad im Keller steht 3:10 und der andere ist ein smarter Lichtschalter in meinem Zimmer. 3:14 Es geht darum, anhand dieser Daten vorherzusagen, ob ich schlafe. 3:18 Der Datensatz besteht aus 8 Zeilen in einer Tabelle. In der Spalte Y steht, 3:23 was das neuronale Netz ausgeben sollte. Vom Fahrradschloss kommt ein Bit vom 3:27 Lichtschalter ein Stromverbrauch in Watt, einer etwas größeren Zahl. 3:31 Dass aus einem einzelnen Neuron bestehenden Netz muss lernen, 3:35 die Eingaben in die richtige Größenordnung, - normalerweise der Bereich zwischen 0 und 1 - 3:39 zu skalieren und logisch zu verknüpfen. Ich schlafe, wenn das Fahrrad 3:43 da ist und das Licht aus ist. Das heißt, das Gewicht für die Synapse 3:47 zum Lichtschalter-Stromverbrauch muss eine kleine negative Zahl sein. 3:52 Bei nur einem Neuron kommt man mit kurzem Nachdenken auf die perfekten Werte: 3:56 1,0 ... 0,05 und 0 für den Bias. Man kann das aber auch programmieren. 4:02 Eine Loss-Funktion definieren, die partielle Ableitung für alle drei Werte berechnen 4:06 und dann in mehreren kleinen Schritten ausgehend 4:08 von Zufallszahlen die gleichen Werte mit dem Gradientenabstiegsalgorithmus annähern. 4:15 Diese ganzen Schritte, die Pina da jetzt einfach so dahergesagt hat: 4:21 Dahinter steckt die große Innovation aus den 80er Jahren, 4:24 ohne die, die KI, wie wir es hier heute kennen, eigentlich gar 4:27 nicht möglich gewesen wäre. Das Verfahren nennt sich „Backpropagation“. 4:31 Und damit kann man die ganzen Parameter, also sowohl von sehr kleinen als auch 4:37 den ganz großen Netzen annähern. Wie gut so ein künstliches neuronales 4:42 Netz mit bestehenden Parametern funktioniert, kann ein Programm 4:45 automatisch mit einer Loss-Funktion bestimmen. 4:48 Diese Fehlerfunktion berechnet, wie stark die Ausgabe vom 4:51 gewünschten Wert abweicht. Oft wird dazu der ausgegebene Wert vom 4:54 gewünschten Wert abgezogen und das Ergebnis quadriert - damit immer eine 4:57 positive Zahl entsteht. Je größer die ist, desto schlechter sind 5:01 die momentan gewählten Parameter. Angenommen es gäbe nur zwei 5:05 Parameter wie ein Pinas Beispiel: Dann könnte man die 5:07 Loss-Funktion als Fläche darstellen. Am Punkt (1, –0,05) wäre 5:12 sie besonders klein. An Punkten in der 5:14 Nähe schon etwas größer. Und an weit entfernten 5:16 Punkten ziemlich groß. Die Loss-Funktionen von neuronalen Netzen 5:20 haben immer dort ein Tal, wo die optimale Parameterkombination liegt. 5:24 Hat man diese fabelhaften Werte gefunden, dann liegen die Berechnungen des Netzes 5:28 und die Zielwerte der Trainingsdaten in den meisten Fällen sehr nahe beieinander. 5:33 Also rein mathematisch funktioniert das für Tausende oder Millionen Dimensionen 5:38 genauso wie für zwei. Nur kann man dann eben keine Diagramme 5:41 mehr zeichnen, auf denen man was erkennen kann. 5:44 Weil die Loss-Funktion immer runtergeht in Richtung besserer Parameter, 5:48 kann man einen Algorithmus benutzen, um sich vom Rechner gute 5:51 Parameter suchen zu lassen. Dazu fängt man einfach mit zufälligen 5:55 Werten an und berechnet, in welche Richtung es runtergeht. 5:58 Dann ändert man die Werte ein wenig in diese Richtung. 6:01 Von diesem besseren Punkt aus macht man das Gleiche wieder für den nächsten 6:04 Schritt und so weiter. Nach genügend Schritten kommt man bei 6:07 ziemlich guten Parametern an. Im Grunde rechnet der Algorithmus das 6:11 Netz dann rückwärts, um herauszufinden, welche Parameter am 6:14 meisten dazu beitragen, dass die Loss-Funktion 6:17 noch größer als 0 ist. Das Ganze nennt man eben „Backpropagation“, 6:22 weil das Netz rückwärts gerechnet wird. Künstliche neuronale Netze wurden 6:27 eigentlich sogar schon in den 50ern erfunden. 6:30 Die waren aber überhaupt nicht effizient trainierbar, weil die Backpropagation, 6:34 also die zentrale Technik, die heutige KIs erst möglich macht, 6:38 wurde erst in den 80ern erfunden und erst seitdem gibt es auch 6:42 nennenswerte Forschung zu ihnen. Und das wirklich coole an 6:45 neuronalen Netzen ist - also diese Erkenntnis hat mich total begeistert! - 6:48 - ist einfach, dass sie jede Art von Funktionen nachbilden können, jede Art 6:52 von Berechnungen ausführen können! Und das wurde übrigens 6:56 auch theoretisch bewiesen! Und mit nur zwei Neurunenschichten 7:03 kann man im Endeffekt alle Logikgatter nachbilden. 7:06 Es gibt unendlich viele Möglichkeiten, wie man die Neuronen 7:09 miteinander verdrahten könnte. Manche funktionieren gut für den einen 7:12 Datensatz, andere missarabel. Theoretisch sind neuronale Netze 7:16 beliebige Function-Approximator, also Programme, 7:19 die jede Berechnung - nur anhand von Daten - nachahmen können. 7:22 Aber in der Praxis brauchen Data-Scientists - also das 7:25 sind die KI-Informatiker - eine Menge Bauchgefühl dafür, welche 7:29 Netzwerksstrukturen für einen Datensatz funktionieren könnten 7:32 und welche eben nicht. Damit die Datenwissenschaftler schnell 7:35 experimentieren können, gibt es KI-Frameworks wie 7:38 PyTorch oder TensorFlow. Die berechnen beispielsweise 7:41 vollautomatisch die ganzen partiellen Ableitungen und nutzen wirklich alles, 7:45 was das System hergibt. Das heißt, die rechnen mit voller 7:48 Hardwarebeschleunigung der Vektor-Einheiten in der 7:50 CPU und auf der Grafikkarte! Für die allerersten Experimente müsst ihr 7:55 aber noch nicht mal was installieren. Ihr könnt nämlich auch im Browser ein 7:59 paar Sachen ausprobieren, was sogar ziemlich schön umgesetzt ist. 8:02 Es gibt den „TensorFlow-Playground“, das ist eine Webseite, die zu TensorFlow, 8:07 dem KI-Framework von Google gehört. Auf der Webseite könnt ihr so ein 8:11 bisschen Einstellungen machen, wie viele Neuronen ihr haben 8:14 wollt, auf mehreren Schichten und könnt mit so ganz einfachen 8:18 Minidatensätzen dann trainieren und auch sehen, wie gut das Training geklappt hat. 8:22 Das haben sie sehr schön umgesetzt! Was ich euch zusätzlich empfehlen kann, 8:26 ist eine Webseite namens „Hart und Trocken“, wo es diverse Visualisierungen gibt, 8:33 auch eine zu neuronalen Netzen. Und da könnt ihr auch die einzelnen 8:36 Parameter genau einsehen und seht also sozusagen die Matrix an Parametern, 8:42 aus denen das Netz dann eigentlich besteht bzw. wo die 8:45 Intelligenz dann drin steckt. Wenn ihr dann Lust gekriegt habt, wie es 8:50 damit weitergeht und wollt vielleicht auch mal für ein reales Problem - 8:53 so was wie handgeschriebene Ziffern erkennen - ein Netz selber trainieren, 8:58 dann solltet ihr vielleicht den Kanal abonnieren! Weil wir werden nämlich hier 9:02 so eine kleine Reihe von Videos veröffentlichen, 9:05 wo wir auf die Installation eingehen und danach auch auf den Code, wie ihr das 9:10 selber programmiert. Und deswegen abonniert vielleicht 9:13 einfach, wenn ihr das nicht verpassen wollt.