Freigeben über


Aktivierungsfunktionen mit BrainScript

Sigmoid(), Tanh(), ReLU(), Softmax(), LogSoftmax(), Hardmax()

Nicht lineare Aktivierungsfunktionen für neurale Netzwerke.

Sigmoid (x)
Tanh (x)
ReLU (x)
Softmax (x)
LogSoftmax (x)
Hardmax (x)

Parameter

  • x: Argument, um die Nicht-Linearität auf

Rückgabewert

Ergebnis der Anwendung der Nicht-Linearität. Das Tensor-Shape der Ausgabe entspricht den Eingaben.

BESCHREIBUNG

Dies sind die beliebten Aktivierungsfunktionen von neuralen Netzwerken. All dies außer der Softmax() Familie und Hardmax() werden elementweise angewendet.

Beachten Sie, dass bei Der Verwendung des Kriteriums für die cross-entropy-Schulung häufig wünschenswert ist, keinen Softmax-Vorgang am Ende anzuwenden, sondern stattdessen die Eingabe des Softmax an CrossEntropyWithSoftmax()

Der Hardmax() Vorgang bestimmt das Element mit dem höchsten Wert und stellt seine Position als einen Vektor/Tensor dar. Dies wird für die Ausführung der Klassifizierung verwendet.

Ausdrücke anderer Nicht-Linearitäten in BrainScript

Wenn Ihre erforderliche Nicht-Linearität nicht einer der oben genannten ist, kann sie als BrainScript-Ausdruck verfasst werden. Beispielsweise könnte ein leckiges ReLU mit einer Steigung von 0,1 für den negativen Teil nur so geschrieben werden wie

LeakyReLU (x) = 0.1 * x + 0.9 * ReLU (x)

Softmax entlang der Achsen

Die Softmax-Familie ist besonders dafür, dass sie die Berechnung eines Nenners umfasst. Dieser Nenner wird über alle Werte des Eingabevektors berechnet.

In einigen Szenarien ist die Eingabe jedoch ein Tensor mit Rang>1, wobei Achsen separat behandelt werden sollen. Erwägen Sie beispielsweise einen Eingabe-Tensor von Shape [10000 x 20] , der 20 verschiedene Verteilungen speichert, jede Spalte stellt die Wahrscheinlichkeitsverteilung eines eindeutigen Eingabeelements dar. Daher sollte der Softmax-Vorgang 20 separate Nenner berechnen. Dieser Vorgang wird von den integrierten (Log)Softmax() Funktionen nicht unterstützt, kann aber in BrainScript mithilfe eines elementweisen Reduktionsvorgangs wie folgt realisiert werden:

ColumnwiseLogSoftmax (z) = z - ReduceLogSum (axis=1)

ReduceLogSum() Hier berechnet der Nenner (Protokoll) den Nenner, was zu einem Tensor mit Dimension 1 für die reduzierte Achse führt; [1 x 20] im obigen Beispiel. Das Subtrahieren von dem [10000 x 20]-dimensionalen Eingabevektor ist ein gültiger Vorgang-wie gewohnt, der 1 automatisch "broadcast", also dupliziert, um der Eingabedimension zu entsprechen.

Beispiel

Ein einfacher MLP, der eine 10-Wege-Klassifizierung von 40-dimensionalen Featurevektoren ausführt:

features = Input{40}
h = Sigmoid (ParameterTensor{256:0} * features + ParameterTensor{256})
z = ParameterTensor{10:0}  * h * ParameterTensor{10}   # input to Softmax
labels = Input{10}
ce = CrossEntropyWithSoftmax (labels, z)