¿Cómo está construido un transformador y qué bloques principales tiene?
sobes.tech AI
Respuesta de la IA
Un transformador es una arquitectura de red neuronal ampliamente utilizada para procesar secuencias, como texto. La idea principal del transformador es usar un mecanismo de atención para ponderar la importancia de diferentes partes de los datos de entrada sin capas recurrentes o convolucionales.
Los bloques principales del transformador:
-
Representación de entrada (Embedding) — convierte los tokens de entrada en representaciones vectoriales.
-
Codificación posicional (Positional Encoding) — añade información sobre la posición de los tokens en la secuencia, ya que el mecanismo de atención no considera el orden.
-
Mecanismo de atención (Self-Attention) — calcula coeficientes de peso para cada token en relación con todos los demás, permitiendo que el modelo se enfoque en partes relevantes de la entrada.
-
Atención multi-cabeza (Multi-Head Attention) — aplica paralelamente varios mecanismos de atención para capturar diferentes aspectos de la dependencia.
-
Normalización y conexiones residuales (Layer Normalization y Residual Connections) — ayudan a estabilizar el entrenamiento y mejorar el flujo de gradientes.
-
Capas totalmente conectadas (Feed-Forward Network) — se aplican a cada elemento de la secuencia de forma independiente para una transformación no lineal.
-
Capa de salida — para tareas de generación o clasificación.
Ejemplo de estructura simplificada de una capa de transformador:
class TransformerLayer(nn.Module):
def __init__(self, d_model, nhead):
super().__init__()
self.self_attn = nn.MultiheadAttention(d_model, nhead)
self.linear1 = nn.Linear(d_model, d_model*4)
self.linear2 = nn.Linear(d_model*4, d_model)
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
def forward(self, x):
attn_output, _ = self.self_attn(x, x, x)
x = self.norm1(x + attn_output)
ff_output = self.linear2(F.relu(self.linear1(x)))
x = self.norm2(x + ff_output)
return x
De esta manera, el transformador se construye a partir de capas repetidas, lo que permite modelar de manera eficiente las dependencias en los datos.