Unterschied der Aktivierungsfunktionen in neuronalen Netzen im Allgemeinen


15

Ich habe die Aktivierungsfunktionstypen für neuronale Netze untersucht. Die Funktionen selbst sind recht einfach, aber der Anwendungsunterschied ist nicht ganz klar.

Es ist vernünftig, je nach gewünschter binärer / kontinuierlicher Ausgabe zwischen logischen und linearen Funktionen zu unterscheiden, aber was ist der Vorteil der Sigmoid-Funktion gegenüber der einfachen linearen Funktion?

ReLU ist zum Beispiel für mich besonders schwer zu verstehen: Was bringt es, eine Funktion zu verwenden, die sich bei positiven Eingaben linear verhält, bei negativen aber "flach" ist? Was ist die Intuition dahinter? Oder ist es nur eine einfache Trial-Error-Sache, nichts weiter?

Antworten:


15

Eine ähnliche Frage wurde im Lebenslauf gestellt: Umfassende Liste der Aktivierungsfunktionen in neuronalen Netzen mit Vor- / Nachteilen .

Ich kopiere unten eine der Antworten:

Eine solche Liste, wenn auch nicht sehr vollständig: http://cs231n.github.io/neural-networks-1/

Häufig verwendete Aktivierungsfunktionen

Jede Aktivierungsfunktion (oder Nichtlinearität ) nimmt eine einzelne Zahl und führt eine bestimmte feste mathematische Operation darauf aus. In der Praxis können verschiedene Aktivierungsfunktionen auftreten:

Bildbeschreibung hier eingebenBildbeschreibung hier eingeben

Links: Sigmoid-Nichtlinearität drückt reelle Zahlen in einen Bereich zwischen [0,1]. Rechts: Tanh-Nichtlinearität drückt reelle Zahlen in einen Bereich zwischen [-1,1].

Sigmoid. Die Sigmoid-Nichtlinearität hat die mathematische Form σ(x)=1/(1+e-x)und wird im Bild oben links gezeigt. Wie im vorherigen Abschnitt erwähnt, wird eine reelle Zahl genommen und in einen Bereich zwischen 0 und 1 "gequetscht". Insbesondere werden große negative Zahlen zu 0 und große positive Zahlen zu 1. Die Sigmoid-Funktion wurde in der Vergangenheit häufig verwendet da es eine schöne Interpretation als die Feuerrate eines Neurons hat: von überhaupt nicht feuern (0) bis zu voll gesättigtem Feuern mit einer angenommenen Maximalfrequenz (1). In der Praxis ist die Sigmoid-Nichtlinearität in letzter Zeit in Ungnade gefallen und wird selten verwendet. Es hat zwei Hauptnachteile:

  • Sigmoide sättigen und töten Farbverläufe . Eine sehr unerwünschte Eigenschaft des Sigmoidneurons ist, dass, wenn die Aktivierung des Neurons bei einem Schwanz von 0 oder 1 gesättigt ist, der Gradient in diesen Regionen nahezu Null ist. Denken Sie daran, dass während der Rückausbreitung dieser (lokale) Gradient mit dem Gradienten der Ausgabe dieses Tors für das gesamte Objektiv multipliziert wird. Wenn der lokale Gradient daher sehr klein ist, wird er den Gradienten effektiv "töten" und fast kein Signal wird durch das Neuron zu seinen Gewichten und rekursiv zu seinen Daten fließen. Darüber hinaus ist beim Initialisieren der Gewichte von Sigma-Neuronen besondere Vorsicht geboten, um eine Sättigung zu verhindern. Wenn beispielsweise die anfänglichen Gewichte zu groß sind, werden die meisten Neuronen gesättigt und das Netzwerk lernt kaum.
  • x>0f=wTx+bwf). Dies könnte unerwünschte Zick-Zack-Dynamiken in die Gradientenaktualisierungen für die Gewichte einführen. Beachten Sie jedoch, dass die endgültige Aktualisierung für die Gewichte variable Vorzeichen haben kann, sobald diese Verläufe über einen Datenstapel hinweg addiert wurden, wodurch dieses Problem etwas gemindert wird. Dies ist daher ein Nachteil, hat jedoch weniger schwerwiegende Konsequenzen als das oben beschriebene Problem der gesättigten Aktivierung.

Tanh(x)=2σ(2x)-1

Bildbeschreibung hier eingebenBildbeschreibung hier eingeben

Links: Aktivierungsfunktion der gleichgerichteten Lineareinheit (Rectified Linear Unit, ReLU), die null ist, wenn x <0, und dann linear mit Steigung 1, wenn x> 0. Rechts: Eine Darstellung von Krizhevsky et al. (pdf) Papier, das die 6-fache Verbesserung der Konvergenz mit der ReLU-Einheit im Vergleich zur Tanh-Einheit angibt.

ReLU. Die gleichgerichtete Lineareinheit ist in den letzten Jahren sehr beliebt geworden. Es berechnet die Funktion . Mit anderen Worten, die Aktivierung wird einfach auf Null begrenzt (siehe Abbildung oben links). Die Verwendung der ReLUs hat mehrere Vor- und Nachteile:f(x)=max(0,x)

  • (+) Es wurde festgestellt, dass es die Konvergenz des stochastischen Gradientenabfalls im Vergleich zu den Sigmoid / Tanh-Funktionen stark beschleunigt (z. B. um den Faktor 6 in Krizhevsky et al. ). Es wird argumentiert, dass dies auf seine lineare, nicht gesättigte Form zurückzuführen ist.
  • (+) Im Vergleich zu tanh / sigmoiden Neuronen, die teure Operationen (Exponentiale usw.) beinhalten, kann die ReLU implementiert werden, indem einfach eine Aktivierungsmatrix auf Null gesetzt wird.
  • (-) Leider können ReLU-Einheiten während des Trainings zerbrechlich sein und "sterben". Beispielsweise kann ein großer Gradient, der durch ein ReLU-Neuron fließt, dazu führen, dass die Gewichte so aktualisiert werden, dass das Neuron an keinem Datenpunkt wieder aktiviert wird. In diesem Fall ist der Gradient, der durch die Einheit fließt, ab diesem Zeitpunkt für immer Null. Das heißt, die ReLU-Einheiten können während des Trainings irreversibel sterben, da sie vom Datenverteiler gestoßen werden können. Beispielsweise stellen Sie möglicherweise fest, dass bis zu 40% Ihres Netzwerks "tot" sein können (dh Neuronen, die im gesamten Trainingsdatensatz niemals aktiviert werden), wenn die Lernrate zu hoch eingestellt ist. Bei richtiger Einstellung der Lernrate ist dies seltener ein Problem.

f(x)=1(x<0)(αx)+1(x> =0)(x)αist eine kleine Konstante. Einige Personen berichten über Erfolge mit dieser Form der Aktivierungsfunktion, aber die Ergebnisse sind nicht immer konsistent. Die Steigung im negativen Bereich kann auch zu einem Parameter jedes Neurons gemacht werden, wie in PReLU-Neuronen zu sehen ist, die in Delving Deep into Rectifiers von Kaiming He et al., 2015, vorgestellt wurden unklar.

Bildbeschreibung hier eingeben

f(wTx+b)max(w1Tx+b1,w2Tx+b2)w1,b1=0

Dies schließt unsere Diskussion der häufigsten Arten von Neuronen und ihrer Aktivierungsfunktionen ab. Als letzter Kommentar kommt es sehr selten vor, dass verschiedene Arten von Neuronen im selben Netzwerk gemischt und abgeglichen werden, obwohl dies kein grundlegendes Problem darstellt.

TLDR : " Welchen Neuronentyp soll ich verwenden? " Verwenden Sie die ReLU-Nichtlinearität, achten Sie auf Ihre Lernraten und überwachen Sie möglicherweise den Anteil "toter" Einheiten in einem Netzwerk. Wenn dies Sie betrifft, versuchen Sie es mit Leaky ReLU oder Maxout. Verwenden Sie niemals Sigmoid. Versuchen Sie Tanh, aber erwarten Sie, dass es schlechter als ReLU / Maxout funktioniert.


Lizenz:


Die MIT-Lizenz (MIT)

Copyright (c) 2015 Andrej Karpathy

Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die "Software") erhält, kostenlos die Erlaubnis erteilt, mit der Software uneingeschränkt umzugehen, einschließlich der Rechte zur Nutzung, zum Kopieren, Ändern und Zusammenführen Sie dürfen Kopien der Software unter folgenden Bedingungen veröffentlichen, verbreiten, unterlizenzieren und / oder verkaufen und Personen, denen die Software zur Verfügung gestellt wird, gestatten, dies zu tun:

Der obige Copyright-Hinweis und dieser Erlaubnishinweis sind in allen Kopien oder wesentlichen Teilen der Software enthalten.

DIE SOFTWARE WIRD OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GARANTIE "WIE BESEHEN" ZUR VERFÜGUNG GESTELLT, EINSCHLIESSLICH DER GARANTIEN FÜR HANDELSFÄHIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL HAFTEN DIE AUTOREN ODER COPYRIGHT-INHABER FÜR JEGLICHE HAFTUNGSANSPRÜCHE, SCHÄDEN ODER ANDEREN HAFTUNGSSTÄNDEN, DIE AUS, AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DEM GEBRAUCH ODER ANDEREN HANDELSSTÄNDEN DES VERTRAGS ENTSTEHEN SOFTWARE.*


Danke, diese Zusammenfassung gibt einen Einblick, aber ehrlich gesagt kann ich einige Details immer noch nicht intuitiv ergründen (z. B. warum ReLU "die Konvergenz von SGD stark beschleunigt") und vor allem: welche soll ich auswählen? Basierend auf dem Fazit ist Maxout das Beste und das ist das Ende. Abgesehen von der Tatsache, dass Maxout nicht in den gängigsten Paketen (z. B. in Keras) implementiert ist, erscheint es mir vernünftig, zumindest in der letzten Ebene andere Typen zu platzieren (z. B. Sigmoid für die Zweiklassifizierung).
Hendrik
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.