Explorative Modeling (XM)¶
Explorative Modeling, abreviado como XM en SimpleTuner, es una técnica de entrenamiento que permite al modelo probar más de una elección oculta para el mismo ejemplo supervisado y aprender solo de la elección que mejor encaja con el objetivo.
El trabajo original de Explorative Modeling lo presenta como un tercer eje de escalado para modelos generativos: además de más datos y más parámetros, el modelo puede gastar más cómputo de entrenamiento explorando más candidatos. En SimpleTuner, XM es un objetivo experimental para familias de imagen, video, audio y modelos autorregresivos compatibles.
La inferencia no cambia. XM solo cambia cómo se construye, evalúa y reduce el batch durante entrenamiento.
ELI5¶
Imagina pedirle a una persona que dibuje una imagen objetivo, pero dejarle hacer cuatro bocetos antes de calificar. En vez de promediar los cuatro, calificas el boceto que más se parece al objetivo y enseñas a partir de ese.
La idea central es:
- Crear varios candidatos para el mismo sample.
- Ejecutar el modelo sobre todos ellos.
- Puntuar cada candidato contra el target real.
- Conservar el mejor candidato por sample o bloque de tokens.
- Retropropagar solo la loss seleccionada.
Esto ayuda cuando el objetivo puede explicarse de varias formas válidas. Un único camino forzado puede enseñar al modelo a promediar posibilidades; varios caminos explorados le permiten comprometerse con un modo plausible.
Qué Cambia¶
XM no añade un sampler de inferencia nuevo, un formato de checkpoint nuevo ni un segundo teacher. Cambia la selección durante entrenamiento:
- El entrenamiento estándar samplea un candidato y aprende de él.
- XM samplea
Kcandidatos y aprende del candidato con menor loss. - Un
Kmás alto da más exploración, pero cuesta más cómputo.
En modelos de difusión y flow, el candidato suele ser el ruido usado para construir el latent ruidoso en el timestep seleccionado.
En modelos autorregresivos de tokens, como planners RVQ/audio, el candidato es un route embedding aprendido que da al modelo varios caminos internos para la misma secuencia supervisada.
Comportamiento en SimpleTuner¶
Modelos de Difusión y Flow¶
Para familias de difusión o flow matching compatibles, usa xm_training_target=noise.
SimpleTuner:
- Samplea el timestep o sigma normal de entrenamiento.
- Repite el batch
xm_candidate_countveces. - Genera un ruido distinto para cada candidato.
- Construye latents ruidosos con cada ruido candidato.
- Ejecuta el modelo sobre el batch expandido.
- Calcula la loss normal de entrenamiento para cada candidato.
- Elige el candidato de menor loss por sample original.
- Retropropaga la loss seleccionada.
El modelo sigue aprendiendo su prediction type normal: flow velocity, epsilon, v-prediction o sample prediction según la familia.
Modelos Autorregresivos y RVQ¶
Para planners autorregresivos compatibles, usa xm_training_target=route.
SimpleTuner:
- Añade una pequeña tabla de route embeddings aprendidos.
- Repite cada secuencia supervisada sobre los candidatos de ruta.
- Inserta la señal de ruta en la entrada del modelo.
- Calcula token losses para cada ruta.
- Selecciona la mejor ruta para todo el sample o para bloques configurados.
- Retropropaga solo la loss de la ruta seleccionada.
Esto es útil para planners tipo global LM que predicen códigos RVQ de audio u otros streams discretos. La ruta da varias explicaciones internas del mismo target sin cambiar el decode de inferencia.
Pseudocódigo¶
para cada batch:
candidatos = []
para candidate_id en 1..K:
entrada = crear_candidato(batch, candidate_id)
prediccion = modelo(entrada)
loss = comparar(prediccion, target)
candidatos.append(loss)
loss_seleccionada = menor_loss_por_sample_o_bloque(candidatos)
entrenar_con(loss_seleccionada)
Para difusión:
entrada = agregar_ruido(clean_latent, ruido_candidato, timestep)
loss = diffusion_or_flow_loss(modelo(entrada), target_de_entrenamiento)
Para selección autorregresiva de rutas:
entrada = agregar_route_embedding(secuencia_tokens, ruta_candidata)
loss = token_loss(modelo(entrada), tokens_objetivo)
Configuración Rápida¶
WebUI¶
- Abre Training → Loss functions.
- Activa XM.
- Pon XM Candidates en
2o4. - Elige XM Training Target:
noisepara modelos de difusión o flow.routepara planners autorregresivos/RVQ.- Mantén XM Selection Scope en
samplesalvo que la guía del modelo recomiende block selection. - Deja XM Block Size en
0salvo que uses selección por bloques basada en rutas.
Config JSON / CLI¶
{
"xm_enabled": true,
"xm_candidate_count": 4,
"xm_training_target": "noise",
"xm_selection_scope": "sample",
"xm_block_size": 0
}
Para entrenamiento AR/RVQ con rutas:
{
"xm_enabled": true,
"xm_candidate_count": 4,
"xm_training_target": "route",
"xm_selection_scope": "block",
"xm_block_size": 16
}
Opciones¶
xm_enabled: activa XM.xm_candidate_count: candidatos por sample. Debe ser al menos2cuando XM está activo.xm_training_target: tipo de candidato:noisepara difusión/flow,routepara planners de tokens.xm_selection_scope: granularidad de selección.sampleelige un ganador por sample;blockelige por bloques cuando la familia lo soporta.xm_block_size: tamaño del bloque de tokens o frames.0significa la secuencia supervisada completa.
Cómo Elegir Valores¶
| Situación | Inicio sugerido |
|---|---|
| LoRA de imagen o video | xm_candidate_count=2, xm_training_target=noise, xm_selection_scope=sample |
| Dataset grande o ambiguo | Probar xm_candidate_count=4 |
| Planner RVQ/audio | xm_training_target=route, xm_selection_scope=block, block size de la guía del modelo |
| Primera prueba en una familia | Mantener block size 0 y comparar validación contra una baseline sin XM |
El coste suele crecer aproximadamente con el número de candidatos.
Logs¶
XM puede registrar:
xm_loss: loss seleccionada.xm_candidate_loss_mean: loss media antes de seleccionar.xm_candidate_0_wins,xm_candidate_1_wins, etc.: frecuencia de victoria por candidato.xm_route_usageo entradas por ruta en modelos AR/RVQ.
Buenas señales: varios candidatos ganan a veces, validación mejora y las rutas no colapsan durante mucho tiempo.
Señales preocupantes: un candidato gana siempre desde el inicio, baja la loss pero empeora validación, o el coste de memoria/tiempo obliga a reducir demasiado el batch.
Compatibilidad¶
Consulta la tabla de funciones en Quick Start.
Reglas generales:
- XM de difusión/flow usa candidatos de ruido y selección por sample.
- XM AR/RVQ usa candidatos de ruta y puede soportar selección por bloques.
- Las familias no soportadas fallan explícitamente.
Para XM de ruido en difusión, SimpleTuner actualmente trata estas funciones como incompatibles salvo que una familia indique lo contrario: TwinFlow, Scheduled Sampling, input_perturbation, CREPA self-flow y loss de segmentación estocástica.
Relación con Otras Funciones¶
- MixFlow cambia la trayectoria de entrenamiento; XM cambia la selección de candidatos.
- Diff2Flow cambia el target de modelos legacy; XM puede seleccionar candidatos antes de reducir la loss donde esté soportado.
- NextLat regulariza dinámicas de hidden states; XM elige rutas o ruidos candidatos.
- LayerSync y CREPA alinean representaciones; XM selecciona el candidato más explicativo.
Consejos Prácticos¶
- Usa seeds de validación fijos al comparar.
- Baja el batch size si
xm_candidate_countpresiona VRAM. - No juzgues XM solo por training loss; mira validación y diversidad.
- En AR/RVQ, evita block size
1salvo recomendación específica. - Haz primero una ablación corta: mismo modelo, dataset y seed, solo XM on/off.