Par exemple, pour le mot à la position dans la séquence d'entrée , avec une intégration en 4 dimensions , et , l'opération serait
wp o s ∈ [ 0 , L - 1 ]w = ( w0, ⋯ , wL - 1)ewrém o de l= 4e′w= ew+ [ s i n ( p o s100000) ,cos ( p o s100000) ,sin ( p o s100002 / 4) ,cos ( p o s100002 / 4) ]= ew+ [ s i n ( p o s ) , c o s ( p o s ) , s i n ( p o s100) ,cos ( p o s100) ]
où la formule pour l'encodage positionnel est la suivante
avec (donc ) dans le papier d'origine.PE ( p o s , 2 i ) = s i n ( p o s100002 i / dm o de l) ,
PE ( p o s , 2 i + 1 ) = c o s ( p o s100002 i / dm o de l) .
dmodel=512i∈[0,255]
Cette technique est utilisée car il n'y a pas de notion d'ordre des mots (1er mot, 2ème mot, ..) dans l'architecture proposée. Tous les mots de la séquence d'entrée sont introduits dans le réseau sans ordre ni position spéciaux (contrairement aux architectures RNN ou ConvNet courantes), par conséquent, le modèle n'a aucune idée de la façon dont les mots sont ordonnés. Par conséquent, un signal dépendant de la position est ajouté à chaque intégration de mots pour aider le modèle à incorporer l'ordre des mots. Basé sur des expériences, cet ajout évite non seulement de détruire les informations d'intégration, mais ajoute également les informations vitales de position. Dans le cas de RNNs, nous alimentons les mots de manière séquentielle à RNN, ie mot est -ème fournie à l' étape , ce qui aide le modèle incorporer l'ordre des mots.nn
Cet article de Jay Alammar explique le papier avec d'excellentes visualisations. Malheureusement, son exemple pour le codage positionnel est incorrect pour le moment (il utilise pour la première moitié des dimensions d'intégration et pour la seconde moitié, au lieu d'utiliser pour les indices pairs et pour les indices impairs).sincossincos