1. Introducción a la Afinación Fina
1.1. Definición y Ventajas de la Afinación del Modelo
La afinación fina es un concepto en el aprendizaje profundo que se refiere al proceso de continuar el entrenamiento basado en un modelo pre-entrenado para adaptarlo a tareas o conjuntos de datos específicos. Los modelos pre-entrenados han sido entrenados en grandes cantidades de datos y han aprendido representaciones de características ricas. A través de la afinación fina, el rendimiento del modelo para tareas específicas puede mejorar aún más sobre esta base.
Las ventajas de la afinación fina en comparación con el entrenamiento de modelos desde cero incluyen principalmente:
- Ahorro de Tiempo y Recursos: Los modelos pre-entrenados eliminan el tiempo y los recursos computacionales necesarios para entrenar modelos desde cero, especialmente significativo para modelos grandes y tareas complejas.
- Eficiencia de Datos: La afinación fina generalmente requiere relativamente menos datos anotados para lograr buenos resultados, especialmente en dominios con datos escasos.
- Transferencia de Aprendizaje: Los modelos pre-entrenados aprenden de datos diversos, y la afinación fina puede transferir este conocimiento a tareas específicas, mejorando la capacidad de generalización.
- Mejora del Rendimiento: La afinación fina permite que el modelo se adapte mejor a los requisitos de la tarea específica, ayudando a mejorar la calidad del modelo y reducir las tasas de error.
Por ejemplo, aprovechando la API de OpenAI, los usuarios pueden personalizar el modelo GPT a través de la afinación fina para obtener resultados de mayor calidad, al mismo tiempo que ahorran costos asociados con promps largos y reducen la latencia.
1.2. Casos de Aplicación Práctica
La afinación fina ha demostrado ser altamente efectiva en varios escenarios prácticos. Por ejemplo:
- Definición de Estilos y Tonos: A través de la afinación fina, las respuestas de los chatbots pueden adaptarse a estilos o tonos específicos, como formales, humorísticos o alineados con el lenguaje de una industria particular.
- Mejora de la Fiabilidad: En aplicaciones sensibles como consultas médicas o asesoramiento legal, la afinación fina puede reducir malentendidos o respuestas inexactas, mejorando así la fiabilidad general.
- Manejo de Prompts Complejos: Algunas tareas requieren el procesamiento de entradas de usuario complejas, y la afinación fina puede ayudar al modelo a comprender mejor estos escenarios intrincados y proporcionar respuestas precisas.
- Mejora del Rendimiento para Tareas Específicas: Para tareas que son difíciles de describir a través de un solo prompt, como la transferencia de estilo en la generación de texto o la generación de texto sobre temas específicos, la afinación fina puede mejorar significativamente el rendimiento del modelo.
A través de estos casos, podemos ver que la afinación fina permite a los modelos adaptarse mejor a escenarios de aplicación específicos, proporcionando servicios más precisos y personalizados.
2. Cuándo Usar la Afinación Fina
2.1. Análisis de los Requisitos de la Tarea
La afinación fina es una estrategia empleada cuando se determina que los modelos generales existentes no pueden cumplir con requisitos específicos. La afinación fina puede ser necesaria cuando la tarea presenta las siguientes características:
- Requisitos especiales en cuanto a estilo, tono, formato u otros aspectos cualitativos
- Necesidad de mejorar la fiabilidad en la producción de salidas deseadas
- Enfoques específicos requeridos al tratar numerosos casos detallados
- Habilidades o tareas que son difíciles de especificar claramente en los prompts
Los pasos para determinar la necesidad de la afinación fina generalmente incluyen:
- Intentar "ingeniería de prompts", ajustando la forma en que se presentan los prompts de entrada para optimizar los resultados.
- Analizar la efectividad de los modelos existentes para determinar la necesidad de la afinación fina.
- Si se toma la decisión de afinar finamente, preparar conjuntos de datos relevantes para un entrenamiento adicional.
2.2. Comparación entre Afinación Fina e Ingeniería de Prompts
La afinación fina y la ingeniería de prompts son dos estrategias diferentes para mejorar el rendimiento del modelo. La ingeniería de prompts se refiere a guiar al modelo para generar la respuesta esperada con prompts cuidadosamente diseñados, sin modificar el modelo en sí. A menudo es el primer paso para buscar una mejora del rendimiento, ya que tiene un ciclo de retroalimentación rápido y no requiere datos de entrenamiento.
Sin embargo, en ciertos casos, incluso con prompts cuidadosamente diseñados, el modelo aún puede tener dificultades para lograr los resultados esperados. En tales escenarios, la afinación fina se convierte en la elección necesaria para mejorar el rendimiento del modelo. Al proporcionar una gran cantidad de ejemplos para que el modelo aprenda, la afinación fina puede lograr mejores resultados en diferentes tareas en comparación con la sola ingeniería de prompts.
3. Modelos que admiten Ajuste Fino
OpenAI ofrece una variedad de modelos que admiten ajuste fino, incluyendo gpt-3.5-turbo-1106
(recomendado), gpt-3.5-turbo-0613
, babbage-002
, davinci-002
, y el experimentalmente accesible gpt-4-0613
. Estos modelos pueden ser entrenados aún más a través de ajuste fino para adaptarse a requisitos específicos del usuario.
El ajuste fino es aplicable no solo a nuevos conjuntos de datos, sino que los usuarios también pueden continuar el ajuste fino en modelos que han sido previamente ajustados finamente. Esto es particularmente útil cuando se obtiene más datos y hay necesidad de optimizar aún más el modelo sin repetir los pasos de entrenamiento anteriores.
Para la mayoría de usuarios, gpt-3.5-turbo
es la opción preferida debido a sus resultados satisfactorios y facilidad de uso. Considerando las mejoras continuas y las necesidades específicas del usuario, OpenAI podría seguir actualizando y expandiendo la gama de modelos que admiten ajuste fino.
4. Preparación de Datos de Entrenamiento
4.1. Formato del Conjunto de Datos
Para llevar a cabo el ajuste fino, es necesario preparar un conjunto de datos que cumpla con los requisitos de formato especificados. Típicamente, este conjunto de datos contiene una serie de entradas y sus salidas esperadas correspondientes. La API de Ajuste Fino de OpenAI admite dos formatos principales de datos: modelo de diálogo y pares de preguntas-respuestas simples.
El formato del conjunto de datos de Modelo de Diálogo se utiliza comúnmente para el modelo gpt-3.5-turbo
. Cada ejemplo se organiza en forma de conversación, donde cada mensaje tiene un rol, contenido y un nombre opcional. La estructura de datos de ejemplo es la siguiente:
{
"messages": [
{"role": "sistema", "content": "Eres un asistente útil."},
{"role": "usuario", "content": "¿Cómo está el clima hoy?"},
{"role": "asistente", "content": "El clima hoy está despejado y es adecuado para salir."}
]
}
Cada caso debe formatearse como un archivo con formato JSON Lines (.jsonl), donde cada línea representa una muestra de entrenamiento, por ejemplo:
{"messages": [{"role": "sistema", "content": "Marv es un chatbot factual que también es sarcástico."}, {"role": "usuario", "content": "¿Cuál es la capital de Francia?"}, {"role": "asistente", "content": "París, como si no lo supiera todo el mundo."}]}
{"messages": [{"role": "sistema", "content": "Marv es un chatbot factual que también es sarcástico."}, {"role": "usuario", "content": "¿Quién escribió 'Romeo y Julieta'?"}, {"role": "asistente", "content": "Oh, solo un tipo llamado William Shakespeare. ¿Alguna vez has oído hablar de él?"}]}
{"messages": [{"role": "sistema", "content": "Marv es un chatbot factual que también es sarcástico."}, {"role": "usuario", "content": "¿Qué tan lejos está la Luna de la Tierra?"}, {"role": "asistente", "content": "Alrededor de 384,400 kilómetros. Más o menos, como si eso realmente importara."}]}
El formato de conjunto de datos de Pares de Preguntas-Respuestas Simples es adecuado para modelos como babbage-002
y davinci-002
. El formato es más simple, consistiendo en un par de inicio
y completado
. Un ejemplo es el siguiente:
{
"prompt": "¿Cómo está el clima hoy?",
"completion": "El clima hoy está despejado y es adecuado para salir."
}
Del mismo modo, cada muestra de entrenamiento ocupa una línea, por ejemplo:
{"prompt": "<texto de inicio>", "completion": "<texto generado ideal>"}
{"prompt": "<texto de inicio>", "completion": "<texto generado ideal>"}
{"prompt": "<texto de inicio>", "completion": "<texto generado ideal>"}
Al crear datos de ajuste fino, es importante considerar cuidadosamente cada instrucción o inicio proporcionado para garantizar la consistencia entre ejemplos de entrenamiento y cubrir todos los escenarios de uso esperados tanto como sea posible.
4.2. División de Datos de Entrenamiento y Pruebas
Después de crear el conjunto de datos de ajuste fino, es crucial dividir el conjunto de datos en conjuntos de entrenamiento y pruebas de manera adecuada. Típicamente, el conjunto de datos se divide en dos partes, con la mayoría utilizada para entrenar el modelo (usualmente del 70% al 90%) y la porción restante utilizada para pruebas (del 10% al 30%). Esta división ayuda a validar el rendimiento del modelo en datos no vistos y evaluar rigurosamente su desempeño.
La división del conjunto de datos puede hacerse manualmente o escribiendo código para dividir, lo cual se explicará en las secciones posteriores sobre cómo evaluar el modelo utilizando los datos del conjunto de pruebas.
5. Creación del Modelo Ajustado Fino
5.1. Elección del modelo pre-entrenado adecuado
Antes de iniciar el proceso de ajuste fino, seleccionar el modelo pre-entrenado correcto es crucial para garantizar el éxito de la tarea. Aquí tienes algunas sugerencias para elegir el modelo pre-entrenado apropiado:
-
Tipo de tarea: Según la naturaleza de tu tarea, como comprensión del lenguaje, generación o respuesta a preguntas específicas del dominio, elige el modelo que mejor se adapte a estas tareas. Por ejemplo, el modelo
gpt-3.5-turbo
es adecuado para la mayoría de escenarios, ya que equilibra el rendimiento y la facilidad de uso. -
Volumen de datos: Si tienes relativamente menos datos de entrenamiento, es posible que prefieras elegir un modelo más pequeño como
babbage-002
, ya que requiere menos datos para el ajuste de parámetros. -
Requisitos de rendimiento: Para escenarios que requieren un procesamiento de tareas más complejo y detallado, considera elegir el modelo más potente
davinci-002
. -
Consideración del costo: Diferentes modelos tienen diferentes requisitos computacionales y de almacenamiento. Normalmente, los modelos más grandes conllevan costos más altos. Equilibra según el presupuesto y los requisitos de rendimiento.
-
Características experimentales: El modelo
gpt-4-0613
se encuentra actualmente en etapa experimental. Si deseas probar la última tecnología y tienes tolerancia para interfaces experimentales, considera solicitar acceso.
5.2. Proceso de ajuste fino
El proceso de ajuste fino cubre múltiples pasos, como la preparación de datos, la carga de archivos, la creación de tareas de entrenamiento y el monitoreo del progreso. Aquí tienes un desglose detallado:
5.2.1. Preparación de datos
Prepara suficientes datos de entrenamiento y prueba de acuerdo con la tarea objetivo y asegúrate de que el formato de los datos cumpla con los requisitos, como el formato de líneas JSON (.jsonl). Por favor, consulta los capítulos anteriores para conocer los detalles del contenido.
5.2.2. Carga de datos
Carga tus archivos de datos de entrenamiento a través de la API de Archivos de OpenAI, especificando el propósito del archivo como fine-tune
, como se muestra a continuación:
curl https://api.openai.com/v1/files \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F purpose="fine-tune" \
-F file="@misdatos.jsonl"
Tras una carga exitosa, recibirás un ID de archivo que se utilizará para las tareas de entrenamiento del modelo subsiguientes.
5.2.3. Creación de tareas de entrenamiento
Inicia las tareas de ajuste fino utilizando las herramientas SDK o CLI de OpenAI, especificando los parámetros requeridos y el modelo. Por ejemplo:
from openai import OpenAI
cliente = OpenAI()
cliente.fine_tuning.jobs.create(
training_file="archivo-abc123",
model="gpt-3.5-turbo"
)
El parámetro training_file
especifica el ID del archivo de datos de entrenamiento y el parámetro model
especifica el modelo que se utilizará para el entrenamiento.
5.2.4. Monitoreo de las tareas de entrenamiento
Lo siguiente ilustra cómo consultar los resultados del entrenamiento utilizando Python:
from openai import OpenAI
cliente = OpenAI()
cliente.fine_tuning.jobs.list(limit=10)
cliente.fine_tuning.jobs.retrieve("ftjob-abc123")
cliente.fine_tuning.jobs.cancel("ftjob-abc123")
cliente.fine_tuning.jobs.list_events(fine_tuning_job_id="ftjob-abc123", limit=10)
cliente.models.delete("ft:gpt-3.5-turbo:acemeco:suffix:abc123")
6. Ajuste de parámetros durante los procesos de ajuste fino
6.1 Comprensión y ajuste de hiperparámetros
Los hiperparámetros son parámetros establecidos antes del entrenamiento del modelo, y generalmente no se pueden aprender de los datos. Aquí hay algunos hiperparámetros importantes:
-
Número de épocas (n_epochs): Esto determina cuántas veces su modelo iterará a través de todo el conjunto de datos. Demasiadas épocas pueden provocar sobreajuste, mientras que muy pocas pueden resultar en que el modelo no aprenda lo suficiente.
-
Tasa de aprendizaje (multiplicador_tasa_aprendizaje): La tasa de aprendizaje determina en qué medida el modelo actualiza sus pesos en cada iteración. Una tasa de aprendizaje demasiado alta puede causar inestabilidad en el proceso de aprendizaje, mientras que una tasa demasiado baja puede ralentizar el proceso de aprendizaje.
-
Tamaño del lote (tamaño_lote): El tamaño del lote determina cuántas instancias de entrenamiento se consideran en cada actualización del modelo. Un tamaño de lote más grande ayuda a estabilizar el entrenamiento pero puede aumentar la presión sobre la memoria.
Ajustar los hiperparámetros generalmente requiere experimentación repetida para encontrar la combinación óptima de parámetros.
Ejemplo de inicio de tarea de ajuste fino con hiperparámetros:
from openai import OpenAI
cliente = OpenAI()
cliente.trabajos_ajuste_fino.crear(
archivo_entrenamiento="archivo-abc123",
modelo="gpt-3.5-turbo",
hiperparámetros={
"n_epochs":2
}
)
El parámetro hiperparámetros se utiliza para establecer los hiperparámetros.
6.2 Métodos de iteración y mejora del modelo
Después del ajuste fino inicial, puede ser necesario iterar para optimizar aún más el rendimiento del modelo. Aquí hay algunas estrategias de iteración:
-
Aumentar los datos: Si el modelo tiene un rendimiento deficiente en ciertos tipos de entradas, intente agregar más ejemplos de esas entradas.
-
Reflexionar sobre la calidad de los datos: Compruebe si los datos de entrenamiento contienen información incorrecta o ambigua. Estos problemas de calidad pueden provocar un bajo rendimiento del modelo.
-
Balance de datos: Asegúrese de que los datos de entrenamiento tengan diversidad y equilibrio en categorías y estilos.
-
Ajustar hiperparámetros: Como se mencionó anteriormente, ajustar el número de épocas, la tasa de aprendizaje y el tamaño del lote puede afectar significativamente el rendimiento del modelo.
A través de estos métodos, puede optimizar gradualmente su modelo ajustado fino para lograr el mejor rendimiento.
7. Evaluación y uso de modelos ajustados fino
7.1 Evaluación de modelos ajustados fino
Cuando hayamos completado el ajuste fino del modelo, la evaluación del rendimiento del modelo ajustado fino es crucial. Aquí hay algunos métodos de evaluación estándar:
-
Comparar muestras: Utilice las muestras de prueba preparadas para llamar por separado al modelo base y al modelo ajustado fino, luego compare los resultados de salida para evaluar la eficacia del modelo ajustado fino.
-
Métricas estadísticas: Realice un seguimiento de métricas como la pérdida y la precisión durante el proceso de ajuste fino. La pérdida debe disminuir durante el entrenamiento, mientras que la precisión debe aumentar.
-
Pruebas A/B: Diseñe experimentos, divida el tráfico y ejecute simultáneamente tanto el modelo base como el modelo ajustado fino para observar diferencias de rendimiento en un entorno real.
-
Comentarios de usuario: Recopile comentarios de usuario sobre el uso del modelo, especialmente para tareas de procesamiento de lenguaje natural, donde la satisfacción del usuario es una medida crítica del rendimiento del modelo.
7.2 Cómo utilizar modelos ajustados fino
Utilizar un modelo ajustado fino es muy sencillo. Simplemente necesita pasar el nombre de su modelo ajustado fino como parámetro en la llamada a la API. Aquí hay un ejemplo de código para usar un modelo ajustado fino:
Ejemplo en Python
from openai import OpenAI
cliente = OpenAI(api_key='Su clave de API')
respuesta = cliente.chat.completions.create(
modelo="Nombre del modelo",
mensajes=[
{"rol": "sistema", "contenido": "Eres un asistente servicial."},
{"rol": "usuario", "contenido": "¡Hola!"}
]
)
print(respuesta.choices[0].mensaje)
Aquí, reemplace "Nombre del modelo" con el nombre específico de su modelo ajustado fino, por ejemplo, "ft:nombre del modelo:nombre de su organización:nombre de su ajuste fino:id".
Capítulo 7: Mejores Prácticas para el Ajuste Fino
Durante el proceso de ajuste fino, podemos seguir algunas mejores prácticas para mejorar aún más el rendimiento del modelo:
-
Calidad de los Datos: Asegúrate de contar con datos de entrenamiento de alta calidad y diversificados para evitar un rendimiento deficiente del modelo causado por datos inexactos o únicos.
-
Distribución de los Datos: Los datos de entrenamiento deben abarcar todos los posibles escenarios de entrada para garantizar el rendimiento del modelo en situaciones del mundo real.
-
Iteraciones Incrementales: Aumenta gradualmente los datos de entrenamiento y observa los cambios en el rendimiento del modelo, en lugar de agregar una gran cantidad de datos de una vez.
-
Ajuste de Hiperparámetros: Ajusta hiperparámetros como la tasa de aprendizaje, el tamaño del lote y el número de iteraciones en función del rendimiento del modelo.
-
Mejora Continua: Ajustar fino un modelo no es un proceso único. Las iteraciones regulares para actualizar el conjunto de datos y el modelo pueden mejorar continuamente la efectividad del modelo.
Problemas Comunes y Soluciones:
-
P: ¿Qué hacer si el modelo ajustado fino no alcanza los resultados esperados?
- R: Revisa cuidadosamente y mejora la calidad y diversidad de los datos de entrenamiento, y ajusta la estrategia de entrenamiento en función de los resultados de la evaluación.
-
P: ¿Cómo manejar un rendimiento deficiente del modelo en escenarios específicos?
- R: Aumenta las muestras de entrenamiento para ese escenario para mejorar la capacidad de procesamiento del modelo en esa situación particular.
-
P: ¿Cómo controlar el costo durante el proceso de ajuste fino?
- R: Estima de antemano el recuento de tokens y evalúa los costos de diferentes modelos.
Al integrar estas sugerencias y herramientas, podrás maximizar la efectividad del ajuste fino de tu modelo y asegurarte de que el proceso de ajuste fino se alinee con tus expectativas y necesidades.