Operazioni binarie

Operatori binari element per elemento.

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)

Parametri

  • x: input sinistro
  • y: input destro

Le dimensioni di x e y devono corrispondere (soggette alle regole di trasmissione, vedere di seguito).

Per le tre Boolean operazioni, è previsto che entrambi gli input siano 0 o 1. In caso contrario, il comportamento delle funzioni non è specificato e in effetti cambierà nelle versioni future.

I valori di tipo sparse non sono attualmente supportati.

Valore restituito

Queste funzioni restituiscono il risultato delle operazioni corrispondenti. Gli operatori di relazione (Equal() e così via) e le tre Boolean operazioni restituiscono valori 0 o 1.

La dimensione di output o la forma del tensore è identica a quella degli input, soggetta alla trasmissione, vedere di seguito.

Descrizioni

Si tratta degli operatori binari comuni. Vengono applicate in senso elemento. Si noti che l'operatore di * BrainScript non è in senso elemento, ma sta per il prodotto matrice. Questo è diverso, ad esempio, dalla libreria di numpy Python.

Le dimensioni degli input devono essere identiche, ad eccezione della trasmissione.

Semantica di trasmissione

La trasmissione, un concetto che CNTK modelli dopo la libreria di numpy Python, significa che una dimensione in uno degli input può essere 1 in cui l'altro input non è. In tal caso, l'input con la dimensione 1 verrà copiato n , dove n corrisponde alla dimensione dell'altro input corrispondente. Se i ranghi del tensore non corrispondono, si presuppone che la forma tensore dell'input con dimensioni inferiori sia 1 e attivi la trasmissione.

Ad esempio, l'aggiunta di un [13 x 1] tensore a un [1 x 42] vettore produce un [13 x 42] vettore che contiene le somme di tutte le combinazioni.

Operazioni di relazione

Gli operatori di relazione (Equal() e così via) non sono differenziabili, la loro sfumatura viene sempre considerata 0. Possono essere usati per i flag, ad esempio come argomento di condizione nell'operazione If() .

LogPlus()

L'operazione LogPlus() calcola la somma dei valori rappresentati in forma logaritmica. Ad esempio, calcola:

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

dove x e y sono logaritmi di valori. Questa operazione è utile quando si gestiscono le probabilità, che sono spesso così piccole che solo una rappresentazione logaritmica consente l'accuratezza numerica appropriata.

Nota: un altro nome comune per questa operazione è log-add-exp, ad esempio SciPy.

Esempio

Livello Sigmoid Standard

Questo livello usa il file binario +element per elemento :

z = Sigmoid (W * x + b)

Si noti che * in precedenza non è in senso elemento, ma sta per il prodotto matrice.

Implementazione alternativa dell'attivazione Softmax

La Softmax() funzione di attivazione può essere scritta usando la trasmissione Minus:

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

In questo caso, ReduceLogSum() riduce il vettore z a un scalare calcolando la somma logaritmica. Tramite la semantica di trasmissione della sottrazione, questo scalare viene quindi sottratto da ogni valore di input. In questo modo viene implementata la divisione in base alla somma di tutti i valori nella funzione Softmax.

Numero massimo di due input elemento per elemento

Il valore massimo di due input in senso elemento può essere calcolato come combinazione di Greater() e If():

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

Questo funziona anche con la trasmissione. Ad esempio, il rectifier lineare può essere scritto con questo usando una costante scalare come secondo input:

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