Udostępnij za pośrednictwem


Operacje binarne

Operatory binarne w sposób elementowy.

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)

Parametry

  • x: lewe dane wejściowe
  • y: prawe dane wejściowe

x Wymiary i y muszą być zgodne (z zastrzeżeniem zasad emisji, zobacz poniżej).

W przypadku trzech Boolean operacji oczekuje się, że oba dane wejściowe będą mieć wartość 0 lub 1, w przeciwnym razie zachowanie funkcji jest nieokreślone i w rzeczywistości zmieni się w przyszłych wersjach.

Wartości rozrzedne nie są obecnie obsługiwane.

Wartość zwracana

Te funkcje zwracają wynik odpowiednich operacji. Operatory relacyjne (Equal() itp.) i trzy Boolean operacje zwracają wartości, które są 0 lub 1.

Wymiar wyjściowy lub kształt tensoru jest identyczny z danymi wejściowymi, z zastrzeżeniem emisji, zobacz poniżej.

Opisy

Są to typowe operatory binarne. Są one stosowane w sposób elementowy. (Należy pamiętać, że operator BrainScript *nie jest elementem, ale oznacza produkt macierzy. Różni się to na przykład od biblioteki numpy języka Python).

Wymiary danych wejściowych muszą być identyczne, z wyjątkiem emisji.

Semantyka emisji

Rozgłaszanie, pojęcie, które CNTK modele po bibliotece języka Pythonnumpy, oznacza, że wymiar w jednym z danych wejściowych może wynosić 1, gdzie inne dane wejściowe nie są. W takim przypadku dane wejściowe z wymiarem 1 zostaną skopiowane n razy, gdzie n jest odpowiedni wymiar innego danych wejściowych. Jeśli rangi tensorów nie są zgodne, kształt tensoru danych wejściowych z mniejszymi wymiarami zostanie przyjęty jako 1 i wyzwalacz emisji.

Na przykład dodanie [13 x 1] tensoru do wektora [1 x 42] spowoduje uzyskanie [13 x 42] wektora zawierającego sumy wszystkich kombinacji.

Operacje relacji

Operatory relacyjne (Equal() itp.) nie są różnicowe, ich gradient jest zawsze uznawany za 0. Mogą być używane do flag, np. jako argument warunku w If() operacji.

LogPlus()

Operacja LogPlus() oblicza sumę wartości reprezentowanych w postaci logarytmowej. Tzn. oblicza:

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

gdzie x i y są logarytmami wartości. Ta operacja jest przydatna podczas radzenia sobie z prawdopodobieństwami, które są często tak małe, że tylko reprezentacja logarytmiczna umożliwia uzyskanie odpowiedniej dokładności liczbowej.

Uwaga: Inna nazwa pospolita tej operacji to log-add-exp, np. SciPy.

Przykłady

Warstwa Standardowa Sigmoid

Ta warstwa używa elementu binarnego +:

z = Sigmoid (W * x + b)

Należy pamiętać, że * powyższe nie są elementami, ale oznacza produkt macierzy.

Alternatywna implementacja aktywacji softmax

Softmax() Funkcję aktywacji można napisać przy użyciu funkcji rozgłaszaniaMinus:

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

W tym miejscu zmniejsza wektor z do skalarnego, ReduceLogSum() obliczając sumę logarytmicznie. Dzięki semantyce emisji odejmowania ten skalar jest następnie odejmowany od każdej wartości wejściowej. Spowoduje to zaimplementowanie dzielenia przez sumę wszystkich wartości w funkcji Softmax.

Elementy maksymalna liczba dwóch wejść

Maksymalnie dwa dane wejściowe można obliczyć jako kombinację Greater() elementów i If():

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

Działa to również z emisją. Na przykład prostownik liniowy można napisać z tym użyciem stałej skalarnej jako drugiego wejściowego:

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