Delen via


Activeringsfuncties met BrainScript

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

Niet-lineaire activeringsfuncties voor neurale netwerken.

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

Parameters

  • x: argument om de niet-lineariteit toe te passen op

Retourwaarde

Resultaat van het toepassen van de niet-lineariteit. De tensorshape van de uitvoer is hetzelfde als de invoer.

Description

Dit zijn de populaire activeringsfuncties van neurale netwerken. Dit alles behalve de Softmax() familie en Hardmax() worden met elementwise toegepast.

Let op: bij het gebruik van het criterium voor kruis-entropietraining is het vaak wenselijk om aan het einde geen Softmax-bewerking toe te passen, maar in plaats daarvan de invoer van de Softmax door te geven aan CrossEntropyWithSoftmax()

De Hardmax() bewerking bepaalt het element met de hoogste waarde en vertegenwoordigt de locatie ervan als een een een-hot vector/tensor. Dit wordt gebruikt voor het uitvoeren van classificatie.

Andere niet-lineariteiten uitdrukken in BrainScript

Als uw benodigde niet-lineariteit niet een van de bovenstaande is, kan het zijn dat deze kan worden composposeerbaar als een BrainScript-expressie. Een gelekte ReLU met een helling van 0,1 voor het negatieve deel kan bijvoorbeeld gewoon worden geschreven als

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

Softmax langs assen

De Softmax-familie is speciaal omdat het de berekening van een noemer omvat. Deze noemer wordt berekend over alle waarden van de invoervector.

In sommige scenario's is de invoer echter een tensor met rang>1, waarbij assen afzonderlijk moeten worden behandeld. Denk bijvoorbeeld aan een invoertenator van shape [10000 x 20] waarin 20 verschillende distributies worden opgeslagen. Elke kolom vertegenwoordigt de waarschijnlijkheidsverdeling van een afzonderlijk invoeritem. Daarom moet de Softmax-bewerking 20 afzonderlijke noemers berekenen. Deze bewerking wordt niet ondersteund door de ingebouwde (Log)Softmax() functies, maar kan als volgt worden gerealiseerd in BrainScript met behulp van een elementwise reductiebewerking:

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

ReduceLogSum() Hier wordt het (logboek van) de noemer berekend, wat resulteert in een tensor met dimensie 1 voor de gereduceerde as; [1 x 20] in het bovenstaande voorbeeld. Dit aftrekken van de [10000 x 20]-dimensionale invoervector is een geldige bewerking, zoals gebruikelijk, de 1 wordt automatisch 'uitgezonden', dat wil gezegd, gedupliceerd om overeen te komen met de invoerdimensie.

Voorbeeld

Een eenvoudige MLP die een 10-wegclassificatie van 40-dimensionale functievectoren uitvoert:

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)