microgpt Complete
Musings of a Computer Scientist.
Extended Summary
Resumen Principal
El proyecto microgpt representa la culminación de un esfuerzo por destilar los Modelos de Lenguaje Grandes (LLMs) a su esencia más pura, encapsulando un GPT funcional en tan solo 200 líneas de código Python sin dependencias externas. Este script didáctico integra todos los componentes algorítmicos fundamentales: desde la preparación del dataset y un tokenizador básico, hasta un motor de autograd implementado desde cero, una arquitectura de red neural similar a GPT-2, el optimizador Adam y los bucles completos de entrenamiento e inferencia. Su objetivo principal es democratizar la comprensión de cómo operan los LLMs, revelando que la complejidad suele residir en la eficiencia y escala, no necesariamente en los principios algorítmicos subyacentes. El enfoque en la simplicidad hace de microgpt una herramienta ideal para comprender las bases de la generación de texto, ejemplificado con la creación de nombres plausibles a partir de un conjunto de datos inicial.
Elementos Clave
- Proyecto MicroGPT: Una implementación completa de un modelo GPT en 200 líneas de Python, sin dependencias. Busca simplificar y hacer accesible la comprensión de los LLMs al incluir todos los elementos esenciales: gestión de datos, tokenización, un motor de diferenciación automática (
autograd), la arquitectura neural (similar a GPT-2), un optimizador y los ciclos de entrenamiento e inferencia. Está disponible en GitHub, una página web y como notebook de Google Colab, facilitando su estudio y experimentación. - Autograd y la Clase
Value: El núcleo del entrenamiento de redes neuronales se maneja mediante un sistema de diferenciación automática implementado desde cero en la claseValue. Esta clase envuelve un valor escalar y rastrea su computación. Cada operación matemática entre objetosValueregistra sus entradas (_children) y las derivadas locales (_local_grads). El métodobackward()recorre el grafo computacional en orden topológico inverso, aplicando la regla de la cadena para calcular el gradiente de la pérdida respecto a cada parámetro, fundamental para la optimización del modelo. - Tokenizador de Caracteres y Token BOS: Para que la red neural trabaje con texto, se implementa un tokenizador simple que asigna un ID entero único a cada carácter del dataset. Además, se introduce un token especial BOS (Beginning of Sequence). Este token actúa como delimitador para marcar el inicio y fin de cada "documento" (en este caso, nombres), permitiendo al modelo aprender las estructuras de inicio y finalización del texto, como en el ejemplo
[BOS, e, m, m, a, BOS]. El vocabulario final incluye 26 letras y este token especial, sumando 27 tokens únicos. - Arquitectura Simplificada Tipo GPT-2: La red neural sigue una arquitectura inspirada en GPT-2, pero con simplificaciones deliberadas para mantener la concisión del código. Utiliza RMSNorm en lugar de LayerNorm, no incorpora biases y emplea la función de activación ReLU en lugar de GeLU. El modelo procesa embeddings de tokens y posiciones, los normaliza y los pasa a través de un bloque de