[PYTHON] Parametrisches neuronales Netzwerk

Über neuronale Netze

In erster Linie rauer Fluss

image.png

  1. Übergeben Sie den Wert der Aktivierungsfunktion gemäß den Eingabeinformationen an den nächsten Knoten
  2. Verbinden Sie alle empfangenen Informationen linear basierend auf dem Gewicht $ w $ und dem Bias $ b $.
  3. Geben Sie den linear gekoppelten Wert in die Aktivierungsfunktion ein und übergeben Sie ihn an den nächsten Knoten
  4. Wiederholen Sie die Schritte 2 und 3, um den Wert vom letzten Knoten auszugeben
  5. Berechnen Sie die Verlustfunktion aus der endgültigen Ausgabe (obwohl PNN nur einen Knoten in der letzten Schicht hat): Die Schritte 1 bis 6 sind Vorwärtsausbreitung
  6. Verwenden Sie als Nächstes die Verlustfunktion, um das Gewicht für jeden Zweig zu berechnen: Rückausbreitung
  7. Die Schritte 1 bis 7 schließen eine Trainingseinheit ab. Wiederholen Sie dies danach eine bestimmte Anzahl von Malen, um einen Satz von Gewichten = neuronales Netzwerk zu erstellen, das die richtige Antwort besser beschreibt.

In Schritt 6 wird im Allgemeinen ein Gradientenabstiegsverfahren (ein Verfahren zum Aktualisieren von Gewichten unter Verwendung des Differentialkoeffizienten der Verlustfunktion) angewendet. Daher muss die Verlustfunktion eine teilbare Verteilung haben. Im Folgenden werden die Aktivierungsfunktion, die Verlustfunktion und das Gradientenabstiegsverfahren kurz beschrieben.

Informationen zur Aktivierungsfunktion

Die in der vorherigen Schicht berechneten Eingabewerte werden zunächst entsprechend jedem Gewicht und jeder Vorspannung linear kombiniert. Wenn Sie sie dann als Argumente für die Aktivierungsfunktion verwenden, übergeben Sie den Ausgabewert der Aktivierungsfunktion an die nächste Ebene ... und so weiter ist maschinelles Lernen. Die wichtige Implikation der Aktivierungsfunktion ist also nicht die Form der Formel ("Warum exponentiell, warum fraktional xxx ..." ist ein bedeutungsloses Argument), sondern welcher Wert und wie viel Bereich Es ist wichtig, über auszugeben. Die beiden diesmal verwendeten Arten von Aktivierungsfunktionen sind zusammengefasst.

relu (Rampenfunktion)

Wenn x 0 oder mehr ist, hat es eine direkte proportionale Form. Da die Sigmoidfunktion und der Gradient mit zunehmendem Abstand vom Ursprung verschwinden (der Differentialkoeffizient nähert sich 0), besteht das Problem, dass das Lernen stagniert, sobald die Einheit einen großen Wert hat. Es ist bekannt, dass die Rampenfunktion das Problem des Verschwindens des Gradienten empirisch löst.

f(x) = x~~(x>0)

Sigmoid (Sigmoidfunktion)

Der Ausgabewert der Funktion liegt zwischen 0 und 1.

f(x) = \frac{1}{1-e^x}

Verlustfunktion (= Fehlerfunktion)

Bewerten Sie die $ n $ -Dimensionsausgabe eines neuronalen Netzwerks mithilfe einer Verlustfunktion. Je kleiner die Differenz ist, desto kleiner ist konzeptionell der Wert der Verlustfunktion im Vergleich zum korrekten $ n $ -Dimensionswert. Daher hat ein gutes neuronales Netzwerk einen kleinen Ausgabewert der Verlustfunktion.

E(w) = -\sum_n^{N} \left( d_n\log y_n + (1-d_n)\log(1-y_n) \right)

Gradientenmethode

Das Aktualisieren des Gewichts mithilfe der Verlustfunktion ist der Schlüssel zum neuronalen Netzwerk. Hier wird ein allgemeines SDG beschrieben. SDG berechnet anhand des Differentialkoeffizienten der Verlustfunktion das Gewicht, das für das nächste Training verwendet werden soll. Für die zu diesem Zeitpunkt verwendeten Parameter

w^{t+1} = w^{t} - \eta\frac{1}{\sqrt{h}}\frac{\partial E(w^{t})}{\partial w^{t}} + \alpha\Delta w

Berechnen Sie nach der obigen Formel. Hier als Überblick Wissen über die Gradientenmethode

Kann erwähnt werden.

Lernmethode

Im Allgemeinen wird die Lernmethode des neuronalen Netzwerks unter Berücksichtigung des "Mini-Batch-Lernens" erläutert. Hier wird erklärt, zu welchem Zeitpunkt die Verlustfunktion zum Aktualisieren des Parameters verwendet wird (= Gewicht aktualisieren = Modell aktualisieren).

--Online lernen

L=\frac{1}{N}\sum_{i=1}^{N} l_i

--Mini Batch Learning

Wie oben erwähnt, ist die Mini-Batch-Lernmethode im Allgemeinen weit verbreitet. In der Phase, in der im vorherigen Beispiel 10 Teilmengen verarbeitet werden, wird 1 Epoche gezählt.

PNN BDT wird häufig mit hoher Energie eingesetzt. Es ist stark in kleinen Statistiken, und da es sich im Grunde genommen um ein DT handelt, gibt es viele Vorteile, z. B. zu vermeiden, so weit wie möglich zu einer Black Box zu werden. Da DNN bereits zur Partikelidentifizierung verwendet wurde, haben wir uns entschieden, ein neuronales Netz zu verwenden, um das S / N-Verhältnis in Form von "Verwendung und Verlust" wie in ProfileLL zu verbessern. Das 2016 vorgeschlagene Modell ist Parametrised Neural Network (PNN), das unter Verwendung einer allgemeinen Python-Bibliothek erstellt wird. Die diesmal verwendete Bibliothek ist

ROOT-Datei lesen (energiereiche Verarbeitung vor der Stufe)

uproot CERN-Bibliothek Ein Python-Modul zum Lesen von Daten im ROOT-Format. Nur das Ändern von ROOT Ntuple in Python DataFrame ändert nichts an der Struktur. Zeilen entsprechen Ereignissen und Spalten entsprechen jeder Variablen.

import uproot
f = uproot.open("data.root")
print(f.keys())
# ['data;1', 'background;1", ....]

f['data'].pandas.df()
#        Btag  EventFlavour  EventNumber  FourBodyMass  Jet0CorrTLV  ...  mass  mass_scaled           sT      sTNoMet  signal    weight  weight_scaled
#entry                                                               ...                                                                              
#9        2.0           8.0     560044.0   1666.098145   542.301636  ...  900     0.352941  #1566.298340  1404.298218       1  0.003898       0.028524
#10       1.0           5.0     560480.0   1606.993896   241.007111  ...  900     0.352941  #1841.925049  1434.105713       1  0.004255       0.031135
#11       2.0           0.0     561592.0   1857.901245   721.780457  ...  900     0.352941  #2444.058105  1910.263306       1  0.002577       0.018855
#15       2.0           5.0     561088.0   1348.327515   174.501556  ...  900     0.352941  #1328.051147  1029.908447       1  0.003360       0.024585

f['data'].pandas.df('EventNumber')
#        EventNumber
#entry              
#0      2.148751e+08
#1      2.143515e+08
#2      6.018242e+07
#3      2.868989e+07
...

Das Obige ist der Datenrahmen unmittelbar nach dem Lesen und erstellt einen Datenrahmen, der nur die erforderlichen Informationswerte (zu verwendende Eingabeinformationen) von hier aufnimmt. Das Verfahren zum Schneiden des im nächsten Schritt verwendeten Datenrahmens wird kurz beschrieben. Der ursprüngliche Datenrahmen, der von entwurzelt gelesen wird, hat am Ende "mass_scaled", also schneiden Sie ihn mit "X [:,: -1]". Dies ist eine Slicing-Methode, die bedeutet, dass "alle Zeilen und Spalten vom Anfang bis zur letzten sind". Basierend auf dem oben Gesagten werden wir vom nächsten zum Kern übergehen.

Aktueller Trainingsprozess

Vorverarbeitung (Skalenumwandlung)

Es ist notwendig, den Maßstab (= Anzahl der Stellen) der zu verarbeitenden Daten auszurichten. Die dort verwendete Methode ist sclearn, und dieses Mal verwenden wir "RobustSclaer", das gegen Ausreißer resistent ist. Wenn es überhaupt einen Ausreißer gibt, wird der Durchschnitt / die Streuung der Merkmalsmenge stark vom Ausreißer beeinflusst, sodass die Standardisierung nicht gut funktioniert. Stellen wir uns vor, es wird in Informationen nachgedruckt, die für die Maschine einfach zu handhaben sind, wobei die Art der Daten erhalten bleibt.

Erstelltes NN-Modell

--keras.layers: Definiert die Eigenschaften von Ebenen - Input - Dense

Tatsächliche Codierung

  1. Definieren Sie zunächst die Anzahl der Dimensionen der Eingabeinformationen mit Eingabe
  2. Definieren Sie für jede Schicht Dichte (vollständig verbundenes neuronales Netzwerk). Die zu diesem Zeitpunkt verwendete Aktivierungsfunktion ist definiert.
  3. Da die verborgene Schicht unverändert an die nächste Schicht ausgegeben wird, handelt es sich um eine 32-dimensionale Ausgabe (diesmal wird das neuronale Netzwerk durch die 32-dimensionale 3-Schicht von [32,32,32] definiert). Und die letzte Schicht ist ein Knoten und gibt [0,1] aus.
  4. Die Aktivierungsfunktion der verborgenen Schicht ist "relu" und die Aktivierungsfunktion der letzten Schicht ist "sigmoid".
x = Input(shape=(n_input_vars,))
d = x 
for n in self.layer_size:
    d = Dense(n, activation=self.activation)(d)

y = Dense(1, activation="sigmoid")(d)
Model(x, y)

Gradientenmethode verwendet

Die diesmal verwendete Gradientenmethode ist eine sehr orthodoxe SGD (Stochastic Gradient Descent: Stochastic Gradient Descent Method). Jedes Gewicht wird mit der Verlustfunktion $ E (w) $ in der folgenden Formel aktualisiert.

w^{t+1} ← w^{t} - \eta \frac{\partial E(w^{t})}{\partial w^{t}} + \alpha \Delta w^{t}

Hier repräsentiert $ \ eta $ die Lernrate (Lernkoeffizient) und $ \ alpha $ den Impuls.

sgd = SGD(lr=self.learning_rate, momentum=self.momentum, nesterov=self.nesterov, decay=self.learning_rate_decay)

Training mit Keras

compile Unter Verwendung des bisher beschriebenen Wissens (mit mehr Hintergrundwissen) werden die folgenden Schritte unternommen, um ein neuronales Netzwerk in Keras zu trainieren. Zuerst müssen Sie das Modell "kompilieren"

model.compile(...)

fit Nach dem Kompilieren ist fit = das eigentliche Training.

Apropos

PNN ist dadurch gekennzeichnet, dass theoretische Parameter getrennt von den verwendeten mechanischen Eingabeinformationen als Eingabeinformationen verwendet werden. Es gibt korrekte theoretische Parameter bei der Simulation von Signalereignissen, aber was ist mit den theoretischen Parametern von Hintergrundereignissen? Wenn beispielsweise der Massenparameter als Eingabeinformation verwendet wird, wird beim Training eines Hintergrundereignisses ein Zufallswert ausgewählt und trainiert.

Referenz-URL

Ich habe stark auf die folgenden Seiten verwiesen. Vielen Dank.

Recommended Posts

Parametrisches neuronales Netzwerk
Implementieren Sie das Convolutional Neural Network
Implementieren Sie das neuronale Netzwerk von Grund auf neu
Erfahrung mit faltbaren neuronalen Netzen
Implementieren Sie ein dreischichtiges neuronales Netzwerk
Neuronales Netzwerk mit Python (Scikit-Learn)
3. Normalverteilung mit neuronalem Netz!
Neuronales Netz beginnend mit Chainer
Netzwerk
Implementierung eines neuronalen Netzwerks in Python
Tutorial zum neuronalen Netz von Pytorch (CNN) 1.3.1.
4. Kreisparameter mit einem neuronalen Netzwerk!
Implementierung eines neuronalen Netzwerks (nur NumPy)
TensorFlow Tutorial-Convolution Neuronales Netz (Übersetzung)
Neuronales Netzwerk mit OpenCV 3 und Python 3
Implementierung eines zweischichtigen neuronalen Netzwerks 2
PRML Kapitel 5 Python-Implementierung für neuronale Netze
Einfaches Klassifizierungsmodell mit neuronalem Netz
Was ist das Convolutional Neural Network?
[TensorFlow] [Keras] Aufbau eines neuronalen Netzwerks mit Keras
Berühren Sie das Objekt des neuronalen Netzes
[Sprachverarbeitung 100 Schläge 2020] Kapitel 8: Neuronales Netz
Überlebensvorhersage unter Verwendung des titanischen neuronalen Netzes von Kaggle [80,8%]
Komponieren Sie mit einem neuronalen Netzwerk! Führen Sie Magenta aus
Vorhersage von Zeitreihendaten mit einem neuronalen Netzwerk
Implementierung eines 3-Schicht-Neuronalen Netzwerks (kein Lernen)
Versuchen Sie es mit TensorFlow-Part 2-Convolution Neural Network (MNIST).
Behalten Sie das mit PyBrain aufgebaute neuronale Netzwerk bei
Liste der Gewinner der Neural Network Console Challenge
Implementierung von "verschwommenen" neuronalen Netzen mit Chainer
Einfache Implementierung eines neuronalen Netzwerks mithilfe der Chainer-Datenaufbereitung
[PyTorch] Tutorial (japanische Version) ③ ~ NEURAL NETWORKS (Neuronales Netzwerk) ~
Python & Machine Learning Study Memo ③: Neuronales Netz
Relationales Netzwerk
Einfache Implementierung eines neuronalen Netzwerks mithilfe der Beschreibung des Chainer-Modells
2. Mittelwert und Standardabweichung beim neuronalen Netz!
[Chainer] Dokumentklassifizierung nach Faltungsnetzwerk
[Python / Maschinelles Lernen] Warum Deep Learning # 1 Perceptron Neural Network
Experimentieren Sie mit verschiedenen Optimierungsalgorithmen im neuronalen Netz
Eine andere Stilkonvertierungsmethode unter Verwendung des Convolutional Neural Network
Visualisieren Sie die innere Schicht des neuronalen Netzwerks
Überprüfung der Chargennormalisierung mit einem mehrschichtigen neuronalen Netz
Ich habe das neuronale Netzwerk auf dem eigentlichen FPGA betrieben
Erkennung handgeschriebener Zahlen durch ein mehrschichtiges neuronales Netzwerk