Aprendizado por Transferência

Visão geral

Aprendizado por transferência (transfer learning) é uma família de técnicas para melhorar o desempenho em uma tarefa alvo aproveitando o conhecimento aprendido em uma tarefa fonte, geralmente começando de uma rede neural profunda pré-treinada (pretrained deep neural network) e adaptando-a. No aprendizado profundo moderno, o aprendizado por transferência é a abordagem padrão para muitas aplicações, porque treinar modelos grandes do zero é caro e exige muitos dados.

Em redes neurais profundas, aprendizado por transferência geralmente significa reutilizar as representações (representations) (características, incorporações) de um modelo pré-treinado e adaptá-las a uma nova tarefa ou domínio por meio de:

  • Extração de características (feature extraction) (congelar a maior parte do modelo e treinar uma pequena “cabeça”)
  • Ajuste fino (fine-tuning) (atualizar alguns ou todos os parâmetros pré-treinados na nova tarefa)
  • Aprendizado por transferência eficiente em parâmetros (parameter-efficient transfer learning, PETL) (adaptar o modelo treinando um pequeno número de parâmetros adicionais ou um subconjunto de pesos)

O aprendizado por transferência é especialmente poderoso em cenários de escassez de dados (data-scarce) e sustenta muitos fluxos de trabalho de “modelos de base” em visão, linguagem e aprendizado multimodal.

Este artigo foca em aprendizado por transferência em redes neurais profundas. Para um contexto mais amplo, veja Aprendizado de Representações e Aprendizado Autossupervisionado.

Ideia central: reutilizar representações aprendidas

Redes profundas treinadas em conjuntos de dados grandes e diversos frequentemente aprendem características de propósito geral (general-purpose features):

  • Em visão: bordas → texturas → partes → objetos
  • Em PLN: semântica de tokens/frases, sintaxe, padrões discursivos
  • Em áudio: padrões fonéticos e espectrais

Essas características aprendidas podem servir como um ponto de partida forte para problemas relacionados. Em vez de aprender tudo do zero, adaptamos o modelo à nova tarefa — muitas vezes com muito menos dados rotulados e computação.

Isso pode ser visto como uma instanciação prática de viés indutivo (inductive bias): pesos pré-treinados codificam uma estrutura útil que guia o aprendizado na tarefa alvo.

Terminologia e cenários

Ajuda separar “tarefa” de “domínio”:

  • Domínio: distribuição de entrada (por exemplo, imagens naturais vs. exames médicos), frequentemente escrito como ( \mathcal{D} )
  • Tarefa: função de predição e rótulos (por exemplo, classificação, detecção), frequentemente escrito como ( \mathcal{T} )

Uma formulação comum:

  • Domínio/tarefa fonte: ((\mathcal{D}_S, \mathcal{T}_S))
  • Domínio/tarefa alvo: ((\mathcal{D}_T, \mathcal{T}_T))

Diferentes cenários de aprendizado por transferência:

  • Transferência no mesmo domínio (in-domain transfer): domínio igual/semelhante, tarefa diferente (por exemplo, classificação no ImageNet → detecção de objetos)
  • Transferência de domínio / adaptação de domínio (domain transfer / domain adaptation): mesma tarefa, domínio diferente (por exemplo, imagens de direção diurna → imagens de direção noturna)
  • Transferência de tarefa + domínio (task + domain transfer): ambos diferem (por exemplo, fotos da web → imagens médicas + espaço de rótulos diferente)

Paradigmas relacionados que você pode encontrar:

  • Aprendizado multitarefa (multi-task learning) (Aprendizado Multitarefa): treinar em múltiplas tarefas simultaneamente para aprender características compartilhadas (frequentemente melhora a transferência)
  • Meta-aprendizado (meta-learning) (Meta-Aprendizado): otimizar para adaptação rápida, frequentemente com poucos exemplos
  • Destilação de conhecimento (knowledge distillation) (Destilação de Conhecimento): transferir conhecimento de um modelo professor para um aluno (não necessariamente entre tarefas)

Por que o aprendizado por transferência funciona (intuição teórica)

O sucesso empírico do aprendizado por transferência é sustentado por várias intuições:

1) Reutilização de características e hierarquia

Redes profundas aprendem representações em camadas. As camadas iniciais frequentemente capturam padrões genéricos; as camadas finais tornam-se específicas da tarefa. Reutilizar camadas iniciais/intermediárias reduz a complexidade amostral na tarefa alvo.

2) Melhor inicialização e otimização

Pesos pré-treinados fornecem uma boa inicialização (good initialization) para Descida do Gradiente, frequentemente caindo em uma bacia que treina mais rápido e generaliza melhor do que uma inicialização aleatória. Isso é especialmente importante para modelos grandes, nos quais a dinâmica de treinamento é sensível à inicialização.

3) Regularização implícita

Começar a partir de pesos pré-treinados pode restringir o espaço de hipóteses, atuando como um regularizador que reduz o sobreajuste quando os dados do alvo são limitados.

4) Pré-treinamento como aprendizado de representações

O pré-treinamento (especialmente via Aprendizado Autossupervisionado) pode ser visto como o aprendizado de representações que capturam uma estrutura ampla nos dados. O ajuste fino então mapeia essas representações para os rótulos do alvo.

Fluxos de trabalho comuns na prática

Visão computacional: ImageNet → tarefas downstream

Um fluxo de trabalho clássico:

  1. Comece com um backbone pré-treinado no ImageNet (por exemplo, ResNet, ViT).
  2. Substitua a cabeça de classificação por uma nova cabeça para a tarefa alvo.
  3. Então, ou:
    • congele o backbone e treine a cabeça (extração de características), ou
    • treine o modelo inteiro (ajuste fino), ou
    • use um método eficiente em parâmetros (por exemplo, LoRA em camadas de atenção em ViTs)

Exemplo: ImageNet → detecção de objetos

  • Use um backbone pré-treinado dentro de frameworks de detecção (Faster R-CNN, RetinaNet, variantes de DETR).
  • O pré-treinamento ajuda a detecção especialmente quando caixas delimitadoras rotuladas são limitadas.

Exemplo: ImageNet → imagens médicas

  • Mesmo com domínios diferentes, o pré-treinamento no ImageNet pode ajudar porque características visuais iniciais transferem. No entanto, o desalinhamento de domínio também pode causar transferência negativa (negative transfer) (discutido adiante), e um pré-treinamento específico do domínio pode ser melhor.

PLN: Transformers pré-treinados → classificação, QA, geração

Em PLN, aprendizado por transferência é frequentemente o padrão: comece de um Transformer pré-treinado (por exemplo, um codificador estilo BERT ou um decodificador estilo GPT) e adapte.

Padrões comuns:

  • Adicionar uma cabeça de classificação sobre um codificador pré-treinado para classificação de sentimento/tópico.
  • Fazer ajuste fino de um modelo seq2seq para tradução ou sumarização.
  • Usar ajuste por instruções ou ajuste por preferências como uma forma de adaptação à tarefa.

Para base arquitetural, veja Arquitetura Transformer.

Fala e multimodal

  • Fala: codificadores pré-treinados (estilo wav2vec) transferem bem para ASR com áudio rotulado limitado.
  • Multimodal: modelos visão-linguagem pré-treinados podem ser adaptados para recuperação, legendagem, VQA ou tarefas específicas de domínio.

Estratégias de adaptação

1) Extração de características (backbone congelado)

Extração de características congela o modelo pré-treinado (ou a maior parte dele) e treina apenas um novo componente específico da tarefa (frequentemente chamado de head).

Variantes típicas:

  • Sondagem linear (linear probing): treinar um classificador linear sobre incorporações congeladas
  • Cabeça rasa (shallow head): um pequeno MLP ou uma camada de pooling por atenção sobre características congeladas

Quando funciona bem:

  • O conjunto de dados alvo é pequeno
  • A tarefa alvo é semelhante à tarefa/domínio fonte
  • Você quer treinamento rápido e baixo risco de sobreajuste

Prós:

  • Computacionalmente barato
  • Estável (menor risco de esquecimento catastrófico)
  • Fácil de implementar e reproduzir

Contras:

  • Capacidade limitada de adaptação a mudanças de domínio
  • O desempenho pode estagnar abaixo do ajuste fino

Exemplo prático (PyTorch): backbone congelado + nova cabeça

import torch
import torch.nn as nn
from torchvision.models import resnet50, ResNet50_Weights

# 1) Load pretrained backbone
weights = ResNet50_Weights.DEFAULT
backbone = resnet50(weights=weights)

# 2) Freeze all backbone parameters
for p in backbone.parameters():
    p.requires_grad = False

# 3) Replace classification head
num_features = backbone.fc.in_features
backbone.fc = nn.Linear(num_features, 5)  # 5 target classes

# 4) Train only backbone.fc parameters
optimizer = torch.optim.AdamW(backbone.fc.parameters(), lr=1e-3, weight_decay=1e-2)
criterion = nn.CrossEntropyLoss()

Detalhe importante: mantenha o mesmo pré-processamento (same preprocessing) (normalização, redimensionamento) esperado pelos pesos pré-treinados; caso contrário, você introduz um deslocamento de distribuição na entrada.

2) Ajuste fino (atualizar pesos pré-treinados)

Ajuste fino continua o treinamento nos dados do alvo, atualizando alguns ou todos os parâmetros pré-treinados usando Retropropagação.

Há vários regimes comuns de ajuste fino:

Ajuste fino completo

Atualize todos os parâmetros.

  • Melhor quando você tem dados alvo suficientes (ou regularização forte)
  • Mais flexível para mudança de domínio
  • Mais caro (computação + memória)

Ajuste fino parcial

Atualize apenas parte da rede, por exemplo:

  • Descongele apenas o(s) último(s) bloco(s)
  • Descongele o backbone gradualmente (“descongelamento gradual”)
  • Mantenha camadas iniciais congeladas (elas frequentemente são mais gerais)

Isso pode ser um bom compromisso: mais adaptação do que extração de características, menor risco de sobreajuste do que ajuste fino completo.

Heurísticas de boas práticas para ajuste fino

O ajuste fino é frequentemente sensível a hiperparâmetros. Heurísticas comuns:

  • Taxa de aprendizado menor do que treinar do zero (por exemplo, 10× a 100× menor)
  • Decaimento de taxa de aprendizado por camada (layer-wise learning rate decay): LR menor para camadas iniciais, LR maior para camadas finais
  • Agendas de warmup + decaimento cosseno (cosine decay) frequentemente funcionam bem
  • Aumento de dados forte (strong data augmentation) em visão (RandAugment, Mixup/CutMix) para reduzir sobreajuste
  • Parada antecipada (early stopping) e validação cuidadosa
  • Considere ajustes para desbalanceamento de classes (class imbalance) (reponderação, focal loss)

Conceitualmente, você está tentando preservar características gerais úteis enquanto adapta as partes específicas da tarefa.

3) Aprendizado por transferência eficiente em parâmetros (PETL)

Quando os modelos são muito grandes (comum com Transformers), ajustar finamente todos os pesos pode ser caro e pode exigir armazenar um modelo completo separado por tarefa. Métodos de PETL adaptam um modelo treinando um pequeno número de parâmetros.

Abordagens comuns de PETL:

Adaptadores (adapters)

Inserir pequenos módulos treináveis (por exemplo, MLPs gargalo) entre camadas; congelar o modelo original.

  • Prós: pouco armazenamento específico por tarefa; estável
  • Contras: adiciona sobrecarga na inferência; escolhas de design de adaptadores importam

LoRA (Low-Rank Adaptation)

Em vez de atualizar uma matriz de pesos completa (W), aprender uma atualização de baixa ordem ( \Delta W = A B ) (onde (A) e (B) são pequenas), geralmente aplicada às projeções de atenção.

  • Prós: forte desempenho, amplamente usada na adaptação de LLMs
  • Contras: ainda requer ajuste cuidadoso de hiperparâmetros (rank, módulos-alvo)

Ajuste de prompt/prefixo (prompt/prefix tuning)

Aprender incorporações de prompt específicas da tarefa (ou prefixos) que direcionam o modelo congelado.

  • Prós: extremamente eficiente em parâmetros
  • Contras: pode ter desempenho inferior ao ajuste fino completo em algumas tarefas; comprimento/posicionamento do prompt importam

Ajuste apenas de vieses (bias-only tuning) (BitFit)

Atualizar apenas termos de viés.

  • Prós: muito leve
  • Contras: capacidade limitada; desempenho varia

Quando PETL é especialmente útil:

  • Muitas tarefas/domínios (precisa de muitas versões especializadas)
  • Memória de GPU limitada
  • Quer reduzir esquecimento catastrófico congelando pesos base
  • Restrições de serving: armazenar um modelo base + pequenos deltas por tarefa

Adaptação de domínio e pré-treinamento contínuo

Às vezes, o principal desafio é desalinhamento de domínio (domain mismatch): as entradas do alvo diferem substancialmente dos dados de pré-treinamento.

Um remédio comum é pré-treinamento contínuo (continued pretraining) em dados não rotulados do domínio alvo e, então, ajuste fino em dados rotulados do alvo:

  • DAPT (Domain-Adaptive PreTraining): pré-treinar mais no corpus do domínio (por exemplo, texto biomédico)
  • TAPT (Task-Adaptive PreTraining): pré-treinar mais em texto não rotulado específico da tarefa

Em visão, ideias análogas incluem pré-treinamento autossupervisionado em imagens do próprio domínio antes do ajuste fino supervisionado.

Isso frequentemente melhora o desempenho quando:

  • Você tem poucos dados rotulados do alvo
  • Você tem muitos dados não rotulados do alvo
  • A mudança de domínio é substancial (estilo, vocabulário, diferenças de sensor)

Quando o aprendizado por transferência mais ajuda

O aprendizado por transferência tende a oferecer os maiores ganhos quando:

  • Os dados do alvo são escassos: representações pré-treinadas reduzem a complexidade amostral.
  • Fonte e alvo são relacionados: seja no domínio (entradas similares) ou na estrutura subjacente.
  • O modelo pré-treinado é forte: pré-treinamento mais diverso/em maior escala frequentemente produz características mais transferíveis.
  • A computação é limitada: treinar do zero é caro demais.
  • Você precisa iterar rápido: ajuste fino converge mais rápido do que treinamento do zero.

Exemplos concretos:

  • Uma startup com 5 mil imagens de produtos rotuladas ajusta finamente um backbone de visão pré-treinado para detecção de defeitos.
  • Uma equipe de pesquisa com texto clínico rotulado limitado ajusta finamente um modelo de linguagem pré-treinado, possivelmente com pré-treinamento contínuo adaptativo ao domínio antes.
  • Uma empresa precisa de dezenas de classificadores internos de texto; métodos de PETL armazenam adaptações leves por tarefa.

Armadilhas e modos de falha

O aprendizado por transferência é poderoso, mas não é garantido que ajude. Armadilhas comuns incluem:

1) Transferência negativa

Transferência negativa acontece quando transferir de um modelo fonte prejudica o desempenho em comparação com treinar do zero ou usar uma fonte diferente.

Por que acontece:

  • Fonte e alvo não são relacionados ou são apenas superficialmente similares
  • As características pré-treinadas enfatizam padrões enganosos para a tarefa alvo
  • Os vieses indutivos do modelo entram em conflito com as necessidades do alvo

Mitigações:

  • Tente um modelo pré-treinado diferente (domínio mais próximo ou objetivo de pré-treinamento diferente)
  • Use extração de características primeiro (mais seguro) antes de ajuste fino completo
  • Use taxas de aprendizado menores e regularização mais forte
  • Considere pré-treinamento contínuo em dados do domínio alvo

2) Desalinhamento de distribuição (mudança de domínio)

Mesmo que a tarefa seja similar, diferenças na distribuição de entrada podem quebrar suposições:

  • Estilo de imagem: iluminação, ruído do sensor, modalidade médica, imagens de satélite
  • Domínio de texto: vocabulário, estilo de escrita, variedade linguística
  • Convenções de rotulagem: diretrizes de anotadores diferem

Sintomas:

  • Boa acurácia de treinamento, mas validação/generalização ruins
  • Predições erradas com alta confiança (descalibração)

Mitigações:

  • Pré-treinamento contínuo adaptativo ao domínio (quando existe dado não rotulado)
  • Aumento forte / randomização de domínio
  • Alinhamento cuidadoso de pré-processamento com o pré-treinamento
  • Coletar um conjunto de validação rotulado pequeno, mas representativo

3) Esquecimento catastrófico

Ao ajustar finamente todos os pesos, o modelo pode “esquecer” capacidades gerais aprendidas durante o pré-treinamento, especialmente com conjuntos de dados alvo pequenos.

Mitigações:

  • Congele camadas iniciais ou use ajuste fino parcial
  • Use PETL (pesos base congelados)
  • Use LR menor e parada antecipada
  • Regularização em direção aos pesos pré-treinados (por exemplo, padrões de weight decay, ou restrições explícitas)

4) Sobreajuste ao conjunto de dados alvo

Com conjuntos de dados alvo pequenos, ajuste fino completo pode sobreajustar rapidamente.

Mitigações:

  • Comece com extração de características ou PETL
  • Use aumento forte (visão), dropout, suavização de rótulos
  • Prefira cabeças mais simples e menos parâmetros treináveis
  • Use validação cruzada se os dados forem extremamente limitados

5) Vazamento e erros de avaliação

O aprendizado por transferência facilita vazar informação acidentalmente:

  • O conjunto de dados de pré-treinamento se sobrepõe ao conjunto de avaliação (comum em dados em escala web)
  • Ajuste de hiperparâmetros no conjunto de teste
  • Usar estatísticas de domínio calculadas no conjunto inteiro (treino+teste)

Mitigações:

  • Divisões estritas do conjunto de dados
  • Use um conjunto de validação para seleção de modelo
  • Documente fontes de pré-treinamento e riscos potenciais de sobreposição

Fluxo de trabalho prático: uma receita robusta de aprendizado por transferência

Uma abordagem pragmática que funciona em diferentes domínios:

  1. Escolha um checkpoint pré-treinado forte
    • Prefira modelos pré-treinados em dados grandes e diversos e/ou próximos ao seu domínio.
  2. Combine o pré-processamento
    • Use a mesma tokenização (PLN) ou normalização/resolução (visão) esperada pelo checkpoint.
  3. Estabeleça baselines
    • Backbone congelado + cabeça linear (barato, estável)
    • Baseline do zero se viável (para detectar transferência negativa)
  4. Tente ajuste fino parcial → completo
    • Descongele as últimas camadas primeiro; só faça ajuste fino completo se necessário.
  5. Ajuste taxa de aprendizado e regularização
    • LR menor, decaimento por camada, parada antecipada.
  6. Considere PETL se o modelo for grande ou se você precisar de muitas variantes por tarefa
    • LoRA/adaptadores são padrões comuns para arquiteturas tipo LLM.
  7. Trate mudança de domínio explicitamente
    • Se a mudança for grande, considere pré-treinamento contínuo em dados não rotulados do alvo.
  8. Valide com cuidado
    • Use um conjunto de validação representativo; monitore calibração e desempenho por subgrupos.

Para considerações operacionais (treinamento distribuído, checkpointing, reprodutibilidade), veja Treinamento em Escala.

Exemplo prático de ajuste fino (PyTorch): descongelar o último bloco

import torch
import torch.nn as nn
from torchvision.models import resnet50, ResNet50_Weights

weights = ResNet50_Weights.DEFAULT
model = resnet50(weights=weights)

# Replace head
num_features = model.fc.in_features
model.fc = nn.Linear(num_features, 5)

# Freeze everything
for p in model.parameters():
    p.requires_grad = False

# Unfreeze last residual block + head
for p in model.layer4.parameters():
    p.requires_grad = True
for p in model.fc.parameters():
    p.requires_grad = True

# Use a smaller LR for pretrained layers than for the new head
optimizer = torch.optim.AdamW(
    [
        {"params": model.layer4.parameters(), "lr": 1e-5},
        {"params": model.fc.parameters(), "lr": 1e-4},
    ],
    weight_decay=1e-2
)

Esse padrão frequentemente oferece resultados fortes, com menor risco de sobreajuste do que ajuste fino completo.

Escolhendo entre extração de características, ajuste fino e PETL

Um guia simples de decisão:

  • Conjunto de dados muito pequeno (centenas a alguns milhares de exemplos)
    Comece com extração de características ou PETL. Ajuste fino completo pode sobreajustar.

  • Conjunto de dados moderado + alguma mudança de domínio
    Tente ajuste fino parcial, possivelmente com pré-treinamento contínuo se houver dados não rotulados do alvo.

  • Conjunto de dados grande (ou necessidade crítica da melhor acurácia)
    Ajuste fino completo costuma ser o melhor, assumindo que você possa ajustar com cuidado e arcar com a computação.

  • Muitas tarefas / variantes de implantação
    PETL reduz armazenamento e pode simplificar o serving.

Relação com conceitos próximos

O aprendizado por transferência se conecta a várias ideias-chave no aprendizado profundo:

Resumo

O aprendizado por transferência adapta redes neurais profundas pré-treinadas a novas tarefas ou domínios, reutilizando representações aprendidas. As principais estratégias de adaptação são:

  • Extração de características: congelar o backbone e treinar uma cabeça
  • Ajuste fino: atualizar alguns ou todos os parâmetros pré-treinados
  • Métodos eficientes em parâmetros: adaptadores, LoRA, ajuste de prompt/prefixo, ajuste apenas de vieses

O aprendizado por transferência é mais valioso em cenários de escassez de dados e em fluxos de trabalho como ImageNet → detecção/segmentação ou Transformers pré-treinados → tarefas de PLN. No entanto, ele pode falhar devido a transferência negativa, desalinhamento de distribuição, esquecimento catastrófico e armadilhas de avaliação. Um fluxo de trabalho disciplinado — baselines fortes, pré-processamento cuidadoso, descongelamento em etapas e validação — torna o aprendizado por transferência confiável e eficaz na prática.