5 puntos por GN⁺ 2024-01-04 | 1 comentarios | Compartir por WhatsApp

Encoder

  • Explica el proceso de convertir texto en vectores y de agregar información de posición a los embeddings obtenidos de esa manera.
  • El objetivo es generar embeddings que capturen la información semántica del texto de entrada.

1. Embeddings de texto

  • Convierte "Hello World" en vectores para generar embeddings.
  • Asigna valores arbitrarios a cada token para crear vectores.

2. Codificación posicional

  • Suma codificación posicional a los embeddings para agregar información sobre la posición de las palabras.
  • Usa vectores fijos para asignar a cada posición un patrón numérico único y consistente.

3. Combinación de codificación posicional y embeddings

  • Suma la codificación posicional y los embeddings para crear una nueva matriz que se usará como entrada del encoder.

Self-attention

  • Explica la atención, un mecanismo que permite al modelo enfocarse en partes específicas de la entrada.
  • Con atención multi-cabeza, puede enfocarse simultáneamente en la información dentro de distintos espacios de representación.

4.1 Definición de matrices

  • Define las matrices K, V y Q para cada cabeza de atención.

4.2 Cálculo de claves, consultas y valores

  • Calcula las matrices de claves, consultas y valores multiplicando los embeddings de entrada por las matrices de pesos.

4.3 Cálculo de la atención

  • Calcula el producto punto entre las consultas y cada vector clave, y divide el resultado por la raíz cuadrada de la dimensión del vector clave.
  • Aplica la función softmax para obtener los pesos de atención.
  • Multiplica cada vector de valor por los pesos de atención.

Feed-forward layer

  • El encoder incluye una red neuronal feed-forward después de la capa de self-attention.
  • Esta red usa dos transformaciones lineales y la función de activación ReLU.

5.1 Capa feed-forward básica

  • La primera capa lineal expande la dimensión de la entrada y, después de aplicar la función de activación ReLU, la segunda capa lineal reduce la dimensión a la original.

5.2 Combinación de todo el proceso del encoder

  • Implementa en código un bloque encoder que incluye atención multi-cabeza y la capa feed-forward.

5.3 Conexiones residuales y normalización de capa

  • Las conexiones residuales consisten en sumar la entrada de una capa a su salida, y la normalización de capa es una técnica para normalizar la entrada de la capa.

Opinión de GN⁺

  • Este artículo explica matemáticas complejas de forma simplificada para ayudar a entender el modelo transformer desde una perspectiva matemática.
  • En particular, ayuda a comprender cómo funcionan el mecanismo de self-attention y la red neuronal feed-forward.
  • Muestra cómo técnicas como las conexiones residuales y la normalización de capa contribuyen a la estabilidad y el rendimiento de la red neuronal, ofreciendo ideas sobre cómo resolver problemas de entrenamiento en redes neuronales profundas.

1 comentarios

 
GN⁺ 2024-01-04
Opiniones de Hacker News
  • El "misterio" del transformer es que, en cada capa, en lugar de una secuencia lineal de pesos estáticos y valores, usa 3 matrices distintas obtenidas mediante la multiplicación de pesos aprendidos a partir de la misma entrada, y luego multiplica esas matrices entre sí. Esto permite mucho más procesamiento en paralelo, pero la fórmula de atención es muy limitada porque es estática.

    • Será difícil ver más avances hasta que aparezca una forma de generalizar el grafo de cómputo con parámetros entrenables.
    • No está claro si eso es posible en el sentido tradicional con los métodos de gradiente existentes, debido a efectos caóticos donde pequeños cambios provocan grandes variaciones en el rendimiento.
    • Probablemente tendría que ocurrir internamente alguna forma de algoritmo genético o PSO.
  • Si quieres un enfoque más seco, formal y conciso, vale la pena consultar "The Transformer Model in Equations" de John Thickstun. Todo cabe en una sola página usando notación matemática estándar.

  • Al leer el artículo surgen preguntas.

    • Los vectores correspondientes a "Hello" y "World" parecen aleatorios, pero también da la impresión de que siguen algún patrón.
    • Me pregunto si el hecho de que el 2 se repita en el vector tiene algún significado, o si todo el conjunto es único.
  • Me gustaría encontrar algún paper o artículo sobre por qué los transformers, aun funcionando simplemente como "predictores del siguiente token", pueden manejar palabras o subwords/tokens que no están en el dataset de entrenamiento.

    • Por ejemplo, al crear una tabla en pandas con columnas como "sdsfs_ff" y "fsdf_value", o al construir ejemplos que no estaban en el dataset de entrenamiento y pedirle al LLM una salida similar.
    • También estaría bien algún enlace con discusión sobre embeddings posicionales. No he encontrado una respuesta satisfactoria sobre el uso de seno/coseno y sobre (multiplicación vs comparación).
  • Los tutoriales de transformers podrían ser los nuevos tutoriales de mónadas. Es un concepto difícil de entender, pero como gran parte de la informática, hay que batallarlo y practicar con ejemplos para comprenderlo.

  • Conozco algunas de las palabras.

  • Como alguien que ha escrito una ANN desde cero sin usar TensorFlow, esta explicación me sigue resultando confusa.

    • Cuando le pedí a ChatGPT que explicara cómo modificar una ANN básica para implementar self-attention sin usar los términos matriz o vector, me dio una explicación realmente simple.
    • Prefiero pensar todo en términos de nodos, pesos y capas. Las matrices y los vectores hacen más difícil relacionarlo con lo que está ocurriendo en una ANN.
    • La forma en la que estoy acostumbrado a escribir una ANN es que cada nodo de entrada es un escalar, pero el algoritmo de feed forward se parece a una multiplicación vector-matriz porque toma todos los nodos de entrada, los multiplica por los pesos y luego los suma.
  • Me gusta el sitio web de Quarto. Veo a más usuarios de Python usándolo para publicar.

  • Me pregunto si en el paso 7 del decodificador debería ser Z_encoder_decoder = layer_norm(Z_encoder_decoder + Z) en lugar de Z_encoder_decoder = layer_norm(Z_encoder_decoder + Z_self_attention), y si falta layer_norm en el paso 8 del decodificador.

  • Me pregunto si un LLM usa una red neuronal, y qué es exactamente lo que constituye una "neurona". Es decir, si existe alguna estructura de código que sustente a la neurona, o si "simplemente" se trata de matemáticas complejas.