다음을 통해 공유


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차원을 제외한 모든 차원이 선행 차원 AB과 일치해야 하며 평면화로 해석되는 일반화된 행렬 제품을 표시합니다. 예를 들어 행렬 제품이 정의되고 차원[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].