Ich versuche die Rolle der Ableitung der Sigmoidfunktion in neuronalen Netzen zu verstehen.
Zuerst zeichne ich die Sigmoidfunktion und die Ableitung aller Punkte von der Definition mit Python. Welche Rolle spielt dieses Derivat genau?
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def derivative(x, step):
return (sigmoid(x+step) - sigmoid(x)) / step
x = np.linspace(-10, 10, 1000)
y1 = sigmoid(x)
y2 = derivative(x, 0.0000000000001)
plt.plot(x, y1, label='sigmoid')
plt.plot(x, y2, label='derivative')
plt.legend(loc='upper left')
plt.show()
machine-learning
neural-network
lukassz
quelle
quelle
Antworten:
Die Verwendung von Derivaten in neuronalen Netzen wird für den Trainingsprozess als Backpropagation bezeichnet . Diese Technik verwendet Gradientenabstieg , um einen optimalen Satz von Modellparametern zu finden, um eine Verlustfunktion zu minimieren. In Ihrem Beispiel müssen Sie die Ableitung eines Sigmoid verwenden, da dies die Aktivierung ist, die Ihre einzelnen Neuronen verwenden.
Die Verlustfunktion
Die Essenz des maschinellen Lernens besteht darin, eine Kostenfunktion so zu optimieren, dass wir eine Zielfunktion entweder minimieren oder maximieren können. Dies wird typischerweise als Verlust- oder Kostenfunktion bezeichnet. Normalerweise möchten wir diese Funktion minimieren. Die Kostenfunktion ordnet einen gewissen Abzug zu, der auf den resultierenden Fehlern beim Durchleiten von Daten durch Ihr Modell in Abhängigkeit von den Modellparametern basiert.C
Schauen wir uns das Beispiel an, in dem wir versuchen zu kennzeichnen, ob ein Bild eine Katze oder einen Hund enthält. Wenn wir ein perfektes Modell haben, können wir dem Modell ein Bild geben und es wird uns sagen, ob es eine Katze oder ein Hund ist. Kein Modell ist jedoch perfekt und es wird Fehler machen.
Wenn wir unser Modell so trainieren, dass es auf die Bedeutung von Eingabedaten schließen kann, möchten wir die Menge der Fehler, die es macht, minimieren. Also verwenden wir ein Trainingsset, diese Daten enthalten viele Bilder von Hunden und Katzen und wir haben das Grundwahrheitslabel, das mit diesem Bild verbunden ist. Jedes Mal, wenn wir eine Trainingsiteration des Modells ausführen, berechnen wir die Kosten (die Menge der Fehler) des Modells. Wir werden diese Kosten minimieren wollen.
Es gibt viele Kostenfunktionen, von denen jede ihrem eigenen Zweck dient. Eine häufig verwendete Kostenfunktion sind die quadratischen Kosten, die als definiert sind
.C=1N∑Ni=0(y^−y)2
Dies ist das Quadrat der Differenz zwischen dem vorhergesagten Label und dem Ground-Truth-Label für die Bilder, über die wir trainiert haben. Wir werden dies auf irgendeine Weise minimieren wollen.N
Minimierung einer Verlustfunktion
Tatsächlich ist der Großteil des maschinellen Lernens einfach eine Familie von Frameworks, die in der Lage sind, eine Verteilung durch Minimierung einiger Kostenfunktionen zu bestimmen. Die Frage, die wir stellen können, lautet: "Wie können wir eine Funktion minimieren?"
Lassen Sie uns die folgende Funktion minimieren
.y=x2−4x+6
Wenn wir dies zeichnen, können wir sehen, dass es bei ein Minimum gibt . Um dies analytisch zu tun, können wir die Ableitung dieser Funktion als nehmenx=2
.x=2
Oft ist es jedoch nicht möglich, ein globales Minimum analytisch zu finden. Daher verwenden wir stattdessen einige Optimierungstechniken. Auch hier gibt es viele verschiedene Möglichkeiten, wie zum Beispiel: Newton-Raphson, Rastersuche usw. Dazu gehört auch die Gradientenabnahme . Dies ist die Technik, die von neuronalen Netzen verwendet wird.
Gradientenabstieg
Verwenden wir eine berühmte Analogie, um dies zu verstehen. Stellen Sie sich ein 2D-Minimierungsproblem vor. Dies entspricht einer Bergwanderung in der Wildnis. Sie wollen zurück in das Dorf, von dem Sie wissen, dass es sich am tiefsten Punkt befindet. Auch wenn Sie die Himmelsrichtungen des Dorfes nicht kennen. Alles, was Sie tun müssen, ist ständig den steilsten Weg hinunter zu fahren, und Sie gelangen schließlich in das Dorf. Wir steigen also auf der Grundlage der Steilheit des Abhangs die Oberfläche hinunter.
Nehmen wir unsere Funktion
wir werden das bestimmen, für das y minimiert ist. Der Algorithmus für den Gradientenabstieg sagt zuerst, dass wir einen zufälligen Wert für x auswählen werden . Lassen Sie uns bei x = 8 initialisieren . Dann wird der Algorithmus das Folgende iterativ ausführen, bis wir Konvergenz erreichen.x y x x=8
wo die Lernrate ist, können wir dies auf einen beliebigen Wert einstellen, den wir möchten. Es gibt jedoch eine clevere Möglichkeit, dies zu wählen. Zu groß und wir werden niemals unseren Mindestwert erreichen, und zu groß werden wir so viel Zeit verschwenden, bevor wir dort ankommen. Dies entspricht der Größe der Stufen, die Sie den steilen Hang hinuntergehen möchten. Kleine Schritte und du wirst auf dem Berg sterben, du wirst nie runter kommen. Bei einem zu großen Schritt riskieren Sie, das Dorf zu erschießen und auf die andere Seite des Berges zu gelangen. Die Ableitung ist das Mittel, mit dem wir diesen Hang hinunter in Richtung unseres Minimums fahren.ν
Iteration 1:
Angewandt auf neuronale Netze
Wie trainiere ich das neuronale Netz?
So können wir dann die Gewichte durch Gefälle als aktualisieren
quelle
Um das Netzwerk zu trainieren, wird der Ausgang y wird dann verglichen mit dem erwarteten Ausgang (oder Etikett)y^ y L ( y, y^) = L ( y, Σ ( W⋅ X+ b ) ) W b
Einer der Gründe, warum die Sigmoid-Funktion bei neuronalen Netzen beliebt ist, ist, dass ihre Ableitung einfach zu berechnen ist .
quelle
In einfachen Worten:
Wenn die Eingabe beispielsweise 0 oder 1 oder -2 ist , ist die Ableitung (die "Lernfähigkeit") hoch und die Rückübertragung verbessert die Neuronengewichte für diese Stichprobe dramatisch.
Wenn andererseits die Eingabe 20 ist , ist die Ableitung sehr nahe bei 0 . Dies bedeutet, dass die Rückausbreitung dieser Probe diesem Neuron nicht "beibringt", ein besseres Ergebnis zu erzielen.
Die obigen Angaben gelten für eine einzelne Probe.
Schauen wir uns das Gesamtbild für alle Proben im Trainingsset an. Hier haben wir mehrere Situationen:
Wenn die Ableitung für alle Proben in Ihrem Trainingssatz 0 ist UND das Neuron immer korrekte Ergebnisse liefert , bedeutet dies, dass das Neuron wirklich gut und bereits so intelligent wie möglich studiert hat (Randnotiz: Dieser Fall ist gut, kann jedoch auf eine mögliche Überanpassung hinweisen, die ist nicht gut)
Wenn die Ableitung bei einigen Proben 0 ist, bei anderen Proben nicht 0, UND das Neuron führt zu gemischten Ergebnissen - dies weist darauf hin, dass dieses Neuron gute Arbeit leistet und sich möglicherweise durch weiteres Training verbessert (obwohl dies nicht unbedingt von anderen Neuronen und Trainingsdaten abhängt) haben)
Wenn Sie sich also die Ableitungskurve ansehen, können Sie sehen, wie sehr sich das Neuron darauf vorbereitet hat, das neue Wissen zu lernen und zu absorbieren, wenn eine bestimmte Eingabe erfolgt.
quelle
Die Ableitung, die Sie hier sehen, ist in neuronalen Netzen wichtig . Dies ist der Grund, warum Menschen im Allgemeinen etwas anderes wie eine gleichgerichtete Lineareinheit bevorzugen .
Sehen Sie die Ableitung für die beiden Enden fallen? Was ist, wenn sich Ihr Netzwerk ganz links befindet, aber auf die rechte Seite verschoben werden muss? Stellen Sie sich vor, Sie haben -10.0, möchten aber 10.0. Der Gradient ist zu klein, als dass Ihr Netzwerk schnell konvergieren könnte. Wir wollen nicht warten, wir wollen eine schnellere Konvergenz. RLU hat dieses Problem nicht.
Wir nennen dieses Problem " Neuronale Netzsättigung ".
Weitere Informationen finden Sie unter https://www.quora.com/Was-ist-spezifisch-über-gleichrichter-nurale-Einheiten-verwendet-inNN-Lernen
quelle