Optimización de preferencias directas (DPO)
Descripción general
La optimización de preferencias directas (DPO) es una técnica de adaptación que refina los modelos fundacionales usando datos de comparación emparejados para adaptar los resultados del modelo a las preferencias humanas. A diferencia de los métodos de aprendizaje por refuerzo, la DPO optimiza directamente el comportamiento del modelo en función de la valoración humana sobre cuáles son las respuestas más deseables, ofreciendo un enfoque más estable y escalable.
¿Por qué usar la DPO?
Los modelos fundacionales pueden generar resultados correctos desde el punto de vista fáctico, pero que no se ajustan a las necesidades específicas de los usuarios, los valores de las organizaciones o los requisitos de seguridad. La DPO aborda este problema permitiéndole lo siguiente:
Refubar los modelos en función de los patrones de comportamiento deseados.
Reducir los resultados no deseados o dañinos.
Adaptar las respuestas del modelo a la voz y a las pautas de comunicación de la marca.
Mejorar la calidad de la respuesta en función de los comentarios de los expertos del sector.
Implementar barreras de protección por medio de los patrones de respuesta preferidos.
Cómo funciona la DPO
La DPO utiliza ejemplos pareados en los que los evaluadores humanos indican cuál de las dos posibles respuestas es la preferida. El modelo aprende a maximizar la probabilidad de generar respuestas preferidas mientras minimiza las no deseadas.
¿Cuándo utilizar la DPO?
Utilice la DPO en las situaciones siguientes:
Optimización para obtener resultados subjetivos que exigen una adaptación a preferencias humanas específicas.
Modificación del tono, el estilo o las características del contenido del modelo.
Realización de mejoras específicas en función de los comentarios de los usuarios y el análisis de errores.
Mantenimiento de una calidad de salida constante en diferentes casos de uso.
Entrenamiento con aprendizaje por refuerzo sin recompensas utilizando solo datos de preferencias.
Modelos y técnicas compatibles
La DPO admite el refinamiento de parámetros completos y LoRA (adaptación de rango bajo):
| Modelo | Entradas admitidas | Tipo de instancia | Recuento de instancia recomendado | Recuento de instancias permitido |
|---|---|---|---|---|
| Amazon Nova Micro | Texto | ml.p5.48xlarge | 2 | 2, 4, 8 |
| Amazon Nova Lite | Texto, imagen | ml.p5.48xlarge | 4 | 2, 4, 8, 16 |
| Amazon Nova Pro | Texto, imagen | ml.p5.48xlarge | 6 | 6, 12, 24 |
Estrategias de entrenamiento
DPO de rango completo: actualiza todos los parámetros del modelo. Puede llegar a ofrecer una mejor calidad de adaptación, pero requiere más recursos computacionales y produce modelos más grandes.
DPO de LoRA: utiliza adaptadores ligeros para un refinamiento eficiente de los parámetros. Ofrece un entrenamiento y una implementación más eficientes con modelos resultantes más pequeños que, a su vez, se adaptan a todos los requisitos.
Para la mayoría de los casos de uso, la estrategia LoRA proporciona una capacidad de adaptación suficiente con una eficiencia significativamente mejorada.
Formato de los datos
Los datos de entrenamiento de la DPO siguen el mismo formato que los del SFT, excepto que el último turno del asistente debe contener combinaciones de preferencias con etiquetas preferred y non-preferred.
Estructura básica
El último turno del asistente usa una matriz de candidates en lugar de content:
{ "role": "assistant", "candidates": [ { "content": [ { "text": "This is the preferred response." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "This is the non-preferred response." } ], "preferenceLabel": "non-preferred" } ] }
Ejemplo de texto completo
{ "schemaVersion": "bedrock-conversation-2024", "system": [ { "text": "You are a helpful assistant." } ], "messages": [ { "role": "user", "content": [ { "text": "What is the capital of France?" } ] }, { "role": "assistant", "content": [ { "text": "The capital of France is Paris." } ] }, { "role": "user", "content": [ { "text": "Tell me more about it." } ] }, { "role": "assistant", "candidates": [ { "content": [ { "text": "Paris is the capital and largest city of France, known for the Eiffel Tower, world-class museums like the Louvre, and its rich cultural heritage." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "Paris is a city in France." } ], "preferenceLabel": "non-preferred" } ] } ] }
Ejemplo con imágenes
{ "schemaVersion": "bedrock-conversation-2024", "system": [ { "text": "You are a helpful assistant." } ], "messages": [ { "role": "user", "content": [ { "text": "Describe this image." }, { "image": { "format": "jpeg", "source": { "s3Location": { "uri": "s3://your-bucket/your-path/image.jpg", "bucketOwner": "your-aws-account-id" } } } } ] }, { "role": "assistant", "candidates": [ { "content": [ { "text": "The image shows a detailed description with relevant context and observations." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "This is a picture." } ], "preferenceLabel": "non-preferred" } ] } ] }
Requisitos de los conjuntos de datos
Formato: archivo JSONL único para el entrenamiento, archivo JSONL único para la validación (opcional).
Tamaño mínimo: se recomiendan 1000 pares de preferencias para un entrenamiento efectivo.
Calidad: los datos de preferencias de alta calidad producen resultados más efectivos.
Otras restricciones: igual que el SFT. Para obtener más información, consulte Restricciones del conjunto de datos.
Subir datos
aws s3 cp /path/to/training-data/ s3://your-bucket/train/ --recursive aws s3 cp /path/to/validation-data/ s3://your-bucket/val/ --recursive
Configuración de fórmulas
Configuración general de ejecución
run: name: "my-dpo-run" model_type: "amazon.nova-lite-v1:0:300k" model_name_or_path: "nova-lite/prod" replicas: 4
| Parámetro | Descripción |
|---|---|
name |
Nombre descriptivo para su trabajo de entrenamiento. |
model_type |
Variante del modelo de Nova (no modificar) |
model_name_or_path |
Ruta del modelo base (no modificar) |
replicas |
Número de instancias de computación que se van a utilizar para el entrenamiento distribuido. |
Configuración de entrenamiento
training_config: max_length: 16384 global_batch_size: 32 trainer: max_epochs: 3 model: hidden_dropout: 0.0 attention_dropout: 0.0 ffn_dropout: 0.0
| Parámetro | Descripción | Range |
|---|---|---|
max_length |
Longitud máxima de la secuencia en tokens | 1024–32768 |
global_batch_size |
Muestras por paso del optimizador | Micro/Lite/Pro: 16, 32, 64, 128 Micro/Lite: 256 |
max_epochs |
Ciclos de entrenamiento sobre el conjunto de datos | Mín.: 1 |
hidden_dropout |
Desactivación aleatoria en los estados ocultos | 0,0-1,0 |
attention_dropout |
Desactivación aleatoria en las ponderaciones de atención | 0,0-1,0 |
ffn_dropout |
Desactivación aleatoria en las capas de propagación hacia delante | 0,0-1,0 |
Configuración del optimizador
model: optim: lr: 1e-5 name: distributed_fused_adam adam_w_mode: true eps: 1e-08 weight_decay: 0.0 betas: - 0.9 - 0.999 sched: warmup_steps: 10 constant_steps: 0 min_lr: 1e-6
| Parámetro | Descripción | Range |
|---|---|---|
lr |
Tasa de aprendizaje | 0-1 (normalmente de 1e-6 a 1e-4) |
weight_decay |
Fuerza de regularización L2 | 0,0-1,0 |
warmup_steps |
Pasos para aumentar gradualmente el ritmo de aprendizaje | 0–20 |
min_lr |
Tasa mínima de aprendizaje al final de la degradación | 0-1 (debe ser < lr) |
Configuración específica de la DPO
model: dpo_cfg: beta: 0.1
| Parámetro | Descripción | Range |
|---|---|---|
beta |
Equilibrio entre el ajuste a los datos de entrenamiento y la proximidad al modelo original | 0,001–0,5 |
Beta superior (0,1): conserva mejor el comportamiento del modelo de referencia, pero puede aprender las preferencias más lentamente.
Beta inferior (0,01-0,05): aprendizaje preferencial más agresivo, pero corre el riesgo de desviarse de la referencia.
Recomendación: comience con beta: 0.1 y ajústelo a la baja si el aprendizaje preferencial le parece insuficiente.
Configuración del PEFT LoRA
model: peft: peft_scheme: "lora" lora_tuning: loraplus_lr_ratio: 64.0 alpha: 32 adapter_dropout: 0.01
| Parámetro | Descripción | Valores permitidos |
|---|---|---|
peft_scheme |
Método de refinamiento | "lora" o null (rango completo) |
alpha |
Factor de escalado para ponderaciones de LoRA | 32, 64, 96, 128, 160, 192 |
loraplus_lr_ratio |
Factor de escalado del ritmo de aprendizaje de LoRA+ | 0,0-100,0 |
adapter_dropout |
Regularización de los parámetros de LoRA | 0,0-1,0 |
Inicio de un trabajo de entrenamiento
Imagen de contenedor
708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest
Código de ejemplo
from sagemaker.pytorch import PyTorch from sagemaker.inputs import TrainingInput instance_type = "ml.p5.48xlarge" instance_count = 4 image_uri = "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest" recipe_overrides = { "training_config": { "trainer": {"max_epochs": 2}, "model": { "dpo_cfg": {"beta": 0.1}, "peft": { "peft_scheme": "lora", "lora_tuning": { "loraplus_lr_ratio": 64.0, "alpha": 32, "adapter_dropout": 0.01, }, }, }, }, } estimator = PyTorch( output_path=f"s3://{bucket_name}/{job_name}", base_job_name=job_name, role=role, instance_count=instance_count, instance_type=instance_type, training_recipe="fine-tuning/nova/nova_lite_p5_gpu_lora_dpo", recipe_overrides=recipe_overrides, max_run=18000, sagemaker_session=sagemaker_session, image_uri=image_uri, disable_profiler=True, debugger_hook_config=False, ) train_input = TrainingInput( s3_data=train_dataset_s3_path, distribution="FullyReplicated", s3_data_type="Converse", ) val_input = TrainingInput( s3_data=val_dataset_s3_path, distribution="FullyReplicated", s3_data_type="Converse", ) estimator.fit(inputs={"train": train_input, "validation": val_input}, wait=True)
Implementación del modelo
Una vez finalizado el entrenamiento, implemente el modelo personalizado en Amazon Bedrock mediante la función de importación de modelos personalizados. El modelo admite tanto el rendimiento aprovisionado como la inferencia bajo demanda. Los modelos entrenados con LoRA admiten la inferencia bajo demanda.
Para obtener instrucciones de implementación, consulte Implementación de modelos personalizados.
Limitaciones
Modalidades de entrada: la DPO solo acepta texto e imágenes. No se admite la entrada de video.
Modalidad de salida: solo texto.
Pares de preferencias: el turno final del asistente debe contener exactamente dos candidatos con etiquetas
preferredynon-preferred.Límite de imágenes: máximo 10 imágenes por bloque de contenido.
Modalidades mixtas: no se puede combinar texto, imagen y video en el mismo trabajo de entrenamiento.