¿Cuál es la codificación posicional en el modelo de transformador?


23

Soy nuevo en ML y esta es mi primera pregunta aquí, lo siento si mi pregunta es tonta.

Estoy tratando de leer y entender el documento. La atención es todo lo que necesitas y en él hay una imagen:

ingrese la descripción de la imagen aquí

No sé qué es la codificación posicional . al escuchar algunos videos de youtube descubrí que es una incrustación que tiene tanto el significado como la posición de una palabra y tiene algo que ver con sin(x) o cos(x)

pero no pude entender qué es exactamente y cómo está haciendo eso exactamente. Así que estoy aquí por un poco de ayuda. gracias por adelantado.

Respuestas:


30

wpos[0,L1]w=(w0,,wL1)ewdmodel=4

ew=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


1
También tiene este excelente artículo centrado exclusivamente en la inserción posicional: kazemnejad.com/blog/…
Yohan Obadia

6

La codificación posicional es una nueva representación de los valores de una palabra y su posición en una oración (dado que no es lo mismo estar al principio que al final o en el medio).

Pero hay que tener en cuenta que las oraciones pueden tener cualquier longitud, por lo que decir '' X '' es la tercera palabra de la oración 'no tiene sentido si hay oraciones de diferente longitud: la tercera en una oración de 3 palabras es completamente diferente al 3er en una oración de 20 palabras.

Lo que hace un codificador posicional es obtener ayuda de la naturaleza cíclica de las funciones y para devolver información de la posición de una palabra en una oración.sin(x)cos(x)


2
gracias. ¿Podría explicar cómo este codificador posicional hace esto con y ? c o ssincos
Peyman

1

Para agregar a otras respuestas, la implementación de referencia de OpenAI lo calcula en un espacio de registro natural (para mejorar la precisión, creo. No estoy seguro si podrían haber usado el inicio de sesión en la base 2). No se les ocurrió la codificación. Aquí está la generación de la tabla de búsqueda PE reescrita en C como un ciclo for-for:

int d_model = 512, max_len = 5000;
double pe[max_len][d_model];

for (int i = 0; i < max_len; i++) {
   for (int k = 0; k < d_model; k = k + 2) {
      double div_term = exp(k * -log(10000.0) / d_model);
      pe[i][k] = sin(i * div_term);
      pe[i][k + 1] = cos(i * div_term);
   }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.