Fue propuesto por Ashish Vaswani et al. en el artículo "Attention is All You Need" publicado en 2017.
Transformer supera a RNN y CNN en tareas de traducción automática. Solo necesita utilizar mecanismos de codificación, decodificación y atención para lograr buenos resultados. Su mayor ventaja es que se puede paralelizar de manera eficiente.
Transformer es un modelo basado en la estructura del códec.
En el codificador,
En el decodificador,
Entendamos estos conceptos en detalle. La referencia principal aquí es Jay Alammar, quien dio una explicación muy vívida en "Transformers ilustrados".
Por ejemplo, tenemos una tarea de traducción automática, ingresamos un idioma y, después de pasar por el convertidor, generamos otro idioma.
El codificador de Transformer está compuesto por seis codificadores.
El decodificador también se compone de seis decodificadores.
La estructura es la misma, pero el peso no es tan bueno.
Cada codificador se divide en dos subcapas:
Cada decodificador también tiene estas dos capas, pero también hay una capa de atención que ayuda al decodificador a prestar atención a las partes relevantes del frase de entrada.
Primero, las palabras de entrada se convierten en vectores utilizando un algoritmo integrado.
La entrada al codificador inferior es el vector de incrustación.
Dentro de cada codificador,
el vector de entrada pasa por la autoatención y luego por la capa de avance. .
El vector de salida de cada codificador es la entrada del codificador directamente encima de él.
El tamaño del vector es un hiperparámetro, generalmente establecido en la longitud de la oración más larga en el conjunto de entrenamiento.
Aquí empezamos a ver una propiedad clave del transformador.
En otras palabras, la palabra en cada posición tiene su propia ruta en el codificador.
En la capa autoenfocada, existen dependencias entre estas rutas.
Sin embargo, las capas de avance no tienen estas dependencias,
por lo que se pueden ejecutar varias rutas en paralelo cuando fluyen a través de la capa de avance.
La codificación posicional es un método que tiene en cuenta el orden de las palabras en la secuencia de entrada.
El codificador agrega un vector a cada incrustación de entrada que se ajusta a un patrón específico que puede determinar la posición de cada palabra en una secuencia o la distancia entre diferentes palabras.
Por ejemplo, si la dimensión de incrustación de entrada es 4, la codificación de posición real es la siguiente:
La siguiente figura muestra la codificación de posición de 20 palabras y cada fila representa la posición. codificación de una palabra, es decir, la primera fila está incrustada por la primera palabra agregada a la secuencia de entrada. Cada fila contiene 512 valores, cada valor está entre -1 y 1, representado por un color.
Puedes ver que la posición central se divide por la mitad porque el valor de la mitad izquierda es generado por la función seno y la mitad derecha es generada por la función coseno, que luego se concatenan para formar cada posición. vector de codificación.
Por supuesto, esta no es la única forma de codificar la posición, pero este método se puede extender a longitudes de secuencia invisibles, como cuando queremos traducir una oración que es más larga que cualquier otra en nuestro conjunto de entrenamiento A. la frase es demasiado larga.
Por ejemplo, queremos traducir la frase "Los animales no cruzaron la calle porque estaban demasiado cansados".
¿Qué significa "eso" en esta oración? ¿Son las calles o los animales?
Este es un problema simple para los humanos, pero no lo es para los algoritmos.
Y la autoatención le permite al algoritmo saber que se trata de un animal.
Cuando el modelo procesa cada palabra, la autoatención puede ayudarlo a observar otras posiciones en la secuencia de entrada, encontrar pistas relevantes y lograr mejores resultados de codificación. Lo que hace es integrar la "comprensión" de otras palabras relacionadas con la palabra que estamos procesando actualmente.
Por ejemplo, en la imagen de arriba, en el quinto piso, sabemos que probablemente se refiere a animales.
El primer paso es crear tres vectores para cada palabra de entrada al codificador.
Es decir, vector de consulta, vector clave y vector de valor.
Estos vectores se obtienen incrustando y multiplicando tres matrices.
Tenga en cuenta que el tamaño de estos nuevos vectores es menor que el de los vectores incrustados. Su dimensionalidad es 64, mientras que la dimensionalidad de los vectores de entrada/salida integrados y del codificador es 512. No tienen que ser pequeños, es una elección arquitectónica que mantiene los cálculos de atención de múltiples cabezas (en su mayoría) iguales.
Multiplique x1 por WQ para obtener el vector de consulta q1, y también obtenga el vector clave y el vector de valor.
Estos tres vectores juegan un papel importante en el cálculo de la atención.
El segundo paso es calcular una puntuación.
Supongamos que queremos calcular la autoatención de la primera palabra "pensamiento" en un ejemplo. Necesitamos calificar cada palabra en la oración de entrada en función de esta palabra. Esta puntuación determina cuánta atención debemos. dar a otras palabras. Cuánta atención dar.
La puntuación se calcula como,
Por ejemplo, si estamos considerando la palabra pensar, entonces multiplicamos el ki de cada posición por su q1.
El tercer y cuarto paso son procesar las puntuaciones y luego pasarlas a softmax.
Dividimos la fracción entre 8 (porque la dimensión del vector clave utilizado en este artículo es 64 y 8 es su raíz cuadrada).
Esto puede tener un gradiente más estable.
Luego se pasa a softmax, que normalizará la puntuación y sumará 1.
La puntuación softmax determina el grado de expresión bbei de cada palabra en esta posición.
Obviamente, la palabra en esta posición tendrá la puntuación softmax más alta, pero a veces es útil centrarse en otra palabra relacionada con la palabra actual.
Paso cinco, multiplica cada vector de valores por esta fracción.
El propósito es mantener sin cambios el valor de las palabras en las que queremos centrarnos y ahogar las palabras irrelevantes multiplicándolo por un número pequeño como 0,001.
En sexto lugar, estos vectores de valores se ponderan y se suman.
Este es el resultado egocéntrico de la primera palabra.
El vector resultante luego se ingresa en una red neuronal de avance, que se completa en forma de multiplicación de matrices en la implementación real.
Este artículo agrega un mecanismo de atención de múltiples cabezales para mejorar el rendimiento de la capa de atención.
Permite que el modelo se centre en diferentes ubicaciones.
Aunque en el ejemplo anterior, z1 contiene algunos códigos de otras posiciones, la palabra en la posición actual sigue desempeñando el papel principal. Cuando nos preguntamos qué significa "El animal no cruzó la calle porque estaba demasiado cansado", debemos prestar atención a otros lugares.
Este mecanismo proporciona múltiples "subespacios de representación" para la capa de atención. Presentémoslo en detalle a continuación.
1. Después de varios encabezados, obtendremos tantos grupos de matrices de peso de consulta/clave/valor como número de encabezados.
En este artículo se utilizan ocho, por lo que obtendremos ocho grupos para cada codificador/decodificador.
Estas colecciones se inicializan aleatoriamente. Después del entrenamiento, cada conjunto proyectará las incorporaciones de entrada en un subespacio de representación diferente.
2. En pocas palabras, se definen 8 conjuntos de matrices de peso y cada palabra realizará más de 8 cálculos de autoatención.
De esta forma, cada palabra obtendrá 8 sumas ponderadas diferentes z.
3. Sin embargo, solo se puede recibir una matriz durante la alimentación directa, por lo que estas ocho matrices deben comprimirse en una sola.
El método consiste en conectar primero 8 matrices Z y luego multiplicarlas por una matriz de peso adicional WO.
La siguiente imagen muestra las diferentes posiciones de la cabeza de atención en las oraciones de ejemplo. Un enfoque está en los "animales" y el otro en la "ropa". En otras palabras, es una manifestación de "animal" y "ponible".
Por supuesto, si eliges 8 capas y pones toda la atención en la imagen, será un poco difícil de explicar.
Hay un detalle aquí,
Es decir, hay conexiones residuales en las capas de atención de autoatención, ffnn y codificador-decodificador en cada codificador y decodificador, Y también hay un paso de normalización de capas.
Veamos la parte del decodificador.
1. La secuencia de entrada pasa a través de la parte del codificador y luego la salida del codificador superior se convierte en un conjunto de vectores de atención K y v.
Estos vectores se utilizan en la capa de atención del codificador-decodificador de cada decodificador, lo que ayuda al decodificador a centrarse en la posición adecuada en la secuencia de entrada.
El proceso anterior se repite hasta que se completa la salida del decodificador y la salida de cada paso de tiempo se retroalimenta al decodificador subyacente en el siguiente paso de tiempo. De manera similar, se agregan códigos de posición a la entrada de estos decodificadores para indicar la posición de cada palabra.
2. La capa de autoatención en el decodificador es ligeramente diferente a la del codificador.
En el decodificador, antes del paso softmax de autoatención, las posiciones futuras se establecen en -inf para enmascarar estas posiciones de modo que la capa de autoatención solo pueda centrarse en la primera posición en la secuencia de salida.
La capa de atención del codificador-decodificador funciona de manera similar a la autoatención de múltiples encabezados, excepto que utiliza las siguientes capas para crear la matriz de consulta y obtener la matriz de clave y valor de la salida de la pila del codificador.
3. La salida final del decodificador es un vector. Cómo convertirlo en una palabra depende de la capa lineal y la capa softmax detrás de ella.
La capa lineal es una red neuronal muy simple y totalmente conectada que asigna el vector de salida del decodificador a un vector más largo.
Por ejemplo, si tenemos 65.438 00.000 palabras sin repetición, entonces el vector de salida final tendrá 10.000 dimensiones.
El valor de cada posición representa la puntuación de la palabra correspondiente.
La capa softmax convierte esta puntuación en una probabilidad.
Elegimos la palabra correspondiente con mayor probabilidad, que es la salida del paso de tiempo actual.
Recursos de aprendizaje:
/2017/08/transformer-novel-neural-network html
.