Un peso es un número de punto flotante. Eso es todo. Cada conexión entre dos neuronas en una red lleva uno de estos números, y un modelo de lenguaje moderno grande tiene miles de millones de ellos — organizados en matrices enormes, una por capa. Antes de que comience el entrenamiento, estas matrices se llenan con valores que parecen esencialmente aleatorios (más sobre la inicialización en un momento). Luego, la red ve datos, calcula cuán equivocadas son sus predicciones mediante una función de pérdida, y la retropropagación fluye el gradiente de ese error hacia atrás a través de cada capa, empujando cada peso una cantidad minúscula en la dirección que habría hecho que la predicción fuera menos equivocada. Repite esto unos pocos miles de millones de veces a través de terabytes de texto y obtienes un modelo que puede escribir poesía, explicar la mecánica cuántica o depurar tu código. Los pesos son donde vive toda esa capacidad aprendida. No hay un almacén de conocimiento separado, ninguna base de datos de hechos — solo matrices de números que, mediante una presión estadística pura, se han organizado en algo que se parece mucho a la comprensión.
El formato en el que almacenas esos números importa más de lo que podrías esperar. Los pesos de alta precisión usan fp32 — punto flotante de 32 bits — lo que te da aproximadamente 7 dígitos decimales de precisión y un rango dinámico enorme. Eso es lo que los investigadores usaron durante años y sigue siendo el estándar de oro para la estabilidad numérica. Pero fp32 es costoso: un modelo de 7 mil millones de parámetros en fp32 consume 28 GB solo para los pesos, antes siquiera de pensar en los estados del optimizador o las activaciones. La precisión reducida fp16 reduce eso a la mitad, pero su rango limitado de exponentes lo hace propenso a desbordamientos y subflujos durante el entrenamiento. Entra bf16 — bfloat16 — que mantiene el rango de exponentes de fp32 pero trunca la mantisa a 16 bits. Google lo desarrolló específicamente para el aprendizaje profundo, y se ha convertido en el estándar de facto para el entrenamiento porque rara vez explota numéricamente mientras usa la mitad de la memoria de fp32. Para la inferencia, puedes ir más lejos: la cuantización en int8 empaqueta los pesos en enteros de 8 bits (un cuarto del tamaño de fp32) con una pérdida de calidad sorprendentemente pequeña, y int4 — pionero por los métodos GPTQ y AWQ — reduce eso a la mitad nuevamente. Un modelo de 70B que necesitaría 140 GB en fp16 cabe en aproximadamente 35 GB con precisión de 4 bits, lo cual es por qué la cuantización es la razón por la que puedes ejecutar modelos serios en GPUs de consumo en absoluto.
Cuando descargas un modelo, el formato del archivo determina cómo esas matrices de pesos se serializan en el disco. Durante años, el predeterminado fue el formato .bin de PyTorch, que es simplemente la serialización de Python pickle aplicada a tensores. Funciona, pero pickle tiene un problema de seguridad bien conocido: un archivo .bin malicioso puede ejecutar código arbitrario cuando lo cargas. Hugging Face creó safetensors específicamente para corregir esto — es un formato simple, mapeado en memoria, que contiene solo datos de tensores y metadatos, sin posibilidad de ejecución de código. Safetensors también carga más rápido porque admite carga perezosa y lecturas sin copia. Se ha convertido en el estándar para distribuir modelos en Hugging Face y más allá. Luego está GGUF, que es el formato usado por llama.cpp y el ecosistema más amplio de inferencia local. GGUF empaqueta pesos, configuración del tokenizador y metadatos del modelo en un solo archivo autocontenidos, a menudo con cuantización integrada. Si estás ejecutando un modelo localmente en tu laptop o una GPU de consumo, es casi seguro que estás usando un archivo GGUF. La versión corta: safetensors para distribución y ajuste fino, GGUF para inferencia local, y .bin solo cuando te encuentres con puntos de control legados.
Antes de que incluso comience el entrenamiento, los valores que colocas en esas matrices de pesos moldean todo lo que sigue. Inicialízalos todos a cero y la red no puede aprender — cada neurona en una capa calcula lo mismo, por lo que los gradientes son idénticos y la simetría nunca se rompe. Inicialízalos demasiado grandes y las activaciones estallan; demasiado pequeños y los gradientes desaparecen en cero antes de llegar a las primeras capas. La inicialización de Xavier (2010) resolvió esto para redes con sigmoide y tangente hiperbólica escalando los pesos iniciales según la entrada y salida — el número de conexiones entrantes y salientes de cada capa. La inicialización de Kaiming (2015, del artículo de He et al.) adaptó la idea para activaciones ReLU, que se comportan de manera diferente porque anulan la mitad de sus entradas. Los Transformers modernos suelen usar variantes de estas, a veces con factores de escala adicionales ajustados para capas de atención. También hay la hipótesis del boleto de la lotería (Frankle & Carlin, 2019), que mostró que dentro de una red inicializada aleatoriamente, existen subredes pequeñas — "boleto ganador" — que pueden entrenarse en aislamiento para coincidir con el rendimiento de toda la red. La implicación es impactante: la mayoría de esos miles de millones de pesos iniciales podrían ser innecesarios, y la inicialización esparsa adecuada podría teóricamente darte el mismo modelo a una fracción del tamaño. En la práctica, encontrar confiablemente esos boletos ganadores sigue siendo costoso, pero la idea ha moldeado cómo los investigadores piensan sobre la poda y arquitecturas eficientes.
La gente usa "pesos" y "parámetros" casi intercambiablemente, y para la mayoría de los propósitos eso está bien — pero técnicamente, los parámetros incluyen sesgos (una constante pequeña añadida después de la suma ponderada en cada neurona) y cualquier otro valor aprendido como escalas de normalización por capas. En un Transformer típico, los sesgos representan una fracción minúscula de los parámetros totales, por lo que cuando alguien dice que un modelo tiene 70 mil millones de parámetros, efectivamente se refiere a 70 mil millones de pesos. El punto más profundo es que cuando descargas el archivo de pesos de un modelo, estás descargando todo lo que el modelo aprendió. La arquitectura — cuántas capas, cuán anchas, qué funciones de activación — es solo un plano. Los pesos son el edificio en sí. Dos modelos con arquitecturas idénticas pero pesos diferentes se comportarán completamente diferente si se entrenaron en datos distintos o durante duraciones diferentes. Por eso "publicar los pesos" es un acto tan significativo: no estás compartiendo un diseño, estás compartiendo el resultado acumulado de millones de dólares en cálculos y meses de entrenamiento. El conocimiento está en los números.