Aracılığıyla paylaş


Times ve TransposeTimes

CNTK matris ürünü.

A * B
Times (A, B, outputRank=1)
TransposeTimes (A, B, outputRank=1)

Parametreler

  • A matris ürününün ilk bağımsız değişkeni. Bir zaman dizisi olabilir.
  • B matris ürününün ikinci bağımsız değişkeni. Bir zaman dizisi olabilir.
  • outputRank (varsayılan: 1): çıkış boyutunu oluşturan eksen A sayısı. Aşağıdaki 'Tensorlar için genişletilmiş yorumlama' bölümüne bakın.

Dönüş Değeri

Ortaya çıkan matris ürünü (tensor). Girişlerden biri bir zaman dizisiyse bu bir zaman dizisidir.

Description

Times() işlevi, matris ürününü tensor uzantılarıyla uygular. işleci * bunun için kısa bir adımdır. TransposeTimes() ilk bağımsız değişkeni tersine çevirir.

ve B matrisler (rank-2 tensor) veya sütun vektörleri (rank-1 tensor) A * B iseA, ortak matris ürününü tahmin edebileceği gibi hesaplar.

TransposeTimes (A, B) matris ürününü A^T * Bhesaplar ve burada ^T transpozisyon gösterilir. TransposeTimes (A, B) ile aynı sonucu Transpose (A) * Belde eder, ancak dönüştürülen sürümünün geçici bir kopyasının oluşmasını önlediğinden daha verimlidir A.

Zaman dizileri

B Hem hem de A tek matrisler veya zaman dizileri olabilir. Yinelenen ağlarda A sık karşılaşılan bir durum, B ağırlık matrisi ve giriş dizisidir.

Not: Bir zaman dizisi ise A , her zaman adımı için ayrı bir GEMM çağrısı başlatacağı için işlem verimli değildir. Özel durum, her iki girişin TransposeTimes() de özel bir iyileştirmenin bulunduğu sütun vektörleri olduğu durumdur.

Seyrek destek

Times() ve TransposeTimes() seyrek matrisi destekler. Her ikisi de seyrek olmadığı sürece sonuç yoğun bir matristir. En önemli iki kullanım örneği şunlardır:

  • B bir giriş sözcüğünün (veya daha yaygın olarak, tek etkin vektörlerin tüm dizisinin) tek etkin bir gösterimi olması. Ardından, A * B sütunlarının A sözcüklerin ekleme vektörleri olduğu bir sözcük eklemeyi belirtir. CNTK'da eklemeleri gerçekleştirmenin önerilen yolu aşağıdadır:

    ```
    Embedding (x, dim) = Parameter (dim, 0/*inferred*/) * x
    e = Embedding (input, 300)
    ```
    
  • A etiket sözcüğünün tek etkin gösterimidir. Popüler çapraz entropi ölçütü ve hata sayacı sırasıyla aşağıdaki gibi yazılabilir TransposeTimes() ; burada z en üst düzey Softmax() sınıflandırıcısının girişi ve L seyrek olabilecek etiket dizisidir:

    ```
    CrossEntropyWithSoftmax (L, z) = ReduceLogSum (z) - TransposeTimes (L,          z)
    ErrorPrediction         (L, z) = BS.Constants.One - TransposeTimes (L, Hardmax (z))
    ```
    

Skaler ile çarpma

Matris ürünü bir matrisi skaler ile çarpmak için kullanılamaz. Boyutların uyumsuzluğuyla ilgili bir hata alırsınız. Skaler ile çarpmak için bunun yerine öğeye göre ürünü .* kullanın. Örneğin, iki matrisin ağırlıklı ortalaması şöyle yazılabilir:

z = Constant (alpha) .* x + Constant (1-alpha) .* y

Çapraz matrisle çarpma

Giriş matrisiniz çaprazsa ve vektör olarak depolanıyorsa, öğe açısından çarpma (ElementTimes()veya .* işleç) kullanmayınTimes(). Örneğin:

dMat = ParameterTensor {(100:1)}
z = dMat .* v

Bu, her öğesini v ilgili satırıyla çarpmak için yayın semantiğinden yararlanır dMat.

Derece > 2'nin tensorları için matris ürününün genişletilmiş yorumu

ve/veya B daha yüksek derecenin tensorlarıysaA, * işlem genelleştirilmiş matris ürününü belirtir. Burada ilk boyutu hariç tüm boyutları A değerinin Bbaştaki boyutlarıyla eşleşmesi gerekir ve düzleştirmeyle yorumlanır. Örneğin, bir [I x J x K] ve [J x K x L] tensörün bir ürünü (bundan sonra [I x J x K] * [J x K x L]olarak kısaltacağız), matris ürününün tanımlandığı ve bir boyut [I x L]sonucu verdiği iki tensörü olarak matris olarak [I x (J * K)] * [(J * K) x L]yeniden şekillendirerek yeniden yorumlanır. Bu, ağırlık matrisinin satırlarını etkinleştirme vektörlerinin eşleştirileceği desenler olarak kabul ederse mantıklıdır. Yukarıdaki genelleştirme, bu desenlerin görüntü veya konuşma özellikleri çalıştıran pencereler gibi çok boyutlu olmasını sağlar.

içinde birden fazla eşleşmeyen boyuta Bsahip olmak da mümkündür. Örneğin [I x J] * [J x K x L] , bu matris ürünü olarak yorumlanır: [I x J] * [J x (K * L)] bu da boyutların sonucunu verir [I x K x L]. Örneğin, bu boyut konuşma özelliklerinin sıralı bir penceresindeki L tüm vektörlere matris uygulanmasına Jolanak tanır.

Ürünün sonucu birden çok boyuta sahip olmalıdır (örneğin, bir katmanın etkinleştirmelerini 2B alan olarak düzenlemek gibi), işleci kullanmak * yerine, 'desenlerin' düzenlendiği ve çıktıda tutulan boyut sayısının nerede m olduğunu söylemek Times (A, B, outputRank=m) gerekir. Örneğin, Times (tensor of dim [I x J x K], tensor of dim [K x L], outputRank=2) matris ürünü [(I * J) x K] * [K x L] olarak yorumlanır ve boyutların [I x J x L]sonucunu verir.