Qué es
Un modelo de lenguaje es una función muy grande con miles de millones de números ajustables, sus pesos. Dado un texto, emite una probabilidad para cada posible token siguiente. El ajuste fino modifica esos pesos para que, dado su tipo de contexto, el modelo asigne una alta probabilidad al tipo de respuesta que usted desea. El bucle de entrenamiento es el procedimiento que hace esto. No es una única operación ingeniosa, sino un paso sencillo, repetido muchos miles de veces, donde cada repetición ajusta ligeramente los pesos.
Cómo funciona un paso
1. Paso hacia adelante. Un lote de ejemplos pasa por el modelo. En cada posición de cada respuesta objetivo, el modelo produce una distribución de probabilidad sobre todo su vocabulario, a menudo de 100.000 tokens o más, para lo que viene a continuación. Dado que la respuesta real ya se conoce, todas las posiciones se predicen en paralelo en un solo paso. El modelo siempre ve los tokens anteriores correctos en lugar de sus propias suposiciones, una técnica llamada teacher forcing.
2. Pérdida. Para cada token objetivo, la pérdida es el logaritmo negativo de la probabilidad que el modelo asignó al token correcto. La pérdida del lote es el promedio de todos sus tokens objetivo. Los tokens de contexto (el prompt del sistema, los turnos anteriores, el mensaje del usuario) se leen pero se excluyen de este promedio, de modo que solo se evalúan las respuestas que usted eligió como objetivos.
loss = − (1 / N) × Σ log p(correct token | everything before it)
N = the number of target tokens in the batch
context tokens are masked: read, never scored- El modelo asigna al siguiente token correcto una probabilidad de 0.9: pérdida = −ln 0.9 ≈ 0.11.
- Una probabilidad de 0.5: pérdida = −ln 0.5 ≈ 0.69.
- Una probabilidad de 0.05: pérdida = −ln 0.05 ≈ 3.00.
- Promedio de los tres tokens: (0.11 + 0.69 + 3.00) ÷ 3 ≈ 1.26. Un token erróneo con alta confianza domina la puntuación.
- Como referencia: un modelo que adivine al azar entre 100.000 tokens obtendría ln 100.000 ≈ 11.5. Las pérdidas del ajuste fino comienzan muy por debajo de esa cifra, ya que el modelo base ya es un buen predictor; el entrenamiento lo perfecciona basándose en sus respuestas.
3. Paso hacia atrás. La retropropagación calcula el gradiente de cada peso entrenable: cuánto cambiaría la pérdida si ese peso se moviera una cantidad minúscula, y en qué dirección. Cuesta aproximadamente el doble de cálculo que el paso hacia adelante, y necesita los valores intermedios (activaciones) guardados durante el paso hacia adelante. Es por eso que los ejemplos más largos y los lotes más grandes necesitan más memoria de GPU.
4. Actualización. El optimizador modifica cada peso en dirección opuesta a su gradiente, escalado por la tasa de aprendizaje. En su forma más simple, el descenso de gradiente básico, la regla es una sola línea.
gradient = ∂loss / ∂w how the loss changes when w changes
w (new) = w − learning_rate × gradientEl optimizador: Adam y AdamW
Los modelos de lenguaje casi siempre se entrenan con Adam o su variante AdamW en lugar del descenso de gradiente básico. Adam mantiene dos promedios continuos para cada peso: el gradiente promedio (momento, que suaviza el ruido de un lote al siguiente) y el gradiente al cuadrado promedio (que escala el paso de cada peso, para que los pesos con gradientes consistentemente grandes no den pasos enormes y los que rara vez se actualizan no se queden estancados). El resultado es que cada peso se mueve aproximadamente según la tasa de aprendizaje por paso, independientemente del tamaño bruto de su gradiente.
AdamW cambia la forma en que se aplica el decaimiento de pesos, una suave atracción de los pesos hacia cero que desalienta los valores extremos: se resta directamente de los pesos en lugar de mezclarse en el gradiente, lo que funciona de manera más confiable con el escalado por peso de Adam. Es el optimizador predeterminado en las bibliotecas de entrenamiento comunes.
m = β1 · m + (1 − β1) · g running average of gradients (momentum)
v = β2 · v + (1 − β2) · g² running average of squared gradients
w = w − lr · m̂ / (√v̂ + ε) a step scaled separately for every weight
w = w − lr · λ · w decoupled weight decay (the "W" in AdamW)
g = gradient, m̂ and v̂ = bias-corrected m and v
usual defaults: β1 = 0.9, β2 = 0.999, ε = 1e-8Esos dos promedios móviles se almacenan con una precisión de 32 bits para cada peso entrenable: 8 bytes por peso, además de los propios pesos y gradientes. Esta es la razón principal por la que el ajuste fino completo requiere tanta memoria, y por la que LoRA, que solo entrena un pequeño adaptador, necesita tan poca.
De los pasos a un modelo terminado
- Los pasos se suman para formar épocas. Una pasada por cada ejemplo de entrenamiento es una época; una ejecución de ajuste fino suele durar de una a unas pocas épocas.
- La tasa de aprendizaje cambia durante la ejecución. Por lo general, una programación la aumenta brevemente (calentamiento) y luego la reduce hacia cero, para que los primeros pasos no desestabilicen el modelo y los últimos realicen ajustes precisos.
- La validación se ejecuta en paralelo. Cada cierto tiempo, el modelo se evalúa con ejemplos reservados sin actualizar ningún peso. Esa pérdida de validación muestra si está aprendiendo el patrón o memorizando sus ejemplos.
- El resultado son nuevos pesos: ya sea un modelo actualizado completo o un pequeño adaptador que se aplica sobre el modelo base sin cambios.
Errores comunes
- Interpretar la pérdida como una puntuación de calidad. La pérdida indica qué tan bien predice el modelo sus tokens objetivo, no si sus respuestas son buenas; una evaluación responde a eso.
- Comparar los valores de pérdida entre diferentes modelos base. Cada uno tiene su propio tokenizador, por lo que los números no están en la misma escala.
- Esperar que el entrenamiento corrija los objetivos erróneos. El bucle reduce fielmente la pérdida en cualquier respuesta que usted marque como objetivo, incluidos los errores.
- Asumir que el modelo aprende reglas. Aprende tendencias a partir de muchos pequeños impulsos, por lo que un comportamiento mostrado en solo dos ejemplos apenas se aprende.
Referencias y lecturas adicionales
Las fuentes externas se abren en una pestaña nueva.
- 01Optimizing Model ParametersPyTorch Tutorials · pytorch.orgEl bucle en unas veinte líneas de código: paso hacia adelante, pérdida, paso hacia atrás, paso del optimizador.
- 02Linear regression: Gradient descentGoogle Machine Learning Crash Course · developers.google.comUna introducción interactiva a los gradientes y la pérdida en el modelo más sencillo posible.
- 03Adam: A Method for Stochastic OptimizationKingma & Ba, 2014 · arXiv · arxiv.orgEl artículo original de Adam, con la regla de actualización y su configuración predeterminada.
- 04Decoupled Weight Decay RegularizationLoshchilov & Hutter, 2017 · arXiv · arxiv.orgPresenta AdamW y explica por qué el decaimiento de pesos debe separarse del gradiente.
- 05Cross-entropyWikipedia · en.wikipedia.org