Introducción a la personalización de LLM
En los últimos años, los rápidos avances en inteligencia artificial han llevado al desarrollo de grandes modelos de lenguaje (LLMs), revolucionando el campo del procesamiento del lenguaje natural (NLP). Estos potentes modelos, como ChatGPT, Llama, Mistral, Zephyr y otros, han demostrado capacidades superiores para comprender y generar lenguaje similar al humano.
Sin embargo, estos LLMs tienen limitaciones. Se entrenan con una gran cantidad de datos con una fecha de corte específica, lo que significa que si los usamos para generar respuestas que requieren conocimientos más recientes que sus datos de entrenamiento, corremos el riesgo de obtener respuestas inexactas. Por lo tanto, es esencial adaptar estos modelos a nuestras tareas y dominios específicos para desbloquear todo su potencial. Aquí es donde entra en juego la personalización de LLMs.
En un reciente Unstructured Data Meetup de Zilliz en Seattle, el CEO de OSS4AI y anterior Senior Developer Advocate de Zilliz, Yujian Tang, analizó varias opciones para personalizar LLMs con el fin de mejorar su rendimiento en tareas específicas. Antes de analizar las diferentes opciones de personalización para un LLM, exploremos brevemente la historia de los LLMs.
Mira la repetición de la charla de Yujian
Breve historia de los LLMs
La investigación que condujo al inicio de los LLMs ha recorrido un largo camino, comenzando desde la arquitectura básica de redes neuronales. Una capa básica de red neuronal consiste en una capa de entrada, una o más capas ocultas y una capa de salida, como se muestra en el siguiente gráfico.
Arquitectura de red neuronal
La arquitectura básica de redes neuronales demostró ser muy potente para tareas de clasificación y puede manejar datos no estructurados como textos e imágenes. Sin embargo, es ineficaz para tareas que requieren dependencias a largo plazo o procesamiento secuencial, lo cual es esencial para las tareas de lenguaje natural. En las redes neuronales básicas, cada entrada se procesa de forma independiente, y la salida se genera basándose únicamente en la entrada actual. Esto significa que las redes neuronales no consideran el orden ni el contexto de la entrada en relación con toda la secuencia.
Sin la capacidad de manejar dependencias a largo plazo, una red neuronal no puede inferir el significado semántico de una secuencia de entrada completa o texto; el inicio de las Redes Neuronales Recurrentes (RNNs) tuvo como objetivo resolver este problema.
Las RNNs abordan el problema introduciendo un estado oculto, que actúa como una memoria que captura información de lo que la red ha visto previamente. Este estado oculto se pasa de un paso temporal al siguiente, lo que permite a la red mantener una representación de la secuencia. Añadir un estado oculto permite a las RNNs recordar u olvidar selectivamente información de la secuencia de entrada, haciéndolas más efectivas para las dependencias de secuencias de entrada que las redes neuronales básicas.
Arquitectura RNN
Sin embargo, las RNNs también tienen varias limitaciones, como:
Problema del gradiente desvaneciente: Las RNNs sufren el problema del gradiente desvaneciente, donde los gradientes utilizados para actualizar los parámetros del modelo durante el entrenamiento se vuelven más pequeños a medida que se retropropagan a través del tiempo. Este problema dificulta que las RNNs aprendan dependencias a largo plazo en secuencias.
Procesamiento secuencial: Las RNNs procesan secuencias de forma secuencial, lo que limita su capacidad para paralelizar el cálculo y las hace menos eficientes computacionalmente.
Estas limitaciones de las RNN llevaron al desarrollo de Transformer, que utiliza un mecanismo de autoatención para procesar secuencias de entrada en paralelo y evitar el problema del desvanecimiento del gradiente.
Arquitectura de Transformer
La arquitectura Transformer consta de varios bloques de codificador y decodificador. Cada bloque de codificador y decodificador contiene una capa especial llamada capa de atención. Esta capa desempeña un papel crucial en la determinación del significado semántico detrás de cada token con respecto a toda la secuencia de entrada. Por ejemplo, considera las siguientes tres oraciones:
Apple obtuvo una ganancia de $97 mil millones en 2023
Me gusta comer pastel de manzana para obtener ganancias en 2023
El resultado final de Apple aumentó en cifras récord en 2023
Si solo usamos un enfoque tradicional, como un enfoque basado en palabras clave, las dos primeras oraciones serán el par más similar. Encontramos tres palabras clave similares en estas dos oraciones: Apple, 2023 y ganancia.
Sin embargo, sabemos que la primera y la tercera oraciones son los pares más semánticamente similares. La capa de atención dentro de la arquitectura Transformer puede capturar este contexto y devolver la primera y la tercera como el par más semánticamente similar.
El potente rendimiento y la versatilidad de los modelos Transformers llevaron a rápidos avances en IA en diferentes campos, desde la visión por computadora hasta el NLP y las tareas multimodales.
Uno de los modelos introducidos tras el gran éxito de Transformers es el modelo Generative Pretrained Transformers (GPT). Este modelo utiliza la parte del decodificador de la arquitectura Transformer para predecir el siguiente token en una secuencia de entrada y se utiliza como la columna vertebral de muchos LLM que conocemos hasta ahora, como ChatGPT y Llama.
Arquitectura GPT
Estos LLM son muy potentes para generar respuestas similares a las humanas, ya que han sido entrenados con enormes cantidades de datos. Sin embargo, como quizás ya sepas, los datos de entrenamiento tienen una fecha límite, lo que significa que no obtendremos una respuesta precisa de nuestros LLM si preguntamos sobre información más reciente que sus datos de entrenamiento. Aquí es donde necesitamos personalizar nuestros LLM.
Generación Aumentada por Recuperación (RAG)
La primera forma en que podemos personalizar nuestro LLM es mediante RAG, y su concepto es bastante sencillo. Proporcionamos a los LLM tanto la consulta como los contextos relevantes como entradas, lo que les permite generar respuestas contextuales y precisas aprovechando los contextos proporcionados.
Arquitectura RAG
Para aprovechar los LLM para RAG, necesitamos dos componentes esenciales:
Modelo de incrustación vectorial: Un modelo que transforma nuestra consulta y contextos en incrustaciones vectoriales.
Base de datos vectorial: Una base de datos para almacenar todas las incrustaciones de contexto y realizar búsquedas vectoriales para proporcionar a nuestros LLM los contextos más relevantes y semánticamente similares según la consulta.
Se pueden usar varios modelos para generar incrustaciones vectoriales, incluidos modelos de aprendizaje profundo de OpenAI o sentence transformers. Alternativamente, también se pueden emplear modelos tradicionales basados en bolsa de palabras como TF-IDF o BM25.
Milvus es una popular base de datos vectorial de código abierto. Almacena los datos necesarios, que constan de dos tipos: embeddings vectoriales generados por el modelo y sus metadatos. Por ejemplo, considera un fragmento de texto de un artículo publicado por Towards Data Science el primer día de junio de 2023. Los datos almacenados en la base de datos vectorial Milvus podrían verse así:
Ejemplo de datos de embedding vectorial y sus metadatos
Los metadatos son útiles para realizar varios filtros durante las operaciones de búsqueda vectorial con el fin de proporcionar a nuestros LLM contextos más precisos. Por ejemplo, podrías querer obtener contextos de una publicación específica o aquellos publicados después de una fecha determinada (por ejemplo, 2020).
Una vez que tenemos la consulta y sabemos los metadatos específicos que queremos filtrar, una base de datos vectorial como Milvus hará su trabajo. Realizará una búsqueda vectorial para encontrar los contextos más semánticamente similares a nuestra consulta que cumplan las condiciones de filtrado de metadatos.
Ajuste fino
Otro enfoque para personalizar los LLM es mediante el ajuste fino. El concepto es sencillo: entrenamos un LLM preentrenado con nuestros propios datos, lo que da como resultado modelos con nuevos pesos adaptados para realizar tareas específicas de nuestro dominio de datos.
Hay varias formas de ajustar finamente los LLM:
Ajuste fino completo: Este enfoque modifica los pesos de todos los parámetros dentro del LLM original. Sin embargo, implica un proceso de cálculo costoso.
LORA: Este enfoque introduce adaptadores de bajo rango dentro de la arquitectura del LLM. Los pesos originales se congelan durante el ajuste fino, y solo se actualizan los pesos de los adaptadores.
QLORA: Este enfoque introduce cuantización al método LORA original, reduciendo los costos de cálculo y los recursos mientras preserva un rendimiento razonable.
Ajuste fino completo vs LORA
Ahora que conocemos los diferentes métodos de ajuste fino, analicemos las diferentes técnicas de ajuste fino:
Ajuste fino supervisado: En este método, proporcionamos a nuestros LLM nuestros propios datos de entrenamiento y las etiquetas correspondientes. Luego entrenamos nuestros LLM como cualquier modelo de aprendizaje automático supervisado.
Aprendizaje por refuerzo a partir de retroalimentación humana (RLHF): Este método incorpora la teoría del aprendizaje por refuerzo. Recopilamos varias respuestas del LLM basadas en una consulta y luego evaluamos la calidad de cada respuesta. Con el tiempo, nuestros LLM producen respuestas que se alinean con nuestras preferencias.
Ajuste fino supervisado vs. Aprendizaje por refuerzo a partir de retroalimentación humana
Dado que el ajuste fino supervisado es sencillo, analicemos RLHF con más detalle. Una desventaja del RLHF nativo es la necesidad de que humanos evalúen la calidad de las respuestas generadas por los LLM. Este enfoque es caro y consume mucho tiempo.
Los científicos de datos introdujeron Proximal Policy Optimization (PPO) para aliviar este problema.PPO introduce un modelo de recompensa para reemplazar la evaluación humana. Sin embargo, este modelo de recompensa debe entrenarse por separado, lo que hace que la aplicación de PPO sea engorrosa. Además, el modelo de recompensa debe reentrenarse cada vez que se añaden nuevos datos.
Para abordar estos problemas, se introdujo Direct Preference Optimization (DPO). DPO optimiza la política del LLM utilizando la función de pérdida de log-verosimilitud negativa sobre datos de preferencias humanas. El conjunto de datos para el ajuste fino con DPO consta de prompts, respuestas preferidas y respuestas no preferidas:
Ejemplo del formato de datos utilizado para ajustar finamente LLM con DPO
Sin embargo, DPO tiende a sobreajustarse rápidamente al conjunto de datos de preferencias. Para mitigar este problema, se desarrolló Identity Preference Optimization (IPO).
IPO introduce un término de regularización en la función de pérdida DPO para evitar el sobreajuste. También utiliza un término de razón de probabilidades logarítmica añadido a la función de pérdida de log-verosimilitud negativa (NLL), lo que permite ajustar finamente el LLM al estilo deseado mientras se penalizan las respuestas no preferidas.
Conclusión
Yujian Tang analizó diversas formas de personalizar los LLMs para un uso óptimo en nuestros casos de uso específicos en su charla. La presentación comenzó proporcionando una breve historia de los avances en IA que condujeron al desarrollo de los LLMs. A este tema le siguió una explicación de dos métodos para personalizar los LLMs: RAG y el ajuste fino.
RAG mejora la calidad de las respuestas generadas por los LLMs al inyectar contextos relevantes junto con la consulta como entradas. Las bases de datos vectoriales como Milvus almacenan embeddings de contexto y realizan búsquedas vectoriales para implementar RAG. Luego, los LLMs utilizan estos contextos para generar respuestas adecuadas.
El segundo enfoque es el ajuste fino, y existen dos métodos de ajuste fino:
Ajuste Fino Supervisado: Este método implica proporcionar a nuestros LLMs nuestros propios datos de entrenamiento y las etiquetas correspondientes, y luego entrenarlos como cualquier modelo de aprendizaje automático supervisado.
Aprendizaje por Refuerzo a partir de Retroalimentación Humana (RLHF): Este método incorpora la teoría del aprendizaje por refuerzo, donde recopilamos varias respuestas del LLM basadas en una consulta y evaluamos la calidad de cada respuesta. Con el tiempo, nuestros LLMs producen respuestas que se alinean con nuestras preferencias.
Para obtener más detalles sobre la personalización de LLMs, mira la repetición de la charla de Yujian.
Sigue leyendo

Introducing Customer-Managed Encryption Keys (CMEK) on Zilliz Cloud
We're announcing the general availability of Customer-Managed Encryption Keys (CMEK) on Zilliz Cloud.

How to Improve Retrieval Quality for Japanese Text with Sudachi, Milvus/Zilliz, and AWS Bedrock
Learn how Sudachi normalization and Milvus/Zilliz hybrid search improve Japanese RAG accuracy with BM25 + vector fusion, AWS Bedrock embeddings, and practical code examples.

OpenAI o1: What Developers Need to Know
In this article, we will talk about the o1 series from a developer's perspective, exploring how these models can be implemented for sophisticated use cases.


