Fine-tuning de VLM pequeños
Blog|

Fine-tuning de VLM pequeños

S
Sereact5 min de lectura
Fine-Tuning small VLMs

Hacer que los modelos visión-lenguaje pequeños funcionen en producción

En Sereact construimos la IA que gobierna robots industriales en producción real: más de 200 sistemas en Europa y más de mil millones de picks reales. Eso viene de una decisión deliberada: aprender de despliegues reales en lugar de demos de laboratorio, con orientaciones impredecibles, embalajes que varían, iluminación cambiante, SKU nuevas cada semana y un presupuesto de rendimiento exigente en cada celda.

Hemos hablado mucho del lado de la planificación, donde Cortex 2.0 añade un world model para que un robot pueda sopesar varias acciones posibles y descartar las malas antes de moverse. Pero la planificación solo vale lo que le entrega el modelo de percepción: si el modelo visión-lenguaje que abre la pila lee mal la escena, ningún razonamiento posterior lo arregla. Por eso este artículo muestra cómo conseguir un VLM compacto lo bastante preciso para sostener ese pipeline, rápido de reentrenar cuando la planta cambia y lo bastante veloz para seguir el ritmo de la línea. En un benchmark suele ganar el modelo más grande, pero en una planta esa ventaja tiende a desvanecerse, y alcanzar los tres objetivos a la vez depende de cómo se entrene.

Motivación

El fine-tuning cumple varias funciones, y conviene separarlas porque ninguna pasada de entrenamiento las cubre todas:

  • Alineación de modalidades. Un modelo de lenguaje solo textual y un vision encoder se preentrenan de forma independiente y no comparten terreno común. Las features visuales no significan nada para el modelo de lenguaje hasta que construimos el puente entre ambos.
  • Adaptación al dominio. Un modelo de propósito general cubre cada dominio de forma superficial. El fine-tuning lo lleva a los datos de almacén que realmente verá.
  • Competencia en la tarea. Nombrar lo que hay en la imagen no es lo mismo que razonar sobre ello.
  • Precisión fiable. El preentrenamiento y el instruction-tuning te llevan hasta «casi siempre correcto»; convertir eso en «verificablemente exacto» es un objetivo aparte.
  • Eficiencia de iteración. Los despliegues reales cambian sin parar: una SKU nueva, otra iluminación, un layout rehecho. Una receta que puedes volver a lanzar en horas es un activo; una que solo puedes permitirte cada trimestre es un lastre.

Por eso dividimos el trabajo en tres etapas, cada una a cargo del objetivo para el que mejor sirve: conectar el vision encoder al modelo de lenguaje para que vea, construir competencia en la tarea con supervisión directa y, después, usar recompensas verificables para hacer exactas las respuestas críticas. El orden importa: cada etapa hace un trabajo del que depende la siguiente. En nuestro conjunto reservado de picking, kitting e inspección, la precisión de coincidencia exacta sube de ~84 % tras la etapa 2 a ~93 % tras la etapa 3.

Pipeline de entrenamiento en tres etapas: alinear visión y lenguaje, enseñar la tarea completa y RL con recompensa verificable

Una nota sobre los datos

Las tres etapas se entrenan con datos extraídos de la propia flota: frames reales de celdas reales, que es lo que mantiene al modelo honesto respecto a las orientaciones, los embalajes y la iluminación con los que se encontrará de verdad. Los frames en bruto por sí solos no bastan, porque la mayoría no llevan instrucción ni objetivo. Siguiendo la receta que introdujo LLaVA [1], ampliamos las imágenes de la flota con datos de instrucción y respuesta generados por un modelo maestro más potente, pidiéndole que convierta una escena en el tipo de pregunta-respuesta o traza de razonamiento que cada etapa necesita. El equilibrio se desplaza entre etapas: la etapa 1 es la mayor en imágenes en bruto pero la más barata de etiquetar (solo descripciones, unos pocos millones de pares), la etapa 2 es más pequeña pero más rica y la más cara (unos cientos de miles de pares instrucción-respuesta con trazas de razonamiento), y la etapa 3 es la menor (decenas de miles de prompts), ya que cada uno solo necesita un objetivo verificable calculado, no una respuesta redactada.

Ejemplos de la familia de tareas con la que entrenan estas etapas:

Picking

Kitting

Gestión de devoluciones

Cerrar la brecha con un modelo más pequeño

Un VLM pequeño sigue el ritmo de la línea y se reentrena rápido cada vez que la tarea cambia, algo que en un despliegue real ocurre constantemente. Un modelo más grande puede ganar en un benchmark, pero si no responde en el tiempo que la línea permite es inservible aquí, sea cual sea su puntuación. El objetivo es un modelo que corra pequeño y rápido y aun así alcance aproximadamente el nivel de uno mucho mayor en las tareas que importan.
La dificultad está en la densidad de capacidades. Un modelo pequeño tiene menos espacio para albergar a la vez la percepción general y el razonamiento específico que exige una tarea, así que entrenado sin cuidado o bien no logra conectar visión con lenguaje o bien memoriza los casos fáciles y se derrumba en los difíciles. Entrenado en el orden correcto, en cambio, puede cerrar la mayor parte de esa brecha: para eso están las tres etapas siguientes, cada una dirigida a una forma distinta en la que un modelo pequeño tiende a fallar.

Etapa 1: alinear visión y lenguaje

Partimos de dos piezas que nunca fueron entrenadas para hablarse: un vision encoder preentrenado que convierte una imagen en features visuales y un modelo de lenguaje solo textual que jamás ha consumido más que tokens de palabras. El modelo se conecta como un pipeline. El vision encoder produce features a partir de la imagen, un projector proyecta esas features al espacio de embedding de tokens del modelo de lenguaje, y este las lee como si fueran palabras y genera texto. La instrucción de texto se tokeniza y se introduce directamente en el modelo de lenguaje, donde se une a los tokens visuales en una única secuencia combinada. Esta receta en dos etapas sigue a LLaVA [1].

El adaptador de proyección empieza sin significado: los tokens visuales que produce no se corresponden con nada del vocabulario del modelo de lenguaje. La etapa 1 entrena ese projector y nada más. Tanto el vision encoder como el modelo de lenguaje permanecen congelados, ya que ambos aportan de por sí sólidas capacidades generales, y los únicos parámetros que se mueven son los del projector, θ={θproj}\theta = \{\theta_{\text{proj}}\}, bajo el objetivo supervisado ordinario de predicción del siguiente token:

Lalign=(x,y)tlogpθ(yty<t,ximage,xprompt),θ={θproj}\mathcal{L}_{\text{align}} = -\sum_{(x,y)} \sum_t \log p_{\theta}(y_t \mid y_{<t}, x_{\text{image}}, x_{\text{prompt}}), \theta = \{\theta_{\text{proj}}\}
Una caja de kit abierta, parcialmente llena, con los artículos de origen dispuestos a los lados

Alineado:
«Una caja de kit abierta, parcialmente llena, con los artículos de origen dispuestos a los lados.»

Desalineado:
«Una caja de venta precintada, lista para enviar.»

Los datos son deliberadamente simples: un prompt del tipo «describe la imagen» acompañado de una descripción. El único trabajo del projector es convertir features visuales en tokens que el modelo de lenguaje congelado ya entiende; en la práctica, un tokenizador visual compatible con él.

La etapa es barata y de bajo riesgo, pero saltársela envenena todo lo que viene después: mientras el projector no esté alineado, el modelo de lenguaje razona sobre tokens visuales que no significan nada para él, y todo lo que se construya encima hereda esa confusión.

Picking – Etapa 1

Picking – Etapa 1

Kitting – Etapa 1

Kitting – Etapa 1

Devoluciones / Inspección – Etapa 1

Devoluciones / Inspección – Etapa 1

Etapa 2: enseñar las tareas difíciles, de extremo a extremo

Una vez que el projector permite ver al modelo, se sube la dificultad. El vision encoder sigue congelado, pero ahora el projector y el modelo de lenguaje se entrenan juntos, de modo que los parámetros entrenables pasan a ser θ={θproj,θLM}\theta = \{\theta_{\text{proj}}, \theta_{\text{LM}}\}. El modelo deja de limitarse a describir escenas y empieza a responder preguntas reales.

El cambio respecto a la etapa 1 está sobre todo en los datos. Los prompts son ahora las preguntas que el despliegue plantea de verdad («cuántos contenedores hay en la imagen», «está vacío este contenedor», «qué hueco queda por llenar»), y el objetivo es una breve cadena de pensamiento seguida de la respuesta. El objetivo y=(c,a)y = (c, a) se divide en una traza de razonamiento c=(y1,,ym)c = (y_1, \dots, y_m) y la respuesta final a=(ym+1,,yT)a = (y_{m+1}, \dots, y_T), y supervisamos ambas partes de forma distinta, porque son objetivos de naturaleza distinta.

La respuesta se supervisa exactamente como en la etapa 1, con la pérdida ordinaria de siguiente token sobre el tramo de la respuesta:

LSFT=tlogpθ(yty<t,x)\mathcal{L}_{\text{SFT}} = -\sum_{t} \log p_{\theta}(y_t \mid y_{<t}, x)

La traza requiere una mano más ligera. Muchas trazas llevan a la misma respuesta, así que obligar al modelo a reproducir la redacción exacta del maestro sobreajusta su fraseo, y cuando un ejemplo lleva una traza vacía o trivial la pérdida simple le enseñaría al modelo que saltarse el razonamiento es el objetivo.

Seguimos la tasa de trazas de razonamiento válidas junto a la precisión, en lugar de confiar solo en la precisión [2].

Esta es la etapa en la que el modelo adquiere la competencia que la tarea exige de verdad. Es la más ávida de datos de las tres, pero sigue siendo aprendizaje supervisado ordinario, lo que la mantiene estable y predecible. Al final tienes un modelo que ve y que es ampliamente capaz en la familia de tareas, pero con dos límites que preparan la etapa final. El fine-tuning supervisado (SFT) enseña al modelo a imitar: reproduce bien las respuestas del maestro en datos parecidos al conjunto de entrenamiento, pero generaliza mal a la larga cola que la planta produce realmente. Y cada nueva ronda de SFT arrastra al modelo entero hacia la nueva tarea, erosionando lo que ya sabía (olvido catastrófico). Como solo imita, no es fiablemente preciso en los casos en los que hay una única respuesta correcta y quedarse cerca no basta. La etapa 3 esquiva todo esto: optimizar una recompensa verificable en lugar de imitar tokens fijos hace precisas las respuestas críticas y lleva al modelo más allá del mimetismo, hacia un razonamiento que se transfiere, sin sobrescribir todo lo demás.

Picking – Etapa 2

Picking – Etapa 2

Kitting – Etapa 2

Kitting – Etapa 2

Devoluciones / Inspección – Etapa 2

Devoluciones / Inspección – Etapa 2

Etapa 3: aprendizaje por refuerzo con recompensas verificables

La etapa final apunta a esa precisión. En lugar de aprender un reward model aparte, calculamos la recompensa directamente a partir de si la respuesta es correcta. Prescindir del reward model aprendido es lo que mantiene esta etapa asequible dentro del presupuesto de un modelo pequeño.

El optimizador es GRPO (Group Relative Policy Optimization) [3]. La política πθ\pi_\theta (el propio VLM pequeño) muestrea un grupo de GG candidatos por prompt, puntúa cada uno frente al objetivo verificable y estandariza las recompensas dentro del grupo, de modo que el propio grupo aporta la referencia:

A^i=rimean(r1:G)std(r1:G)\hat{A}_i = \frac{r_i - \text{mean}(r_{1:G})}{\text{std}(r_{1:G})}

Esa ventaja impulsa una actualización de gradiente de política recortada, el mismo sustituto que PPO pero con la referencia del grupo en lugar de un crítico aprendido. Con el cociente de importancia por token

ρi,t(θ)=πθ(yi,tx,yi,<t)πθold(yi,tx,yi,<t)\rho_{i,t}(\theta) = \frac{\pi_{\theta}(y_{i,t} \mid x, y_{i,<t})}{\pi_{\theta_{\text{old}}}(y_{i,t} \mid x, y_{i,<t})}, el objetivo es
J(θ)=E[1iyii=1Gt=1yimin(ρi,t(θ)A^i,clip(ρi,t(θ),1εlow,1+εhigh)A^i)]\mathcal{J}(\theta) = \mathbb{E} \left[ \frac{1}{\sum_i |y_i|} \sum_{i=1}^{G} \sum_{t=1}^{|y_i|} \min \left( \rho_{i,t}(\theta) \hat{A}_i, \text{clip} \left( \rho_{i,t}(\theta), 1 - \varepsilon_{\text{low}}, 1 + \varepsilon_{\text{high}} \right) \hat{A}_i \right) \right]

Como todos los candidatos comparten la misma ventaja A^i\hat{A}_i, se refuerza toda la traza de razonamiento que hay detrás de una buena respuesta, no solo el token final. Usamos DAPO [3] en lugar del GRPO estándar: desacopla el rango de recorte (εlow,εhigh\varepsilon_{\text{low}}, \varepsilon_{\text{high}}) para mantener viva la exploración, elimina las normalizaciones que favorecen salidas largas y agrega la pérdida a nivel de token. Así el entrenamiento es más estable y las salidas se mantienen cortas, que es lo que mantiene rápido al modelo desplegado.

La recompensa rir_i depende del tipo de respuesta de la tarea, y merece la pena enunciar los dos casos de forma explícita. Cuando hay una única respuesta definida —una categoría, un sí/no, una etiqueta discreta—, la recompensa es un indicador que solo se activa con una coincidencia exacta:

ri=1[y^i=y]={1y^i=y0otherwiser_i = \mathbb{1}[\hat{y}_i = y] = \begin{cases} 1 & \hat{y}_i = y \\ 0 & \text{otherwise} \end{cases}

Cuando la respuesta es una magnitud numérica o medible, el todo o nada desperdicia señal. La recompensa escala entonces con lo cerca que la predicción quede del objetivo, dando crédito parcial por acercarse y una señal más fuerte por acertar exactamente, para una tolerancia τ\tau:

ri=max(0,1y^iyτ)r_i = \max\left(0, 1 - \frac{|\hat{y}_i - y^*|}{\tau}\right)

En cualquiera de los dos casos, la supervisión viene de la propia tarea, no de un evaluador humano ni de un proxy aprendido: la función que puntúa al modelo es la misma que usarías para comprobarlo en producción.

Picking – Etapa 3

Picking – Etapa 3

Kitting – Etapa 3

Kitting – Etapa 3

Devoluciones / Inspección – Etapa 3

Devoluciones / Inspección – Etapa 3

Por qué importa el orden

Las tres etapas no son intercambiables. Primero la alineación, porque razonar sobre features mal alineadas es razonar sobre lo que no toca. Después la competencia supervisada amplia, porque el RL afila una capacidad que ya existe pero no puede fabricar una de la nada. El RL con recompensa verificable al final, porque su cometido es convertir «casi siempre correcto» en «fiablemente exacto» en los casos que tienen una respuesta comprobable.

Ejecutadas en ese orden, cada etapa hace un trabajo del que depende la siguiente y a ninguna se le pide una función que se le dé mal. El resultado es un modelo pequeño que se alinea bien, razona sobre la tarea real y alcanza la precisión que un caso de uso industrial exige de verdad, entrenado y servido a un coste que encaja con el despliegue en lugar de pelearse con él.

Conclusión

Hacer que los VLM pequeños funcionen en producción no va de encogerlos con ingenio. Va de escalonar el entrenamiento para que un modelo compacto gaste bien su capacidad limitada: alinear visión y lenguaje, construir competencia en la tarea con supervisión directa y luego usar recompensas verificables para hacer precisas las respuestas críticas. Prescindir del reward model aprendido en esa última etapa no es una concesión: es el movimiento que mantiene todo el pipeline lo bastante eficiente como para reentrenarlo con la frecuencia que un despliegue real exige.

Referencias

[1] Liu, Li, Wu, Lee. Visual Instruction Tuning (LLaVA). NeurIPS 2023. arXiv:2304.08485.

[2] Twist, Yannakoudakis, Zhang. Reasoning-Trace Collaps: Evaluating the Loss of Explicit Reasoning During Fine-Tuning 2026. arXiv:2605.21127.

[3] Shao et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. 2024. arXiv:2402.03300.

[4] Yu et al. DAPO:An Open-Source LLM Reinforcement Learning System at Scale. NeurIPS 2025. arXiv:2503.14476.

Recursos del artículo

Acceda al contenido y los recursos de esta publicación

Contenido de texto

Copie el texto completo del artículo al portapapeles para leerlo o compartirlo fácilmente.

Recursos visuales

Descargue en un archivo ZIP todas las imágenes de alta resolución utilizadas en este artículo.

Últimos artículos