InstructGPT: prompts e instrucciones

Rubén Rodríguez Abril

InstructGPT es una versión mejorada de GPT-3, que incorpora aprendizaje supervisado y reforzado y que, como su propio nombre indica, ha sido optimizada para la ejecución de instrucciones proporcionadas por el usuario.

¿Por qué es necesario el afinamiento?

Uno de los grandes problemas a los que se enfrentan los grandes modelos de NLP (Large Language Models, LLMs) es su desalineamiento (misalignement) con las intenciones de sus creadores y usuarios: es decir, el hecho de que no estén funcionando del modo previsto por estos últimos, exhibiendo un comportamiento ineficaz, inexacto o incluso tóxico. El modelo se inventa así informaciones inexistentes (“alucinación de la IA”) o incluso difunde contenido dañino. Éste es un problema que aparecía recurrentemente en la versión inicial de GPT-3, a pesar del gran incremento en el número de parámetros respecto a GPT-2.

A nuestro juicio, buena parte de estos problemas se derivan de la ausencia de afinamiento (fine-tuning) o cualquier otro tipo de supervisión durante el entrenamiento. Sin afinamiento, el modelo es una suerte de loro parlante, que mediante sus unidades de atención analiza y captura las estructuras lingüísticas de millones de frases durante el pre-entrenamiento, pero sin aprehender el significado intrínseco de los conceptos y sin tener contacto con los qualia (visuales, auditivos, espaciales) vinculados a los mismos. La máquina simplemente genera cadenas de palabras imitando los textos ya leídos durante el entrenamiento. No es de extrañar que a menudo los outputs producidos por la misma, aunque sintácticamente contengan frases gramaticalmente coherentes, a menudo alberguen un contenido de dudosa calidad.

InstructGPT

Para garantizar el buen comportamiento de GPT-3 y su alineamiento con las intenciones de creadores y usuarios, los investigadores de OpenAI reintrodujeron el afinamiento en el modelo y además lo dotaron de un nuevo sistema de aprendizaje reforzado. De lo que se trataba era de crear un modelo de NLP útil (capaz de resolver la tarea que le había sido encomendada), honesto (que no se inventara información) e inocuo. El resultado fue la creación de una nueva versión de GPT-3 a la que denominaron InstructGPT, y que como su propio nombre indica estaba especializada en la ejecución de instrucciones.

Ejemplo que muestra los diferentes resultados que ofrece GPT-3 y InstructGPT ante un zero-shot prompt.
A través de un prompt se solicita al modelo que explique el viaje a la luna a un niño de 6 años en unas pocas palabras. Dado que no se han ofrecido ejemplos (“zero-shot”), GPT-3 no sabe muy bien qué es lo que hacer, y procede a escribir cuatro frases similares. Por el contrario, InstructGPT, que ha sido afinado para responde a instrucciones, es capaz de responder adecuadamente a la petición. Fuente: OpenAI Research

A nivel de usuario, el funcionamiento de InstructGPT es muy sencillo: mediante una API se solicita la realización de una determinada tarea, que puede ser la generación de un texto, respuesta a un cuestionario, lluvia de ideas (brainstorming), chateo, resumen o clasificación. La petición (prompt) sirve de entrada al modelo, que a través de un método autorregresivo va progresivamente imprimiendo la cadena de salida.

Arquitectura de Instruct GPT

La arquitectura de InstructGPT no sólo no es más grande que la de GPT-3 sino que de hecho es mucho más pequeña: de 175.000 millones (GPT-3) de parámetros se pasa tan sólo a 1.300 millones (InstructGPT). A pesar de esta extraordinaria reducción de tamaño, la eficiencia de InstructGPT es muy superior en todas las tareas, como se puede comprobar en la imagen:

Entrenamiento de InstructGPT

La clave de la eficiencia del sistema es su sistema de entrenamiento, que se estructura en tres fases: preentrenamiento, afinamiento y aprendizaje reforzado. La fase de preentrenamiento es similar a la de la primitiva versión de GPT-3, por lo que nos remitimos a los dos artículos inmediatamente anteriores anteriores de esta serie. En la fase de afinamiento el entrenamiento es supervisado y se lleva a cabo con pares prompt-respuesta creados previamente por etiquetadores humanos. La última fase es un tipo de aprendizaje supervisado denominado RLHF (Reinforced Learning by Human Feedback), en el que grosso modo, las respuestas del modelo son premiadas o penalizadas siguiendo el criterio marcado previamente por observadores humanos.

Proceso de entrenamiento de InstructGPT en tres etapas: pre-etrenamiento, afinamiento (fine-tuning) y Reinforced Learning by Human Feedback (RLHF).
Diferentes tipos de datos para cada fase del entrenamiento de InstructGPT.

En este diagrama se describen las fases de entrenamiento de InstructGPT. El primer paso es el preentrenamiento de un modelo de GPT-3 a partir de bases de datos integradas por miles de millones de tokens. Seguidamente, tomando por punto de partida este modelo pre-entrenado creamos un modelo de afinamiento supervisado (supervised fine-tuning, SFT) y otro de recompensa (reward model, RM). El modelo SFT está entrenado para generar respuestas a los prompts y en su entrenamiento se emplean decenas de miles de pares prompt-respuesta creados por etiquetadores y usuarios humanos. El modelo RM es entrenado para puntuar las respuestas (a prompts) generadas por otros modelos de lenguaje. Es entrenado a partir de las puntuaciones dadas por usuarios humanos. Y se utiliza para entrenar ulteriormente, durante la última fase, al modelo SFT, penalizando o premiando sus respuestas.

Modelos de InstructGPT

Durante el entrenamiento de InstructGPT se crean, a partir de un modelo preentrenado, otros tres modelos diferentes:

Modelo SFT (Supervised fine-tuning)

Está dotado de 1.300 millones de parámetros (GPT-3 XL). Es entrenado con una base de datos de 14.500 pares prompt-respuesta: 13.000 son generados por etiquetadores humanos y otros 1.500 por usuarios a través de una API. La función de pérdida es la entropía categórica.

Modelo RM (Reward model)

El modelo de recompensa RM es creado a partir de un modelo anterior SFT al que se le retira su última capa lineal (que es la matriz traspuesta de la de embedding) y se le agrega una salida que proporciona una puntuación a una entrada, consistente en un prompt seguido de varias respuestas alternativas. Todas ellas deben ser puntuadas por la máquina.

La base de datos utilizada para el entrenamiento es conformada por operadores humanos, que puntúan K respuestas diferentes a un mismo prompt. La puntuación puede ser binaria (verdadero o falso) o hacerse en una escala de Likert (del 1 al 7). Durante el entrenamiento, las respuestas se organizan en (K2) parejas. La respuesta del par que recibe una mayor puntuación se denomina respuesta ganadora, y la que menos, respuesta perdedora. Todos los pares referidos a un mismo prompt se integran en el mismo lote de entrada.

La función de pérdida, para cada terna prompt-respuesta1-respuesta2 es la siguiente:

L(θ) = \frac{1}{K2}log(σ(r_{θ}(x,y_{w})  –  r_{θ}(x,y_{l})))

donde x es el prompt, y_{w} la respuesta ganadora (la de mayor puntuación en la verdad subyacente), r_{θ}(x, y_{w}) la puntuación que el modelo RM atribuye a dicha respuesta, y_{l} la respuesta perdedora, r_{θ}(x, y_{l}) la puntuación que a ésta asigna el modelo y por último σ, la función sigmoide.

Modelo RL (Reinforcement Learning)

Este último modelo es el definitivo. Es creado a partir de SFT, que es vuelto a afinar utilizando el algoritmo PPO (Proximal Policy Objective), por medio del cual, RM premia o penaliza las respuestas dadas por el nuevo modelo RL.

El aprendizaje tiene lugar a partir de una función objetivo que debe ser maximizada. En cada tanda de entrenamiento, se extrae un lote de prompts (x), de la base de datos de afinamiento, así como otro lote de la base de datos de preentrenamiento (x_{prentre}, consistente en textos a completar).

Los dos lotes se hacen pasar por el modelo, calculándose para cada uno de ellos su función objetivo O(φ). La primera de las funciones es la siguiente:

O_{1}(φ) = RM(x,y)  –  βKL\left [RL_{φ}(x\mid y), SFT(x\mid y)\right ]

donde x es el prompt e y la cadena impresa por el modelo. El primer término es la puntuación que el modelo RM otorga a la cadena Y, producida por RL. El segundo término es la divergencia de Kullback-Leibler entre las distribuciones producidas por RL y SFT, es decir, la cantidad de información de Shannon necesaria para construir la distribución producida por RL a partir de la generada por SFT. Se mide token a token. El lector recordará que en los algoritmos de generación de texto, el modelo realiza a cada paso una distribución probabilística a lo largo de todo el vocabulario con el objetivo de predecir cuál será el próximo token. El signo negativo impuesto a la divergencia de Kullback-Leibler penaliza las diferencias de comportamiento entre ambos modelos, y asegura que RL no se aparte demasiado de SFT. β es un simple coeficiente numérico.

La segunda función se calcula para cada lote xtrain mediante la siguiente expresión algebraica:

O_{2}(φ) = γlog(RL(x_{train})

Modelo final

El modelo RL toma un texto de la base de datos de preentrenamiento y debe completarlo. La función de pérdida es la misma que la de la versión preentrenada: el logaritmo de la probabilidad que el modelo atribuye al siguiente token del texto. γ es de nuevo un coeficiente numérico.

Los gradientes de las dos funciones se retropropagan y se suman, procediéndose entonces a la actualización de los parámetros del modelo.

Resultados

El modelo InstructGPT recibió en evaluaciones humanas una puntuación muy superior a GPT-3 175B, a pesar de que este último tenía cien veces más parámetros, lo que demuestra que la presencia de mecanismos de afinamiento y aprendizaje reforzado incrementa la eficiencia de los modelos de NLP en varios órdenes de magnitud. Nuestro próximo artículo versará sobre una versión modificada de InstructGPT, especializada no tanto en la ejecución de instrucciones, como en diálogos con usuarios humanos: nos referimos al célebre ChatGPT.

Deep Learning

Mistral AI