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 eksenA
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 * B
hesaplar ve burada ^T
transpozisyon gösterilir. TransposeTimes (A, B)
ile aynı sonucu Transpose (A) * B
elde 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ınA
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ılabilirTransposeTimes()
; buradaz
en üst düzey Softmax() sınıflandırıcısının girişi veL
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 B
baş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 B
sahip 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 J
olanak 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.