Na przykład dla słowa w pozycji w sekwencji wejściowej , z osadzeniem 4-wymiarowym i , operacja byłaby
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)]
gdzie formuła kodowania pozycyjnego jest następująca
z (a więc ) w oryginalnym dokumencie.PE(pos,2i)=sin(pos100002i/dmodel),
PE(pos,2i+1)=cos(pos100002i/dmodel).
dmodel=512i∈[0,255]
Ta technika jest używana, ponieważ w proponowanej architekturze nie ma pojęcia o kolejności słów (1. słowo, 2. słowo, ..). Wszystkie słowa sekwencji wejściowej są podawane do sieci bez specjalnego zamówienia lub pozycji (w przeciwieństwie do typowych architektur RNN lub ConvNet), dlatego model nie ma pojęcia, w jaki sposób słowa są uporządkowane. W związku z tym do każdego osadzania słowa dodawany jest sygnał zależny od pozycji, aby pomóc modelowi uwzględnić kolejność słów. Na podstawie eksperymentów ten dodatek nie tylko pozwala uniknąć zniszczenia informacji o osadzaniu, ale także dodaje istotne informacje o pozycji. W przypadku RNN podajemy słowa sekwencyjnie do RNN, tj. słowo podaje się w kroku , co pomaga modelowi uwzględnić kolejność słów.nn
W tym artykule Jay Alammar wyjaśnia artykuł z doskonałymi wizualizacjami. Niestety, jego przykład kodowania pozycyjnego jest w tej chwili niepoprawny (używa w pierwszej połowie osadzania wymiarów i w drugiej połowie, zamiast przypadku parzystych indeksów i przypadku indeksów nieparzystych).sincossincos