Skip to content

Andre-PI/lab08-dpo

Repository files navigation

Lab 08 — Alinhamento Humano com DPO

Implementação do pipeline de alinhamento HHH (Helpful, Honest, Harmless) utilizando Direct Preference Optimization (DPO) sobre o modelo base TinyLlama-1.1B-Chat.


Estrutura do Repositório

lab08-dpo/
├── hhh_dataset.jsonl    # Dataset de preferências (32 pares)
├── train_dpo.py         # Pipeline de treinamento DPO
├── inference_test.py    # Validação pós-treinamento
├── requirements.txt     # Dependências
└── README.md

Passo 1 — Dataset de Preferências

O dataset hhh_dataset.jsonl contém 32 pares de preferência no formato exigido pelo DPOTrainer:

Coluna Descrição
prompt Instrução ou pergunta ao modelo
chosen Resposta segura, alinhada com as políticas HHH
rejected Resposta prejudicial ou inadequada

Os exemplos cobrem restrições de segurança (ataques a banco de dados, phishing, malware, acesso não autorizado) e adequação de tom corporativo (comunicados agressivos, relatórios falsificados, manipulação de métricas).


Passo 2 — Pipeline DPO

O treinamento usa dois modelos em memória, ambos carregados em quantização 4-bit NF4 para economizar VRAM:

  • Modelo Ator (model): recebe os gradientes e tem seus pesos atualizados via LoRA (rank=16).
  • Modelo de Referência (ref_model): permanece congelado e serve como âncora para calcular a divergência KL entre a política treinada e a política original.

Passo 3 — O Papel Matemático do Parâmetro β (Beta)

O objetivo de treinamento do DPO é maximizar a diferença de log-probabilidade entre a resposta preferida (chosen) e a resposta rejeitada (rejected), mas com uma penalidade que impede que o modelo se afaste demais do modelo de referência. A função de perda é dada por:

$$\mathcal{L}_{\text{DPO}}(\pi_\theta) = -\mathbb{E}\left[\log \sigma\left(\beta \log \frac{\pi_\theta(y_w \mid x)}{\pi_{\text{ref}}(y_w \mid x)} - \beta \log \frac{\pi_\theta(y_l \mid x)}{\pi_{\text{ref}}(y_l \mid x)}\right)\right]$$

O parâmetro β atua como um "imposto" sobre o desvio da política de referência: ele multiplica a divergência KL implícita entre o modelo treinado (π_θ) e o modelo base congelado (π_ref). Um β muito baixo (próximo de 0) remove esse imposto — o modelo aprende a preferir respostas seguras, mas pode colapsar a fluência, esquecendo padrões linguísticos aprendidos no pré-treinamento e tornando-se repetitivo ou incoerente. Um β muito alto, por outro lado, torna o imposto tão caro que o modelo quase não se move da distribuição original, não aprendendo as preferências de alinhamento. O valor β = 0.1 representa um equilíbrio calibrado: permite que o modelo suprima respostas prejudiciais com eficácia, ao mesmo tempo em que preserva a fluência e a coerência do modelo de linguagem base — funcionando como um regularizador que mantém a identidade linguística do modelo durante o alinhamento.


Passo 4 — Treinamento e Validação

Instalação

pip install -r requirements.txt

Treinamento

python train_dpo.py

O script usa paged_adamw_32bit (otimizador com paginação para reduzir pico de VRAM) e fp16=True.

Validação

python inference_test.py

O script de validação calcula a log-probabilidade média do modelo alinhado para a resposta chosen e rejected dado cada prompt malicioso. O alinhamento é considerado bem-sucedido quando log_prob(chosen) > log_prob(rejected), comprovando que a distribuição foi deslocada a favor das respostas seguras.


Configuração de Hardware Recomendada

Ambiente VRAM mínima Tempo estimado
Google Colab T4 15 GB ~45 min
Google Colab A100 40 GB ~15 min
Kaggle P100 16 GB ~50 min

Nota de Integridade Acadêmica

Partes geradas/complementadas com IA, revisadas por Andre Lucas.

  • Este Readme foi feito utilizando IA, mas foi revisado e corrigido por mim.
  • inference_test.py foi feito por mim.
  • train_dpo.py foi feito por IA, e eu apenas corrigi os problemas de compatibilidade com a versão atual do pytorch, além de alterar o modelo para o TinyLlama-W1.1B-Chat-v1.0, que é mais leve e compatível com o DPO.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors