Times 및 TransposeTimes
CNTK 행렬 제품입니다.
A * B
Times (A, B, outputRank=1)
TransposeTimes (A, B, outputRank=1)
매개 변수
A
행렬 제품의 첫 번째 인수입니다. 시간 시퀀스일 수 있습니다.B
행렬 제품의 두 번째 인수입니다. 시간 시퀀스일 수 있습니다.outputRank
(기본값: 1): 출력 차원을 구성하는 축의A
수입니다. 아래의 '텐서에 대한 확장 해석'을 참조하세요.
반환 값
결과 행렬 제품(텐서). 입력이 시간 시퀀스인 경우 시간 시퀀스입니다.
Description
함수는 Times()
텐서에 대한 확장을 사용하여 행렬 제품을 구현합니다. *
연산자는 약식입니다. TransposeTimes()
첫 번째 인수를 변환합니다.
B
행렬(rank-2 tensor) 또는 열 벡터(rank-1 tensor) A * B
인 경우 A
예상대로 공통 행렬 제품을 계산합니다.
TransposeTimes (A, B)
는 전치를 나타내는 행렬 제품을 A^T * B
^T
계산합니다. TransposeTimes (A, B)
에는 동일한 결과가 Transpose (A) * B
있지만 변환된 버전의 A
임시 복사본을 방지하므로 더 효율적입니다.
시간 시퀀스
B
둘 다 A
단일 행렬 또는 시간 시퀀스일 수 있습니다. 되풀이 네트워크의 일반적인 경우는 A
입력 시퀀스인 반면 B
가중치 매트릭스입니다.
참고: 시간 시퀀스인 경우 A
각 단계마다 별도의 GEMM 호출이 시작되므로 작업이 효율적이지 않습니다. 예외는 TransposeTimes()
두 입력이 모두 특별한 최적화가 있는 열 벡터인 경우입니다.
스파스 지원
Times()
및 TransposeTimes()
스파스 매트릭스를 지원합니다. 둘 다 스파스가 아니면 결과는 조밀한 행렬입니다. 가장 중요한 두 가지 사용 사례는 다음과 같습니다.
B
입력 단어의 원 핫 표현(또는 더 일반적으로 원 핫 벡터의 전체 시퀀스)입니다. 그런 다음 단어A * B
포함을 나타냅니다. 여기서 열은 단어의A
포함 벡터입니다. 다음은 CNTK 포함을 실현하는 권장 방법입니다.``` Embedding (x, dim) = Parameter (dim, 0/*inferred*/) * x e = Embedding (input, 300) ```
A
레이블 단어의 원 핫 표현입니다. 인기 있는 크로스 엔트로피 기준과 오류 카운터는 각각 다음과 같이 작성TransposeTimes()
할 수 있습니다. 최상위 Softmax() 분류자의 입력 위치 및L
스파스일 수 있는 레이블 시퀀스는 다음과z
같습니다.``` CrossEntropyWithSoftmax (L, z) = ReduceLogSum (z) - TransposeTimes (L, z) ErrorPrediction (L, z) = BS.Constants.One - TransposeTimes (L, Hardmax (z)) ```
스칼라와 곱하기
행렬 제품을 사용하여 행렬을 스칼라와 곱할 수 없습니다 . 차원 불일치와 관련된 오류가 발생합니다. 스칼라를 곱하려면 요소별 제품을 .*
대신 사용합니다. 예를 들어 두 행렬의 가중 평균은 다음과 같이 작성될 수 있습니다.
z = Constant (alpha) .* x + Constant (1-alpha) .* y
대각선 행렬 곱하기
입력 행렬이 대각선이고 벡터로 저장되는 경우 요소 단위 곱하기(ElementTimes()
또는 .*
연산자)를 사용하지 Times()
마세요.
예를 들면 다음과 같습니다.
dMat = ParameterTensor {(100:1)}
z = dMat .* v
이렇게 하면 브로드캐스트 의미 체계를 활용하여 모든 요소를 v
해당 행 dMat
과 곱합니다.
순위 > 2의 텐서에 대한 행렬 제품의 확장 해석
상위 순위 *
의 텐서 및/또는 B
텐서인 경우 A
연산은 1차원을 제외한 모든 차원이 선행 차원 A
B
과 일치해야 하며 평면화로 해석되는 일반화된 행렬 제품을 표시합니다. 예를 들어 행렬 제품이 정의되고 차원[I x L]
의 결과를 생성하는 행렬로 [I x J x K] * [J x K x L]
[I x (J * K)] * [(J * K) x L]
두 텐서의 [I x J x K]
모양을 변경하여 텐서와 텐서의 곱이 다시 해석 [J x K x L]
됩니다. 이는 가중치 행렬의 행을 활성화 벡터가 일치하는 패턴으로 간주하는 경우에 의미가 있습니다. 위의 일반화를 사용하면 이러한 패턴 자체가 이미지 또는 실행 중인 음성 기능과 같은 다차원일 수 있습니다.
에 일치하지 않는 차원이 둘 이상 있을 수도 있습니다 B
. 예를 들어 [I x J] * [J x K x L]
차원의 결과를 생성하는 이 행렬 제품 [I x J] * [J x (K * L)]
으로 해석됩니다.[I x K x L]
예를 들어 차원J
의 음성 기능 롤링 창 내의 L
모든 벡터에 행렬을 적용할 수 있습니다.
제품의 결과에 여러 차원(예: 레이어의 활성화를 2D 필드로 정렬)이 있어야 하는 경우 연산자를 사용하는 *
대신 '패턴'이 정렬된 차원의 수와 출력에 유지되는 차원 수를 지정 Times (A, B, outputRank=m)
m
해야 합니다. 예를 들어 행렬 Times (tensor of dim [I x J x K], tensor of dim [K x L], outputRank=2)
제품 [(I * J) x K] * [K x L]
으로 해석되고 차원의 결과를 생성합니다 [I x J x L]
.