Transformatör modelindeki konumsal kodlama nedir?


26

Makaleyi okumaya ve anlamaya çalışıyorum. Dikkat etmeniz gereken tek şey ve içinde bir resim var:

resim açıklamasını buraya girin

Konumsal kodlamanın ne olduğunu bilmiyorum . Bazı youtube videolarını dinleyerek, bir kelimenin hem anlamını hem de konumunu içeren bir gömme olduğunu ve bununla ilgili bir şey olduğunu öğrendim.sin(x) veya cos(x)

ama tam olarak ne olduğunu ve tam olarak nasıl yaptığını anlayamadım. yardım için buradayım. şimdiden teşekkürler.

Yanıtlar:


33

Örneğin, kelime için w pozisyonda pos[0,L1] giriş dizisinde , 4 boyutlu gömme ve olduğunda, işlem w=(w0,,wL1)ewdmodel=4

ew=ew+[sin(pos100000),cos(pos100000),sin(pos100002/4),cos(pos100002/4)]=ew+[sin(pos),cos(pos),sin(pos100),cos(pos100)]

burada konum kodlaması için formül aşağıdaki gibidir ile (böylece , orijinal kağıt).

PE(pos,2i)=sin(pos100002i/dmodel),
PE(pos,2i+1)=cos(pos100002i/dmodel).
dmodel=512i[0,255]

Bu teknik, önerilen mimaride kelime sırası (1. kelime, 2. kelime, ..) diye bir kavram olmadığı için kullanılır . Tüm giriş sırası sözcükleri ağa özel bir düzen veya konum olmaksızın (yaygın RNN veya ConvNet mimarilerinin aksine) beslenir, bu nedenle modelin kelimelerin nasıl sıralandığı hakkında hiçbir fikri yoktur. Sonuç olarak, modelin sözcüklerin sırasını dahil etmesine yardımcı olmak için her bir kelime gömme konumuna konuma bağlı bir sinyal eklenir. Deneylere dayanarak, bu ekleme sadece gömme bilgisinin yok edilmesini önlemekle kalmaz, aynı zamanda hayati pozisyon bilgilerini de ekler. RNNs bir durumda, RNN ardışık kelime besleme, örneğin, inci kelime adımında beslenir modeli kelimelerin sırasını dahil yardımcı olur.nn

Jay Alammar'ın bu makalesi makaleyi mükemmel görselleştirmelerle açıklamaktadır. Ne yazık ki, pozisyon kodlama için örneğin şu anda yanlış (kullandığı boyutları ve gömme ilk yarısı için kullanmak yerine, ikinci yarısı için da endeksleri ve için tek indeksleri için).sincossincos


1
Ayrıca, tamamen yerleştirmeye odaklanan bu mükemmel makaleye de sahipsiniz: kazemnejad.com/blog/…
Yohan Obadia

6

Konumsal kodlama, bir kelimenin değerlerinin ve bir cümledeki konumunun yeniden temsilidir (başlangıçta ya da ortadaki ile aynı değildir).

Ancak, cümlelerin herhangi bir uzunlukta olabileceğini hesaba katmalısınız, bu yüzden 'X' kelimesinin cümledeki üçüncü olduğunu söylemek farklı uzunluk cümleleri varsa mantıklı değil: 3 kelimelik bir cümle içinde 3. tamamen 20 kelimelik bir cümlede 3'ten farklı.

Konumsal bir kodlayıcının yaptığı şey , bir cümledeki bir kelimenin konumu hakkında bilgi döndürmek için ve fonksiyonlarının döngüsel doğasından yardım .sin(x)cos(x)


2
teşekkür ederim. bu konumsal kodlayıcının bunu nasıl yaptığını açıklayabilir misiniz?sin ve cos?
Peyman

2

Diğer cevaplara eklemek için, OpenAI'nin ref uygulaması doğal günlük alanında hesaplar (hassasiyeti arttırmak için, bence. Günlük 2'de günlük kullanmış olup olmadıklarından emin değilim). Kodlama ile gelmediler. İşte for for for döngüsü olarak yeniden yazılmış PE arama tablosu oluşturma:

int d_model = 512, max_len = 5000;
double pe[max_len][d_model];

for (int i = 0; i < max_len; i++) {
   for (int k = 0; k < d_model; k = k + 2) {
      double div_term = exp(k * -log(10000.0) / d_model);
      pe[i][k] = sin(i * div_term);
      pe[i][k + 1] = cos(i * div_term);
   }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.