Dela via


Binära åtgärder

Elementmässigt binära operatorer.

ElementTimes (x, y)
x .* y
Minus (x, y)
x - y
Plus (x, y)
x + y
LogPlus (x, y)
Less (x, y)
Equal (x, y)
Greater (x, y)
GreaterEqual (x, y)
NotEqual (x, y)
LessEqual (x, y)
BS.Boolean.And (x, y)
BS.Boolean.Or (x, y)
BS.Boolean.Xor (x, y)

Parametrar

  • x: vänster inmatning
  • y: rätt indata

Dimensionerna av x och y måste matcha (med förbehåll för sändningsregler, se nedan).

För de tre Boolean åtgärderna förväntas båda indata vara antingen 0 eller 1, annars är funktionsbeteendet ospecificerat och kommer i själva verket att ändras i framtida versioner.

Glesa värden stöds inte för närvarande.

Returvärde

Dessa funktioner returnerar resultatet av motsvarande åtgärder. Relationsoperatorerna (Equal() osv.) och de tre Boolean åtgärderna returnerar värden som är antingen 0 eller 1.

Utdatadimensionen eller tensorformen är identisk med indataformerna, beroende på sändning, se nedan.

Beskrivningar

Det här är de vanliga binära operatorerna. De tillämpas elementmässigt. (Observera att BrainScript-operatorn *inte är elementmässigt, utan står för matrisprodukten. Detta skiljer sig till exempel från Python biblioteknumpy.)

Indatadimensionerna måste vara identiska, med undantag för sändning.

Sändningssemantik

Sändning, ett begrepp som CNTK modeller efter Python biblioteknumpy, innebär att en dimension i en av indata kan vara 1 där de andra indata inte finns. I så fall kopieras n indata med 1-dimensionen gånger, där n är motsvarande andra indatadimension. Om tensor-rangordningen inte matchar antas tensorformen för indata med mindre dimensioner vara 1 och utlösa sändning.

Om du till exempel lägger till en [13 x 1] tensor i en [1 x 42] vektor får du en [13 x 42] vektor som innehåller summorna för alla kombinationer.

Relationsåtgärder

Relationsoperatorerna (Equal() osv.) är inte differentierbara, deras toning anses alltid vara 0. De kan användas för flaggor, t.ex. som ett villkorsargument i åtgärden If() .

LogPlus()

Åtgärden LogPlus() beräknar summan av värden som representeras i logaritmisk form. D.v.s. beräknar det:

LogPlus (x, y) = Log (Exp (x) + Exp (y))

där x och y är logaritmer av värden. Den här åtgärden är användbar när du hanterar sannolikheter, som ofta är så små att endast en logaritmisk representation tillåter lämplig numerisk noggrannhet.

Obs! Ett annat vanligt namn för den här åtgärden är log-add-exp, t.ex. SciPy.

Exempel

Standard Sigmoid-lager

Det här lagret använder elementmässigt binärt +:

z = Sigmoid (W * x + b)

Observera att *ovanstående inte är elementmässigt, utan står för matrisprodukten.

Alternativ implementering av Softmax-aktivering

Aktiveringsfunktionen Softmax() kan skrivas med sändning Minus:

MySoftmax (z) = Exp (z - ReduceLogSum (z))

ReduceLogSum() Här minskar vektorn z till en skalär genom att beräkna dess logaritmiska summa. Genom att sända semantik för subtraktion subtraktion subtraheras den här skalären från varje indatavärde. Detta implementerar divisionen med summan över alla värden i funktionen Softmax.

Elementwise Max av två indata

Det maximala elementet för två indata kan beräknas som en kombination av Greater() och If():

MyElementwiseMax (a, b) = If (Greater (a, b), a, b)

Detta fungerar också med sändning. Till exempel kan den linjära likriktaren skrivas med detta med hjälp av en skalär konstant som andra indata:

MyReLU (x) = MyElementwiseMax (x, Constant(0))