Dropout - eine Methode zur Lösung des Problems der Umschulung in neuronalen Netzen

Ursprünglicher Autor: Paolo Galeone
  • Übersetzung


Überanpassung ist eines der Probleme von Deep Neural Networks (DNN), das im Folgenden besteht: Das Modell erklärt gut nur die Beispiele aus dem Trainingssatz und passt sich an die Trainingsbeispiele an, anstatt zu lernen, Beispiele zu klassifizieren, die nicht am Training beteiligt waren (zu verlieren) Fähigkeit zur Verallgemeinerung). In den letzten Jahren wurden viele Lösungen für das Problem der Umschulung vorgeschlagen, eine davon hat jedoch alle anderen aufgrund ihrer Einfachheit und hervorragenden praktischen Ergebnisse übertroffen. Diese Lösung ist Dropout (in russischen Quellen - "Ausdünnungsmethode", "Ausschlussmethode" oder einfach "Dropout").

Aussteiger




Eine grafische Darstellung der Dropout-Methode aus einem Artikel, in dem sie zum ersten Mal vorgestellt wurde. Auf der linken Seite befindet sich das neuronale Netzwerk, bevor Dropout angewendet wurde, auf der rechten Seite befindet sich dasselbe Netzwerk nach Dropout.
Das links abgebildete Netzwerk wird beim Testen nach dem Lernen der Parameter verwendet.


Die Hauptidee von Dropout ist es, ein Ensemble von mehreren DNNs zu trainieren, anstatt einen DNN zu trainieren, und dann die Ergebnisse zu mitteln.

Lernnetzwerk erhalten werden durch Ausschluß aus dem Netzwerk (Herausfallen) Neuronen mit Wahrscheinlichkeit$ p $Somit ist die Wahrscheinlichkeit, dass ein Neuron im Netzwerk verbleibt, hoch $ q = 1-p $. "Ausschluss" eines Neurons bedeutet, dass es für Eingabedaten oder Parameter 0 zurückgibt.

Ausgeschlossene Neuronen tragen zu keinem Zeitpunkt des Backpropagation-Algorithmus zum Lernprozess bei. Daher kommt der Ausschluss von mindestens einem der Neuronen dem Erlernen eines neuen neuronalen Netzwerks gleich.

Zitiert die Autoren ,

In einem neuronalen Standardnetz sagt ihm die Ableitung, die von jedem Parameter erhalten wird, wie sie sich ändern soll, um unter Berücksichtigung der Aktivität der verbleibenden Blöcke die Funktion der endlichen Verluste zu minimieren. Daher können sich die Blöcke ändern, während die Fehler anderer Blöcke korrigiert werden. Dies kann zu einer übermäßigen Gelenkanpassung (Co-Anpassung) führen, was wiederum zu einer Umschulung führt, da diese Gelenkanpassungen nicht auf Daten verallgemeinert werden können, die nicht an der Schulung teilgenommen haben. Wir nehmen an, dass Dropout die gemeinsame Anpassung für jeden verborgenen Block verhindert und die Anwesenheit anderer verborgener Blöcke unzuverlässig macht. Daher kann sich ein versteckter Block nicht auf andere Blöcke verlassen, um seine eigenen Fehler zu korrigieren.

Kurz gesagt, Dropout funktioniert in der Praxis gut, da es die gegenseitige Anpassung von Neuronen während der Trainingsphase verhindert.

Schauen wir uns die Dropout-Methode etwas genauer an.

So funktioniert Dropout


Wie bereits erwähnt, schaltet Dropout mit hoher Wahrscheinlichkeit Neuronen aus $ p $ und infolgedessen werden sie mit größter Wahrscheinlichkeit eingeschaltet $ q = 1-p $.

Die Wahrscheinlichkeit, jedes Neuron auszuschalten, ist gleich . Dies bedeutet Folgendes:

Vorausgesetzt, dass

  • $ h (x) = xW + b $ - lineare Projektion des Eingangs $ d_i $Vektor x ein $ d_h $-dimensionaler Raum der Ausgabewerte;
  • $ a (h) $ - Aktivierungsfunktion,


Die Anwendung von Dropout auf diese Projektion in der Trainingsphase kann als modifizierte Aktivierungsfunktion dargestellt werden:

$ f (h) = D⊙a (h), $


wo $ D = (X_1, ⋯, X_ {d_h}) $ - $ d_h $Vektor von Zufallsvariablen $ X_i $vertrieben durch Bernoulli-Gesetz.

$ X_i $ hat die folgende Wahrscheinlichkeitsverteilung:

$$ display $$ f (k; p) = \ begin {equation *} \ begin {cases} p, & \ mathrm {if} & k = 1 \\ 1-p, & \ mathrm {if} & k = 0 \ end {cases} \ end {equation *}, $$ display $$

wo $ k $- alle möglichen Ausgabewerte.

Offensichtlich passt diese Zufallsvariable perfekt zu dem Dropout, der auf ein einzelnes Neuron angewendet wird. In der Tat wird ein Neuron mit hoher Wahrscheinlichkeit ausgeschaltet$ p = P (k = 1) $Andernfalls lassen Sie es eingeschaltet.

Betrachten wir die Anwendung von Dropout auf das i- te Neuron:

$$ display $$ O_i = X_ia (\ sum_ {k = 1} ^ {d_i} {w_kx_k + b}) = \ begin {equation *} \ begin {cases} a (\ sum_ {k = 1} ^ {d_i } {w_kx_k + b}), & \ mathrm {if} & X_i = 1 \\ 0, & \ mathrm {if} & X_i = 0 \ end {cases} \ end {equation *}, $$ display $$


wo $ P (X_i = 0) = p $.

Da das Neuron im Trainingsstadium mit der Wahrscheinlichkeit q im Netzwerk bleibt (es wird nicht ausgeschaltet) , müssen wir im Teststadium das Verhalten des Ensembles der im Training verwendeten neuronalen Netzwerke emulieren. Hierzu schlagen die Autoren im Teststadium vor, die Aktivierungsfunktion mit dem Koeffizienten q zu multiplizieren . So

in der Trainingsphase :$ O_i = X_ia (\ sum_ {k = 1} ^ {d_i} {w_kx_k + b}) $,

In der Testphase :$ O_i = qa (\ sum_ {k = 1} ^ {d_i} {w_kx_k + b}) $

Invertierter Ausfall


Es ist möglich, einen etwas anderen Ansatz zu verwenden - den umgekehrten Ausfall . In diesem Fall multiplizieren wir die Aktivierungsfunktion nicht während der Testphase, sondern während des Trainings mit einem Koeffizienten.

Der Koeffizient ist der Kehrwert der Wahrscheinlichkeit, dass das Neuron im Netzwerk verbleibt:$ \ frac {1} {1-p} = \ frac {1} {q} $So

in der Trainingsphase :$ O_i = \ frac {1} {q} X_ia (\ sum_ {k = 1} ^ {d_i} {w_kx_k + b}) $,
In der Testphase :$ O_i = a (\ sum_ {k = 1} ^ {d_i} {w_kx_k + b}) $

In vielen Frameworks für Deep Learning wird Dropout nur in dieser Modifikation implementiert, da es nur einmal erforderlich ist, das Modell zu beschreiben und dann mit dem Training und Testen dieses Modells zu beginnen, wobei nur der Parameter (Dropout-Koeffizient) geändert wird.

Im Falle eines direkten Ausfalls müssen wir das neuronale Netzwerk ändern, um Tests durchzuführen, da das Neuron ohne Multiplikation mit q höhere Werte zurückgibt als diejenigen, die erwarten, nachfolgende Neuronen zu erhalten. Aus diesem Grund ist die Implementierung des umgekehrten Dropouts üblicher.

Ausfall vieler Neuronen


Diese Schicht ist leicht zu erkennen $ h $ von $ n $ Neuronen in einem separaten Schritt der Lernphase können als Ensemble von betrachtet werden $ n $ Bernoulli experimentiert mit Erfolgswahrscheinlichkeit $ p $.

Somit ist die Ausgabeschicht$ h $ Wir erhalten die folgende Anzahl ausgeschlossener Neuronen:

$ Y = \ sum_ {i = 1} ^ {d_h} (1-X_i) $


Da jedes Neuron als Zufallsvariable dargestellt wird, die nach dem Bernoulli-Gesetz verteilt ist, und alle diese Werte unabhängig voneinander sind, ist die Gesamtzahl der ausgeschlossenen Neuronen ebenfalls eine Zufallsvariable, jedoch mit einer Binomialverteilung :

$ Y∼Bi (d_h, p), $


wo ist die wahrscheinlichkeit $ k $ erfolgreiche veranstaltungen für $ n $ Versuche zeichnet sich durch folgende Verteilungsdichte aus:

$ f (k; n, p) = \ begin {pmatrix} n \\ k \ end {pmatrix} p ^ k (1-p) ^ {nk} $


Diese Formel lässt sich leicht wie folgt erklären:

  • $ p ^ k (1-p) ^ {nk} $ - die Wahrscheinlichkeit, eine Sequenz zu erhalten $ k $ erfolgreiche veranstaltungen für $ n $ Versuche, und deshalb $ nk $ erfolglos
  • $ \ begin {pmatrix} n \\ k \ end {pmatrix} $ - Binomialkoeffizient zur Berechnung der Anzahl möglicher erfolgreicher Sequenzen.

Mit dieser Verteilung können wir nun die Wahrscheinlichkeit berechnen, eine bestimmte Anzahl von Neuronen zu trennen.

Mit der Dropout-Methode legen wir den Dropout-Koeffizienten fest$ p $für eine bestimmte Schicht und erwarten, dass eine proportionale Anzahl von Neuronen aus dieser Schicht ausgeschlossen werden.

Zum Beispiel, wenn die Ebene, auf die wir Dropout angewendet haben, aus besteht$ n = 1024 $ Neuronen und $ p = 0,5 $Wir erwarten, dass 512 von ihnen deaktiviert werden. Lassen Sie uns diese Aussage überprüfen:

$ Y = \ sum_ {i = 1} ^ {1024} X_i∼Bi (1024,0.5) $

$ P (Y = 512) = \ begin {pmatrix} 1024 \\ 512 \ end {pmatrix} 0,5 ^ {512} (1-0,5) ^ {1024-512} \ ungefähr0,025 $


Wie Sie sehen, ist die Wahrscheinlichkeit eines Herunterfahrens genau $ np = 512 $Neuronen ist nur 0,025!

Mit dem folgenden Python 3-Skript können Sie herausfinden, wie viele Neuronen für verschiedene Werte deaktiviert werden.$ p $ und fester Betrag $ n $.

import matplotlib.pyplot as plt
from scipy.stats import binom
import numpy as np
# number of neurons
n = 1024
# number of tests (input examples)
size = 500
# histogram bin width, for data visualization
binwidth = 5
for p in range(1, 10):
    # per layer probability
    prob = p / 10
    # generate size values from a bi(n, prob)
    rnd_values = binom.rvs(n, prob, size=size)
    # draw histogram of rnd values
    plt.hist(
        rnd_values,
        bins=[x for x in range(0, n, binwidth)],
        # normalize = extract the probabilities
        normed=1,
        # pick a random color
        color=np.random.rand(3, 1),
        # label the histogram with its probability
        label=str(prob))
plt.legend(loc='upper right')
plt.show()


Binomialverteilungsspitzen in der Region $ np $

Wie Sie aus dem obigen Bild ersehen können, für jeden $ p $ Die durchschnittliche Anzahl ausgeschalteter Neuronen ist proportional $ np $, also

$ E [Bi (n, p)] = np $


Darüber hinaus ist festzustellen, dass die Werteverteilung nahezu symmetrisch zu ist $ p = 0,5 $ und Wahrscheinlichkeit des Herunterfahrens $ np $ Neuronen nehmen mit zunehmender Entfernung von zu $ p = 0,5 $.

Der Skalierungsfaktor wurde von den Autoren eingeführt, um Aktivierungswerte auszugleichen, da nur ein Bruchteil von$ 1-p $ Neuronen, während im Teststadium alle 100% der Neuronen eingeschaltet bleiben, und daher müssen die erhaltenen Werte unter Verwendung eines speziellen Koeffizienten reduziert werden.

Aussteiger und andere Regularisierer


Dropout wird häufig mit L2-Normalisierung und anderen Methoden zur Einschränkung von Parametern (z . B. Max Norm ) verwendet. Normalisierungsmethoden helfen, niedrige Modellparameterwerte beizubehalten.

Kurz gesagt, L2-Normalisierung ist ein zusätzliches Element der Verlustfunktion, wobei$ \ lambda \ in [0,1] $ - ein Hyperparameter namens "Regularisierungsstärke" (Regularisierungsstärke), $ F (W; x) $ - Modell und $ \ epsilon $ - Fehlerfunktion zwischen Realwert $ y $ und vorhergesagt $ \ hat {y} $:

$ \ mathcal {L} (y, \ hat {y}) = \ epsilon (y, F (W; x)) + \ frac {\ lambda} {2} W ^ 2 $


Es ist leicht zu verstehen, dass dieses zusätzliche Element den Wert verringert, um den sich der Parameter während der Rückübertragung des Fehlers durch die Gradientenabstiegsmethode ändert. Wenn$ \ eta $ Ist der Lernratenkoeffizient der Parameter $ w \ in {W} $ aktualisiert durch den folgenden Wert:

$ w \ leftarrow {w- \ eta (\ frac {\ partial F (W; x)} {\ partial w} + \ lambda w)} $


Dropout alleine kann nicht verhindern, dass die Parameterwerte während der Upgrade-Phase ansteigen. Darüber hinaus werden die Upgrade-Schritte durch das umgekehrte Dropout noch größer, wie unten gezeigt.

Reverse Dropout und andere Regulierungsbehörden


Da Dropout das Anwachsen von Parametern und deren Überlauf nicht verhindert, kann uns die L2-Regularisierung (oder eine andere Regularisierungsmethode, die die Parameterwerte einschränkt) helfen.

Wenn wir den Dropout-Koeffizienten explizit ausdrücken, ergibt die obige Gleichung Folgendes:

$ w \ leftarrow {w- \ eta (\ frac {1} {q} \ frac {\ partielles F (W; x)} {\ partielles w} + \ lambda w)} $


Es ist leicht zu erkennen, dass beim umgekehrten Dropout die Lernrate anhand des Koeffizienten skaliert wird $ q $. Als$ q $ gehört zum Intervall $ [0; 1] $, die Beziehung zwischen $ \ eta $ und $ q $ kann Werte aus dem folgenden Intervall annehmen:

$ r (q) = \ frac {\ eta} {q} \ in [\ eta = \ lim_ {q \ rightarrow 1} r (q), + \ infty = \ lim_ {q \ rightarrow 0} r (q) ] $


Deshalb werden wir ab sofort anrufen $ q $Beschleunigungsfaktor (Boosting-Faktor) , da er die Lerngeschwindigkeit erhöht.$ r (q) $Wir nennen die effektive Lernrate (effektive Lernrate) .

Die effektive Lerngeschwindigkeit ist höher als die von uns gewählte Lerngeschwindigkeit. Daher können Normalisierungsmethoden, die die Parameterwerte begrenzen, die Auswahl der Lerngeschwindigkeit vereinfachen.

Zusammenfassung


  1. Dropout gibt es in zwei Versionen: direkt (selten verwendet) und umgekehrt.
  2. Ausfall auf einem separaten Neuron kann als Zufallsvariable mit einer Bernoulli-Verteilung dargestellt werden.
  3. Ausfall auf einer Reihe von Neuronen kann als zufällige Variable mit einer Binomialverteilung dargestellt werden.
  4. Trotz der Tatsache, dass die Wahrscheinlichkeit, dass genau np Neuronen vom Netzwerk getrennt werden, ist np die durchschnittliche Anzahl von Neuronen, die in einer Schicht von n Neuronen getrennt werden.
  5. Reverse Dropout erhöht die Lerngeschwindigkeit.
  6. Das inverse Dropout sollte in Verbindung mit anderen Normalisierungsmethoden verwendet werden, die Parameterwerte begrenzen, um den Auswahlprozess für die Lerngeschwindigkeit zu vereinfachen.
  7. Dropout verhindert Lernprobleme in tiefen neuronalen Netzen.

Oh, und komm zu uns, um zu arbeiten? :)
wunderfund.io ist eine junge Stiftung, die sich mit hochfrequentem algorithmischem Handel beschäftigt . Der Hochfrequenzhandel ist ein ständiger Wettbewerb der besten Programmierer und Mathematiker der Welt. Wenn Sie sich uns anschließen, werden Sie Teil dieses faszinierenden Kampfes.

Wir bieten begeisterten Forschern und Programmierern interessante und komplexe Datenanalyse- und Entwicklungsaufgaben mit geringer Latenz. Ein flexibler Zeitplan und keine Bürokratie, Entscheidungen werden schnell getroffen und umgesetzt. Treten

Sie unserem Team bei: wunderfund.io

Jetzt auch beliebt: