이진 작업
요소별 이진 연산자입니다.
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
: 오른쪽 입력
일치해야 하는 차원 x
y
입니다( 브로드캐스트 규칙에 따라 아래 참조).
세 Boolean
가지 작업의 경우 두 입력은 모두 0 또는 1이어야 하며, 그렇지 않으면 함수의 동작이 지정되지 않으며 이후 버전에서 실제로 변경됩니다.
스파스 값은 현재 지원되지 않습니다.
반환 값
이러한 함수는 해당 작업의 결과를 반환합니다. 관계 연산자(Equal()
등) 및 세 Boolean
개의 연산은 0 또는 1인 값을 반환합니다.
출력 차원 또는 텐서 모양은 브로드캐스트에 따라 입력된 것과 동일합니다. 아래를 참조하세요.
설명
일반적인 이진 연산자입니다.
요소에 적용됩니다.
(BrainScript의 *
연산자는 요소가 아니라행렬 제품을 의미합니다. 예를 들어 Python 라이브러리와 numpy
다릅니다.)
브로드캐스트를 제외하고 입력의 크기는 동일해야 합니다.
브로드캐스트 의미 체계
Python numpy
라이브러리 뒤에 모델을 CNTK 개념인 브로드캐스팅은 입력 중 하나의 차원이 다른 입력이 아닌 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))
여기서는 ReduceLogSum()
로그 합계를 계산하여 벡터를 z
스칼라로 줄입니다. 빼기의 브로드캐스트 의미 체계를 통해 이 스칼라는 모든 입력 값에서 빼집니다.
이렇게 하면 Softmax 함수의 모든 값에 대한 합계로 나누기를 구현합니다.
요소별 최대 2개 입력
요소별 최대 두 입력은 다음과 같은 조합 Greater()
If()
으로 계산할 수 있습니다.
MyElementwiseMax (a, b) = If (Greater (a, b), a, b)
이는 브로드캐스트에서도 작동합니다. 예를 들어 두 번째 입력으로 스칼라 상수로 선형 정사각형을 작성할 수 있습니다.
MyReLU (x) = MyElementwiseMax (x, Constant(0))