Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ¿Cómo mejora el mecanismo de atención en los transformadores la generación de código?


¿Cómo mejora el mecanismo de atención en los transformadores la generación de código?


El mecanismo de atención en los transformadores mejora fundamentalmente la generación de código al permitir que el modelo se concentre selectivamente en diferentes partes de la secuencia de entrada mientras produce cada token de salida. Esto da como resultado una generación de código más consciente de contexto y coherente. El mecanismo de atención ayuda a capturar dependencias de largo alcance, patrones estructurales y matices semánticos en el código fuente, que son cruciales para generar programas sintácticamente correctos y lógicamente consistentes. Sus capacidades multifacéticas proporcionan ventajas significativas sobre los modelos tradicionales de secuencia a secuencia que se basaban en representaciones de contexto de longitud fija.

Concepto básico de atención en Transformers

En Transformers, la atención es una técnica que calcula un conjunto de vectores de salida como sumas ponderadas de vectores de valor de entrada. Los pesos se calculan dinámicamente en función de las puntuaciones de compatibilidad entre una consulta (que representa la posición actual para la cual se genera una salida) y un conjunto de vectores clave (que representan todas las posiciones en la secuencia de entrada). Esto permite que el modelo "asista" o se centre en partes relevantes de la entrada al generar cada token, en lugar de procesar toda la secuencia de manera uniforme o comprimirla en un vector de tamaño fijo.

La fórmula del núcleo para la atención de producto de punto escala es:

$$
\ text {atención} (q, k, v) = \ text {Softmax} \ Left (\ frac {qk^t} {\ sqrt {d_k> \ right) v
$$

donde $$ Q $$, $$ k $$ y $$ v $$ son matrices de consultas, claves y valores, respectivamente, y $$ d_k $$ es la dimensión de las claves utilizadas para el escala. La función Softmax transforma los puntajes del producto DOT entre consultas y claves en una distribución de probabilidad, que luego se usa para ponderar los valores.

Captura del contexto y dependencias en el código

El código de programación está inherentemente estructurado con dependencias de largo alcance; Las variables declaradas al comienzo de una función pueden usarse en muchos lugares mucho más tarde. Los modelos tradicionales como RNN o CNN lucharon por mantener tales relaciones contextuales de largo alcance debido a su naturaleza receptiva secuencial o local. Por el contrario, el mecanismo de autoeficiencia en los transformadores puede relacionar todos los tokens con cualquier otro token directamente, independientemente de su distancia en la secuencia.

La autoatición permite que cada posición de token recopile información de todas las demás posiciones en la secuencia de entrada simultáneamente. Por ejemplo, mientras se genera un soporte de cierre, el modelo puede atender su soporte de apertura correspondiente que puede ser varias líneas antes. Esta conectividad completa permite que el modelo codifique la estructura sintáctica y semántica de manera más efectiva, lo que es esencial para generar código libre de errores.

Atención múltiple de cabeza para diversos contextos

Los transformadores emplean atención múltiple, donde se realizan múltiples operaciones de atención paralela (cabezas) en diferentes proyecciones lineales de los incrustaciones de entrada. Cada cabeza aprende a centrarse en diferentes aspectos de la entrada, como nombres de variables, construcciones de flujo de control o límites de función. Esta configuración de múltiples cabezas ofrece varios beneficios:

- Permite que el modelo atiende conjuntamente información de diferentes subespacios de representación.
- Combina múltiples perspectivas sobre la secuencia de entrada, ampliando el alcance de lo que el modelo puede aprender.
- Mejora la robustez al no confiar en una sola representación de atención.

Las salidas de estos múltiples cabezas se concatenan y se transforman linealmente para formar la representación final utilizada para generar tokens de salida.

Atención del codificador del codificador para la alineación de origen-objetivo

En la generación de códigos, los transformadores generalmente emplean una arquitectura del codificador codificador, donde el codificador procesa la descripción de entrada (por ejemplo, especificación del problema del lenguaje natural) en una representación contextual, y el decodificador genera la secuencia de código correspondiente. El decodificador utiliza la atención del codificador codificador (atención cruzada) para enfocarse selectivamente en partes relevantes de la entrada codificada en cada paso de decodificación. Esta alineación entre la entrada y la salida ayuda al modelo a generar fragmentos de código relevantes y precisos que coinciden estrechamente con la intención expresada en el mensaje de entrada.

Atención causal y enmascarada para la generación autorregresiva

Al generar el token de código por token, el decodificador utiliza la autoatención causal (enmascarada) para garantizar que las predicciones para la posición $$ i $$ dependan solo de tokens anteriores $$