Skip to content

Commit

Permalink
Attention
Browse files Browse the repository at this point in the history
  • Loading branch information
cayetanoguerra committed Nov 12, 2024
1 parent c2a9c03 commit d39ef97
Show file tree
Hide file tree
Showing 9 changed files with 968 additions and 26 deletions.
Binary file modified .DS_Store
Binary file not shown.
Binary file modified ia/.DS_Store
Binary file not shown.
Binary file modified ia/nbpy/.DS_Store
Binary file not shown.
Binary file modified ia/nbpy/nlp/.DS_Store
Binary file not shown.
Binary file modified ia/nbpy/nlp/Tema-05/.DS_Store
Binary file not shown.
902 changes: 902 additions & 0 deletions ia/nbpy/nlp/Tema-05/imgs/Attention_QKV.drawio

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions ia/nbpy/nlp/Tema-05/imgs/Attention_QKV.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions ia/nbpy/nlp/Tema-05/imgs/Attention_QKV_mask.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
86 changes: 60 additions & 26 deletions ia/nbpy/nlp/Tema-05/nb07.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,68 @@
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **Mecanismo de auto-atención del modelo Transformer**\n",
"\n",
"El mecanismo de autoatención con enmascaramiento en el Transformer permite que cada token en una secuencia determine cuánto debe “atender” a otros tokens en esa secuencia. La imagen siguiente ilustra este proceso paso a paso. A continuación, se describe cada etapa del mecanismo de autoatención con enmascaramiento:\n",
"\n",
"#### **Paso 1: Cálculo de las puntuaciones de atención**\n",
"\n",
"**Matrices de consultas (Q), claves (K) y valores (V):**\n",
"\n",
"- Cada token en la secuencia se representa mediante un vector, y se generan tres matrices para cada token: Q (consultas), K (claves) y V (valores). En la imagen, tenemos cuatro tokens: q1, q2, q3, q4 en Q y k1, k2, k3, k4 en K.\n",
"- Estas matrices se utilizan para determinar la relevancia entre los tokens en la secuencia.\n",
"\n",
"**Multiplicación de matrices:**\n",
"- La matriz de consultas (Q) se multiplica con la matriz de claves (K) para obtener una matriz de puntuaciones de atención (scores).\n",
"- Cada elemento de la matriz de scores representa la relevancia entre un par de tokens: por ejemplo, el valor en la posición (q1, k2) representa la importancia de k2 respecto a q1.\n",
"\n",
"#### **Paso 2: Escalado de las puntuaciones de atención**\n",
"\n",
"- Para estabilizar los valores, se divide cada puntuación por la raíz cuadrada de la dimensión de los vectores K (normalmente denotada como $\\sqrt{d_k}$). Esto evita que los valores sean excesivamente grandes, lo cual podría dificultar la convergencia del modelo.\n",
"\n",
"#### **Paso 3: Aplicación de la matriz de enmascaramiento**\n",
"\n",
"**Matriz de enmascaramiento:**\n",
"\n",
"- En modelos como GPT, se utiliza una matriz de enmascaramiento causal para garantizar que cada token solo pueda “ver” los tokens anteriores (incluyendo el actual), evitando que el modelo acceda a tokens futuros.\n",
"- En la imagen, vemos una matriz de enmascaramiento triangular que enmascara los valores superiores de la matriz de scores, donde solo se permiten los valores de la diagonal y los elementos inferiores. Los valores enmascarados se establecen en cero para evitar que el modelo los considere.\n",
"\n",
"**Aplicación de la máscara:**\n",
"- La matriz de enmascaramiento se multiplica con la matriz de puntuaciones escaladas. Los valores enmascarados se convierten en cero, indicando que esos tokens no deben ser tenidos en cuenta en el cálculo de atención.\n",
"\n",
"#### **Paso 4: Aplicación de la función Softmax**\n",
"\n",
"- Después de enmascarar los valores, se aplica la función softmax en cada fila de la matriz resultante.\n",
"- La función softmax convierte cada fila en una distribución de probabilidad, resaltando los tokens más relevantes en la atención y atenuando los tokens menos relevantes.\n",
"- Esto permite que cada token asigne mayor “atención” a los tokens relevantes en función de su contexto en la secuencia.\n",
"\n",
"#### **Paso 5: Multiplicación con la matriz de valores (V)**\n",
"\n",
"**Cálculo del vector de salida:**\n",
"- La matriz de probabilidades obtenida después de la softmax se multiplica con la matriz de valores (V) para obtener el vector de atención final para cada token.\n",
"- En la imagen, los vectores resultantes z1, z2, z3, z4 corresponden a los valores ponderados de cada token según su relevancia.\n",
"\n",
"**Resultado final:**\n",
"- Los vectores z1, z2, z3, z4 representan la salida de la capa de atención para cada token. Estos vectores contienen información agregada sobre los tokens anteriores en la secuencia, ajustada según la relevancia calculada.\n",
"\n",
"<div align=\"center\">\n",
"<img src=\"./imgs/Attention_QKV_mask.svg\" width=\"70%\">\n",
"</div> \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"## **Práctica 3: Implementación del mecanismo de auto-atención del modelo Transformer**\n",
"### **Práctica: implementación del mecanismo de auto-atención con enmascaramiento del modelo Transformer**\n",
"\n",
"Suponiendo que tenemos los vectores Q, K y V, implementa el mecanismo de auto-atención del modelo Transformer.\n"
"Vamos a implementar el mecanismo de auto-atención con enmascaramiento del modelo Transformer en Pytorch. Para ello, vamos a seguir los pasos descritos anteriormente y suponer que ya tenemos las matrices de consultas (Q), claves (K) y valores (V) para cada token en la secuencia.\n"
]
},
{
Expand All @@ -87,25 +140,6 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Una vez realizado el resultado debe ser:\n",
"\n",
"<table>\n",
"<tr>\n",
"<td><b>Attn 1</b></td><td>0.2500</td><td>0.5000</td><td>0.5000</td>\n",
"</tr>\n",
"<tr>\n",
"<td><b>Attn 2</b></td><td>0.1892</td><td>0.5432</td><td>0.5857</td>\n",
"</tr>\n",
"<tr>\n",
"<td><b>Attn 3</b></td><td>0.2372</td><td>0.5087</td><td>0.5173</td>\n",
"</tr>\n",
"<tr>\n",
"<td><b>Attn 4</b></td><td>0.2309</td><td>0.5130</td><td>0.5260</td>\n",
"</tr>\n",
"</table>\n",
"\n",
"### **Atención con enmascaramiento**\n",
"\n",
"El enmascaramiento durante la etapa del decodificador en los modelos Transformer es crucial para evitar que el decodificador tenga acceso a información futura, especialmente en tareas de generación secuencial como la traducción automática o la generación de texto. Este concepto se conoce como \"enmascaramiento de atención causal\".\n",
"\n",
"En el contexto de los Transformers, el decodificador genera una salida secuencialmente, palabra por palabra. Durante la generación de cada palabra, es importante que el modelo solo tenga en cuenta las palabras anteriores y no las futuras, ya que estas últimas no deberían estar disponibles (en un escenario de generación de texto, por ejemplo, las palabras futuras aún no se han generado).\n",
Expand All @@ -114,22 +148,22 @@
"\n",
"<table>\n",
"<tr>\n",
"<td><b>Attn 1</b></td><td>1.0000</td><td>0.0000</td><td>0.0000</td>\n",
"<td><b>z1</b></td><td>1.0000</td><td>0.0000</td><td>0.0000</td>\n",
"</tr>\n",
"<tr>\n",
"<td><b>Attn 2</b></td><td>0.4568</td><td>0.5432</td><td>0.0000</td>\n",
"<td><b>z2</b></td><td>0.4568</td><td>0.5432</td><td>0.0000</td>\n",
"</tr>\n",
"<tr>\n",
"<td><b>Attn 3</b></td><td>0.3219</td><td>0.3332</td><td>0.3449</td>\n",
"<td><b>z3</b></td><td>0.3219</td><td>0.3332</td><td>0.3449</td>\n",
"</tr>\n",
"<tr>\n",
"<td><b>Attn 4</b></td><td>0.2309</td><td>0.5130</td><td>0.5260</td>\n",
"<td><b>z4</b></td><td>0.2309</td><td>0.5130</td><td>0.5260</td>\n",
"</tr>\n",
"</table>\n",
"\n",
"#### **Objetivos de la práctica**\n",
"\n",
"- Entender con detalle el funcionamiento del mecanismo de auto-atención y auto-atención con enmascaramiento.\n",
"- Entender con detalle el funcionamiento del mecanismo de auto-atención con enmascaramiento.\n",
"- Practicar las operaciones matriciales en PyTorch."
]
},
Expand Down

0 comments on commit d39ef97

Please sign in to comment.