[PYTHON] Report_Deep Learning (Teil 1)

Eingangsschicht / Zwischenschicht

Übersicht über das neuronale Netz Der Fluss ist Eingangsschicht → Zwischenschicht → Ausgangsschicht. Beispiel: Neuronales Netzwerk zur Bestimmung des Tieres anhand von Tierdaten Eingabeebene: Eine Ebene, die beliebige Daten liefert. Beispiel: Körperlänge, Ohrgröße usw. Zwischenebene: Eine Ebene, die die Daten in der Eingabeebene vorspannt und gewichtet Ausgabeebene: Eine Ebene, in der der in der Zwischenebene berechnete Wert als Ausgabe ausgegeben wird. Beispiel: Aus den eingegebenen Daten hat dieses Tier eine Wahrscheinlichkeit, ein Hund von 0,1 zu sein, eine Wahrscheinlichkeit, eine Katze von 0,05 zu sein, und eine Wahrscheinlichkeit, eine Maus von 0,85 zu sein.

Bestätigungstest (1-2) Beschreiben Sie in weniger als zwei Zeilen, was Deep Learning am Ende versucht. Welcher der folgenden Werte ist das ultimative Ziel der Optimierung? Alles auswählen. ① Eingabewert [X] ② Ausgabewert [Y] ③ Gewicht [W] ④ Vorspannung [b] ⑤ Gesamteingabe [u] ⑥ Zwischenschicht-Eingabe [z] ⑦ Lernrate [ρ]

Schätzen Sie den Parameter, der das Gewicht minimiert. Dies ist der Parameter zum Schätzen des optimalen Ausgabewerts. Die Parameter werden hauptsächlich durch das Gewicht (w) und die Vorspannung (b) geschätzt.

Schreiben Sie das folgende Netzwerk auf Papier. Eingabeschicht: 2 Knoten 1 Schicht, Zwischenschicht: 3 Knoten 2 Schichten, Ausgangsschicht: 1 Knoten 1 Schicht

Erfassung

Bestätigungstest (1-4) Lassen Sie uns ein Beispiel für die Tierklassifizierung in das folgende Diagramm einfügen.

Schreiben Sie diese Formel in Python.

Bestätigungstest (1-5) Extrahieren Sie die Quelle, die die Ausgabe der mittleren Ebene definiert, aus der 1-1-Datei.

Definition der Ausgabe der mittleren Ebene z = functions.relu(u) print_vec ("Zwischenschichtausgabe", z)

u in z = functions.relu (u) repräsentiert den Ausdruck der Gesamteingabe.

Belastungstest image.png image.png Im Ausgangszustand werden Gewicht und Vorspannung für sich definiert, der Eingabewert wird mit dem Gewicht multipliziert und die Vorspannung wird addiert, um den gesamten Eingabewert zu bestimmen. image.png image.png Wenn das Gewichtsarray in np.zeros (2) geändert wird, wird das Gewichtsarray in [0,0] geändert, und der gesamte Eingabewert wird ebenfalls geändert. Das darunter liegende Gewichtsarray von np.ones (2) wird in [1,1] geändert. np.random.rand (2) liegt zufällig im Bereich von 0 bis 1. Bestimmen Sie die Anzahl.

Aktivierungsfunktion

In einem neuronalen Netzwerk eine nichtlineare Funktion, die die Ausgabe an die nächste Schicht abhängig vom Eingabewert an die nächste Schicht bestimmt Bestimmen Sie die Stärke.

Es kann in Aktivierungsfunktionen für die Zwischenschicht und die Ausgangsschicht eingeteilt werden. Für die mittlere Schicht: ReLu-Funktion, Sigmoid-Funktion, Schrittfunktion (wird beim Deep Learning nicht verwendet) Für die Ausgabeschicht: Softmax-Funktion, konstantes Mapping, Sigmoid-Funktion

Stufenfunktion Eine Funktion, die 1 ausgibt, wenn der Schwellenwert überschritten wird, und 0, wenn der Schwellenwert nicht überschritten wird. Die Ausgabe ist nur 0 oder 1 Es wurde in Perceptron verwendet. Als Problem konnten wir den leichten Wechsel zwischen 0 und 1 nicht bewältigen, Es kann nur verwendet werden, wenn eine lineare Klassifizierung möglich ist (Ein / Aus).

Sigmaid-Funktion Es ist jetzt möglich, die Stärke eines Signals zusätzlich zu Ein / Aus mit einer Funktion zu übertragen, die sich schwach zwischen 0 und 1 ändert. Das Problem ist, dass die Änderung der Ausgabe bei einem großen Wert gering ist, was ein Problem beim Verschwinden des Gradienten verursacht.   ReLu-Funktion Die derzeit am häufigsten verwendete Aktivierungsfunktion. Es trägt dazu bei, das Problem des Verschwindens des Gradienten zu lösen und es spärlich zu machen. Das Problem des Verschwindens des Gradienten und die Spärlichkeit werden später beschrieben. Am häufigsten verwendet, aber je nach Anwendung kann die Sigmoidfunktion genaue Ergebnisse liefern. Der Techniker muss jedes Mal die am besten geeignete Aktivierungsfunktion ermitteln.

Bestätigungstest (1-8) Extrahieren Sie den relevanten Teil aus dem verteilten Quellcode. z = functions.sigmoid(u)

Ausgabeschicht

Der quadratische Fehler wird als Fehlerfunktion verwendet. Quadratischer Fehler: Berechnet durch Quadrieren des Fehlers der Ausgabedaten aus den richtigen Antwortdaten.

Bestätigungstest (1-9) Beschreiben Sie, warum Sie statt Subtraktion quadrieren. Die Subtraktion wird durch das Vorzeichen von ± beeinflusst und ± minimiert den Fehler. Quadratisch, damit es nicht durch das ± -Zeichen beeinflusst wird.

Beschreiben Sie, wie 1/2 bedeutet. Bei der Minimierung der Parameter wird eine Differenzierung durchgeführt, um den Gradienten des Fehlers zu erhalten. Mit 1/2 multiplizieren, um die Berechnung bei dieser Unterscheidung zu vereinfachen.

Aktivierungsfunktion für die Ausgabeebene Unterschied zur mittleren Schicht Die mittlere Schicht passt die Signalstärke vor und nach dem Schwellenwert an. Die Ausgangsschicht wandelt das Signalverhältnis so wie es ist um.

Regressionsaufgabe Verwenden Sie eine einheitliche Zuordnung. Die Fehlerfunktion verwendet den quadratischen Fehler.

Klassifizierungsaufgabe Binäre Klassifizierung: Verwenden Sie die Sigmoid-Funktion. Die Fehlerfunktion ist Kreuzentropie Klassifizierung mehrerer Klassen: Verwenden Sie die Softmax-Funktion. Die Fehlerfunktion ist Kreuzentropie

Bestätigungstest (1-9) Zeigen Sie den Quellcode an, der (1) bis (3) der Softmax-Funktion entspricht, und erläutern Sie die Verarbeitung zeilenweise. Quellcode für Softmax-Funktionen def softmax(x): if x.ndim == 2: Wenn die Anzahl der Dimensionen von x 2 Dimensionen beträgt, führen Sie die folgende Verarbeitung durch x = x.T Speichern Sie die Translokation des Arguments x in x x = x --np.max (x, Achse = 0) Subtrahieren Sie den Maximalwert des transponierten Werts y = np.exp (x) / np.sum (np.exp (x), Achse = 0) Die Wahrscheinlichkeit des aus dem Ganzen ausgewählten Wertes wird berechnet. return y.T Gibt den transponierten Wert von y zurück Die Stelle, die ① entspricht, ist def softmax (x): Die Position, die ② entspricht, ist np.exp (x) Die Stelle, die ③ entspricht, ist np.sum (np.exp (x), Achse = 0)

Bestätigungstest (1-10) Zeigen Sie den Quellcode, der (1) bis (3) der Kreuzentropiefunktion entspricht, und erläutern Sie die Verarbeitung zeilenweise. Quellcode für die Cross-Entropy-Funktion def cross_entropy_error(d, y): if y.ndim == 1: Wenn die Anzahl der Dimensionen von y eins ist, führen Sie die folgende Verarbeitung durch d = d.reshape (1, d.size) Konvertiert das Argument d in eine eindimensionale Matrix. y = y.reshape (1, y.size) Konvertiert das Argument y in eine eindimensionale Matrix.

Wenn es sich bei den Lehrerdaten um One-Hot-Vector handelt, konvertieren Sie sie in den Index des richtigen Antwortetiketts

if d.size == y.size: Wenn die Datengrößen von d und y gleich sind, führen Sie die folgende Verarbeitung durch. d = d.argmax(axis=1) batch_size = y.shape[0] return -np.sum(np.log(y[np.arange(batch_size), d] + 1e-7)) / batch_size Ein kleiner Wert (1e-7) wird addiert, damit die Anzahl der Moleküle nicht 0 wird. Einfallsreichtum in der Montage Die Stelle, die ① entspricht, ist def cross_entropy_error (d, y): Die Stelle, die ② entspricht, ist return -np.sum (np.log (y [np.arange (batch_size), d] + 1e-7))

Gradientenabstiegsmethode

Es gibt eine Gradientenabstiegsmethode, eine stochastische Gradientenabstiegsmethode und eine Mini-Batch-Gradientenabstiegsmethode.

Der Zweck des tiefen Lernens ist Schätzen Sie den Parameter, der das Gewicht und die Vorspannung minimiert. Dies sind die Parameter zum Schätzen des optimalen Ausgabewerts (Bestätigungstest 1-2). Das Gradientenabstiegsverfahren wird als Schätzverfahren verwendet.

Bestätigungstest (1-11) Lassen Sie uns den entsprechenden Quellcode finden. network[key] -= learning_rate * grad[key]

Die Lernrate & egr; beeinflusst die Effizienz des Lernens. Wenn die Lernrate zu groß ist, erreicht sie nicht den Mindestwert und divergiert. Wenn die Lernrate zu gering ist, dauert es einige Zeit, bis der Mindestwert erreicht ist. Die Anzahl der Lernvorgänge wird als Epoche gezählt.

Probabilistische Gradientenabstiegsmethode (SGD) Das probabilistische Gradientenabstiegsverfahren verwendet den Fehler zufällig abgetasteter Proben. Die Gradientenabstiegsmethode verwendet den durchschnittlichen Fehler aller Proben. Erinnere dich an den Unterschied. Die Vorteile sind die Reduzierung des Berechnungsbetrags, die Reduzierung des Konvergenzrisikos zur lokalen Mindestlösung und das Online-Lernen.

Bestätigungstest (1-11) Fassen Sie das Online-Lernen in zwei Zeilen zusammen. Jedes Mal, wenn die Trainingsdaten eingegeben werden, wird das Lernen nur unter Verwendung der Eingabedaten durchgeführt.

Mini-Batch-Gradienten-Abstiegsmethode Das Mini-Batch-Gradientenabstiegsverfahren verwendet den durchschnittlichen Fehler von Proben, die zu einem zufällig verteilten Datensatz gehören.

Methode zur Fehlerrückübertragung

Eine Methode zum Differenzieren und Berechnen des berechneten Fehlers von der Ausgabeschicht zur vorherigen Schicht. Dies vermeidet unnötige rekursive Berechnungen.

Bestätigungstest (1-14) Die Fehlerausbreitungsmethode kann unnötige rekursive Verarbeitung vermeiden. Enthält das Ergebnis der bereits durchgeführten Berechnung Extrahieren Sie den Quellcode. Quellcode für die Fehlerrückübertragung

def backward(x, d, z1, y): print ("\ n ##### Fehler beim Start der Rückübertragung #####") grad = {} W1, W2 = network['W1'], network['W2'] b1, b2 = network['b1'], network['b2'] #Delta in der Ausgabeebene delta2 = functions.d_sigmoid_with_loss(d, y) Gradient von # b2 grad['b2'] = np.sum(delta2, axis=0)

W2 Gradient

grad['W2'] = np.dot(z1.T, delta2)

Delta in der mittleren Schicht

delta1 = np.dot(delta2, W2.T) * functions.d_relu(z1)

Gradient von # b1 grad['b1'] = np.sum(delta1, axis=0)

W1 Gradient

grad['W1'] = np.dot(x.T, delta1)

①delta2 = functions.d_sigmoid_with_loss(d, y)

Die Kreuzentropie und das Syntheseergebnis der Sigmoidfunktion bleiben erhalten.   ②grad['b2'] = np.sum(delta2, axis=0) Der Wert, der durch Vektorkonvertierung des Wertes von ① erhalten wird, wird gehalten.   ③grad['W2'] = np.dot(z1.T, delta2)

Übung image.png image.png image.png image.png image.png image.png In dem obigen Ergebnis wird die ReLu-Funktion verwendet, um eine Vorwärtsausbreitung und eine Fehlerrückausbreitung durchzuführen, und das Ergebnisdiagramm konvergiert auch ordentlich. gut. Als nächstes wird das Ergebnis, wenn die Vorwärtsausbreitungs- und Fehlerrückwärtsausbreitungsfunktionen in die Sigmoidfunktion geändert werden, im Ergebnisdiagramm unten gezeigt.

image.png Die Visualisierung zeigt, dass die Konvergenz durch Änderung der Sigmoidfunktion variiert. Aufgrund der Implementierung des Codes müssen die Aktivierungsfunktion für die Vorwärtsausbreitung und die Fehlerfunktion für die Rückwärtsausbreitung von Fehlern als Satz geändert werden.

Das Ergebnis der Änderung des x-Wertebereichs der Trainingsdaten ist unten dargestellt. Es wurde bestätigt, dass die Konvergenz variieren würde, selbst wenn der Bereich der x-Werte geändert würde. image.png

Bestätigungstest (1-15) Suchen Sie den Quellcode, der den beiden Leerzeichen entspricht. Leer oben delta2 = functions.d_mean_squared_error(d, y) Leer unten grad['W2'] = np.dot(z1.T, delta2)

i.png

Recommended Posts

Report_Deep Learning (Teil 2)
Report_Deep Learning (Teil 1)
Report_Deep Learning (Teil 1)
Report_Deep Learning (Teil 2)
Python: Überwachtes Lernen: Hyperparameter Teil 1
Python: Überwachtes Lernen: Hyperparameter Teil 2
[PyTorch Tutorial ⑤] PyTorch anhand von Beispielen lernen (Teil 2)
Versuchen Sie es mit TensorFlow Part 2
[PyTorch Tutorial ⑤] PyTorch anhand von Beispielen lernen (Teil 1)
Datum / Uhrzeit Teil 1
Vorhersage des Strombedarfs durch maschinelles Lernen Teil 2
numpy Teil 1
Argparse Teil 1
Lernaufzeichnung
Lernrekord Nr. 3
Lernrekord Nr. 1
Maschinelles Lernen
Python lernen
Python: Geschlechtsidentifikation (Entwicklung von Deep Learning) Teil 1
Python: Geschlechtsidentifikation (Entwicklung von Deep Learning) Teil 2
Lernrekord Nr. 2
numpy Teil 2
6/10 Lerninhalte
Tiefes Lernen
Numpy-Sigmoid-Lernen
"Deep Learning from Grund" Memo zum Selbststudium (Teil 12) Deep Learning
EV3 x Pyrhon Maschinelles Lernen Teil 3 Klassifizierung
Maschinelles Lernen eines jungen Ingenieurs Teil 1
Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 1
Maschinelles Lernen beginnend mit Python Personal Memorandum Part2
Grundlagen des Lernens mit einem Lehrer Teil 1 - Einfache Regression - (Hinweis)
Maschinelles Lernen beginnend mit Python Personal Memorandum Part1
Lernen der Mustererkennung im Video Teil 1 Bereich der Mustererkennung
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 2
EV3 x Pyrhon Maschinelles Lernen Teil 1 Umgebungskonstruktion
EV3 x Python Maschinelles Lernen Teil 2 Lineare Regression
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 3
Videorahmeninterpolation durch tiefes Lernen Teil 1 [Python]
Aktienkursprognose mit Deep Learning (TensorFlow) -Teil 2-
Maschinelles Lernen eines jungen Ingenieurs Teil 2
Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 2
Versuchen Sie Katsuhiro Morishita / Aso_Sea_Clouds_Pridiction Memo-Excluding the learning part-
Grundlagen des Lernens mit einem Lehrer Teil 3 - Multiple Regression (Implementierung) - (Anmerkungen) -