Двоичные операции
Бинарные операторы по элементу.
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)
Параметры
x
: левый входy
: правый вход
Размеры и y
должны соответствовать (в соответствии с правиламиx
вещания см. ниже).
Для трех Boolean
операций оба входных данных должны быть либо 0, либо 1, в противном случае поведение функций не указано и фактически изменится в будущих версиях.
Разреженные значения в настоящее время не поддерживаются.
Возвращаемое значение
Эти функции возвращают результат соответствующих операций. Операторы отношения (Equal()
и т. д.) и три Boolean
операции возвращают значения, которые имеют значение 0 или 1.
Выходное измерение или тензорная фигура идентичны входным данным, которые могут быть широковещательными, см. ниже.
Описания
Это общие двоичные операторы.
Они применяются по элементу.
(Обратите внимание, что оператор BrainScript *
не является элементным, но обозначает матричный продукт. Это отличается, например, от библиотеки Pythonnumpy
.)
Размеры входных данных должны быть идентичными, за исключением трансляции.
Семантика трансляции
Вещание , концепция, которая CNTK модели после библиотеки Pythonnumpy
, означает, что измерение в одном из входных данных может быть 1, где другой вход не является.
В этом случае входные данные с 1-измерением будут скопированы n
во время копирования, где n
является соответствующее измерение другого входного значения.
Если тензорные ряды не совпадают, предполагается, что тензорная форма входных данных с меньшими измерениями будет иметь значение 1, а трансляция триггера.
Например, добавление тензора [13 x 1]
[1 x 42]
в вектор даст вектор, [13 x 42]
содержащий суммы всех сочетаний.
Операции с реляционным отношением
Операторы отношения (Equal()
и т. д.) не отличаются, их градиент всегда считается 0.
Их можно использовать для флагов, например в качестве аргумента условия в If()
операции.
LogPlus()
Операция LogPlus()
вычисляет сумму значений, представленных в логарифмической форме.
Т. е. вычисляет:
LogPlus (x, y) = Log (Exp (x) + Exp (y))
где x
и y
являются логарифмами значений.
Эта операция полезна при работе с вероятностями, которые часто настолько малы, что только логарифмическое представление обеспечивает соответствующую числовую точность.
Примечание. Другим общим именем для этой операции является log-add-exp, например SciPy.
Примеры
Стандартный сигмоидный слой
В этом слое используется поэлечное двоичное значение +
:
z = Sigmoid (W * x + b)
Обратите внимание, что *
выше не является элементным, но означает матричный продукт.
Альтернативная реализация активации Softmax
Softmax()
Функцию активации можно написать с помощью трансляцииMinus
:
MySoftmax (z) = Exp (z - ReduceLogSum (z))
Здесь уменьшает вектор z
до скалярного путем ReduceLogSum()
вычисления логарифмической суммы. С помощью семантики трансляции вычитания этот скаляр вычитается из каждого входного значения.
Это реализует деление по сумме по всем значениям в функции Softmax.
По элементу Max двух входных данных
Максимальное число элементов двух входных данных можно вычислить в виде сочетания Greater()
и If()
:
MyElementwiseMax (a, b) = If (Greater (a, b), a, b)
Это также работает с вещанием. Например, линейный прямоугольник можно записать с помощью скалярной константы в качестве второго входного ввода:
MyReLU (x) = MyElementwiseMax (x, Constant(0))