Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
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)