Dela via


Aktiveringsfunktioner med BrainScript

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

Icke-linjära aktiveringsfunktioner för neurala nätverk.

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

Parametrar

  • x: argument för att tillämpa icke-linjäriteten på

Returvärde

Resultatet av att tillämpa icke-linjäriteten. Utdatans tensorform är samma som indata.

Description

Det här är de populära aktiveringsfunktionerna i neurala nätverk. Alla dessa utom Softmax() familjen och Hardmax() tillämpas elementmässigt.

Observera att när du använder träningskriteriet för korsentropy är det ofta önskvärt att inte tillämpa en Softmax-åtgärd i slutet, utan i stället skicka indata från Softmax till CrossEntropyWithSoftmax()

Åtgärden Hardmax() bestämmer elementet med det högsta värdet och representerar dess plats som en en frekvent vektor/tensor. Detta används för att utföra klassificering.

Uttrycka andra icke-linjäriteter i BrainScript

Om din nödvändiga icke-linjäritet inte är något av ovanstående kan det vara skrivbart som ett BrainScript-uttryck. Till exempel kan ett läckande ReLU med en lutning på 0,1 för den negativa delen bara skrivas som

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

Softmax längs axlar

Softmax-familjen är speciell eftersom den omfattar beräkningen av en nämnare. Den här nämnaren beräknas över alla värden i indatavektorn.

I vissa fall är indata dock en tensor med rang>1, där axlarna ska behandlas separat. Överväg till exempel en indata tensor av form [10000 x 20] som lagrar 20 olika distributioner, varje kolumn representerar sannolikhetsfördelningen för ett distinkt indataobjekt. Därför bör Softmax-åtgärden beräkna 20 separata nämnare. Den här åtgärden stöds inte av de inbyggda (Log)Softmax() funktionerna, men kan realiseras i BrainScript med hjälp av en åtgärd för att minska elementen på följande sätt:

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

ReduceLogSum() Här beräknar (loggen för) nämnaren, vilket resulterar i en tensor med dimension 1 för den reducerade axeln, [1 x 20] i exemplet ovan. Att subtrahera detta från den [10000 x 20]-dimensionella indatavektorn är en giltig åtgärd – som vanligt 1 kommer automatiskt att "sända", dvs dupliceras för att matcha indatadimensionen.

Exempel

En enkel MLP som utför en 10-vägsklassificering av 40-dimensionella funktionsvektorer:

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)