[PYTHON] Versuchen wir das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" - Kapitel 3 Schritt 10 Memo "Details und Verbesserung des neuronalen Netzes"

Inhalt

Dies ist ein Memo für mich, während ich Einführung in Anwendungen zur Verarbeitung natürlicher Sprache in 15 Schritten lese. Notieren Sie sich diesmal in Kapitel 3, Schritt 10 Ihre eigenen Punkte.

Vorbereitung

Kapitelübersicht

In Kapitel 8 haben wir uns aus einem einfachen Perzeptron entwickelt und ein mehrschichtiges Perzeptron eingeführt. In Kapitel 9 haben wir einen Klassifikator für mehrere Klassen implementiert. Kapitel 10 zielt darauf ab, das neuronale Netzwerk zu verbessern.

10.1 Deep Neural Networks Ursprünglich wurde ein neuronales Netzwerk mit drei oder mehr Schichten als tief bezeichnet. Um weitere Ebenen hinzuzufügen, fügen Sie einfach weitere Ebenen mit model.add hinzu.

Schwierigkeit, die Schicht des neuronalen Netzwerks zu vertiefen

Artikel Lösung
Leicht zu überlernen Early stopping
・ Wenn es viele Schichten gibt, ist die Ausdruckskraft des neuronalen Netzwerks hoch, so dass es leicht ist, sich an die Trainingsdaten anzupassen.
・ Wiederholen Sie das Training in Epocheneinheiten, aber runden Sie das Training ab, bevor die Genauigkeit der Testdaten abnimmt.

Dropout
・ Einige Einheiten werden beim Lernen mit einer bestimmten Rate zufällig ignoriert, und alle Einheiten werden bei der Vorhersage verwendet.
・ Es ist schwierig zu überlernen, da die Anzahl der Einheiten, die in einem Lernen gültig sind, gering ist.
・ Eine Vorhersagemethode, die dem Hinzufügen mehrerer neuronaler Netze ähnelt, hat den gleichen Effekt wie das Lernen von Ensembles.
Lernen geht nicht gut Batch normalization
Interne KovariatenverschiebungTritt ein
 ・手前の層の重みの更新のせいで、後ろの層の重みの更新が妨げられる
・データの分布が平均0で分散1になるよう正規化する
・新たな層として追加したり、層中の活性化関数の前で実行したりする
Erhöhter Rechenaufwand Lernen Sie ein neuronales Netzwerk mit einer GPU, die mit hoher Geschwindigkeit parallel verarbeitet werden kann

EarlyStopping


model.fit(X, y,
    epochs = 100,
    validation_split = 0.1,
    callbacks = [EarlyStopping(min_delta = 0.0, patience = 1)])

    #Epochen: Machen Sie es groß genug, damit es nicht endet, bevor Sie mit Early Stopping abrunden
    # validation_split: Sie können das Verhältnis von Trainingsdaten und Validierungsdaten zu den eingegebenen Trainingsdaten angeben.
    #Rückrufe: Die in der Liste angegebenen Rückrufe werden während des Lernens nacheinander aufgerufen.

Dropout


model = Sequential()
model.add(Dense(..))
model.add(Dropout(0.5))
model.add(Dense(..))
model.add(Dropout(0.5))
model.add(Dense(..))
model.add(Dropout(0.5))
model.add(Dense(.., activation = 'softmax')
model.compile(..)

#Das Dropout-Konstruktorargument ignoriert Einheiten

BatchNormalization


model = Sequential()

#Als neue Ebene hinzugefügt
model.add(Dense(.., activation = 'relu'))
model.add(BatchNormalization(0.5))

#Vor der Aktivierungsfunktion hinzugefügt
model.add(Dense(..))
model.add(BatchNormalization(0.5))
model.add(Activation('relu')

model.add(Dense(.., activation = 'softmax')
model.compile(..)

10.2 Lernen neuronaler Netze

Gradientenabstiegsmethode

Der Gradient wird erhalten, indem die Fehlerfunktion mit dem Gewicht differenziert wird, der Gewichtswert in der entgegengesetzten Richtung des Gradienten aktualisiert wird und das Lernen des neuronalen Netzwerks vorangetrieben wird.

Globale optimale Lösung und lokale optimale Lösung

Probabilistische Gradientenabstiegsmethode und Mini-Batch-Methode

10.3 Optimierung des neuronalen Netzes

Artikel Inhalt
Chargengröße - Die Stapelgröße beim Lernen beträgt standardmäßig 32
・ Es gibt viele Zweierpotenzen, aber dies ist nur eine Konvention, aber es ist sinnvoll, dicht nach kleinen Werten und spärlich nach großen Werten zu suchen.
Optimizer -Adam, ein Nachzügler, wird oft verwendet, aber je nach Problem kann ein einfacher SGD der beste sein.
・ Stellen Sie die Lernrate unten ein
Lernrate -Keras Adam ist standardmäßig 0 für den Prozentsatz der Gewichte, die gleichzeitig aktualisiert werden.001
Aktivierungsfunktion ・ ReLU ist weit verbreitet(Rectified Linear Unit)Die verbesserte Version von Leaky ReLU und SeLU(Scaled Exponential Unit)Es gibt auch Raum für Überlegungen.
-Leaky ReLU: Wenn der Eingang 0 oder weniger ist, konvertieren Sie mit einer linearen Funktion mit einer kleinen Steigung
・ ELU: Wenn die Eingabe 0 oder weniger ist, konvertieren Sie durch Subtrahieren von 1 von der Exponentialfunktion.
Regulierung/Lastdämpfung ・ Um ein Überlernen zu vermeiden, beschränken Sie das Gewicht so, dass es nicht zu groß wird, und fügen Sie der Verlustfunktion die folgende Norm hinzu.
・ L1-Norm: Summe der Absolutwerte jedes Gewichtselements
・ L2-Norm: Summe der Quadrate jedes Gewichtselements
・ L∞ Norm: Maximaler absoluter Wert jedes Gewichtselements
Gewichtsinitialisierung ・ Keras Standard wird mit Zufallszahlen initialisiert
・ Es ist auch möglich, die Verteilung anzugeben

Aktivierungsfunktion


model = Sequential()
model.add(Dense(.., activation = 'selu'))
model.add(Dense(.., activation = LeakyReLU(0.3)))
model.add(Dense(.., activation = 'softmax')
model.compile(..)

Regulierung


model = Sequential()
model.add(Dense(.., activation = 'relu',
    kernel_regularizer = regularizers.l2(0.1)))
model.add(Dense(.., activation = 'softmax',
    kernel_regularizer = regularizers.l2(0.1)))
model.compile(..)

Gewichtsinitialisierung


model = Sequential()
model.add(Dense(.., activation = 'relu',
    kernel_initializer = initializers.glorot_normal()))
model.add(Dense(.., activation = 'softmax',
    kernel_initializer = initializers.glorot_normal()))
model.compile(..)

glorot_normal (): Glolots Normalverteilung, auch als Xaviers Normalverteilung bekannt (ich habe diese gehört). Der Anfangswert von Xavier ist für die Sigmoidfunktion und die Tanh-Funktion geeignet, aber wenn ReLU als Aktivierungsfunktion verwendet wird, scheint der Anfangswert von He, der auf ReLU spezialisiert ist, besser zu sein.

Recommended Posts

Versuchen wir das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" - Kapitel 3 Schritt 10 Memo "Details und Verbesserung des neuronalen Netzes"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 3 Schritt 08 Memo "Einführung in neuronale Netze".
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" - Kapitel 3 Schritt 12 Memo "Convolutional Neural Networks".
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 3 Schritt 13 Memo "Wiederkehrende neuronale Netze"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 06 Memo "Identifier"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 02 Memo "Vorverarbeitung"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 07 Memo "Evaluation"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 3 Schritt 09 Memo "Identifier by Neural Network"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 4 Schritt 14 Memo "Hyperparametersuche"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 04 Memo "Feature Extraction"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 4 Schritt 15 Memo "Datenerfassung"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 05 Memo "Feature Quantity Conversion"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 3 Schritt 11 Memo "Worteinbettungen"
Versuchen Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 2 Schritt 03 Memo "Morphologische Analyse und schriftliches Schreiben"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 01 Memo "Erstellen eines Dialogagenten"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 1 Memo "Vorkenntnisse vor Beginn der Übungen".
Zusammenfassung von Anfang bis Kapitel 1 der Einführung in Entwurfsmuster, die in der Java-Sprache gelernt wurden
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Verarbeitung natürlicher Sprache] Ich habe versucht, die Bemerkungen jedes Mitglieds in der Slack-Community zu visualisieren
Arten der Vorverarbeitung in der Verarbeitung natürlicher Sprache und ihre Leistungsfähigkeit
Zusammenfassung von Kapitel 2 der Einführung in Entwurfsmuster, die in Java gelernt wurden
Kapitel 4 Zusammenfassung der Einführung in Entwurfsmuster, die in Java gelernt wurden
Zusammenfassung von Kapitel 3 der Einführung in Entwurfsmuster, die in Java gelernt wurden
Von der Einführung der GoogleCloudPlatform Natural Language API bis zur Verwendung
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 3: Reguläre Ausdrücke 25-29]
[WIP] Vorverarbeiten von Notizen in der Verarbeitung natürlicher Sprache
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 3: Reguläre Ausdrücke 20 bis 24]
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 1: Vorbereitungsbewegung 00-04]
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 1: Vorbereitungsbewegung 05-09]
Eine Einführung in die GUI-Software der Klassenplattform, die mit Python / Tkinter erstellt wurde! (Und viele Try and Error)! (Während des Schreibens)
Unerträgliche Aufmerksamkeitsmangel bei der Verarbeitung natürlicher Sprache
Lernverlauf zur Teilnahme an der Entwicklung von Teamanwendungen mit Python ~ Nach Abschluss von "Einführung in Python 3" des Paiza-Lernens ~