@Krautmaster:
(künstliches) neuronales Netzwerk. Mit Neu
tralität hat das nichts zu tun
Wobei der englische Fachbegriff (artificial)
neural network deutlich verbreiteter ist, da Forschung heutzutage mit wenigen Ausnahmen i.d.R. immer in Englisch stattfindet.
"Matrizenberechnung" (2D) ist auch nur bedingt richtig, da es vor allem auch sehr viele Vektoren (1D) und n-dimensionale Tensoren gibt. Deshalb heißt Google's TensorFlow auch
TensorFlow, weil es i.d.R. um 1-dimensionale (Vektor), 2-dimensionale (Matrix) oder 3-5 dimensionale Tensoren (für conv kernels) geht.
Flow weil die Daten durch einen Graphen "fließen", dessen einzelne Nodes (Knoten) die einzelnen Operationen und Ergebnisse darstellen.
"Matrizenberechnung" ist also ein wichtiger Bestandteil, aber eben auch nur ein Teil. Konkret geht es bei neural networks um
lineare Algebra und im Zuge dessen i.d.R. um
Optimierungsprobleme.
Auf diese oder sehr ähnliche Weise organisiert das übrigens jede machine learning library. Also das abstrakt ein neural network als
Graph dargestellt wird und die einzelnen Komponenten sowie ihre Verbindungen untereinander dann als
Knoten respektive
Kanten.
Davon zu unterscheiden ist übrigens ein (echtes/biologisches)
neuronales Netz(werk). Bei diesem sind nämlich sehr viele, unterschiedliche
Dendriten als Eingangspotenziale mit einem einzigen Neuron verbunden. Ist die Anregung im Input groß genug, d.h. sie überschreitet einen gewissen Schwellwert, feuert das Neuron, d.h. löst einen Impuls über sein
Axon aus (das wiederum mit weiteren Neuronen verbunden ist, bei denen das Signal dann über deren Dendriten eingeht).
Die Problematik hierbei ist nun, dass biologische
Neuronen kontinuerlich, sich mehr oder weniger arbiträr vernetzen können, Verbindungen mit der Zeit auf-/abbauen können und vor allem "spiken", d.h. ihre Erregung skaliert nicht mit der Intensität (
Amplitude) eines Signal, sondern mit der
Frequenz.
All diese Sachen kann man künstlich im Computer nicht direkt abbilden: heutige Computer bilden (ob nun auf Festplatte, im RAM, im Cache, ...)
immer diskrete Zustände ab.
Einzelne Verbindungen von Neuronen untereinander "manuell" (z.B. per
OOP) aufzulösen, wäre unglaublich ressourcenaufwändig und würde die heutigen Möglichkeiten von Computern um Größenordnungen übersteigen.
Ebenfalls ist es nicht möglich, parallel bei neuronen im Größenbereich von 1e^4 (kleinere Experimente) bis 1e^7 (großes Zeug auf dicken Clustern) dynamisch je nach Stimulanz die Frequenz anzupassen.
Als Abhilfe nimmt man deshalb lineare Algebra: da kann man stark parallel große Vektoren, Matrizen bzw. eben allgemein n-dimensionale Tensoren verarbeiten.
Um nun die unterschiedlichen Verbindungen abzubilden, geht man grundsätzlich immer erstmal davon aus, dass "alles mit allem" verbunden ist und setzt diejenigen Gewichte, bei denen keine Verbindung von einem Neuron zum anderen mehr dargestellt werden soll einfach auf Null (somit "sendet" das Neuron kein Signal mehr, da ja alles per Multiplikation/Addition propagiert wird).
Für die Schwellwerte und das Spiken, also die Frequenz bei unterschiedlicher Erregung hat man sich auch eine gute Abhilfe einfallen lassen (trivial etwa "if"-statements zu benutzen wäre wiederum um Größenordnungen zu Ressourcenaufwendig): für den Schwellwert zieht man einfach einen bias-Vektor per Subtraktion vom Ergebnis ab. Damit werden Ergebnisse erneut "genullt", die den erforderlichen Schwellwert nicht überschreiten und anstatt die Frequenz modellieren zu müssen, bedient man sich einfach nicht-linearer Aktivierungs
funktionen und nimmt hinterher deren Output als Messgröße für die Erregung eines künstlichen Neurons.
Wobei man i.d.R. nur darauf achten muss, dass die Funktion
differenzierbar ist und normalerweise
monoton steigend sein sollte.
Die Problematik der Kontinuität löst man im Prinzip nicht, aber 16- oder 32-bit floats bieten für derzeitige machine learning Lösungen ausreichend Genauigkeit/Zustände.