lunes, 5 de octubre de 2026

Cómo hacemos que un modelo razone (y VI): destilado

Con este post pongo fin a la serie de artículos dedicados a ver los mecanismos que se utilizan para convertir un gran modelo de lenguaje (LLM, 'Large Language Model') en un modelo razonador (LRM, 'Large Reasoning Model').

Y todo ello siguiendo, como en el caso de los post anteriores, el hilo argumental del libro  'Building a resoning model (from scratch)' de Sebastian Raschka.

En esta ocasión, vamos a hablar del destilado ('distillation') y añadir alguna otra consideración adicional.


Un breve recordatorio 


Muy brevemente recordar que en posts anteriores hablamos de tres tipos de estrategias. 

La primera estrategia suponía utilizar técnicas fundamentalmente de prompting sin re-entrenar el modelo. Hablamos del uso de la cadena de pensamiento (CoT, 'Chain-Of-Thought') y la autoconsistencia ('self-consistency'). Y también hablamos del auto-refinamiento ('self-refinement') en que, de alguna forma, el modelo dialoga consigo mismo. En estos métodos, el modelo en sí mismo no cambia (su arquitectura y parámetros no se modifican) y, simplemente, lo guiamos desde, digamos, el exterior. Eso sí, para ello vamos a necesitar de un notablemente mayor esfuerzo computacional. Uniendo la idea de que estas técnicas se utilizan en tiempo de inferencia (no de entrenamiento) y de que exigen mayor esfuerzo computacional, hablábamos de métodos de escalado en tiempo de inferencia ('inference-time scaling').

La segunda estrategia sí que re-entrena el modelo (interviene durante el 'fine-tuning') y aplica aprendizaje por refuerzo. Vimos dos alternativas: el uso de recompensas verificables (RLVR, 'Reinforcement Learning with Verifiable Rewards') en que, de forma objetiva se puede deducir la recompensa a dar al modelo ante una respuesta) y el uso de realimentación por parte de anotadores humanos (RLHF, 'Reinforcement Learning with Human Feedback').


Destilado


Y nos toca ahora ver la tercera estrategia: el destilado ('distillation').

Como también ocurre con todas las técnicas vistas hasta ahora, no se trata de algo que se utilice específicamente para conseguir modelos razonadores, sino que es una estrategia de entrenamiento utilizada ya en otros ámbitos (por ejemplo, para conseguir modelos especializados más compactos).

En el destilado se utilizan dos modelos: un gran modelo ya entrenado que actúa como maestro y otro modelo (generalmente menor) que actúa como estudiante y que es el que realmente queremos entrenar. Es una técnica que, más allá de los modelos razonadores se utiliza, precisamente, para absorber la parte principal del conocimiento de un gran modelo en uno bastante más pequeño y de menor exigencia computacional (y, por tanto, menor coste en inferencia).

La idea es que ante una misma pregunta, al modelo estudiante se le muestra la respuesta dada por el modelo maestro y eso sirve como feedback para el entrenamiento.

En el caso de usar el destilado para conseguir un modelo razonador, con frecuencia se trabaja, no sólo con la respuesta final del modelo maestros sino también las trazas, es decir unos resultados intermedios que, de alguna manera, muestran cómo ha razonado el modelo maestro.


Tipos de destilado


Lo anterior lleva a dos estrategias básicas de destilado.

En el destilado duro ('hard distillation'), se entrena al estudiante sólo con el resultado (la respuesta) ofrecido por el modelo maestro.

En el destilado blando ('soft distillation') se entrena al modelo estudiante con resultados intermedios e internos del modelo maestro. En concreto, con las distribuciones de probabilidad asignadas a los tokens del catalogo ante una petición concreta.

Como suele ocurrir, también existen estrategias híbridas que mezclan ambas opciones.


Esto es casi todo


Y esto todo lo que quería contar sobre la conversión de grandes modelos de lenguaje en modelos razonadores. Bueno, casi todo. Quería antes de cerrar este post y esta serie hacer dos muy breves consideraciones.


Antes de acabar: una pieza de la que no hemos hablado


La primera tiene que ver con los datos de entrenamiento, para las dos últimas estrategias que suponen un 'fine tunning' del modelo y, por tanto, un entrenamiento. 

Parece lógico, aunque no se ha mencionado hasta ahora, que debemos disponer de datos de entrenamiento diseñados específicamente para forzar un razonamiento: problemas matemáticos, lógicos o complejos de alguna manera.

En la referencia bibliográfica que he empleado, menciona con frecuencia, por ejemplo, el banco de datos MATH-500 que, como insinúa su nombre, contiene 500 problemas de naturaleza matemática habitualmente usados en el entrenamiento de modelos razonadores y que podemos encontrar, por ejemplo, en Hugging Face.


Una pequeña reserva


La segunda consideración es sólo una impresión o intuición personal y sin ninguna justificación teórica, más que esa intuición.

Se trata de que me ha sorprendido que, como comentaba más arriba, realmente ninguna técnica usada es realmente específica ni de la inferencia ni del entrenamiento de modelos razonadores y pueden usarse (y se usan) con modelos no razonadores. Tampoco parece (al menos yo no he visto nada al respecto) que haya ningún cambio en la arquitectura interna de estos modelos.

Y, aunque eso seguramente sea bueno y una demostración de la potencia y versatilidad de los grandes modelos de lenguaje, en el fondo me quedo preguntándome ¿De verdad eso es todo? ¿No hay nada más?

Aparentemente la respuesta es que no, pero seguiré leyendo e investigando a ver qué encuentro. Si aparece algo nuevo, puede que reabra la serie de posts para comentarlo.


Conclusiones


Y con esto cerramos, salvo sorpresas, la serie dedicada a ver las técnicas para convertir un gran modelo de lenguaje en un modelo razonador. Hemos visto tres estrategias y cinco técnicas a lo largo de seis posts.

Aunque vale la pena seguir observando la evolución a nivel de arquitectura y entrenamiento de los modelos razonadores, al menos ya tenemos una base para saber mejor cómo se crean.


Artículos de este blog relacionados



No hay comentarios:

Publicar un comentario