Entendiendo a Bert
Así que repasé rápidamente el desarrollo de la PNL después de 18 años. Básicamente, utilicé el aprendizaje por transferencia más ampliamente en el campo de la PNL y, al final de 17, llevé adelante las ideas de "La atención es todo lo que necesitas". ELMO compensa las deficiencias de la expresión polisémica tradicional de word2vec. GPT reemplaza a LSTM con un extractor de funciones más potente. Bert mejora aún más GPT con un transformador bidireccional.
A juzgar por el impacto histórico y los logros que el modelo Bert ha aportado a la PNL, no hay duda de que Bert será la piedra angular del desarrollo de aplicaciones de PNL en los próximos dos o tres años, por lo que es necesario tomar una mirada más cercana a su modelo. La estructura, cómo fluyen los datos, cómo se entrenan y prueban.
Tengo que decir que el entorno de aprendizaje actual es mucho mejor que hace unos años. Este artículo se refiere principalmente a los siguientes artículos y luego agrega algo de comprensión:
Análisis de BERT Parte 1: Codificador
Transformador ilustrado
Análisis del Apéndice BERT: Decoder
Su marco general tiene la misma estructura codificador-decodificador que MNT o "Attention Transformers" en la era lstm:
Presentando primero la parte del codificador.
Para entender esta arquitectura, usemos un ejemplo simple y específico para ver cómo los datos de entrada se transforman en salida paso a paso a través del codificador.
La incrustación de palabras de Burt consta de tres incrustaciones: incrustación de token, incrustación de segmento e incrustación de posición.
Este proceso no es diferente del RNN anterior. Por ejemplo, dada una oración:
El primer paso es etiquetarlo:
Luego digitalice cada uno. label Asignar a un número entero único en el vocabulario del corpus:
El siguiente paso es obtener la incrustación de palabras de cada palabra en la secuencia, es decir, asignar el número entero a un vector unidimensional. El modelo aprende este vector durante el entrenamiento y puede considerarlo como un proceso de búsqueda. Como parámetros del modelo, los elementos de estos vectores se optimizan mediante retropropagación como otros pesos.
Este artículo utiliza tokenización de fragmentos para convertir palabras en inglés en vectores de 768() dimensiones. El proceso de conversión es similar a este:
Junte los vectores de cada palabra para obtener una matriz. Z() de la longitud de la oración es 9, luego completaremos la oración del 5 al 9.
Pero la incrustación anterior no contiene la información de posición de la palabra, por lo que nuestro objetivo es ajustar este vector apropiadamente. según la posición de la palabra en la oración. Lleva información de posición.
El método elegido por el autor es sumar los números entre ellos a la incrustación anterior con un seno predeterminado (no aprendido). función coseno, es decir, la posición está representada por la función seno y coseno son combinaciones lineales entre sí, logrando así la relación relativa entre las posiciones del marcador en el aprendizaje de la red. Agregue la matriz de posición a la matriz obtenida mediante la incrustación de tokens. p>
Matemáticamente, la posición del marcador en la secuencia está representada por y la posición en el vector de características de incrustación del token está representada por:
Específicamente, para una oración determinada, su posición de incrustación. La matriz es:
El autor explica: Los resultados de utilizar este enfoque determinista son similares a los resultados de aprender representaciones posicionales (al igual que cuando incrustamos palabras), por lo que existen algunas ventajas:
Entonces la matriz después de agregar información posicional es:
Es la entrada del primer módulo codificador y su tamaño es
Antes de producir la salida del codificador, hay n codificadores módulos conectados entre sí y el módulo específico es responsable de encontrar las relaciones de representación de entrada entre ellos y codificarlas en su salida.
Intuitivamente, el proceso iterativo de estos bloques ayudará a la red neuronal a capturar relaciones más complejas entre palabras. en la secuencia de entrada. Puede considerarlo como un todo para capturar la semántica de la secuencia de entrada.
El codificador utiliza el mecanismo de atención de múltiples cabezales del Transformer, lo que significa que calcula la autoatención de diferentes matrices de peso y luego concatena los resultados.
Los resultados de estos cálculos de atención paralelos se denominan cabezas y utilizamos subíndices para indicar cabezas específicas y matrices de peso asociadas.
Como se muestra en la figura anterior, después de calcular todas las cabezas, conéctelas para obtener una matriz de tamaño y luego multiplíquela por una matriz de tamaño y peso para una transformación lineal para obtener un resultado de tamaño final, usando una fórmula matemática. Representa:
Uno de ellos se obtiene multiplicando la matriz de pesos correspondiente. Echemos un vistazo visual a este proceso con un ejemplo simple.
Esta figura muestra el token de entrada que se pasa a través de la incrustación del token y la codificación posicional, y luego se ingresa al codificador:
A continuación, echemos un vistazo al flujo de operación en el codificador. , Veamos primero la autoatención de una sola cabeza:
La imagen de arriba muestra cómo proviene una cabeza humana y dónde está la dimensión, porque Q y K necesitan calcular la similitud, por lo que la dimensión debe ser la Igual, la dimensión es, las dimensiones pueden ser iguales o diferentes, en el papel.
La llamada auto-atención consiste en utilizar el producto escalar escalar para obtener un peso de probabilidad a través de softmax y luego multiplicar estos pesos por el suyo propio:
Para profundizar nuestro Entendiendo, elegimos uno de los avatares y continuamos viendo visualmente este proceso de cambio a través de gráficos:
Luego calcula la auto-atención,
Si miras detenidamente, varios procesos de cálculo mencionados anteriormente están sucediendo al mismo tiempo:
p>
Supongamos que tenemos ocho cabezas, entonces obtenemos ocho:
Sin embargo, obviamente la capa de avance solo requiere una matriz. ¿Cómo afrontarlo? De manera similar al procesamiento de múltiples núcleos de convolución, estas ocho matrices se conectan, se multiplican por una matriz de peso y se comprimen en una matriz.
Para tener una comprensión más completa e intuitiva, plasmamos todo el proceso arriba en una imagen.
Obviamente, el segundo bloque codificador no requiere un proceso de incrustación y solo necesita la salida del primer bloque codificador como entrada.
Después de la introducción anterior, debería tener una buena comprensión de este proceso, pero ¿por qué se puede utilizar el producto escalar vectorial para calcular la probabilidad de atención?
Así que echemos un vistazo más de cerca a los principios.
La clave de este sistema estructural es:
Es decir, se aplica el producto escalar del vector q de cada palabra y el vector k de cada palabra, y se aplica la fórmula del producto escalar. :
Esto significa que cuanto más similares sean las direcciones, mayor será la longitud y mayor será el producto escalar. Cuanto mayor es la relación con la palabra, mayor atención recibimos al comprender la palabra, que es la misma que nuestra intención original.
Echemos un vistazo al diagrama de estructura al principio. Cada módulo codificador pasa por una capa de adición y especificación antes de ingresar al siguiente bloque. Entonces veamos qué hace este piso.
Agregar es en realidad una conexión residual. Agregar la salida a la entrada seguirá la autoatención y FFN de cada bloque, seguido de una norma de capa.
Norm es una norma de capa que se regularizará, es decir, se escalará a un dominio con media 0 y varianza 1. Porque
Pero generalmente antes de esta capa, habrá una capa de muda.
Cada módulo codificador consta de sumadores de múltiples cabezales; adición y adición de red feedforward estándar. La estandarización es uno de esos procesos. Presentemos esta red de retroalimentación.
Esta es una capa completamente conectada, que contiene dos cambios lineales y una función no lineal (en realidad, generalmente ReLu).
Para la entrada (tamaño), transfórmela a la capa oculta (tamaño) a través de la matriz de peso (tamaño) y compense la transformación lineal, luego active **ReLu **, regístrelo y luego use el peso matriz (tamaño) y La transformación lineal desplazada se transforma en la capa de salida (tamaño), expresada matemáticamente:
Conectado al decodificador después de la salida del último módulo codificador.
El decodificador y el codificador tienen estructuras similares, pero información visual diferente.
Transformer soluciona el problema de la traducción.
Para traducir una oración a otro idioma, queremos que el modelo capture las relaciones entre las palabras en la oración de entrada y combine la información contenida en la oración de entrada con el contenido de la traducción en cada paso. Siguiendo con el ejemplo anterior, nuestro objetivo es traducir una frase del inglés al español, y este es el token de secuencia que obtenemos:
Veamos cómo fluyen los datos de entrada y salida como antes.
Esta es la etiqueta de entrada de nuestro decodificador:
Esta es la salida esperada del decodificador:
Sin embargo, hay un problema. Por ejemplo, en el lado de entrada, hemos visto 'como' seguido de 'estas' y luego lo usamos para predecir 'estas'. Esto obviamente no es razonable, porque el modelo no puede ver las siguientes palabras durante la prueba.
Por lo tanto, necesitamos modificar la capa de atención para que el modelo no pueda ver la información en el lado derecho de la palabra predicha y, al mismo tiempo, pueda usar la información en el lado izquierdo de la palabra predicha.
Continuando con el ejemplo anterior, convertimos las etiquetas de entrada en forma matricial y agregamos información de posición:
Al igual que el codificador, la salida del bloque decodificador será una matriz de tamaño. Después de activar la transformación lineal por filas softmax, se genera una prueba donde el elemento más grande de cada fila representa la siguiente palabra. Es decir, asignar"
Sin embargo, cuando usamos el mecanismo de atención de múltiples cabezales, todas las líneas interactuarán, por lo que debemos agregar una máscara en la entrada, que se realizará después del cálculo de atención:
Este es el resultado del cálculo del autoenfoque:
Luego agregamos una máscara sobre esta base, es decir, las posiciones de todos los triángulos en la matriz se establecen en: p>
Luego, después de la activación de softmax, la matriz se convierte en:
Para cumplir con nuestros requisitos, la atención de las palabras de la derecha que deben ignorarse en el entrenamiento se convierte en 0. p>
Cuando se multiplica por esta matriz de atención, la palabra predicha es el elemento de la derecha al que tiene acceso el modelo. Tenga en cuenta que la salida de atención de múltiples cabezas aquí será multidimensional porque la longitud de su secuencia es
Esto es de la secuencia de destino. La entrada al decodificador, que se obtiene cambiando la atención de múltiples cabezas enmascaradas. La entrada parcial al decodificador proviene de la salida final de la oración de origen (de tamaño) después de pasar. a través del codificador.
Luego viene la codificación de suma. Sin embargo, el proceso de agregar atención de múltiples cabezas y norma de capa->FFN ahora proviene de:
Después de calcular cada consulta relativa. a la clave Después de la palabra atención, obtenemos una nueva matriz y continuamos con nuestro ejemplo. Por ejemplo, la matriz de atención es:
Como se puede ver en la figura anterior, esta atención es el decodificador actual. entrada y atención entre cada palabra emitida por el codificador Multiplicamos esta matriz para obtener una nueva matriz, donde cada fila representa las características de la oración fuente en relación con el vocabulario de entrada actual:
h encabezados están conectados, El tamaño se vuelve y la matriz de peso la transforma linealmente en una salida de 1.
Después de una decodificación múltiple, la matriz de salida final se transforma linealmente multiplicando por la matriz de peso () y luego transformando la vector softmax de cada fila, la palabra en el índice del diccionario correspondiente a la posición con el valor más grande es la palabra predicha.
Si se pierde, solo una representación de palabra activa de cada vector de palabra predicha. Se necesita una palabra real para calcular la entropía cruzada.