Sdílet prostřednictvím


Binární operace

Binární operátory v prvku.

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: Levý vstup
  • y: správný vstup

Rozměry x a y musí se shodovat (v souladu s pravidly vysílání, viz níže).

U tří Boolean operací se očekává, že oba vstupy budou buď 0, nebo 1, jinak chování funkcí není zadané a ve skutečnosti se změní v budoucích verzích.

Aktuálně se nepodporují řídké hodnoty.

Vrácená hodnota

Tyto funkce vrátí výsledek odpovídajících operací. Relační operátory (Equal() atd.) a tři Boolean operace vracejí hodnoty, které jsou buď 0, nebo 1.

Výstupní rozměr nebo tvar tensoru je shodný s obrazcem vstupů, které podléhají vysílání, viz níže.

Popisy

Jedná se o běžné binární operátory. Použijí se po prvku. (Všimněte si, že operátor BrainScriptu *není prvek, ale představuje maticový součin. To se liší například od knihovny Pythonu numpy .)

Rozměry vstupů musí být shodné s výjimkou vysílání.

Sémantika vysílání

Vysílání, koncept, který CNTK modely po knihovně numpy Pythonu, znamená, že dimenze v jednom ze vstupů může být 1, kde druhý vstup není. V takovém případě se vstup s 1 dimenzí zkopíruje n , kde n je odpovídající dimenze druhého vstupu. Pokud se pořadí tensoru neshoduje, bude se předpokládat, že tvar tensoru vstupu s menšími rozměry bude 1 a aktivuje vysílání.

Například přidání [13 x 1] tensoru do vektoru [1 x 42] by přineslo [13 x 42] vektor, který obsahuje součty všech kombinací.

Relační operace

Relační operátory (Equal() atd.) nejsou odlišné, jejich přechod se vždy považuje za 0. Dají se použít pro příznaky, například jako argument podmínky v If() operaci.

LogPlus()

Operace LogPlus() vypočítá součet hodnot reprezentovaných v logaritmickém tvaru. Tj. vypočítá:

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

kde x a y jsou logaritmus hodnot. Tato operace je užitečná při práci s pravděpodobnostmi, které jsou často tak malé, že pouze logaritmické znázornění umožňuje odpovídající číselnou přesnost.

Poznámka: Dalším běžným názvem této operace je log-add-exp, např. SciPy.

Příklady

Standardní sigmoidová vrstva

Tato vrstva používá binární elementu +:

z = Sigmoid (W * x + b)

Všimněte si, že * výše není prvek, ale představuje maticový součin.

Alternativní implementace aktivace softmaxu

Softmax() Aktivační funkci lze zapsat pomocí vysíláníMinus:

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

ReduceLogSum() V této části zmenšuje vektor z na skalární výpočet logaritmického součtu. Prostřednictvím sémantiky odčítání se tento skalár odečte od každé vstupní hodnoty. Tím se implementuje dělení součtem nad všemi hodnotami ve funkci Softmax.

Elementwise Max ze dvou vstupů

Elementwise maximum dvou vstupů lze vypočítat jako kombinaci Greater() a If():

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

To také funguje s vysíláním. Lineární usměrňovač lze například zapsat pomocí skalární konstanty jako druhého vstupu:

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