14. Transfer Learning
Transfer Learning e Fine-Tuning
Treinar uma rede neural profunda do zero requer enormes quantidades de dados rotulados e poder computacional. O Transfer Learning resolve isso: em vez de inicialização aleatória de pesos, começamos a partir de um modelo já treinado em uma tarefa rica (geralmente em grande escala) e o adaptamos para nossa tarefa específica.
A intuição: as camadas iniciais de uma CNN treinada no ImageNet aprendem detectores de bordas, texturas e formas — úteis para qualquer tarefa de visão. As camadas posteriores se especializam nas categorias do ImageNet. Substituímos essas camadas finais e fazemos fine-tuning do modelo.
Taxonomia de Abordagens
LoRA: Adaptação de Baixo Rank
LoRA2 é a técnica PEFT (Parameter-Efficient Fine-Tuning) mais popular. A ideia é simples e elegante:
Para uma matriz de pesos pré-treinada congelada \(W_0 \in \mathbb{R}^{d \times k}\), adicionamos uma perturbação de baixo rank:
onde \(B \in \mathbb{R}^{d \times r}\) e \(A \in \mathbb{R}^{r \times k}\), com \(r \ll \min(d, k)\).
- Durante o forward pass: \(h = W_0 x + BAx = W_0 x + \Delta W x\)
- Durante o treinamento: apenas \(A\) e \(B\) são atualizados (\(W_0\) é congelado)
- Parâmetros treináveis: \(r(d + k)\) vs \(dk\) no fine-tuning completo
Exemplo com GPT-3 (175B parâmetros):
| Configuração | Parâmetros Treináveis |
|---|---|
| Fine-tuning completo | 175 bilhões |
| LoRA (\(r=4\), atenção) | 4,7 milhões (~0,003%) |
| LoRA (\(r=16\), atenção) | ~18,9 milhões |
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B")
lora_config = LoraConfig(
r=16, # rank da matriz
lora_alpha=32, # escalonamento (alpha/r = fator de escala)
target_modules=["q_proj", "v_proj"], # onde aplicar LoRA
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: 6,815,744 || all params: 8,037,269,504 || trainable%: 0.0848
Interativo: Calculadora de Custo de Fine-Tuning
Outras Técnicas PEFT
| Técnica | Ideia | Parâmetros |
|---|---|---|
| LoRA | Matrizes de baixo rank nos pesos de atenção | \(r(d+k)\) por camada |
| QLoRA | LoRA + modelo congelado em 4 bits (NF4) | ~LoRA, menos VRAM |
| Prefix Tuning | Aprende tokens virtuais adicionados à sequência | \(\text{num\_prefix} \times d_{\text{model}}\) |
| Prompt Tuning | Apenas embeddings do prompt são treináveis | \(\text{num\_tokens} \times d_{\text{model}}\) |
| Adapter Layers | Insere pequenas camadas FFN entre as existentes | \(2 \times r \times d\) por camada |
| DoRA | LoRA decomposto em magnitude + direção | Similar ao LoRA |
Adaptação de Domínio vs. Adaptação de Tarefa
flowchart LR
A[Modelo Base\nPré-treinado] --> B{Tipo de Adaptação}
B -->|"Dados de domínio\n(sem rótulos)"| C[Pré-Treinamento Continuado\nAdaptação de Domínio]
B -->|"Dados de tarefa\nrotulados"| D[Fine-Tuning Supervisionado\nSFT]
B -->|"Feedback humano"| E[RLHF / DPO\nAlinhamento]
C --> F[Modelo de Domínio]
D --> G[Modelo de Tarefa]
E --> H[Modelo Alinhado]
F -->|"Fine-tuning adicional"| G Receita prática para fine-tuning de LLM (2025):
- Comece com um modelo base adequado (LLaMA-3, Mistral, Gemma)
- Quantize para 4 bits (QLoRA) se a VRAM for limitada
- Aplique LoRA com \(r \in \{8, 16, 32\}\) nas projeções Q e V
- Use
TRL+SFTTrainerpara fine-tuning supervisionado - Opcionalmente aplique DPO para alinhamento por preferências
Quando Usar Cada Abordagem
| Situação | Recomendação |
|---|---|
| Dados de tarefa: < 1.000 amostras | Extração de Features ou Prompt Tuning |
| Dados: 1k–100k amostras, hardware limitado | LoRA/QLoRA |
| Dados: > 100k amostras, hardware disponível | Fine-Tuning Completo |
| Novo domínio (médico, jurídico, código) | Adaptação de Domínio → Fine-Tuning |
| Alinhamento com valores/preferências | SFT → RLHF ou DPO |
-
Pan, S. J., & Yang, Q. (2010). A Survey on Transfer Learning. IEEE TKDE. ↩
-
Hu, E. et al. (2021). LoRA: Low-Rank Adaptation of Large Language Models. ↩
-
Dettmers, T. et al. (2023). QLoRA: Efficient Finetuning of Quantized LLMs. ↩
-
Rafailov, R. et al. (2023). Direct Preference Optimization. ↩