Rubén Rodríguez Abril

Cadena de pensamiento (CoT)

El método Chain-of-Thought (CoT) es un tipo de prompt engineering en el se instruye al modelo de lenguaje para que exponga los diferentes pasos lógicos que le han llevado a generar una determinada respuesta. Al modelo se le pueden ofrecer varios ejemplos dentro del prompt (Manual Cot, Few-shot CoT), o bien le puede pedir simplemente que razone paso a paso su respuesta (Zero-shot CoT).

Introducción

El proceso deductivo humano no suele realizarse de forma instantánea, sino que por lo general se lleva a cabo a través de sucesivos pasos lógicos que culminan en una conclusión final. Sin embargo, los transformers, que son un modelo autorregresivo y carecen de estado interno, deben resolver los los procesos deductivos de un modo casi inmediato, cuando concluyen la lectura del prompt del usuario y deben imprimir el primer token de la respuesta.

Por este motivo, el artículo “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models” de Google Research propuso una modificación del uso de los modelos de lenguaje. La propuesta consistía en que éstos imprimieran no sólo la respuesta a la pregunta del usuario sino también el procedimiento lógico seguido para elaborar dicha respuesta, denominado, en lengua inglesa Chain-of-Thought (cadena de pensamiento). En la imagen se muestran varios ejemplos ofrecidos por los propios investigadores.

Figura 1. Respuesta del modelo a diferentes tareas. En color los pasos intermedios que constituyen la “cadena de de pensamiento”, y que por lo general están ausentes en las respuestas de los modelos de lenguaje ordinarios. Fuente: “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models”.

Como método de prompt engineering que es, Chain-of-Thought (CoT) no requiere la modificación de la arquitectura de ningún modelo particular ni la alteración de ninguna base de datos. En su lugar, se centra en reformular las entradas de los usuarios, para que éstas soliciten al modelo de lenguaje que imprima sus pasos de razonamiento intermedio. Ello puede realizarse ofreciendo en el propio prompt ejemplos de cadenas de razonamiento (Manual CoT, Few-shot CoT). O bien pidiendo, sin más, al modelo, que exponga su razonamiento paso a paso, sin proporcionarle ejemplos previos (Zero-shot CoT).

Los autores del citado artículo evaluaron el nuevo sistema en cinco modelos ya existentes, entre los que se encontraban LaMDA, PaLM o GPT-3. En todos los casos la inferencia se realizó aplicando un algoritmo voraz (greedy decoding), en cuya virtud el token con mayor probabilidad asignada por la capa softmax es agregado a la nueva cadena en formación.

Figura 2. Resumen de diferentes pruebas realizadas a diferentes modelos en diferntes pruebas. El eje abscisas señala el tamaño del modelo en miles de millones de parámetros. El eje de ordenadas, su tasa de acierto. Fuente: “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models”.

El uso de cadenas de razonamiento en un modelo de lenguaje plantea dos grandes problemas:

-A menudo, un problema puede ser atacado desde diferentes ángulos, por lo que es conveniente que el modelo de lenguaje produzca paralelamente varias cadenas de razonamiento alternativas, con diferentes conclusiones, y se elija la más certera entre ellas.

-Además, si se trata de un procedimiento manual o a pocas muestras (few shot), los prompts de usuario deben ser modificadas para proporcionar ejemplos de pasos deductivos intermedios. Si esta modificación se hace por operadores humanos, ello implica una carga de trabajo considerable.

Para abordar ambos problemas fueron propuestos diferentes métodos.

Cadenas paralelas de razonamiento

En el estudio “Self-consistenc improves Chain of Thought reasoning in Language Models” se presenta un novedoso mecanismo de autoevaluación del modelo denominado autoconsistencia.

Como el lector recordará, en los modelos de lenguaje, las dos últimas capas (lineal y softmax) realizan una distribución de probabilidad sobre todos los tokens del vocabulario. Los K tokens más puntuados en cada paso (K-top) son agregados a la cadena del siguiente modo:

-Cuando K = 1, se emplea un “algoritmo voraz” en el que sólo se selecciona el token con probabilidad más alta en cada paso.

-Cuando K > 1 se forman cadenas paralelas. Dado que en este último caso, el número de cadenas aumenta exponencialmente en cada paso, se impone un límite superior de L cadenas (las que hayan obtenido más puntuación) que recibe el nombre de anchura de haz (beam width). La puntuación de cada cadena se obtiene como el producto de las probabilidades de todos sus tokens.

En el enfoque del trabajo citado, una vez que concluye la lectura del prompt el modelo inicia la generación de decenas de cadenas paralelas de razonamiento, con una media de 40 trayectorias por consulta. Cada una de estas secuencias está formada por la concatenación de un par (ri, ai), donde ri son los pasos intermedios y ai la deducción final.

Dado que puede haber diferentes soluciones para el problema, es necesario seleccionar la más correcta para cada consulta. Para ello se utilizan dos criterios posibles: el de la frecuencia (que implica que la respecta ai más frecuente es la correcta, empleando un método basado en la simple votación) y el de la puntuación probabilística (que toma por referencia los valores generados por la función softmax). En este último caso, la puntuación total de cada cadena es la siguiente:

\text{Puntuación} = \frac{1}{K} \sum_{t_k} \log P(t_k | \dots)

donde tk es el nuevo token que va a imprimirse y log P(tk|….) es la probabilidad que la última capa softmax atribuye a dicho token. La presencia del factor (1/K) impide que las cadenas más largas obtengan puntuación por el simple hecho de su longitud.

Figura 3. En la parte de arriba, una cadena de razonamiento funcionando a K = 0 (algoritmo voraz). En la parte de abajo, K = 3, y las respuestas se ponderan de acuerdo con el algoritmo de autoconsistencia. Fuente: “Self-consistenc improves Chain of Thought reasoning in Language Models”.

El artículo “Making Large Language Models Better Reasoners with Step-Aware Verifier”, publicado por investigadores de la Universidad de Pekín, va un paso más allá, y propone crear varios prompts para un mismo problema lógico-matemático, con el propósito de estimular la variabilidad de las líneas de razonamiento. Además, se introduce un verificador encargado de puntuar la eficiencia de cada cadena y de guiar el mecanismo de voto.

Figura 4. Esquema del funcionamiento del algoritmo DiVeRSe, propuesto por el artículo “Making Large Language Models Better Reasoners with Step-Aware Verifier”. Un mismo problema es representado por diversos “prompts”. Para cada uno cada uno de éstos se forman varias líneas de razonamiento. Un sistema de votación y verificación final determina cuál es la respuesta correcta.

Su algoritmo, denominado DiVeRSe, funciona como sigue: para cada problema se crean M1 prompts. En cada prompt son generadas M2 líneas de razonamiento, de lo que resulta que el modelo de lenguaje debe de procesar paralelamente M1 x M2 cadenas de texto en formación en total. Una función verificadora se encarga de seleccionar la cadena correcta.

Como función verificadora se usa una versión modificada de BERT, deberta-v3-large, cuyo token inicial [CLS] es usado para realizar las predicciones. Matemáticamente, el verificador asigna a cada cadena formada por un prompt xi, una línea de razonamiento zi y una conclusión yi la puntuación f(xi,zi,yi). La conclusión y más puntuada es la elegida:

\hat{y} = \arg\max_{y} \sum_{i=1}^{M} \mathbf{1}_{y_i = y} \cdot f(x_i, \mathbf{z}_i, \mathbf{y}_i)

En la ecuación, M es el número de cadenas totales y 1yi=y equivale a uno cuando yi e y son iguales y a cero en caso contrario.

En la mayor parte de sus experimentos, los investigadores usaron valores que oscilaban entre M1 = 5 y M2 = 20, resultando de media un total de 100 líneas de razonamiento diferentes por consulta.

Cadenas con cero muestras (Zero-shot CoT)

El trabajo “Large Language Models are Zero-Shot Reasoners” (Kojima et al), realizado por investigadores de la Universidad de Tokio y de Google Reserach, presentó evidencias de que los modelos de lenguaje son capaces de generar cadenas de razonamiento a cero muestras (zero shot).

Basta con pedir a un modelo que razone su respuesta paso a paso, incluso sin proporcionarle ejemplos previos, para que sus capacidades de razonamiento crezcan extraordinariamente, en diversas áreas como la aritmética (métricas MultiArith, GSM8K, AQUA-RAT, SVAMP), el razonamiento simbólico (Last Letter, Coin Flip) y otras tareas de razonamiento lógico (Date Understanding, Tracking Shuffled Objects).

El procedimiento es extraordinariamente sencillo y es mostrado en la imagen 5. Se usan dos prompts consecutivos. El primero viene formado por la concatenación de la pregunta del usuario (Q) con una orden (A) que pide al modelo que razone paso a paso. Éste produce una cadena de razonamiento (C). Tras ello, se introduce un segundo prompt, formado por la concatenación de Q, A y C con una orden (T) que induce la impresión de la respuesta buscada. El transformer, como modelo autorregresivo que es, completa ese prompt iterativamente hasta que aparece el token [EOS].

Figura 5. Esquema del CoT a cero muestras propuesto por Kojima et al.

El trabajo reveló que muchos modelos de lenguaje, como InstructGPT o PaLM, tienen unas extraordinarias capacidades cognitivas a cero muestras aun ocultas e inexploradas, que pueden ser extraídas mediante prompts relativamente simples.

CoT sin prompt

Por último, haremos referencia a una novedosa técnica diseñada por investigadores de Google DeepMind, en la cual la cadena de razonamiento es generada mediante alteraciones en la descodificación, sin necesidad de que haya modificaciones en las peticiones de los usuarios.

De nuevo, la descodificación voraz es abandonada. En el primer paso del proceso generador se seleccionan los K tokens que hayan obtenido mayor puntuación en logits, lo que da inicio a la impresión paralela de K cadenas diferentes con sus correspondientes respuestas. En el trabajo señalado, sus autores fijaron K = 10.

Figura 6. En el caso de la imagen, K = 5. En el primer paso de decodificación se eligen los cinco tokens con mayor puntuación en logits, que sirven de semilla para sendas cadenas de razonamiento. Fuente: “Chain-of-Thought reasoning without prompting”. Las respuestas están coloreadas de azul. Cuanto mayor es la intensidad del color, mayor es la confianza del algoritmo en la misma.

Para seleccionar la respuesta correcta, los autores introducen una nueva métrica denominada confianza en la respuesta, que se basa en la diferencia en logits entre los dos tokens con mayor puntuación en la capa lineal. Cuanta mayor sea la distancia del token mejor puntuado sobre el segundo, mayor es la confianza del algoritmo en dicho token.

La fiabilidad de cada respuesta se calcula a partir de la confianza media por token en cada cadena. Las cadenas que contengan la misma respuesta son agrupadas y se suman las confianzas medias. La respuesta que obtenga mayor confianza media total es la elegida.

Matemáticamente, se expresa mediante la siguiente ecuación:

\Delta_{k,\text{respuesta}} = \frac{1}{|\text{respuesta}|} \sum_{t} \left( p(x_t^1) – p(x_t^2) \right)

donde Δk,respuesta es la confianza atribuida a la solución k, |respuesta| es la longitud de la cadena y p() y p() son los logits asignados a los tokens mejor puntuados en la posición t de la cadena.

Relevancia de CoT

Los sistemas de CoT han permitido descubrir y desarrollar capacidades hasta ahora ocultas de razonamiento simbólico y de deducción lógico-matemática en los modelos de lenguaje preentrenados. Por ello se han convertido, junto con el aprendizaje reforzado, en una pieza fundamental en los nuevos modelos de lenguaje chinos aparecidos en el año 2025, como DeepSeek R1 y Qwen 2.5-Max, que analizaremos en artículos subsiguientes.

SERIES