Soru:
Dikkat mekanizmalarındaki anahtarlar, sorgular ve değerler tam olarak nedir?
Seankala
2019-08-13 14:00:55 UTC
view on stackexchange narkive permalink

Dikkat mekanizmalarında sıklıkla bahsedilen anahtarlar, sorgular ve değerler nasıl anlaşılmalıdır?

İnternette arama yapmayı denedim, ancak bulduğum tüm kaynaklar, sanki okuyucu onların ne olduğunu zaten biliyormuş gibi onlardan bahsediyor.

Bahdanau tarafından yazılan makaleye ( Hizalamayı ve Çevirmeyi Ortak Öğrenerek Nöral Makine Çevirisi ) bakılırsa, değerlerin açıklama vektörü $ h $ ancak "sorgu" ve "anahtar" ile ne kastedildiği net değil.

Bahsettiğim makale, dikkatin

$$ c_i = \ sum ^ {T_x} _ {j = 1} \ alpha_ {ij} h_j $$

ile

$$ \ başla {hizala} \ alpha_ {ij} & = \ frac {e ^ {e_ {ij}}} {\ sum ^ {T_x} _ {k = 1} e ^ {ik}} \\\\ e_ {ij} & = a (s_ {i - 1}, h_j) \ end {hizala} $$

İnsanlar bu denklemlerden anahtarı, sorguyu ve değeri nereden alıyor?

Teşekkürler.

Bahsettiğiniz [kağıt buysa] (https://arxiv.org/abs/1409.0473), dikkat edilmesi gereken herhangi bir "anahtar", "sorgu" veya "değer" den bahsetmiyorsa veAlıntı yaptığınız denklemlerdeki sembolleri açıklayın, böylece sorunuzun tam olarak ne olduğunu anlamıyorum.
Bu makaleyi okuyana kadar Q, K, V dikkatimi karıştırmıştı: https://medium.com/@b.terryjack/deep-learning-the-transformer-9ae5e9c5a190.Tarihten son uygulamaya kadar tüm soruları kapsar.Umarım sizin için de yararlı olur.
Ben de araştırıyorum.Anladığım kadarıyla, Sorgu bazı yerlerde "s" olarak da gösteriliyor.Dolayısıyla, kod çözücünün önceki yinelemesinden çıktı.Ve bazı yerlerde "h" olarak da gösterilen anahtar ve değer, kodlayıcıdan kelime vektörüdür.Referans için https://www.youtube.com/watch?v=OyFJWRnt_AY ve https://www.youtube.com/watch?v=yInilk6x-OY&list=PLyqSpQzTE6M9gCgajvQbc68Hk_JKGBAYT&index=115 kontrol edebilirsiniz. Yine de anlamaya çalışıyorumDaha.Lütfen daha fazla araştırma yapın ve bir şey bulursanız haber verin.
Benim için en iyi açıklama: https://youtu.be/XXtpJxZBa2c?t=4337
@QtRoS Orada anahtarların ne olduğu, sadece hangi değerlerin ve sorguların açıklandığını sanmıyorum.
@QtRoS Bu soruyu yayınladığım sırada o videoyu da izledim.Açıkçası bana pek yardımcı olmadı.Terminolojinin kendisini kullanma motivasyonunun arkasında sezgisel bir tanım bekliyordum, ancak bu bir "verilen" olarak değerlendirildi.
@Seankala bir video daha var, ne yazık ki yalnızca Rusça, ancak şimdiye kadar gördüğüm en iyi açıklama.İçindeki resimler sizin için yararlı olabilir.Denemek istersen bana haber ver.
Beş yanıtlar:
dontloo
2019-08-29 13:49:36 UTC
view on stackexchange narkive permalink

Diğer sorunuzdan geldim Öz ilgi, özgün çalışma? Dikkatin anahtarı / değeri / sorgusu Tüm İhtiyacınız Olan Dikkat kağıdından alınmıştır.

Sorgular, anahtarlar ve değerler nasıl anlaşılmalıdır

Anahtar / değer / sorgu kavramları, erişim sistemlerinden gelir. Örneğin, Youtube'da video aramak için bir sorgu yazdığınızda, arama motoru, query'nizi, veritabanındaki aday videolarla ilişkili bir keys (video başlığı, açıklama vb.) Kümesiyle eşler ve ardından size en iyi eşleşmeyi sunar videolar (values).

Dikkat operasyonu aynı zamanda bir geri alma süreci olarak da düşünülebilir, dolayısıyla anahtar / değer / sorgu kavramları burada da geçerlidir. (BTW yukarıdaki örnek, pratikte arama motorlarında sadece gösterim için bir oyuncak sistemidir. ve öneri sistemleri çok daha karmaşıktır.)

Başvurduğunuz makalede belirtildiği gibi ( Neural Machine Translation by Jointly Learning to Align and Translate), tanım gereği dikkat, değerlerin ağırlıklı ortalamasıdır,

$$ c = \ sum_ {j} \ alpha_jh_j $$ burada $ \ sum \ alpha_j = 1 $ .

$ \ alpha $ değişkenini tek sıcak vektör olarak kısıtlarsak, bu işlem bir dizi öğeden almakla aynı olur $ h $ $ \ alpha $ diziniyle. Kısıtlama kaldırıldığında, dikkat operasyonu, $ \ alpha $ olasılık vektörüne göre "orantılı alım" olarak düşünülebilir.

Bu bağlamdaki $ h $ değerinin value olduğu açık olmalıdır. İki makale arasındaki fark, $ \ alpha $ olasılık vektörünün nasıl hesaplandığına bağlıdır. İlk makale (Bahdanau ve diğerleri 2015), puanı bir sinir ağı $$ e_ {ij} = a (s_i, h_j), \ qquad a_ {i, j} = aracılığıyla hesaplıyor \ frac {\ exp (e_ {ij})} {\ sum_k \ exp (e_ {ik})} $$ burada $ h_j $ kodlayıcı sırasından ve $ s_i $ kod çözücü dizisinden. Bu yaklaşımın bir problemi, kodlayıcı sırasının $ m $ uzunluğunda ve kod çözme sırasının $ n uzunluğunda olduğunu varsayalım. $ , tüm dikkat puanlarını kontrol etmek için $ m * n $ kez ağ üzerinden gitmeliyiz $ e_ {ij} $ .

Daha verimli bir model, önce $ s $ ve $ h $ 'ı ortak bir boşluk, ardından dikkat puanı olarak bir benzerlik ölçüsü (ör. nokta çarpım) seçin. $$ e_ {ij} = f (s_i) g (h_j) ^ T $$ bu yüzden sadece $ g (h_j) $ $ m $ kez ve $ f (s_i) $ $ n $ kez projeksiyon vektörlerini ve $ almak için e_ {ij} $ matris çarpımı ile verimli bir şekilde hesaplanabilir.

Bu, esasen ikinci makale (Vaswani ve diğerleri 2017) tarafından önerilen yaklaşımdır; burada iki projeksiyon vektörü, geri alma sistemlerindeki kavramlarla iyi uyumlu olan query (kod çözücü için) ve key (kodlayıcı için) olarak adlandırılır. .

Sorgular, anahtarlar ve değerler nasıl elde edilir

Önerilen çok başlı dikkat, boyut gereksinimleri karşılandığı sürece sorguların, anahtarların ve değerlerin nasıl elde edildiği konusunda tek başına pek bir şey söylemiyor.Uygulama senaryosuna bağlı olarak farklı kaynaklardan gelebilirler.

enter image description here

GPT, $ Q, K, V $ gibi denetimsiz dil modeli eğitimi için genellikle aynı kaynaktan gelir, dolayısıyla bu tür bir işlemöz ilgi olarak da adlandırılır.

İkinci makaledeki makine çevirisi görevi için, önce öz dikkati kaynak ve hedef dizilerine ayrı ayrı uygular, ardından bunun üzerine başka bir dikkat uygular, burada $ Q $ span> hedef diziden ve $ K, V $ kaynak diziden.

Öneri sistemleri için, $ Q $ hedef öğelerden olabilir, $ K, V $ kullanıcı profilinden ve geçmişinden olabilir.

Merhaba.Cevap için teşekkürler.Ne yazık ki sorum, bu değerlerin kendilerinin nasıl elde edildiğidir (yani Q, K ve V).Diğer blog yazılarını okudum (örneğin, The Illustrated Transformer) ve makalenin içeriğinden değerlerin nasıl elde edildiği hala bana açık değil.Örneğin, Q, X girdisinin ve diğer bazı ağırlıkların matris çarpımı mıdır?Öyleyse, bu ağırlıklar nasıl elde edilir?
Ayrıca, bu sorunun kendisi aslında Q, K ve V'nin hesaplanmasıyla ilgili değildir. Daha ziyade, yazarların orijinal dikkat makalesine kıyasla neden farklı terminoloji kullandıkları konusunda kafam karıştı.
@Seankala merhaba Sorularınız için bazı güncellemeler yaptım, umarım yardımcı olur
Bu açıklama için çok teşekkürler!Hala e_ij = a (s_i, h_j) gösterimini yorumlamakta zorlanıyorum.Dolayısıyla sinir ağı, sırasıyla kod çözücü ve kodlayıcı dizilerinden gelen giriş dizileri olan h_j ve s_i'nin bir işlevidir.Peki sinir ağı neye benziyor?Örneğin.Hedef değişkenler nelerdir ve girdinin formatı nedir?
@Emil merhaba, bu bütünün bir alt ağıdır, eğitimde belirli bir hedefi yoktur, genellikle verilen göreve göre tüm ağ ile ortaklaşa eğitilir, bu durumda makine çevirisi, A.1.2'de daha fazla ayrıntıKağıdın HIZALAMA MODELİ bölümü.
Çok kullanışlı - $ e_ {ij} = a (s_i, h_j) $ içindeki $ a $ nedir?
@Josh, https://arxiv.org/pdf/1409.0473.pdf makalesine göre ileri beslemeli bir sinir ağıdır.
Emil
2020-01-17 21:22:05 UTC
view on stackexchange narkive permalink

15: 46'dan itibaren Tek ihtiyacınız olan dikkat - ustalık sınıfına bakın Lukasz Kaiser q, K ve V 'nin ne olduğunu açıklıyor.

Yani temelde:

  • q = bir kelimeyi temsil eden vektör
  • K ve V = hafızanız, dolayısıyla daha önce oluşturulmuş tüm kelimeler. K ve V 'nin aynı olabileceğini (ancak böyle olması gerekmediğini) unutmayın.

Dolayısıyla, dikkatle yaptığınız şey, mevcut sorgunuzu (çoğu durumda kelime) alıp, benzer anahtarlar için hafızanıza bakmanızdır.Alakalı kelimelerin dağılımını bulmak için softmax işlevi kullanılır.

Sean Kernitsman
2020-05-16 01:00:20 UTC
view on stackexchange narkive permalink

Tensorflow ve Keras, Attention ve AdditiveAttention katmanlarına ilişkin belgelerini yeni genişletti. Dokümanlardan gizli bir bakış:

Sorgunun, değerin ve anahtarın anlamı uygulamaya bağlıdır. Metin benzerliği durumunda, örneğin sorgu, birinci metin parçasının sıralı yerleştirmeleridir ve değer, ikinci metin parçasının sıralı yerleştirmeleridir. anahtar genellikle değer ile aynı tensördür.

Ancak kendi açıklamam için, farklı dikkat katmanları bir $ f: \ Bbb {R} ^ {T \ times D} \ mapsto \ işlevini eşleyerek aynı görevi başarmaya çalışıyor Bbb {R} ^ {T \ times D} $ burada T gizli sıra uzunluğu ve D, özellik vektör boyutudur. En yaygın uygulama olan küresel öz ilgi durumunda, önce $ B \ times T \ times D $ şeklinde sekans verilerine ihtiyacınız vardır, burada $ B $ , toplu iş boyutudur. Her ileri yayılma (özellikle return_state ve return_sequences = True TF için Bi-LSTM, GRU veya LSTM katmanı gibi bir kodlayıcıdan sonra), seçilen gizli durumu (Sorgu) en çok benzer diğer gizli durumlar (Anahtarlar). Her gizli durum ve softmax sonuçları için tekrarladıktan sonra, her gizli durum için ne kadar dikkat vermeniz gerektiğini gösteren vektörü elde etmek için tekrar anahtarlarla (bunlar aynı zamanda değerler) çarpın. Umarım bu, çözmem günlerimi aldığı için herkese yardımcı olur.

The flow of any attention layer

Sam Tseng
2020-04-28 23:05:49 UTC
view on stackexchange narkive permalink

Bir süredir dikkat mekanizmalarındaki anahtarlar, sorgular ve değerler beni de şaşırttı. Web'de arama yaptıktan ve ilgili bilgileri özümsedikten sonra, anahtarların, sorguların ve değerlerin nasıl çalıştığı ve neden işe yarayacağı hakkında net bir resme sahibim!

Nasıl çalıştıklarını ve ardından neden çalıştıklarını görelim.

Bir seq2seq modelinde, girdi dizisini bir bağlam vektörüne kodluyoruz ve ardından bu bağlam vektörünü kod çözücüye besleyerek beklenen iyi çıktı elde ediyoruz.

Ancak, giriş dizisi uzunsa, yalnızca bir bağlam vektörüne dayanmak daha az etkili hale gelir. Daha iyi kod çözme (dikkat mekanizması) için giriş sırasındaki (kodlayıcı) gizli durumlardan gelen tüm bilgilere ihtiyacımız var.

Gizli giriş durumlarını kullanmanın bir yolu aşağıda gösterilmiştir: Image source: https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3 Resim kaynağı: https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3

Başka bir deyişle, bu dikkat mekanizmasında bağlam vektörü, değerlerin ağırlıklı toplamı olarak hesaplanır; burada her bir değere atanan ağırlık, sorgunun karşılık gelen anahtarla uyumluluk işlevi tarafından hesaplanır (bu biraz [Tek İhtiyacınız Olan Dikkat] https://arxiv.org/pdf/1706.03762.pdf) sayfasından değiştirilmiş cümle.

Burada, sorgu kod çözücü gizli durumundandır, anahtar ve değer gizli kodlayıcı durumundandır (anahtar ve değer bu şekilde aynıdır). Puan, sorgu ile anahtar arasındaki uyumluluktur ve sorgu ile anahtar arasında bir iç çarpım olabilir (veya başka bir uyumluluk biçimi). Puanlar daha sonra softmax fonksiyonundan geçer ve toplamı 1'e eşit olan bir dizi ağırlık verir. Her ağırlık, tüm girdi gizli durumlarını kullanan bağlam vektörünü vermek için karşılık gelen değerlerini çarpar.

Son girdinin ağırlığını manuel olarak 1'e ve tüm önceliklerini 0'a ayarlarsak, dikkat mekanizmasını orijinal seq2seq bağlam vektör mekanizmasına indirgediğimize dikkat edin. Yani, önceki giriş kodlayıcı durumlarına hiç dikkat edilmiyor.

Şimdi, aşağıdaki şekilde gösterildiği gibi öz-ilgi mekanizmasını ele alalım:

enter image description here Resim kaynağı: https://towardsdatascience.com/illustrated-self-attention-2d627e33b20a

Yukarıdaki şekilden farkı, sorguların, anahtarların ve değerlerin karşılık gelen giriş durumu vektörlerinin dönüşümleri olmasıdır. Diğerleri aynı kalır.

Orijinal kodlayıcı durum vektörlerini sorgular, anahtarlar ve değerler olarak kullanmaya devam edebileceğimizi unutmayın. Öyleyse neden dönüşüme ihtiyacımız var? Dönüşüm basitçe şöyle bir matris çarpımıdır:

Sorgu = I x W (Q)

Anahtar = I x W (K)

Değer = I x W (V)

Burada I, giriş (kodlayıcı) durum vektörü ve W (Q), W (K) ve W (V), I vektörünü Sorgu, Anahtar, Değer vektörlerine dönüştürmek için karşılık gelen matrislerdir.

Bu matris çarpımının (vektör dönüşümü) faydaları nelerdir?

Aşağıdaki şekilde Tekil Değer Ayrıştırmasının (SVD) etkisini hatırlayın:

Application of SVD

Resim kaynağı: https://youtu.be/K38wVcdNuFc?t=10

Bir giriş vektörünü bir V matrisiyle (SVD'den) çarparak, iki vektör arasındaki uyumluluğu hesaplamak için daha iyi bir temsil elde ederiz, eğer bu vektörler konu uzayında şekildeki örnekte gösterildiği gibi benzerse.

Ve bu dönüşüm matrisleri bir sinir ağında öğrenilebilir!

Kısaca, giriş vektörünü bir matrisle çarparak şunu elde ederiz:

1) giriş vektörünün daha iyi (gizli) temsili;

2) girdi vektörünün istenen boyuta sahip bir boşluğa dönüştürülmesi, örneğin boyut 5'ten 2'ye veya n'den m'ye, vb. (pratik olarak kullanışlıdır);

matrisin öğrenilebilir olduğu (manuel ayarlama olmadan).

Umarım bu, derin sinir ağlarının (kendi kendine) dikkat mekanizmasındaki sorguları, anahtarları ve değerleri anlamanıza yardımcı olur.

Matrisi eğitmek için Python kodu şuna benzer: ' x_Train = np.array ([ [1, 1, 1, 0, 0], [3, 3, 3, 0, 0], ... [0, 1, 0, 2, 2]]) y_Train = np.array ([[1], [1], ..., [-1]]) x_Test = np.array ([ [5, 0, 0, 0, 0], [0, 4, 5, 0, 0]]) y_Test = np.array ([[1], [1]]) model = Sıralı () model.add (Yoğun (birimler = 2, input_dim = 5, aktivasyon = 'tanh')) model.add (Yoğun (birimler = 1, etkinleştirme = 'tanh')) model.compile (kayıp = 'mean_squared_error', optimize edici = 'sgd', metrics = ['mse']) model.fit (x = x_Train, y = y_Train, epochs = 100) tahminler = model.predict (x_Test) `
Tim
2019-09-02 15:03:10 UTC
view on stackexchange narkive permalink

İnsanlar bunlardan anahtarı, sorguyu ve değeri nereden alıyor? denklemler?

Bahsettiğiniz kağıtta "anahtar", "sorgu" veya "değer" gibi bir terminoloji kullanılmadığından, ne demek istediğiniz açık değildir. buraya. Sinir ağları için "dikkat" in tek bir tanımı yoktur, bu yüzden benim tahminime göre farklı makalelerden iki tanımı karıştırdınız.

Makalede, dikkat modülünün ağırlıkları $ \ alpha $ ve ağırlıklandırılması gereken değerler $ h $ , burada alıntı yaptığınız denklemlerde ve aşağıda verilen kağıttaki şekilde açıklandığı gibi ağırlıklar tekrarlayan sinir ağı çıktılarından elde edilir.

![enter image description here

Benzer bir şey, Vaswani ve diğerleri tarafından yazılan Tek ihtiyacınız olan şey makalesinde "anahtarlar", "sorgular" ve "anahtarlar", "sorgular" ve "değerler" ( $ Q $ , $ K $ , $ V $ ). Vaswani ve diğerleri, dikkat hücresini farklı şekilde tanımlar:

$$ \ mathrm {Dikkat} (Q, K, V) = \ mathrm {softmax} \ Big (\ frac {QK ^ T} {\ sqrt {d_k}} \ Big) V $$

Kullandıkları şey de çok başlı dikkati, burada her $ Q $ için tek bir değer yerine $ K $ , $ V $ , bu tür birden çok değer sağlarlar.

enter image description here

Transformer modelinde $ Q $ , $ K $ , $ V $ değerleri, kodlayıcıdaki aynı girişlerden (aşağıdaki şeklin alt kısmı) veya kod çözücüdeki farklı kaynaklardan (şeklin sağ üst kısmı) gelebilir. Bu bölüm, bu modeli çeviri görevlerinde kullanmak için çok önemlidir.

enter image description here

Her iki makalede de açıklandığı gibi, dikkat katmanlarına girdi olarak gelen değerler ağın önceki katmanlarının çıktılarından hesaplanır.Her iki makale de farklı dikkat katmanı tanımları kullandıkları için bu değerleri elde etmenin farklı yollarını tanımlar.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 4.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...