Ich werde hier eine Liste derjenigen erstellen, die ich bisher gelernt habe. Wie @marcodena sagte, sind Vor- und Nachteile schwieriger, weil es meistens nur Heuristiken sind, die aus dem Ausprobieren dieser Dinge gelernt wurden.
Zuerst definiere ich die Notation explizit, damit keine Verwirrung entsteht:
Notation
Diese Notation stammt aus Neilsens Buch .
Ein Feedforward-Neuronales Netzwerk besteht aus mehreren miteinander verbundenen Neuronenschichten. Es nimmt eine Eingabe auf, dann "sickert" diese Eingabe durch das Netzwerk und das neuronale Netzwerk gibt einen Ausgabevektor zurück.
Nennen Sie formal die Aktivierung (aka Ausgabe) des -Neurons in der , wobei das -Element im Eingabevektor ist.aijjthitha1jjth
Dann können wir die Eingabe der nächsten Ebene über die folgende Beziehung mit der vorherigen verknüpfen:
aij=σ(∑k(wijk⋅ai−1k)+bij)
wo
- σ ist die Aktivierungsfunktion,
- wijk ist das Gewicht vom Neuron in der Schicht zum Neuron in der Schicht,kth(i−1)thjthith
- bij ist die Vorspannung des Neurons in der Schicht, undjthith
- aij repräsentiert den Aktivierungswert des Neurons in der Schicht.jthith
Manchmal schreiben wir , um , mit anderen Worten, den Aktivierungswert eines Neurons, bevor wir die Aktivierungsfunktion anwenden .zij∑k(wijk⋅ai−1k)+bij
Für eine präzisere Notation können wir schreiben
ai=σ(wi×ai−1+bi)
Um diese Formel zur Berechnung der Ausgabe eines Feedforward-Netzwerks für eine Eingabe , setzen Sie und berechnen Sie dann , Dabei ist die Anzahl der Schichten.I∈Rna1=Ia2,a3,…,amm
Aktivierungsfunktionen
(Im Folgenden schreiben wir aus Lesbarkeit anstelle von )exp(x)ex
Identität
Wird auch als lineare Aktivierungsfunktion bezeichnet.
aij=σ(zij)=zij
Schritt
aij=σ(zij)={01if zij<0if zij>0
Stückweise linear
Wählen Sie einige und , das ist unser "Sortiment". Alles, was kleiner als dieser Bereich ist, ist 0 und alles, was größer als dieser Bereich ist, ist 1. Alles andere wird dazwischen linear interpoliert. Formal:xminxmax
aij=σ(zij)=⎧⎩⎨⎪⎪⎪⎪0mzij+b1if zij<xminif xmin≤zij≤xmaxif zij>xmax
Wo
m=1xmax−xmin
und
b=−mxmin=1−mxmax
Sigmoid
aij=σ(zij)=11+exp(−zij)
Komplementäres Log-Log
aij=σ(zij)=1−exp(−exp(zij))
Bipolar
aij=σ(zij)={−1 1if zij<0if zij>0
Bipolares Sigmoid
aij=σ(zij)=1−exp(−zij)1+exp(−zij)
Tanh
aij=σ(zij)=tanh(zij)
LeCuns Tanh
Siehe Efficient Backprop .
aij=σ(zij)=1.7159tanh(23zij)
Skaliert:
Hard Tanh
aij=σ(zij)=max(−1,min(1,zij))
Absolut
aij=σ(zij)=∣zij∣
Gleichrichter
Auch bekannt als Rectified Lineareinheit (relu), Max oder die Rampenfunktion .
aij=σ(zij)=max(0,zij)
Modifikationen von ReLU
Dies sind einige Aktivierungsfunktionen, mit denen ich gespielt habe und die aus mysteriösen Gründen eine sehr gute Leistung für MNIST zu haben scheinen.
aij=σ(zij)=max(0,zij)+cos(zij)
Skaliert:
aij=σ(zij)=max(0,zij)+sin(zij)
Skaliert:
Glatter Gleichrichter
Auch bekannt als Smooth Rectified Linear Unit, Smooth Max oder Soft Plus
aij=σ(zij)=log(1+exp(zij))
Logit
aij=σ(zij)=log(zij(1−zij))
Skaliert:
Probit
aij=σ(zij)=2–√erf−1(2zij−1)
.
Wobei die Fehlerfunktion ist . Es kann nicht über elementare Funktionen beschrieben werden, aber auf dieser Wikipedia-Seite und hier finden Sie Möglichkeiten, wie Sie die Inverse approximieren können .erf
Alternativ kann es ausgedrückt werden als
aij=σ(zij)=ϕ(zij)
.
Wobei die kumulative Verteilungsfunktion ( Cumulative Distribution Function, CDF) ist. Siehe hier für Mittel zur Annäherung.ϕ
Skaliert:
Kosinus
Siehe Random Kitchen Sinks .
aij=σ(zij)=cos(zij)
.
Softmax
Wird auch als normalisiertes Exponential bezeichnet.
aij=exp(zij)∑kexp(zik)
Dieses ist ein wenig seltsam, weil die Ausgabe eines einzelnen Neurons von den anderen Neuronen in dieser Schicht abhängt. Es wird auch schwierig zu berechnen, da ein sehr hoher Wert sein kann, in welchem Fall wahrscheinlich überlaufen wird. Wenn ein sehr niedriger Wert ist, läuft er unter und wird zu .zijexp(zij)zij0
Um dem entgegenzuwirken, berechnen wir stattdessen . Das gibt uns:log(aij)
log(aij)=log⎛⎝⎜exp(zij)∑kexp(zik)⎞⎠⎟
log(aij)=zij−log(∑kexp(zik))
Hier müssen wir den log-sum-exp-Trick verwenden :
Nehmen wir an, wir rechnen:
log(e2+e9+e11+e−7+e−2+e5)
Wir werden zunächst unsere Exponentiale nach ihrer Größe sortieren:
log(e11+e9+e5+e2+e−2+e−7)
Dann, da unser höchstes ist, multiplizieren wir mit :e11e−11e−11
log(e−11e−11(e11+e9+e5+e2+e−2+e−7))
log(1e−11(e0+e−2+e−6+e−9+e−13+e−18))
log(e11(e0+e−2+e−6+e−9+e−13+e−18))
log(e11)+log(e0+e−2+e−6+e−9+e−13+e−18)
11+log(e0+e−2+e−6+e−9+e−13+e−18)
Wir können dann den Ausdruck auf der rechten Seite berechnen und das Protokoll davon erstellen. Dies ist in Ordnung, da diese Summe in Bezug auf sehr klein ist , sodass ein Unterlauf auf 0 ohnehin nicht signifikant genug gewesen wäre, um einen Unterschied zu bewirken. Ein Überlauf kann im rechten Ausdruck nicht auftreten, da wir garantiert haben, dass nach der Multiplikation mit alle Potenzen .log(e11)e−11≤0
Formal nennen wir . Dann:m=max(zi1,zi2,zi3,...)
log(∑kexp(zik))=m+log(∑kexp(zik−m))
Unsere Softmax-Funktion wird dann:
aij=exp(log(aij))=exp(zij−m−log(∑kexp(zik−m)))
Die Ableitung der Softmax-Funktion ist auch als Randnotiz:
dσ(zij)dzij=σ′(zij)=σ(zij)(1−σ(zij))
Maxout
Dieser ist auch ein bisschen knifflig. Im Wesentlichen besteht die Idee darin, dass wir jedes Neuron in unserer Maxout-Schicht in viele Subneuronen aufteilen, von denen jede ihre eigenen Gewichte und Vorurteile hat. Dann wird die Eingabe für ein Neuron stattdessen an jedes seiner Subneuronen gesendet, und jedes Subneuron gibt einfach seine (ohne eine Aktivierungsfunktion anzuwenden). Das dieses Neurons ist dann das aller Ausgaben seines .zaij
In einem einzelnen Neuron haben wir formal Subneuronen. Dannn
aij=maxk∈[1,n]sijk
wo
sijk=ai−1∙wijk+bijk
( ist das Skalarprodukt )∙
Um uns zu helfen, darüber nachzudenken, betrachten wir die Gewichtsmatrix für die -Schicht eines neuronalen Netzwerks, das beispielsweise eine Sigmoid-Aktivierungsfunktion verwendet. ist eine 2D-Matrix, wobei jede Spalte ein Vektor für das Neuron , der ein Gewicht für jedes Neuron in der vorherigen Schicht .WiithWiWijji−1
Wenn wir Subneuronen haben wollen, brauchen wir eine 2D-Gewichtsmatrix für jedes Neuron, da jedes Subneuron einen Vektor benötigt, der ein Gewicht für jedes Neuron in der vorherigen Schicht enthält. Dies bedeutet, dass nun eine 3D-Gewichtsmatrix ist, wobei jedes die 2D-Gewichtsmatrix für ein einzelnes Neuron . Und dann ist ein Vektor für das Subneuron in Neuron , der eine Gewichtung für jedes Neuron in der vorherigen Schicht .WiWijjWijkkji−1
Ebenso ist in einem neuronalen Netzwerk, das beispielsweise wieder eine Sigmoid-Aktivierungsfunktion verwendet, ein Vektor mit einer Vorspannung für jedes Neuron in Schicht .bibijji
Um dies mit zu tun, benötigen wir eine 2D-Bias-Matrix für jede Schicht , wobei der Vektor mit einem Bias für jedes Subneurons im Neuron.biibijbijkkjth
für jedes Neuron eine Wichtungsmatrix und ein Bias-Vektor die obigen Ausdrücke sehr deutlich, und es werden einfach die jedes auf die Ausgänge von schichte , wende dann ihre Vorspannungen und nehme das Maximum von ihnen.wijbijwijkai−1i−1bijk
Radiale Basisfunktionsnetzwerke
Radiale Basisfunktionsnetzwerke sind eine Modifikation von Feedforward-Neuronalen Netzen, bei denen anstatt verwendet wird
aij=σ(∑k(wijk⋅ai−1k)+bij)
Wir haben ein Gewicht pro Knoten in der vorherigen Schicht (wie normal) und auch einen mittleren Vektor und einen Standardabweichungsvektor für jeden Knoten in die vorherige Schicht.wijkkμijkσijk
Dann rufen wir unsere Aktivierungsfunktion auf, um zu vermeiden, dass sie mit den Standardabweichungsvektoren verwechselt wird . nun zu berechnen, wir zuerst ein für jeden Knoten in der vorherigen Ebene berechnen . Eine Möglichkeit ist die Verwendung der euklidischen Distanz:ρσijkaijzijk
zijk=∥(ai−1−μijk∥−−−−−−−−−−−√=∑ℓ(ai−1ℓ−μijkℓ)2−−−−−−−−−−−−−√
Wobei das -Element von . Dieser benutzt nicht das . Alternativ gibt es Mahalanobis Distanz, die angeblich besser abschneidet:μijkℓℓthμijkσijk
zijk=(ai−1−μijk)TΣijk(ai−1−μijk)−−−−−−−−−−−−−−−−−−−−−−√
Dabei ist die Kovarianzmatrix , definiert als:Σijk
Σijk=diag(σijk)
Mit anderen Worten, ist die Diagonalmatrix mit als diagonalen Elementen. Wir definieren hier und als Spaltenvektoren, da dies die normalerweise verwendete Notation ist.Σijkσijkai−1μijk
Diese sagen eigentlich nur, dass Mahalanobis Distanz definiert ist als
zijk=∑ℓ(ai−1ℓ−μijkℓ)2σijkℓ−−−−−−−−−−−−−−⎷
Wobei das -Element von . Beachten Sie, dass immer positiv sein muss, aber dies ist eine typische Anforderung für Standardabweichungen, sodass dies nicht so überraschend ist.σijkℓℓthσijkσijkℓ
Falls gewünscht, ist der Mahalanobis-Abstand allgemein genug, dass die Kovarianzmatrix als andere Matrizen definiert werden kann. Wenn zum Beispiel die Kovarianzmatrix die Identitätsmatrix ist, reduziert sich unsere Mahalanobis-Distanz auf die euklidische Distanz. ist jedoch ziemlich verbreitet und wird als normalisierte euklidische Distanz bezeichnet .ΣijkΣijk=diag(σijk)
In können wir nach Auswahl unserer Distanzfunktion über berechnenaij
aij=∑kwijkρ(zijk)
In diesen Netzwerken wird nach Anwendung der Aktivierungsfunktion aus Gründen die Multiplikation mit Gewichten gewählt.
Hier wird beschrieben, wie ein Netzwerk mit mehrschichtigen radialen Basisfunktionen erstellt wird. In der Regel ist jedoch nur eines dieser Neuronen vorhanden, und seine Ausgabe ist die Ausgabe des Netzwerks. Es wird als mehrere Neuronen gezeichnet, weil jeder Mittelwertvektor und jeder Standardabweichungsvektor dieses einzelnen Neurons als ein "Neuron" betrachtet wird, und dann gibt es nach all diesen Ausgaben eine andere Schicht das ist die Summe dieser berechneten Werte mal der Gewichte, genau wie oben. Es scheint mir seltsam, es mit einem "Summierungs" -Vektor am Ende in zwei Schichten aufzuteilen, aber es ist das, was sie tun.μijkσijkaij
Siehe auch hier .
Radiale Basisfunktion Netzwerkaktivierungsfunktionen
Gaußsche
ρ(zijk)=exp(−12(zijk)2)
Multiquadratisch
Wähle einen Punkt . Dann berechnen wir den Abstand von zu :(x,y)(zij,0)(x,y)
ρ(zijk)=(zijk−x)2+y2−−−−−−−−−−−−√
Dies ist aus Wikipedia . Es ist nicht begrenzt und kann jeder positive Wert sein, obwohl ich mich frage, ob es einen Weg gibt, ihn zu normalisieren.
Wenn , ist dies äquivalent zu absolut (mit einer horizontalen Verschiebung ).y=0x
Inverse multiquadratisch
Wie quadratisch, außer umgedreht:
ρ(zijk)=1(zijk−x)2+y2−−−−−−−−−−−−√
* Grafiken von intmaths Graphen mit SVG .