Apa pengkodean posisional dalam model transformator?

23

Saya baru mengenal ML dan ini adalah pertanyaan pertama saya di sini, jadi maaf jika pertanyaan saya konyol.

Saya mencoba membaca dan memahami makalah Perhatian yang Anda butuhkan dan di dalamnya, ada gambar:

masukkan deskripsi gambar di sini

Saya tidak tahu apa itu pengkodean posisi . dengan mendengarkan beberapa video youtube saya menemukan bahwa itu adalah embedding yang memiliki makna dan posisi kata di dalamnya dan ada hubungannya dengan atausin(x)cos(x)

tetapi saya tidak dapat memahami apa sebenarnya itu dan bagaimana tepatnya melakukannya. jadi saya di sini untuk bantuan. Terima kasih sebelumnya.

Peyman
sumber

Jawaban:

30

Misalnya, untuk kata pada posisi dalam urutan input , dengan penyematan 4 dimensi , dan , operasi akan menjadi wpos[0,L1]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)]

di mana rumus untuk pengkodean posisional adalah sebagai berikut dengan (dengan demikian ) di kertas aslinya.

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

Teknik ini digunakan karena tidak ada gagasan urutan kata (kata 1, kata 2, ..) dalam arsitektur yang diusulkan. Semua kata dari urutan input dimasukkan ke jaringan tanpa urutan atau posisi khusus (tidak seperti arsitektur RNN atau ConvNet yang umum), sehingga, model tidak tahu bagaimana kata-kata tersebut dipesan. Akibatnya, sinyal yang tergantung posisi ditambahkan ke setiap penyisipan kata untuk membantu model memasukkan urutan kata. Berdasarkan percobaan, penambahan ini tidak hanya menghindari penghancuran informasi yang disematkan tetapi juga menambahkan informasi posisi vital. Dalam kasus RNN, kami memberi makan kata-kata secara berurutan ke RNN, yaitu kata ke- diumpankan pada langkah , yang membantu model memasukkan urutan kata-kata.nn

Artikel ini oleh Jay Alammar menjelaskan makalah dengan visualisasi yang sangat baik. Sayangnya, contohnya untuk pengkodean posisi saat ini salah (menggunakan untuk paruh pertama dimensi penyertaan dan untuk babak kedua, alih-alih menggunakan untuk indeks genap dan untuk indeks ganjil).sincossincos

Orang Esma
sumber
1
Anda juga memiliki artikel yang luar biasa ini semata-mata fokus pada penempatan posisional: kazemnejad.com/blog/…
Yohan Obadia
6

Pengkodean posisional adalah representasi ulang dari nilai-nilai kata dan posisinya dalam sebuah kalimat (mengingat bahwa tidak sama dengan berada di awal yang di akhir atau di tengah).

Tetapi Anda harus mempertimbangkan bahwa kalimat bisa panjang, jadi mengatakan '"X" kata adalah yang ketiga dalam kalimat' tidak masuk akal jika ada kalimat panjang yang berbeda: 3 dalam 3-kalimat-kata sepenuhnya berbeda dengan 3 dalam 20 kata kalimat.

Apa yang dilakukan oleh pembuat posisi adalah untuk mendapatkan bantuan dari sifat siklik dari dan berfungsi mengembalikan informasi posisi kata dalam sebuah kalimat.sin(x)cos(x)

Juan Esteban de la Calle
sumber
2
Terima kasih. dapatkah Anda menguraikan bagaimana encoder posisi ini melakukan ini dengan dan ? sincos
Peyman
1

Untuk menambah jawaban lain, implementasi ref OpenAI menghitungnya dalam ruang-log alami (untuk meningkatkan ketepatan, saya pikir. Saya tidak yakin apakah mereka bisa menggunakan log in base 2). Mereka tidak datang dengan pengkodean. Berikut adalah pembuatan tabel lookup PE yang ditulis ulang dalam C sebagai for-for loop:

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);
   }
}
Eris
sumber