Misalnya, untuk kata pada posisi dalam urutan input , dengan penyematan 4 dimensi , dan , operasi akan menjadi
wpos∈[0,L−1]w=(w0,⋯,wL−1)ewdmodel=4e′w=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
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)
sumber
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:
sumber