No se han encontrado widgets en la barra lateral

Realizar un entreno desde 0 de uno de los Grandes Modelos de Lenguaje actuales es una acción al alcance de muy poco. Las horas de GPUs necesarias y el coste son prohibitivos para la mayoría de las empresas, y no estoy hablando de pequeñas empresas. Empresas que se pueden considerar grandes, sobre todo a nivel nacional, no disponen del músculo necesario para entrenar un modelo desde cero. Aunque hay un motivo mucho más importante: tampoco lo necesitan.

La alternativa a entrenar un modelo, es coger uno ya preentrenado, y enseñarle comportamientos más específicos mediante FineTunig. Una técnica en la que un nuevo proceso de aprendizaje modifica los pesos de algunas capas del modelo.

Pues bien, el Finetuning, debido al tamaño de los Grandes Modelos actuales, ha evolucionado con la aparición de nuevas técnicas que nos permiten FineTunear un modelo de la forma más óptima posible. Reduciendo al máximo el número de pesos a actualizar, y así poder entrenar al modelo con menor tiempo y coste.

La librería PEFT de Hugging Face.

PEFT es el acrónimo de Parameter Efficient FineTuning. Esta librería nos permite ejecutar técnicas de Finetuning optimizadas para reducir el número de parámetros a entrenar. Reduciendo así el tiempo y coste de enseñar nuevos conocimientos a un Modelo.

Con PEFT podemos optar a tres categorías diferentes de Finetunning. Aditivas, Selectivas y re-parametrización.

Cada una de estas categorías tiene sus ventajas y sus desventajas. Posiblemente, el método más conocido y usado actualmente sea LoRA. Por otro lado, Prompt-Tuning es la gran desconocida que va siendo más usada para casos muy concretos. Las técnicas de Prunning van perdiendo terreno, así que me voy a centrar en explicar tan solo el funcionamiento de dos técnicas, el Prompt-Tuning y LoRA, que serán las que vamos a usar más adelante en el curso de Aplicaciones con Grandes Modelos de Lenguaje.

Prompt Tuning.

Esta categoría se llama aditiva, porque estamos añadiendo capas al modelo. No modificamos los pesos del Modelo base.

Se añaden unos valores a los embeddings contenidos en el prompt, y estos valores añadidos son los que se entrenan, es decir, tan solo estamos modificando el peso de los parámetros del prompt.

El entreno del modelo se produce de la forma común, es decir, modificando el peso de los parámetros que no están fijados, con el objetivo de reducir el error devuelto por la función de pérdida.

Cada secuencia de embeddings enviada al modelo contiene unos tokens añadidos, y son estos tokens los que son modificados para reducir el resultado devuelto por la función de pérdida.

Como se puede ver, el número de parámetros a modificar es muy pequeño, y ninguno corresponde al modelo. Esta es una técnica muy especial y que está dando unos resultados muy buenos.

Una de las principales características es que podemos utilizar un solo modelo para diferentes usos. Ahorrando no tan solo espacio de almacenamiento, sino también espacio en memoria, ya que únicamente hace falta cargar un modelo. Puesto que no hemos modificado sus pesos y el modelo funcionará igual, sea cual sea el prompt que estemos usando.

Características:

  • Funciona mejor con modelos grandes. Lo que todavía produce más ahorro.
  • Funciona bien para temas específicos. No para introducir información general.
  • Rendimiento superior a técnicas como el Few Shot Prompt, que aumenta el prompt pasándole algunos ejemplos de lo que tendría que hacer el modelo.

Paper: The Power of Scale for Parameter-Efficient Prompt Tuning.

Si queréis profundizar más en esta técnica, disponéis de un artículo dedicado a ella.

Notebook de Ejemplo: https://github.com/peremartra/Large-Language-Model-Notebooks-Course/blob/main/5-Fine%20Tuning/Prompt_Tuning_PEFT.ipynb

Re-parametrización. LoRA.

Dentro de la categoría de re-parametrización encontramos la técnica LoRA. Su funcionamiento es sencillo, complicado y brillante al mismo tiempo. Se trata de reducir el tamaño de las matrices a entrenar, dividiéndolas de tal forma que al multiplicarlas nos vuelva a dar la matriz origen.

Los pesos que se modifican son los de las matrices reducidas, no la de la matriz origen. Mejor lo vemos en una imagen.

Tenemos una matriz original de 50×50, lo que significa que tendríamos que modificar unos 2500 parámetros. Pero como sabemos, si multiplicamos dos matrices de (2×50) y (50×2) obtenemos una matriz de 50×50. Sin embargo, estas dos matrices tan solo están formadas por 100 parámetros cada una. Es decir, que en total para las matrices reducidas tenemos que modificar 200 parámetros frente a los 2500 de la matriz original. Esto nos representa una reducción del 92%, y como mayor sea la matriz origen, mayor será el porcentaje de ahorro.

Tal como he dicho, a mí me parece, sencillo, complicado y brillante.

En Modelos de Lenguaje como GPT 3, o cualquiera de los actuales con LoRA es posible que tan solo tengamos que entrenar un 0.02 de los parámetros originales. Varía para cada modelo. Lo mejor es que el resultado obtenido es muy parecido al de un fine-tuning completo, en algunos casos incluso puede ser mejor.

Resumen.

Hemos visto tan solo dos técnicas de las muchas que hay en la librería PeFT, pero son suficientes para hacernos una idea de que existe una necesidad en el mercado de realizar entrenos forma más eficiente, aunque sea sacrificando algo de estabilidad en la respuesta del modelo.

Es un campo en el que ya se lleva cierto tiempo investigando, pero recientemente se han acelerado las implementaciones. Dos de las más recientes son QLoRA, que es un método de LoRA que usa también quantization (reducir longitud de números) o un nuevo método llamado IA3 que promete reducir aún más el número de parámetros entrenables de lo que se consigue con LoRA.

Este paper es un gran ejemplo de todo lo que se está haciendo: https://arxiv.org/abs/2205.05638. En él se comparan diferentes técnicas disponibles en PEFT y se ha llegado a la conclusión que entrenar un modelo puede ser más barato que utilizar técnicas de enriquecimiento del prompt. En él también se usan IA3 y se demuestra ser un método muy eficiente.

¡Un Mundo apasionante! Espero que os haya gustado. En breve, un par de artículos aplicando esta técnica en el entreno de modelos. Recordad que podéis encontrar toda la información y los notebooks usados en el curso de Grandes Modelos de Lenguaje en Github.

Como crear sentencias SQL usando lenguaje natural con la API de OpenAI.

En mi trabajo tengo relación con varios equipos de desarrollo, uno de ellos dedica una buena parte de su tiempo Read more

Creación de un sistema automoderado de comentarios con LLAMA-2 y LangChain.

En este artículo veremos como crear un sistema que sea capaz de responder a los comentarios de los usuarios de Read more

Solucionamos un problema de regresión con Supervised Learning y Scikit-Learn.
Machine Learning Regresión

Pues ya está aquí la segunda entrega de esta serie de Machine Learning, que forma parte del "curso" práctico de Read more

Crea un asistente para analizar tus datos con Agentes de LangChain.

Antes de explicar que es o que deja de ser un agente, permitidme que de mi opinión personal sobre ellos: Read more

Por Martra

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *