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)]
donde la fórmula para la codificación posicional es la siguiente
con (por lo tanto, ) en el documento original.PE(pos,2i)=sin(pos100002i/dmodel),
PE(pos,2i+1)=cos(pos100002i/dmodel).
dmodel=512i∈[0,255]
Esta técnica se utiliza porque no hay una noción de orden de las palabras (primera palabra, segunda palabra, ..) en la arquitectura propuesta. Todas las palabras de secuencia de entrada se alimentan a la red sin un orden o posición especial (a diferencia de las arquitecturas comunes RNN o ConvNet), por lo tanto, el modelo no tiene idea de cómo se ordenan las palabras. En consecuencia, se agrega una señal dependiente de la posición a cada incrustación de palabras para ayudar al modelo a incorporar el orden de las palabras. Basado en experimentos, esta adición no solo evita destruir la información de incrustación sino que también agrega la información de posición vital. En el caso de RNNs, alimentamos las palabras secuencialmente a RNN, es decir, palabra-ésimo se alimenta en la etapa , que ayuda al modelo de incorporar el orden de las palabras.nn
Este artículo de Jay Alammar explica el artículo con excelentes visualizaciones. Desafortunadamente, su ejemplo para la codificación posicional es incorrecto en este momento (usa para la primera mitad de las dimensiones de incrustación y para la segunda mitad, en lugar de usar para índices pares y para índices impares).sincossincos