Ad esempio, per la parola nella posizione nella sequenza di input , con incorporamento tridimensionale e , l'operazione sarebbe
wp o s ∈ [ 0 , L - 1 ]w = ( w0, ⋯ , wL - 1)ewdm 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+[sin(pos),cos(pos),sin(pos100),cos(pos100)]
dove la formula per la codifica posizionale è la seguente
con (quindi ) nel documento originale.PE(pos,2i)=sin(pos100002i/dmodel),
PE(pos,2i+1)=cos(pos100002i/dmodel).
dmodel=512i∈[0,255]
Questa tecnica viene utilizzata perché non esiste una nozione di ordine delle parole (1a parola, 2a parola, ..) nell'architettura proposta. Tutte le parole della sequenza di input vengono inviate alla rete senza ordine o posizione speciali (diversamente dalle architetture RNN o ConvNet comuni), quindi il modello non ha idea di come le parole vengano ordinate. Di conseguenza, un segnale dipendente dalla posizione viene aggiunto a ogni incorporamento di parole per aiutare il modello a incorporare l'ordine delle parole. Sulla base di esperimenti, questa aggiunta non solo evita di distruggere le informazioni di incorporamento, ma aggiunge anche le informazioni vitali sulla posizione. Nel caso di RNN, forniamo le parole in sequenza a RNN, ovvero -esima parola viene fornita al passaggio , che aiuta il modello a incorporare l'ordine delle parole.nn
Questo articolo di Jay Alammar spiega l'articolo con visualizzazioni eccellenti. Sfortunatamente, il suo esempio per la codifica posizionale non è corretto al momento (usa per la prima metà delle dimensioni di incorporamento e per la seconda metà, invece di usare per gli indici pari e per gli indici dispari).sincossincos