Künstliches neuronales Netz
Künstliche neuronale Netze, auch künstliche neuronale Netzwerke, kurz: KNN (englisch artificial neural network, ANN), sind Netze aus künstlichen Neuronen, die von den Netzwerken inspiriert wurden, die biologische Neuronen in Gehirnen bilden. Ein KNN wird von künstlichen Neuronen gebildet, die miteinander verbunden sind und in der Regel in Schichten organisiert werden.
KNN werden beim Maschinellen Lernen eingesetzt. Damit können Computer Probleme lösen, die zu kompliziert sind, um sie mit Regeln zu beschreiben, zu denen es aber viele Daten gibt, die als Beispiele für die gewünschte Lösung dienen können.
KNN bilden die Basis für Deep Learning, das ab 2006 erhebliche Fortschritte bei der Analyse von großen Datenmengen erlaubte. Erfolgreiche Anwendungen des Deep Learning sind beispielsweise Bilderkennung und Spracherkennung.[1]:11
KNNs sind Forschungsgegenstand sowohl des Maschinellen Lernens, welches ein Teilbereich der künstlichen Intelligenz ist, als auch der interdisziplinären Neuroinformatik. Das Nachbilden eines biologischen neuronalen Netzes von Neuronen ist eher Gegenstand der Computational Neuroscience.
Überblick
[Bearbeiten | Quelltext bearbeiten]KNN werden beim maschinellen Lernen eingesetzt. Damit können Computer Probleme lösen, die zu kompliziert sind, um sie mit Regeln zu beschreiben, zu denen es aber viele Daten gibt, die als Beispiele für die gewünschte Lösung dienen können. Ein Algorithmus passt das zunächst unwissende Netz so an die Beispieldaten an, dass es von ihnen auf neue Fälle verallgemeinern kann. Dieser Vorgang wird Training genannt. Das trainierte Netz kann für neue Daten Vorhersagen treffen oder Empfehlungen und Entscheidungen erzeugen.[1]:8
KNN wurden von den Netzwerken inspiriert, die biologische Neuronen in Gehirnen bilden. Biologische Neuronen sind miteinander vernetzt und in Schichten organisiert. Sie können mehrere Eingangssignale aufsummieren und geben nur dann ein Signal an andere Neuronen weiter, wenn die Summe der Eingangssignale einen Schwellenwert erreicht.[2]:37
Ein KNN wird von künstlichen Neuronen gebildet. Künstliche Neuronen bilden ausgewählte Eigenschaften von biologischen Neuronen mit mathematischen Mitteln nach. Ein künstliches Neuron kann mehrere Eingangssignale aufsummieren. Jedes Eingangssignal wird gewichtet und kann dadurch die Summe der Eingangssignale unterschiedlich stark erhöhen oder reduzieren. Die Aktivierungsfunktion eines künstlichen Neurons sorgt dafür, dass es nur dann ein Ausgangssignal ausgibt, wenn die Summe aller Eingangssignale einen Schwellenwert überschreitet. Wenn die Summe aller Eingangssignale unter dem Schwellenwert liegt, gibt das künstliche Neuron kein Ausgangssignal aus.[3][2]:37
In der Regel besteht ein KNN aus mehreren Schichten von künstlichen Neuronen. Die Signale wandern von der ersten Schicht (der Eingabeschicht) zur letzten Schicht (der Ausgabeschicht) und durchlaufen dabei möglicherweise mehrere Zwischenschichten (versteckte Schichten). Jede Schicht kann die Signale an ihren Eingängen unterschiedlich transformieren. Ein Netz mit vielen verborgenen Schichten kann eine komplizierte Aufgabe in mehrere einfachere Aufgaben zerlegen, die jeweils in verschiedenen Schichten des Modells ausgeführt werden.[3] Ein solches KNN wird auch als tiefes neuronales Netz bezeichnet. Darauf bezieht sich der Begriff „Deep Learning“.[4]
Zu Beginn des Trainings stehen alle Schwellenwerte und Gewichte auf Zufallswerten. Während des Trainings passt ein Algorithmus schrittweise Schwellenwerte und Gewichte an die Daten an, mit denen das Netz trainiert wird, siehe auch Optimierung. Die resultierenden Gewichte werden als Parameter des KI-Modells bezeichnet. Das Training wird beendet, wenn das Netz für alle Beispiele aus den Trainingsdaten eine möglichst korrekte Ausgabe erzeugt.[3]
Das Erstellen eines geeigneten Trainingsdatensatzes kann sehr schwierig sein, da man verhindern muss, dass die Daten Muster aufweisen, die das Netz nicht zur Entscheidung heranziehen soll. Das Forschungsgebiet Explainable Artificial Intelligence arbeitet an Verfahren, die erklären können, wie ein trainiertes KNN zu einer Entscheidung kommt. Beispielsweise wurde untersucht, welchen Teil eines Bildes ein KNN betrachtet, um ein Bild zu klassifizieren. Dabei entdeckten die Forscher z. B. ein KNN, das Eisenbahnzüge erkennen sollte und dazu nur auf Schienen achtete.[2]:54
Beschreibung
[Bearbeiten | Quelltext bearbeiten]Künstliche neuronale Netze basieren meist auf der Vernetzung vieler McCulloch-Pitts-Neuronen oder leichter Abwandlungen davon. Die Topologie eines Netzes (die Zuordnung von Verbindungen zu Knoten) muss im Hinblick auf seine Aufgabe gut durchdacht sein. Nach der Konstruktion eines Netzes folgt die Trainingsphase, in der das Netz „lernt“. Theoretisch kann ein Netz durch folgende Methoden lernen:
- Entwicklung neuer Verbindungen
- Löschen existierender Verbindungen
- Ändern der Gewichtung (der Gewichte der Verbindung von Neuron zu Neuron )
- Anpassen der Schwellenwerte der Neuronen, sofern diese Schwellenwerte besitzen
- Hinzufügen oder Löschen von Neuronen
- Modifikation von Aktivierungs-, Propagierungs- oder Ausgabefunktion
Außerdem verändert sich das Lernverhalten bei Veränderung der Aktivierungsfunktion der Neuronen oder der Lernrate des Netzes. Praktisch gesehen „lernt“ ein Netz hauptsächlich durch Modifikation der Gewichte der Verbindungen zwischen den Neuronen. Eine Anpassung des Schwellenwertes kann hierbei durch ein on-Neuron miterledigt werden. Dadurch sind KNNs in der Lage, komplizierte nichtlineare Funktionen über einen „Lern“-Algorithmus, der durch iterative oder rekursive Vorgehensweise aus vorhandenen Ein- und gewünschten Ausgangswerten alle Parameter der Funktion zu bestimmen versucht, zu erlernen. KNNs sind dabei eine Realisierung des konnektionistischen Paradigmas, da die Funktion aus vielen einfachen gleichartigen Teilen besteht. Erst in ihrer Summe kann deren Verhalten im Zusammenspiel sehr vieler beteiligter Teile komplex werden. Ein neuronales Netz, das deterministisch beschrieben wird und Rückkopplungen erlaubt, stellt unter dem Gesichtspunkt der Berechenbarkeit ein äquivalentes Modell zur Turingmaschine dar.[5] D.h. zu jedem Netz gibt es mindestens eine Turingmaschine und zu jeder Turingmaschine gibt es mindestens ein Netz mit Rückkopplung. Bei einer stochastischen Beschreibung ist dies nicht der Fall. Rekurrente Netze sind damit die ausdrucksstärkste Form (Typ 0 in der Chomsky-Hierarchie).
Geschichtliche Entwicklung
[Bearbeiten | Quelltext bearbeiten]Das Interesse für künstliche neuronale Netze setzte bereits in den frühen 1940er Jahren ein, also etwa gleichzeitig mit dem Einsatz programmierbarer Computer in angewandter Mathematik.[6]
Anfänge
[Bearbeiten | Quelltext bearbeiten]Die Anfänge gehen auf Warren McCulloch und Walter Pitts zurück. Sie beschrieben 1943 Verknüpfungen von elementaren Einheiten zu einem Netz ähnlich dem der Neuronen im Gehirn, mit dem sich praktisch jede logische oder arithmetische Funktion berechnen lassen könnte.[7] 1947 wiesen sie darauf hin, dass ein solches Netz beispielsweise zur räumlichen Mustererkennung eingesetzt werden kann. 1949 formulierte Donald O. Hebb seine Hebbsche Lernregel, die in ihrer allgemeinen Form die meisten der künstlichen neuronalen Lernverfahren wiedergibt. Karl Lashley fand 1950, dass der Prozess der Informationsspeicherung im Gehirn verteilt auf verschiedene Untereinheiten realisiert wird.[8]
Erste Blütezeit
[Bearbeiten | Quelltext bearbeiten]Im anschließenden Jahr, 1951, gelingt Marvin Minsky mit seiner Dissertationsarbeit der Bau des Neurocomputers Snarc, der seine Gewichte automatisch justieren kann, jedoch nicht praktisch einsetzbar ist.[8] 1956 treffen sich Wissenschaftler und Studenten auf der Dartmouth Conference. Diese Konferenz gilt als Geburtsstunde der Künstlichen Intelligenz als akademisches Fachgebiet.[9] Von 1957 bis 1958 entwickeln Frank Rosenblatt und Charles Wightman den ersten erfolgreichen Neurocomputer, mit dem Namen Mark I Perceptron. Der Computer konnte mit seinem 20 × 20 Pixel großen Bildsensor bereits einfache Ziffern erkennen. Im nachfolgenden Jahr formuliert Rosenblatt das Perceptron-Konvergenz-Theorem. 1960 stellen Bernard Widrow und Marcian E. Hoff das ADALINE (ADAptive LInear NEuron) vor.[10] Dieses Netz erreichte als erstes weite kommerzielle Verbreitung. Anwendung fand es in Analogtelefonen zur Echtzeit-Echofilterung. Das neuronale Netz lernte mit der Deltaregel. 1961 stellte Karl Steinbuch Techniken der assoziativen Speicherung vor. 1969 gaben Marvin Minsky und Seymour Papert eine genaue mathematische Analyse des Perceptrons.[11] Sie zeigten auf, dass wichtige Probleme nicht gelöst werden können. So sind unter anderem XOR-Operatoren nicht auflösbar und es gibt Probleme in der linearen Separierbarkeit. Die Folge war ein vorläufiges Ende der Forschungen auf dem Gebiet der neuronalen Netze, da die meisten Forschungsgelder gestrichen wurden.
Langsamer Wiederaufbau
[Bearbeiten | Quelltext bearbeiten]1972 präsentiert Teuvo Kohonen den linearen Assoziator, ein Modell des Assoziativspeichers.[12] James A. Anderson beschreibt das Modell unabhängig von Kohonen aus neuropsychologischer Sicht im selben Jahr.[13] 1973 benutzt Christoph von der Malsburg ein Neuronenmodell, das nichtlinear ist. Bereits 1974 entwickelt Paul Werbos für seine Dissertation die Backpropagation bzw. die Fehlerrückführung. Das Modell bekam aber erst später eine größere Bedeutung. Ab 1976 entwickelt Stephen Grossberg mathematisch fundierte Modelle neuronaler Netze. Zusammen mit Gail Carpenter widmet er sich auch dem Problem, ein neuronales Netz lernfähig zu halten, ohne bereits Gelerntes zu zerstören. Sie formulieren ein Architekturkonzept für neuronale Netze, die Adaptive Resonanztheorie. 1982 beschreibt Teuvo Kohonen die nach ihm benannten selbstorganisierenden Karten. Im selben Jahr beschreibt John Hopfield das Modell der Hopfield-Netze. 1983 wird von Kunihiko Fukushima, S. Miyake und T. Ito das neuronale Modell Neocognitron vorgestellt. Das Modell war eine Weiterentwicklung des 1975 entwickelten Cognitrons und diente zur Erkennung handgeschriebener Zeichen.
Renaissance
[Bearbeiten | Quelltext bearbeiten]1985 veröffentlicht John Hopfield eine Lösung des Travelling Salesman Problems durch ein Hopfield-Netz. 1985 wird das Lernverfahren Backpropagation of Error als Verallgemeinerung der Delta-Regel durch die Parallel-Distributed-Processing-Gruppe separat entwickelt. Somit werden nicht linear separierbare Probleme durch mehrschichtige Perceptrons lösbar. Minskys Auffassung war also widerlegt.
Neue Erfolge in Mustererkennungswettbewerben seit 2009
[Bearbeiten | Quelltext bearbeiten]In jüngster Zeit erlebten neuronale Netze eine Wiedergeburt, da sie bei herausfordernden Anwendungen oft bessere Ergebnisse als konkurrierende Lernverfahren liefern. Zwischen 2009 und 2012 gewannen die rekurrenten bzw. tiefen vorwärtsgerichteten neuronalen Netze der Forschungsgruppe von Jürgen Schmidhuber am Schweizer KI Labor IDSIA eine Serie von acht internationalen Wettbewerben in den Bereichen Mustererkennung und maschinelles Lernen.[14] Insbesondere gewannen ihre rekurrenten LSTM-Netze[15][16] drei Wettbewerbe zur verbundenen Handschrifterkennung bei der Intl. Conf. on Document Analysis and Recognition (ICDAR) 2009 – obwohl kein A-priori-Wissen über die drei verschiedenen zu lernenden Sprachen in die Programmierung der Modelle einbezogen wurde. Die LSTM-Netze erlernten gleichzeitige Segmentierung und Erkennung. Dies waren die ersten internationalen Wettbewerbe, die durch Deep Learning[17][18] oder durch rekurrente Netze gewonnen wurden.
Tiefe vorwärtsgerichtete Netze wie Kunihiko Fukushimas Konvolutionsnetz der 80er Jahre[19] haben wieder an Bedeutung gewonnen. Sie verfügen über alternierende Konvolutionslagen (convolutional layers) und Lagen von Neuronen, die mehrere Aktivierungen zusammenfassen (pooling layers[20]), um die räumliche Dimension zu reduzieren. Abgeschlossen wird ein solches Konvolutionsnetz in der Regel durch mehrere vollständig verbundene Schichten (englisch fully connected layers). Yann LeCuns Team von der New York University wandte den 1989 schon gut bekannten Backpropagation-Algorithmus auf solche Netze an.[21] Moderne Varianten verwenden sogenanntes max-pooling für die Zusammenfassung der Aktivierungen, das stets der stärksten Aktivierung den Vorzug gibt.[22] Schnelle Grafikprozessor (GPU)-Implementierungen dieser Kombination wurden 2011 durch Dan Ciresan und Kollegen in Schmidhubers Gruppe eingeführt.[23] Sie gewannen seither zahlreiche Wettbewerbe, u. a. die „ISBI 2012 Segmentation of Neuronal Structures in Electron Microscopy Stacks Challenge“[24] und den „ICPR 2012 Contest on Mitosis Detection in Breast Cancer Histological Images“.[25] Derartige Modelle erzielten auch die bisher besten Ergebnisse auf dem ImageNet Benchmark.[26][27] GPU-basierte max-pooling-Konvolutionsnetze waren auch die ersten künstlichen Mustererkenner mit übermenschlicher Performanz[28] in Wettbewerben wie der „IJCNN 2011 Traffic Sign Recognition Competition“.[29] In den letzten Jahren fand auch die Theorie der Zufallsmatrizen vermehrt Anwendung in der Erforschung von neuronalen Netzen.[30] Neuronale Operatoren sind Verallgemeinerungen von künstlichen neuronalen Netzwerken auf unendlichdimensionale Funktionenräume. Die primäre Anwendung von neuronalen Operatoren liegt darin Lösungsoperatoren von partiellen Differentialgleichungen zu erlernen.[31]
Topologie der Verbindungsnetze
[Bearbeiten | Quelltext bearbeiten]In künstlichen neuronalen Netzen bezeichnet die Topologie die Struktur des Netzes. Damit ist im Allgemeinen gemeint, wie viele künstliche Neuronen sich auf wie vielen Schichten befinden, und wie diese miteinander verbunden sind. Künstliche Neuronen können auf vielfältige Weise zu einem künstlichen neuronalen Netz verbunden werden. Dabei werden Neuronen bei vielen Modellen in hintereinander liegenden Schichten (englisch layers) angeordnet; bei einem Netz mit nur einer trainierbaren Neuronenschicht spricht man von einem einschichtigen Netz.
Unter Verwendung eines Graphen können die Neuronen als Knoten und ihre Verbindungen als Kanten dargestellt werden. Die Eingaben werden gelegentlich auch als Knoten dargestellt, was hilft, den Informationsfluss durch das Netzwerk zu visualisieren.
Die hinterste Schicht des Netzes, deren Neuronenausgaben meist als einzige außerhalb des Netzes sichtbar sind, wird Ausgabeschicht (englisch output layer) genannt. Davorliegende Schichten werden entsprechend als versteckte Schicht (englisch hidden layer) bezeichnet.
Typische Strukturen
[Bearbeiten | Quelltext bearbeiten]Die Struktur eines Netzes hängt unmittelbar mit dem verwendeten Lernverfahren zusammen und umgekehrt; so kann mit der Delta-Regel nur ein einschichtiges Netz trainiert werden, bei mehreren Schichten ist eine leichte Abwandlung vonnöten. Dabei müssen Netze nicht zwingend homogen sein: es existieren auch Kombinationen aus verschiedenen Modellen, um so unterschiedliche Vorteile zu kombinieren.
Es gibt reine feedforward-Netze, bei denen eine Schicht immer nur mit der nächsthöheren Schicht verbunden ist. Darüber hinaus gibt es Netze, in denen Verbindungen in beiden Richtungen erlaubt sind. Die passende Netzstruktur wird meist nach der Methode von Versuch und Irrtum gefunden, was durch evolutionäre Algorithmen und eine Fehlerrückführung unterstützt werden kann.
Einschichtiges feedforward-Netz
[Bearbeiten | Quelltext bearbeiten]Einschichtige Netze mit der feedforward-Eigenschaft (englisch für vorwärts) sind die einfachsten Strukturen künstlicher neuronaler Netze. Sie besitzen lediglich eine Ausgabeschicht. Die feedforward-Eigenschaft besagt, dass Neuronenausgaben nur in Verarbeitungsrichtung geleitet werden und nicht durch eine rekurrente Kante zurückgeführt werden können (azyklischer, gerichteter Graph).
Mehrschichtiges feedforward-Netz
[Bearbeiten | Quelltext bearbeiten]Mehrschichtige Netze besitzen neben der Ausgabeschicht auch verdeckte Schichten, deren Ausgabe wie beschrieben, außerhalb des Netzes nicht sichtbar sind. Verdeckte Schichten verbessern die Abstraktion solcher Netze. So kann erst das mehrschichtige Perzeptron das XOR-Problem lösen.
Rekurrentes Netz
[Bearbeiten | Quelltext bearbeiten]Rekurrente Netze besitzen im Gegensatz dazu auch rückgerichtete (rekurrente) Kanten (englisch feedback loops) und enthalten somit eine Rückkopplung. Solche Kanten werden dann immer mit einer Zeitverzögerung (in der Systemtheorie als Verzögerungsglied bezeichnet) versehen, sodass bei einer schrittweisen Verarbeitung die Neuronenausgaben der vergangenen Einheit wieder als Eingaben angelegt werden können. Diese Rückkopplungen ermöglichen einem Netz ein dynamisches Verhalten und statten es mit einem Gedächtnis aus.
Dynamische Neuronale Netze
[Bearbeiten | Quelltext bearbeiten]Dynamische neuronale Netze passen die Struktur und/oder Parameter dynamisch je nach Input bei der Inferenz an.[32]
Neuronale Netze mit Gedächtnis
[Bearbeiten | Quelltext bearbeiten]Neuronale Netze mit Gedächtnis verfügen über einen statischen Speicher, der bei der Inferenz dynamisch abgefragt werden kann.
Funktionsweise
[Bearbeiten | Quelltext bearbeiten]Künstliche neuronale Netze dienen als universelle Funktionsapproximatoren. Werte werden dabei von der Eingabe- bis zur Ausgabeschicht propagiert, wobei eine Aktivierungsfunktion für Nichtlinearität sorgt. Beim Trainieren wird ein Fehler bestimmt; mit Hilfe von Fehlerrückführung und einem Optimierungsverfahren werden dabei die Gewichte schichtweise angepasst.[33]
Künstliche Neuronen
[Bearbeiten | Quelltext bearbeiten]Ein künstliches Neuron erhält Eingaben von anderen Neuronen (oder von außen), wie auf dem Bild rechts zu erkennen ist. Der Wert einer Eingabe hängt vom Aktivitätslevel des sendenden Neurons und vom Gewicht der Verbindung zwischen Sender- und Empfänger-Neuron ab.
Die Propagierungsfunktion (Übertragungsfunktion) errechnet aus den einzelnen Eingaben und ihren Gewichten die Gesamteingabe für das Neuron, die Netz-Eingabe oder Netz-Input genannt wird. Am häufigsten wird die gewichtete Summe (Linearkombination) verwendet:
Welches Aktivitätslevel das Neuron annimmt, wird nicht direkt durch die Netz-Eingabe bestimmt, sondern durch die Aktivierungsfunktion. Dieses Aktivitätslevel bestimmt dann die Ausgabe des Neurons an Neuronen der nächsten Schicht.
Die Aktivierungsfunktion ermöglicht die Einführung von Nichtlinearität ins neuronale Netz, denn nicht alle Aufgaben neuronaler Netze lassen sich mit linearen Funktionen abbilden. Es gibt verschiedene Aktivierungsfunktionen. In den verdeckten Schichten wird meist die Rectifier-Funktion verwendet, in der Ausgabeschicht eine Sigmoidfunktion.
Hierbei ist
- eine differenzierbare Funktion, deren Ableitung nicht überall gleich null ist,
- die Anzahl der Eingaben,
- die von Neuron kommende Eingabe
- die Gewichtung im Neuron für die Eingabe .
Es existieren auch Ausgabefunktionen, meist wird jedoch einfach das Ergebnis der Aktivierungsfunktion zurückgegeben.
Fehlerfunktion
[Bearbeiten | Quelltext bearbeiten]Mit Hilfe von verbundenen Neuronen, die die Propagierungs- und Aktivierungsfunktionen anwenden, gibt das neuronale Netz einen Zahlenvektor aus. Inwieweit das Ergebnis aus dem KNN von dem Zielwert abweicht, wird mit Hilfe einer Fehlerfunktion bestimmt. Es gibt verschiedene Arten von Fehlerfunktionen. Eine davon ist der mittlere quadratische Fehler (MQF):
Dabei ist
- der Fehler,
- die Anzahl der Ausgabeneuronen,
- die gewünschte Soll-Ausgabe oder Zielwert (target) und
- die errechnete Ist-Ausgabe (output).
Der Faktor wird dabei lediglich zur Vereinfachung bei der Ableitung hinzugenommen.
Der MQF eignet sich, wenn die Rückgabe des Netzes ein einzelner Wert ist.
Fehlerrückführung
[Bearbeiten | Quelltext bearbeiten]Mit Hilfe des Fehlers lassen sich die Gewichte anpassen. Dies geschieht in zwei Schritten: Im ersten Schritt werden mit Hilfe der Fehlerrückführung die Gradienten bestimmt. Im zweiten Schritt werden die Gradienten mit einem Optimierungsverfahren verwendet, um die Gewichte zu aktualisieren. In diesem Abschnitt geht es um die Fehlerrückführung.
Die Idee hinter der Fehlerrückführung ist, die Gradienten schichtweise zu berechnen. Dies geschieht über die Kettenregel:
Optimierung
[Bearbeiten | Quelltext bearbeiten]Es ist wichtig, das Training mit zufälligen Anfangswerten zu beginnen. Bei überall gleichen Anfangswerten hätte beispielsweise jeder Knoten im KNN das gleiche Gewicht. Wenn dann Gewichte durch die Fehlerrückführung angepasst werden, würde der Fehler auf alle Knoten gleich verteilt und es würden auch alle Gewichte gleichmäßig verändert. Da das Problem in der Regel nicht symmetrisch ist, dürfen auch die Anfangswerte keine Symmetrien aufweisen, sonst kann der Lernalgorithmus das KNN nicht gut an die Trainingsdaten anpassen.[34]:190
Mit der Fehlerrückführung wurden Fehler und Gewichte in einer Funktion abgebildet. Das Lernen korrespondiert nun zu einer Minimierung der Fehlerfunktion, indem die Gewichte angepasst werden. Das aus der Schule bekannte Optimalitätskriterium 1. Ordnung, das Nullsetzen der Ableitung, ist bei Neuronalen Netzen praktisch jedoch ungeeignet. Stattdessen wird mit Gradientenverfahren gearbeitet, um ein lokales Minimum der Fehlerfunktion zu finden. Der Gradient ist die Richtung des steilsten Anstieges einer Funktion, eine Bewegung entgegen den Gradienten ermöglicht also einen Abstieg auf dem Graphen der Fehlerfunktion. Eine Iteration des naiven Gradientverfahrens oder Gradientenabstieges ist also die Berechnung des Gradienten für die aktuelle Wahl der Gewichte, anschließend wird von den Gewichten der Gradient abgezogen und so neue Gewichte mit niedrigerem Fehler erhalten. Das Netz hat somit also „gelernt“.
Dieses Update bzw. dieser Abstiegsschritt wird durch folgende Zuweisung notiert:
Dabei beschreibt der Wert die Lernrate. Dieser gibt an, wie groß die Schritte sind, die das Verfahren in Richtung des Minimums nehmen soll. Zur Berechnung des Gradienten wird die Fehlerrückführung (engl. Backpropagation) verwendet. Das Verfahren wird solange wiederholt, bis ein Abbruchkriterium erfüllt ist, idealerweise durch Konvergenz zu einem lokalen Minimum.
Neben dem hier dargestellten naiven Gradientenverfahren werden in der Praxis meist besser entwickelte und leistungsfähigere Variationen des Gradientenabstieges verwendet, z. B. der stochastische Gradientenabstieg oder das ADAM-Verfahren.
Anwendung
[Bearbeiten | Quelltext bearbeiten]Seine besonderen Eigenschaften machen das KNN bei allen Anwendungen interessant, bei denen kein oder nur geringes explizites (systematisches) Wissen über das zu lösende Problem vorliegt. Dies sind z. B. die Texterkennung, Spracherkennung, Bilderkennung und Gesichtserkennung, bei denen einige Hunderttausend bis Millionen Bildpunkte in eine im Vergleich dazu geringe Anzahl von erlaubten Ergebnissen überführt werden müssen.
Auch in der Regelungstechnik kommen KNN zum Einsatz, um herkömmliche Regler zu ersetzen oder ihnen Sollwerte vorzugeben, die das Netz aus einer selbst entwickelten Prognose über den Prozessverlauf ermittelt hat. So können auch Fuzzy-Systeme durch eine bidirektionale Umwandlung in neuronale Netze lernfähig gestaltet werden.
Die Anwendungsmöglichkeiten sind aber nicht auf techniknahe Gebiete begrenzt: Bei der Vorhersage von Veränderungen in komplexen Systemen werden KNNs unterstützend hinzugezogen, z. B. zur Früherkennung sich abzeichnender Tornados oder aber auch zur Abschätzung der weiteren Entwicklung wirtschaftlicher Prozesse.
Zu den Anwendungsgebieten von KNNs gehören insbesondere:
- Regelung und Analyse komplexer Prozesse
- Frühwarnsysteme
- Fehlererkennung
- Optimierung
- Zeitreihenanalyse (Wetter, Aktien usw.)
- Sprachsynthese
- Klangsynthese
- Klassifikation
- Bildverarbeitung und Mustererkennung
- Informatik: Bei Robotik, virtuellen Agenten und KI-Modulen in Spielen und Simulationen
- Medizinische Diagnostik, Epidemiologie und Biometrie
- Strukturgleichungsmodell zum Modellieren von sozialen oder betriebswirtschaftlichen Zusammenhängen
Trotz dieser sehr großen Spanne an Anwendungsgebieten gibt es Bereiche, die KNNs aufgrund ihrer Natur nicht abdecken können, beispielsweise:[35]
- Vorhersage von Zufalls- oder Pseudozufalls-Zahlen
- Faktorisierung von großen Zahlen
- Bestimmung, ob eine große Zahl prim ist
- Entschlüsseln von verschlüsselten Texten
Implementierungen
[Bearbeiten | Quelltext bearbeiten]- TensorFlow – Programmbibliothek
- SNNS – Stuttgarter Neuronale-Netze-Simulator
- EpsiloNN neuronale Beschreibungssprache der Universität Ulm
- OpenNN
Biologische Motivation
[Bearbeiten | Quelltext bearbeiten]Während das Gehirn zur massiven Parallelverarbeitung in der Lage ist, arbeiten die meisten heutigen Computersysteme nur sequentiell (bzw. partiell parallel eines Rechners). Es gibt jedoch auch erste Prototypen neuronaler Rechnerarchitekturen, sozusagen den neuronalen Chip, für die das Forschungsgebiet der künstlichen neuronalen Netze die theoretischen Grundlagen bereitstellt. Dabei werden die physiologischen Vorgänge im Gehirn jedoch nicht nachgebildet, sondern nur die Architektur der massiv parallelen Analog-Addierer in Silizium nachgebaut, was gegenüber einer Software-Emulation eine bessere Leistung verspricht.
Klassen und Typen von KNN
[Bearbeiten | Quelltext bearbeiten]Grundsätzlich unterscheiden sich die Klassen der Netze vorwiegend durch die unterschiedlichen Netztopologien und Verbindungsarten, so zum Beispiel einschichtige, mehrschichtige, Feedforward- oder Feedback-Netze.
- McCulloch-Pitts-Netze
- Lernmatrix
- Perzeptron
- Self-Organizing Maps (auch Kohonen-Netze) (SOM)
- Growing Neural Gas (GNG)
- Lernende Vektorquantisierung (LVQ)
- Boltzmann-Maschine
- Cascade-Correlation-Netze
- Counterpropagation-Netze
- Probabilistische neuronale Netze
- Radiale Basisfunktions-Netze (RBF)
- Adaptive Resonanztheorie (ART)
- Neocognitron
- Gepulste neuronale Netze (Spiking Neural Networks, SNN)
- Pulscodierte neuronale Netze (PCNN)
- Time Delay Neural Networks (TDNNs)
- Rekurrente neuronale Netze (RNNs)
- Bidirektionaler Assoziativspeicher (BAM)
- Elman-Netze (auch Simple recurrent network, SRN)
- Jordan-Netze
- Oszillierendes neuronales Netz
- Residuale neuronale Netze
Aktivierungsfunktion
[Bearbeiten | Quelltext bearbeiten]Jede verdeckte Schicht und die Ausgabeschicht bzw. deren Neuronen verfügen über eine (eigene) Aktivierungsfunktion. Diese können linear oder nicht-linear sein. Nicht-lineare Aktivierungsfunktionen machen das Netz besonders mächtig.[36]
Lernverfahren
[Bearbeiten | Quelltext bearbeiten]Lernverfahren dienen dazu, ein neuronales Netz so zu modifizieren, dass es für bestimmte Eingangsmuster zugehörige Ausgabemuster erzeugt. Dies geschieht grundsätzlich auf drei verschiedenen Wegen.
Überwachtes Lernen (supervised learning)
[Bearbeiten | Quelltext bearbeiten]Beim Überwachten Lernen wird dem KNN ein Eingangsmuster gegeben und die Ausgabe, die das neuronale Netz in seinem aktuellen Zustand produziert, mit dem Wert verglichen, den es eigentlich ausgeben soll. Durch Vergleich von Soll- und Istausgabe kann auf die vorzunehmenden Änderungen der Netzkonfiguration geschlossen werden. Bei einlagigen Perzeptrons kann die Delta-Regel (auch Perzeptron-Lernregel) angewendet werden. Mehrlagige Perzeptrons werden in der Regel mit Backpropagation trainiert, was eine Verallgemeinerung der Delta-Regel darstellt.
Unüberwachtes Lernen (unsupervised learning)
[Bearbeiten | Quelltext bearbeiten]Das Unüberwachte Lernen erfolgt ausschließlich durch Eingabe der zu lernenden Muster. Das neuronale Netz verändert sich entsprechend den Eingabemustern von selbst. Hierbei gibt es folgende Lernregeln:
Bestärkendes Lernen (reinforcement learning)
[Bearbeiten | Quelltext bearbeiten]Es ist nicht immer möglich, zu jedem Eingabedatensatz den passenden Ausgabedatensatz zum Trainieren zur Verfügung zu haben. Zum Beispiel kann man einem Agenten, der sich in einer fremden Umgebung zurechtfinden muss – etwa einem Roboter auf dem Mars – nicht zu jedem Zeitpunkt sagen, welche Aktion jeweils die beste ist. Aber man kann dem Agenten eine Aufgabe stellen, die dieser selbstständig lösen soll. Nach einem Testlauf, der aus mehreren Zeitschritten besteht, kann der Agent bewertet werden. Aufgrund dieser Bewertung kann eine Agentenfunktion gelernt werden.
Der Lernschritt kann durch eine Vielzahl von Techniken vollzogen werden. Unter anderem können hier auch künstliche neuronale Netze zum Einsatz kommen.
Stochastisches Lernen
[Bearbeiten | Quelltext bearbeiten]- Simulierte Abkühlung (Simulated Annealing)
Allgemeine Probleme
[Bearbeiten | Quelltext bearbeiten]Die Hauptnachteile von KNN sind gegenwärtig:
- Das Trainieren von KNN (im Terminus der Statistik: Das Schätzen der im Modell enthaltenen Parameter) führt in der Regel zu hochdimensionalen, nichtlinearen Optimierungsproblemen. Die prinzipielle Schwierigkeit bei der Lösung dieser Probleme besteht in der Praxis häufig darin, dass man nicht sicher sein kann, ob man das globale Optimum gefunden hat oder nur ein lokales. Obgleich in der Mathematik eine Fülle relativ schnell konvergierender lokaler Optimierungsverfahren entwickelt wurden (beispielsweise Quasi-Newton-Verfahren: BFGS, DFP usw.), finden auch diese selten optimale Lösungen. Eine zeitaufwändige Näherung an die globale Lösung erreicht man gegebenenfalls durch die vielfache Wiederholung der Optimierung mit immer neuen Startwerten.
- Es müssen Trainings- und Testdaten gesammelt oder manuell erzeugt werden. Dieser Vorgang kann sehr schwierig sein, da man verhindern muss, dass das Netz Eigenschaften der Muster lernt, die zwar auf dem Trainingsset mit dem Ergebnis in irgendeiner Weise korreliert sind, die aber in anderen Situationen nicht zur Entscheidung herangezogen werden können oder sollen. Wenn beispielsweise die Helligkeit von Trainingsbildern bestimmte Muster aufweist, dann 'achtet' das Netz unter Umständen nicht mehr auf die gewünschten Eigenschaften, sondern klassifiziert die Daten nur noch aufgrund der Helligkeit. Im sozialen Bereich besteht z. B. die Gefahr, durch einseitig ausgewählte Testdaten bestehende Diskriminierungen (etwa aufgrund des Geschlechts oder der Herkunft) fortzuschreiben, ohne die eigentlich angezielten Kriterien (etwa Kreditwürdigkeit) ausreichend zu berücksichtigen.
- Bei Anwendung einer heuristischen Vorgehensweise bei der Netzspezifikation neigen KNN dazu, die Trainingsdaten einfach auswendig zu lernen, infolge Übergeneralisierung bzw. Überanpassung (englisch overfitting).[37] Wenn dies geschieht, können die Netze nicht mehr auf neue Daten verallgemeinern. Um eine Überanpassung zu vermeiden, muss die Netzarchitektur mit Bedacht gewählt werden. In ähnlicher Weise besteht diese Problematik auch bei vielen anderen statistischen Verfahren und wird als Verzerrung-Varianz-Dilemma bezeichnet. Verbesserte Verfahren setzen Boosting, Support-Vector-Maschinen oder Regularisierung ein, um diesem Problem zu begegnen.
- Die Kodierung der Trainingsdaten muss problemangepasst und nach Möglichkeit redundanzfrei gewählt werden. In welcher Form die zu lernenden Daten dem Netz präsentiert werden, hat einen großen Einfluss auf die Lerngeschwindigkeit, sowie darauf, ob das Problem überhaupt von einem Netz gelernt werden kann. Gute Beispiele hierfür sind Sprachdaten, Musikdaten oder auch Texte. Das einfache Einspeisen von Zahlen, beispielsweise aus einer .wav-Datei für Sprache, führt selten zu einem erfolgreichen Ergebnis. Je präziser das Problem allein durch die Vorverarbeitung und Kodierung gestellt wird, desto erfolgreicher kann ein KNN dieses verarbeiten.
- Die Vorbelegung der Gewichte spielt eine wichtige Rolle. Als Beispiel sei ein 3-schichtiges Feed-Forward-Netz mit einem Eingabeneuron (plus ein Bias-Neuron) und einem Ausgabeneuron und einer verdeckten Schicht mit N Neuronen (plus ein Bias-Neuron) angenommen. Die Aktivierungsfunktion des Eingabeneurons sei die Identität. Die Aktivierungsfunktion der verdeckten Schicht sei die Tanh-Funktion. Die Aktivierungsfunktion der Ausgabeschicht sei die logistische Sigmoide. Das Netz kann maximal eine Sinusfunktion mit N lokalen Extrema im Intervall von 0 bis 1 lernen. Wenn es diese Sinusfunktion gelernt hat, kann es mit dieser Gewichtsbelegung jede beliebige Funktion – die nicht mehr lokale Extrema als diese Sinusfunktion – mit möglicherweise exponentieller Beschleunigung – lernen (unabhängig vom Lernalgorithmus). Hier sei der einfachste Backpropagation ohne Momentum verwendet. Glücklicherweise kann man die Gewichte für solch eine Sinusfunktion leicht berechnen, ohne dass das Netz das erst lernen muss: Verdeckte Schicht : , x = i % 2 == 0 ? 1 : -1 , ; Ausgabeschicht : .
Filmische Dokumentationen
[Bearbeiten | Quelltext bearbeiten]- Künstliche neuronale Netze - Computer lernen sehen, einfache Erklärung, 2017
- Künstliche neuronale Netze, komplexere Erklärung
- Künstliche neuronale Netze - Programme lernen, einfache Erklärung, 2017
Siehe auch
[Bearbeiten | Quelltext bearbeiten]Literatur
[Bearbeiten | Quelltext bearbeiten]- Johann Gasteiger, Jure Zupan: Neural Networks in Chemistry and Drug Design. Wiley-VCH, Weinheim NY u. a. 1999, ISBN 3-527-29779-0.
- Simon Haykin: Neural Networks. A Comprehensive Foundation. 2. edition, international edition = Reprint. Prentice-Hall, Upper Saddle River NJ u. a. 1999, ISBN 0-13-273350-1.
- John Hertz, Anders Krogh, Richard G. Palmer: Introduction to the Theory of Neural Computation. Nachdruck. Addison-Wesley, Reading MA u. a. 1999, ISBN 0-201-51560-1 (Santa Fé Institute studies in the sciences of complexity. Lecture notes 1 = Computation and neural systems series).
- Teuvo Kohonen: Self Organizing Maps. 3. edition. Springer, Berlin u. a. 2001, ISBN 3-540-67921-9 (Springer Series in Information Sciences 30 = Physics and Astronomy online Library).
- Rudolf Kruse, Christian Borgelt, Frank Klawonn, Christian Moewes, Georg Ruß, Matthias Steinbrecher: Computational Intelligence. 1. Auflage, Vieweg+Teubner Verlag/Springer Fachmedien Wiesbaden, 2011, ISBN 978-3-8348-1275-9.
- Burkhard Lenze: Einführung in die Mathematik neuronaler Netze. Mit C-Anwendungsprogrammen im Internet. 3. durchgesehene und überarbeitete Auflage. Logos-Verlag, Berlin 2009, ISBN 3-89722-021-0.
- André Lucas: Schätzung und Spezifikation ökonometrischer neuronaler Netze. Eul, Lohmar 2003, ISBN 3-89936-183-0 (Reihe: Quantitative Ökonomie 138), (Zugleich: Köln, Univ., Diss., 2002).
- Harald Maurer: Cognitive Science: Integrative Synchronization Mechanisms in Cognitive Neuroarchitectures of the Modern Connectionism. CRC Press, Boca Raton/FL, 2021, ISBN 978-1-351-04352-6.
- Heinz Rehkugler, Hans Georg Zimmermann: Neuronale Netze in der Ökonomie. Grundlagen und finanzwirtschaftliche Anwendungen. Vahlen, München 1994, ISBN 3-8006-1871-0.
- Günter Daniel Rey, Karl F. Wender: Neuronale Netze. Eine Einführung in die Grundlagen, Anwendungen und Datenauswertung. Hogrefe AG, Bern 2018, dritte Auflage, ISBN 978-3-456-85796-1 (Psychologie Lehrbuch).
- Helge Ritter, Thomas Martinetz, Klaus Schulten: Neural Computation and Self-Organizing Maps. An Introduction. Addison-Wesley, Reading MA 1992, ISBN 0-201-55442-9 (Computation and neural Systems Series).
- Raúl Rojas: Theorie der Neuronalen Netze. Eine systematische Einführung. 4. korrigierter Nachdruck. Springer, Berlin u. a. 1996, ISBN 3-540-56353-9 (Springer-Lehrbuch).
- Andreas Zell: Simulation neuronaler Netze. 4. unveränderter Nachdruck. Oldenbourg, München u. a. 2003, ISBN 3-486-24350-0.
Weblinks
[Bearbeiten | Quelltext bearbeiten]- Einführung in die Grundlagen und Anwendungen neuronaler Netze
- "Der Blick in Neuronale Netze, 1. Juli 2019, in: Fraunhofer-Institut für Nachrichtentechnik
- „Neuronale Netze: Einführung“, Nina Schaaf, 14. Januar 2020, in: Informatik Aktuell (Magazin)
- Ein kleiner Überblick über Neuronale Netze – Grundlagenskript zu zahlreichen Arten / Lernprinzipien neuronaler Netze, viele Abbildungen, einfach geschrieben, ca. 200 Seiten (PDF).
- Gute Einführung in neuronale Netze (englisch)
- Interaktiver Demonstrator für das Training eines zweischichtigen Netzes in Excel (ohne Makros)
Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ a b Inga Döbel u. a.: Maschinelles Lernen - Eine Analyse zu Kompetenzen, Forschung und Anwendung. Fraunhofer-Gesellschaft, September 2018, abgerufen am 25. April 2024.
- ↑ a b c Manuela Lenzen: Künstliche Intelligenz. 1. Auflage. C. H. Beck, München 2020, ISBN 978-3-406-75124-0.
- ↑ a b c Larry Hardesty: Explained: Neural networks. MIT News Office, 14. April 2017, abgerufen am 20. Februar 2024 (englisch).
- ↑ Aurélien Géron: Praxiseinstieg Machine Learning. 3. Auflage. dpunkt Verlag, Heidelberg 2023, ISBN 978-3-96009-212-4, S. 343.
- ↑ — ( vom 2. Mai 2013 im Internet Archive)
- ↑ Ein kleiner Überblick über Neuronale Netze. 5. September 2017, abgerufen am 8. Oktober 2024.
- ↑ Warren S. McCulloch und Walter Pitts: A logical calculus of the ideas immanent in nervous activity. Hrsg.: Bulletin of Mathematical Biophysics. Vol. 5 Auflage. Kluwer Academic Publishers, 1943, S. 115–133, doi:10.1007/BF02478259.
- ↑ a b Beleg existiert nicht mehr Neuronale Netze - Einführung. Abgerufen am 5. September 2015 (englisch).
- ↑ Erhard Konrad: Zur Geschichte der Künstlichen Intelligenz in der Bundesrepublik Deutschland (PDF; 86 kB), abgerufen am 23. Mai 2019.
- ↑ Bernhard Widrow, Marcian Hoff: Adaptive switching circuits. In: Proceedings WESCON. 1960, ZDB-ID 267416-6, S. 96–104.
- ↑ Marvin Minsky, Seymour Papert: Perceptrons. An Introduction to Computational Geometry. MIT Press, Cambridge MA u. a. 1969.
- ↑ Teuvo Kohonen: Correlation matrix memories. In: IEEE transactions on computers. C-21, 1972, ISSN 0018-9340, S. 353–359.
- ↑ James A. Anderson: A simple neural network generating an interactive memory. In: Mathematical Biosciences. 14, 1972, ISSN 0025-5564, S. 197–220.
- ↑ 2012 Kurzweil AI Interview ( vom 31. August 2018 im Internet Archive) mit Jürgen Schmidhuber zu den acht Wettbewerben, die sein Deep Learning Team zwischen 2009 und 2012 gewann
- ↑ Alex Graves, Jürgen Schmidhuber: Offline Handwriting Recognition with Multidimensional Recurrent Neural Networks. In: Yoshua Bengio, Dale Schuurmans, John Lafferty, Chris K. I. Williams, Aron Culotta (Hrsg.): Advances in Neural Information Processing Systems 22 (NIPS'22), December 7th–10th, 2009, Vancouver, BC. Neural Information Processing Systems (NIPS) Foundation, 2009, S. 545–552
- ↑ A. Graves, M. Liwicki, S. Fernandez, R. Bertolami, H. Bunke, J. Schmidhuber: A Novel Connectionist System for Improved Unconstrained Handwriting Recognition. IEEE Transactions on Pattern Analysis and Machine Intelligence, Band 31, Nr. 5, 2009.
- ↑ Y. Bengio: Learning Deep Architectures for AI. ( vom 21. März 2014 im Internet Archive) Now Publishers, 2009.
- ↑ Jürgen Schmidhuber: My First Deep Learning System of 1991 + Deep Learning Timeline 1962–2013.
- ↑ K. Fukushima: Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position. In: Biological Cybernetics. Band 36, Nr. 4, 1980, S. 93–202, doi:10.1007/BF00344251.
- ↑ Dominik Scherer, Andreas Müller, Sven Behnke: Evaluation of Pooling Operations in Convolutional Architectures for Object Recognition. In: Artificial Neural Networks – ICANN 2010 (= Lecture Notes in Computer Science). Springer Berlin Heidelberg, 2010, ISBN 978-3-642-15825-4, S. 92–101, doi:10.1007/978-3-642-15825-4_10 (springer.com [abgerufen am 26. August 2019]).
- ↑ Y. LeCun, B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard, L. D. Jackel: Backpropagation Applied to Handwritten Zip Code Recognition. In: Neural Computation. Band 1, 1989. S. 541–551.
- ↑ M. Riesenhuber, T. Poggio: Hierarchical models of object recognition in cortex. In: Nature Neuroscience. 1999.
- ↑ D. C. Ciresan, U. Meier, J. Masci, L. M. Gambardella, J. Schmidhuber: Flexible, High Performance Convolutional Neural Networks for Image Classification. International Joint Conference on Artificial Intelligence (IJCAI-2011, Barcelona), 2011.
- ↑ D. Ciresan, A. Giusti, L. Gambardella, J. Schmidhuber: Deep Neural Networks Segment Neuronal Membranes in Electron Microscopy Images. In: Advances in Neural Information Processing Systems (NIPS 2012), Lake Tahoe, 2012.
- ↑ D. Ciresan, A. Giusti, L. Gambardella, J. Schmidhuber: Mitosis Detection in Breast Cancer Histology Images using Deep Neural Networks. MICCAI 2013.
- ↑ A. Krizhevsky, I. Sutskever, G. E. Hinton: ImageNet Classification with Deep Convolutional Neural Networks. NIPS 25, MIT Press, 2012.
- ↑ M. D. Zeiler, R. Fergus: Visualizing and Understanding Convolutional Networks. 2013. arxiv:1311.2901
- ↑ D. C. Ciresan, U. Meier, J. Schmidhuber: Multi-column Deep Neural Networks for Image Classification. IEEE Conf. on Computer Vision and Pattern Recognition CVPR 2012.
- ↑ D. C. Ciresan, U. Meier, J. Masci, J. Schmidhuber: Multi-Column Deep Neural Network for Traffic Sign Classification. Neural Networks, 2012.
- ↑ J. Pennington und Y. Bahri: Geometry of Neural Network Loss Surfaces via Random Matrix Theory. In: ICML. 2017 (semanticscholar.org).
- ↑ Nikola Kovachki, Zongyi Li, Burigede Liu, Kamyar Azizzadenesheli, Kaushik Bhattacharya, Andrew Stuart, Anima Anandkumar: Neural Operator: Learning Maps Between Function Spaces. In: Journal of Machine Learning Research. Band 24, 2023, S. 1–97.
- ↑ Dynamic Neural Networks: A Survey, Autoren Yizeng Han, Gao Huang, Shiji Song, Le Yang, Honghui Wang, Yulin Wang, https://arxiv.org/pdf/2102.04906
- ↑ Dasaradh S. K: A Gentle Introduction To Math Behind Neural Networks. 30. Oktober 2020, abgerufen am 21. August 2022 (englisch).
- ↑ Jörg Frochte: Maschinelles Lernen - Grundlagen und Algorithmen in Python. 3. Auflage. Carl Hanser, München 2021, ISBN 978-3-446-46144-4.
- ↑ Neural Networks FAQ. Abgerufen am 24. Juli 2019 (englisch).
- ↑ Neural Networks FAQ. Abgerufen am 5. September 2015 (englisch).
- ↑ Johannes Merkert: Ein künstliches neuronales Netz selbst gebaut. In: c't. Abgerufen am 24. Mai 2016.