Operações Binárias
Operadores binários elementares.
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)
Parâmetros
x
: entrada à esquerday
: entrada à direita
As dimensões e y
deve corresponder (sujeito às regras de x
radiodifusão, ver abaixo).
Para as três Boolean
operações, espera-se que ambas as entradas sejam 0 ou 1, caso contrário o comportamento das funções não é especificado, e de facto mudará em versões futuras.
Atualmente, os valores escassos não são suportados.
Valor devolvido
Estas funções devolvem o resultado das operações correspondentes. Os operadores de relação (Equal()
etc.) e os três Boolean
valores de retorno de operações que são 0 ou 1.
A dimensão de saída ou a forma do tensor são idênticas às das entradas, sujeitas à radiodifusão, ver abaixo.
Descrições
Estes são os operadores binários comuns.
São aplicados elementarmente.
(Note que o operador do *
BrainScript não é elementar, mas representa o produto matriz. Isto é diferente, por exemplo, da biblioteca de numpy
Python.)
As dimensões das entradas devem ser idênticas, com exceção da radiodifusão.
Semântica de radiodifusão
A radiodifusão, um conceito que CNTK modelos após a biblioteca de numpy
Python, significa que uma dimensão numa das entradas pode ser 1 onde a outra entrada não está.
Nesse caso, a entrada com a dimensão 1 será copiada n
vezes, onde n
está a dimensão da outra entrada correspondente.
Se as fileiras do tensor não corresponderem, a forma de tensor da entrada com menos dimensões será assumida como 1, e a transmissão do gatilho.
Por exemplo, adicionar um [13 x 1]
tensor a um [1 x 42]
vetor produziria um [13 x 42]
vetor que contém as somas de todas as combinações.
Operações de Relação
Os operadores de relação (Equal()
etc.) não são diferenciais, o seu gradiente é sempre considerado 0.
Podem ser utilizados para bandeiras, por exemplo, como argumento de condição na If()
operação.
LogPlus()
A LogPlus()
operação calcula a soma dos valores representados na forma logarítmica.
Ou seja, calcula:
LogPlus (x, y) = Log (Exp (x) + Exp (y))
onde x
e y
são logaritmos de valores.
Esta operação é útil quando se lida com probabilidades, que muitas vezes são tão pequenas que apenas uma representação logarítmica permite uma precisão numérica adequada.
Nota: Outro nome comum para esta operação é log-add-exp, por exemplo , SciPy.
Exemplos
Camada Sigmoide Padrão
Esta camada utiliza o binário +
elementar:
z = Sigmoid (W * x + b)
Note que *
acima não é elementar, mas significa o produto matriz.
Implementação alternativa da ativação Softmax
A Softmax()
função de ativação pode ser escrita através da radiodifusão Minus
:
MySoftmax (z) = Exp (z - ReduceLogSum (z))
Aqui, ReduceLogSum()
reduz o vetor z
a um scalar calculando a sua soma logarítmica. Através da semântica de transmissão de subtração, este scalar é então subtraído de cada valor de entrada.
Isto implementa a divisão pela soma sobre todos os valores na função Softmax.
Elementwise Max de Duas Entradas
O limite elementar de duas entradas pode ser calculado como uma combinação deGreater()
:If()
MyElementwiseMax (a, b) = If (Greater (a, b), a, b)
Isto também funciona com a radiodifusão. Por exemplo, o retificador linear pode ser escrito com isto usando uma constante escalar como a segunda entrada:
MyReLU (x) = MyElementwiseMax (x, Constant(0))