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)