Aprendizado por Transferência (Não-Deep)
Visão geral
Aprendizado por transferência (transfer learning) (não profundo) é a família de métodos que reutiliza conhecimento de uma tarefa ou domínio para melhorar o aprendizado em outro, sem depender de redes neurais profundas (deep neural networks). Ele é especialmente útil quando o cenário-alvo tem poucos dados rotulados, quando coletar rótulos é caro, ou quando você precisa usar modelos interpretáveis, leves ou bem calibrados (well-calibrated models), como modelos lineares (linear models), árvores de decisão (trees), métodos de kernel (kernel methods) ou modelos probabilísticos (probabilistic models).
O aprendizado por transferência clássico antecede o aprendizado profundo (deep learning) moderno em décadas e continua altamente relevante para:
- Dados tabulares (tabular data) de negócios/medicina, em que redes profundas muitas vezes são desnecessárias ou difíceis de justificar
- Classificação de texto com atributos esparsos de saco de palavras (bag-of-words)
- Monitoramento industrial em que há mudanças de distribuição entre máquinas, fábricas ou estações do ano
- Personalização (modelos por usuário) com poucas observações por usuário
- Estudos multicêntricos (multi-site studies) em que os dados vêm de múltiplas instituições com diferenças sistemáticas
Este artigo foca em transferir conhecimento entre tarefas e/ou domínios usando modelos “rasos” (shallow models), atributos engenheirados (engineered features), kernels, métodos bayesianos (Bayesian methods) e técnicas de ajuste estatístico (statistical adjustment techniques).
Cenários de aprendizado relacionados incluem Aprendizado Supervisionado, Aprendizado Não Supervisionado, Aprendizado Online, Aprendizado Semi/Auto-Supervisionado e Supervisão Fraca.
Formulação formal do problema
Tarefas, domínios e distribuições
Uma formalização comum distingue:
- Um domínio (D = (\mathcal{X}, P(X))): espaço de entrada (\mathcal{X}) e distribuição marginal das entradas.
- Uma tarefa (T = (\mathcal{Y}, f)) ou (T = (\mathcal{Y}, P(Y\mid X))): espaço de rótulos (\mathcal{Y}) e a regra de rotulagem.
Você tem:
- Domínio/tarefa fonte: (D_s, T_s) com muitos rótulos
- Domínio/tarefa alvo: (D_t, T_t) com poucos rótulos (ou até nenhum)
O aprendizado por transferência busca aprender um preditor para o alvo que tenha desempenho melhor do que treinar apenas com dados do alvo.
Tipos comuns de mudança (shift)
Métodos de transferência não profundos frequentemente dependem de o que mudou entre fonte e alvo:
Deslocamento de covariáveis (covariate shift): (P_s(X) \neq P_t(X)), mas (P(Y\mid X)) é (aproximadamente) o mesmo
Exemplo: o mesmo mecanismo de fraude, mas os padrões de transação diferem por país.Deslocamento de rótulos, ou deslocamento a priori (label shift, prior shift): (P_s(Y) \neq P_t(Y)), mas (P(X\mid Y)) é o mesmo
Exemplo: a prevalência de uma doença difere entre hospitais.Deslocamento de conceito / deslocamento condicional (concept shift / conditional shift): (P_s(Y\mid X) \neq P_t(Y\mid X))
Exemplo: o comportamento do usuário muda após uma mudança de política; a definição de “spam” evolui.Deslocamento de atributos / deslocamento de medição (feature shift / measurement shift): atributos têm escala/ruído/sensores diferentes
Exemplo: o mesmo processo físico medido por dispositivos diferentes.
Ser explícito sobre o tipo de mudança é importante porque muitos algoritmos de transferência só são justificáveis sob suposições específicas.
Principais estratégias de transferência sem redes profundas
Métodos de transferência diferem pelo que transferem: instâncias, atributos, parâmetros ou estrutura.
1) Transferência baseada em instâncias (instance-based transfer) (reponderação e seleção)
Se o deslocamento de covariáveis for o principal problema, uma ideia clássica é a ponderação por importância (importance weighting):
[ \mathbb{E}{(X,Y)\sim P_t}[\ell(f(X),Y)] \approx \mathbb{E}{(X,Y)\sim P_s}\left[\frac{p_t(X)}{p_s(X)} \ell(f(X),Y)\right] ]
Assim, você pode treinar com dados da fonte, mas ponderar cada exemplo da fonte por [ w(x)=\frac{p_t(x)}{p_s(x)}. ]
Abordagens práticas incluem:
- Ponderação por propensão (propensity) / classificador de domínio (domain classifier): treine um classificador para distinguir fonte vs alvo e, então, converta sua saída em pesos de razão de densidades (density-ratio).
- Correspondência de médias em kernel (Kernel Mean Matching, KMM): escolha pesos para que as médias ponderadas dos atributos da fonte correspondam às médias dos atributos do alvo em um espaço de Hilbert de kernel reproduzível (RKHS).
- KLIEP / uLSIF: estimação direta da razão de densidades sem modelagem explícita de densidades.
- Seleção de instâncias: mantenha apenas instâncias da fonte “similares” ao alvo.
Prós: Simples, funciona com qualquer aprendiz a jusante (regressão logística, máquina de vetores de suporte, árvores).
Contras: Alta variância se os pesos forem extremos; falha sob forte deslocamento de conceito.
2) Transferência baseada em atributos (feature-based transfer) (aprender uma representação compartilhada)
Em vez de ponderar exemplos, você pode mapear fonte e alvo para um espaço em que eles pareçam mais semelhantes:
- Transferência de padronização e calibração (standardization and calibration transfer): igualar escala, corrigir deriva de sensores.
- Alinhamento de subespaços (subspace alignment): aprender subespaços de análise de componentes principais (PCA) separadamente e, então, alinhá-los.
- Análise de Componentes para Transferência (TCA) (Transfer Component Analysis): encontrar uma projeção que reduza a discrepância (por exemplo, discrepância de média máxima (MMD)) entre domínios.
- CORAL (alinhamento de correlação; CORrelation ALignment): alinhar estatísticas de segunda ordem (covariâncias) entre atributos de fonte e alvo.
- Análise de correlação canônica (CCA) / mínimos quadrados parciais (PLS): quando há visões pareadas ou conjuntos de atributos relacionados.
Essas abordagens são frequentemente usadas com classificadores/regressores lineares após a transformação.
Prós: Pode reduzir o descompasso mantendo modelos simples.
Contras: Se os rótulos se comportam de forma diferente entre domínios, alinhar marginais (P(X)) pode não ajudar e pode até prejudicar.
3) Transferência de parâmetros (parameter transfer) (regularizar o alvo em direção à fonte)
Se você consegue treinar um bom modelo na fonte, pode usá-lo como uma distribuição a priori (prior) para o modelo do alvo.
Para modelos lineares, um padrão comum é:
[ \min_{w}\ \sum_{(x_i,y_i)\in \text{target}} \ell(w;x_i,y_i)\ +\ \lambda |w - w_s|_2^2 ]
onde (w_s) é o vetor de pesos treinado na fonte.
Isso diz: “ajuste os rótulos do alvo, mas não se afaste demais da solução da fonte, a menos que os dados do alvo sugiram fortemente isso”.
Ideias relacionadas:
- SVM adaptativa (Adaptive SVM): aprender uma SVM do alvo como uma correção da função de decisão da fonte.
- Adaptação de domínio “frustrantemente fácil” (“Frustratingly easy” domain adaptation) (Daumé): aumentar atributos com cópias compartilhadas/específicas da fonte/específicas do alvo para que o modelo aprenda deslocamentos.
- Inicialização por aquecimento + atualizações limitadas (warm-start + limited updates): inicializar com parâmetros da fonte e executar alguns passos de otimização no alvo (comum em cenários online/convexos).
Prós: Muito eficaz quando as tarefas são realmente relacionadas e os significados dos atributos coincidem.
Contras: Pode causar transferência negativa (negative transfer) quando a solução da fonte é enganosa.
4) Aprendizado multitarefa (multi-task learning) (estrutura compartilhada entre tarefas)
Quando você tem múltiplas tarefas relacionadas (por exemplo, modelos por região ou por usuário), pode treiná-las conjuntamente para que compartilhem informação:
- Representações de atributos compartilhadas via esparsidade em grupo / restrições de baixo posto
- Regularização conjunta (por exemplo, encorajar vetores de pesos das tarefas a serem próximos)
- Processos gaussianos (Gaussian processes) multitarefa ou modelos bayesianos hierárquicos (Bayesian hierarchical models)
Esse costuma ser o enquadramento correto para “transferência” quando não há uma única fonte/alvo, mas sim muitas tarefas com tamanhos de dados desiguais.
Veja também: Aprendizado Multitarefa (frequentemente tratado como um conceito irmão).
5) Transferência relacional / baseada em grafos (relational / graph-based transfer)
Quando os dados são conectados (usuários-itens, redes de citação, grafos de conhecimento (knowledge graphs)), a transferência pode ocorrer via estrutura:
- Fatoração de matriz coletiva (collective matrix factorization) entre domínios (fatores latentes compartilhados)
- Propagação de rótulos baseada em grafos (graph-based label propagation) quando rótulos são escassos no grafo-alvo
- Filtragem colaborativa (collaborative filtering) sensível ao domínio (por exemplo, transferir preferências de livros para filmes)
Esses métodos podem ser totalmente não profundos (fatoração de matrizes, modelos gráficos probabilísticos (probabilistic graphical models)), embora existam variantes profundas.
Fundamentos teóricos (o que justifica a transferência)
Limites de generalização (generalization bounds) em adaptação de domínio (domain adaptation)
Um resultado central (Ben-David et al.) dá intuição para classificação binária sob mudança de domínio:
[ \epsilon_t(h) \le \epsilon_s(h) + \tfrac{1}{2} d_{\mathcal{H}\Delta\mathcal{H}}(P_s(X),P_t(X)) + \lambda ]
Onde:
- (\epsilon_s(h)), (\epsilon_t(h)): erro na fonte/no alvo da hipótese (h)
- (d_{\mathcal{H}\Delta\mathcal{H}}): uma divergência que mede quão distinguíveis os domínios são sob uma classe de hipóteses (hypothesis class)
- (\lambda): erro da melhor hipótese conjunta em ambos os domínios (captura o descompasso inerente)
Interpretação:
- A transferência é mais fácil quando os domínios são similares (divergência pequena).
- Mesmo que os domínios sejam diferentes, a transferência ainda pode funcionar se existir um modelo que tenha bom desempenho em ambos ((\lambda) pequeno).
- Se (\lambda) for grande (verdadeiro deslocamento de conceito), nenhuma adaptação “inteligente” consegue corrigir totalmente.
Transferência negativa
Transferência negativa acontece quando usar informações da fonte piora o desempenho no alvo em comparação a aprender apenas com dados do alvo.
Causas comuns:
- Deslocamento de conceito oculto ((P(Y\mid X)) mudou)
- Semântica diferente dos atributos (mesmo nome de atributo, significado diferente)
- Definições de rótulo ou padrões de anotação incompatíveis
- Reponderação excessivamente confiante (pesos de importância extremos)
- Regularização forte demais em direção aos parâmetros da fonte
Mitigações:
- Use um conjunto de validação (validation set) do alvo (mesmo pequeno) para escolher a força da adaptação.
- Prefira misturas (mixtures) (por exemplo, combinar um modelo treinado na fonte e um modelo treinado no alvo).
- Reduza o peso ou rejeite exemplos da fonte “distantes” (seleção de instâncias).
- Tente uma abordagem multifonte (multi-source) se uma fonte for mais próxima do que outras.
Fluxo de trabalho prático
Passo 1: Diagnosticar o cenário de transferência
Pergunte:
- Os atributos são comparáveis entre fonte e alvo?
- Você espera que (P(Y\mid X)) seja estável (deslocamento de covariáveis) ou não?
- Existe algum dado rotulado do alvo? Quanto?
- Existem múltiplas fontes?
Isso determina se vale começar com reponderação, alinhamento de representação ou transferência de parâmetros.
Passo 2: Construir baselines que revelem valor
Baselines comuns:
- Treinar apenas no alvo
- Treinar apenas na fonte, avaliar no alvo (muitas vezes surpreendentemente informativo)
- Treinar em fonte + alvo combinados (baseline simples, porém forte)
- Treinar nos dados combinados com atributos indicadores de domínio (domain indicator features)
Se o seu método de adaptação não supera esses baselines, ele pode não estar funcionando.
Passo 3: Validar como um problema de transferência
Não ajuste hiperparâmetros (hyperparameters) na validação da fonte e assuma que eles transferem. Em vez disso:
- Reserve um pequeno conjunto de validação rotulado do alvo se possível.
- Use validação ponderada por importância (importance-weighted validation) se os rótulos do alvo forem escassos (menos confiável).
- Reporte desempenho com intervalos de confiança (confidence intervals) ou divisões repetidas se o alvo for pequeno.
Passo 4: Monitorar calibração e equidade (fairness)
A transferência pode distorcer probabilidades. Para saídas probabilísticas:
- Recalibre no alvo (por exemplo, escalonamento de Platt (Platt scaling) / regressão isotônica (isotonic regression)) se você tiver rótulos.
- Verifique desempenho por subgrupos: mudança de domínio frequentemente se correlaciona com diferenças demográficas ou entre instituições.
Exemplo prático 1: Ponderação por importância via um classificador de domínio (deslocamento de covariáveis)
Abaixo está um padrão prático usando scikit-learn:
- Treinar um classificador para distinguir fonte vs alvo com base em (X).
- Converter a probabilidade prevista em pesos de razão de densidades.
- Ajustar um modelo ponderado usando os rótulos da fonte.
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
# Xs, ys: labeled source
# Xt: unlabeled target (or target features from which you want to adapt)
# Example shapes: Xs (n_s, d), Xt (n_t, d)
# 1) Train a domain classifier: label source=0, target=1
X_domain = np.vstack([Xs, Xt])
y_domain = np.hstack([np.zeros(len(Xs)), np.ones(len(Xt))])
domain_clf = make_pipeline(
StandardScaler(),
LogisticRegression(max_iter=2000)
)
Xd_tr, Xd_va, yd_tr, yd_va = train_test_split(X_domain, y_domain, test_size=0.3, random_state=0)
domain_clf.fit(Xd_tr, yd_tr)
p_t_given_x = domain_clf.predict_proba(Xs)[:, 1]
auc = roc_auc_score(yd_va, domain_clf.predict_proba(Xd_va)[:, 1])
print("Domain AUC (higher means more shift):", auc)
# 2) Convert to importance weights w(x) = p_t(x) / p_s(x).
# For a balanced domain dataset, p_t(x)/p_s(x) ≈ p(t|x) / (1 - p(t|x))
eps = 1e-3
w = p_t_given_x / np.clip(1 - p_t_given_x, eps, None)
# Optional: clip extreme weights to control variance
w = np.clip(w, 0, np.quantile(w, 0.99))
# 3) Train a weighted classifier on the source labels
clf = make_pipeline(
StandardScaler(),
LogisticRegression(max_iter=2000)
)
clf.fit(Xs, ys, logisticregression__sample_weight=w)
# Now clf can be applied to Xt (and should better match target distribution under covariate shift)
# y_pred = clf.predict(Xt)
Notas:
- Se o classificador de domínio atingir AUC muito alta, os domínios são muito separáveis; reponderação pode ser instável (os pesos podem explodir).
- O corte de pesos (weight clipping) é uma necessidade prática.
- Essa abordagem assume deslocamento de covariáveis (a condicional permanece estável). Se (P(Y\mid X)) mudou, reponderação pode não ajudar.
Exemplo prático 2: “Regularizar em direção à fonte” para modelos lineares
Suponha que você tenha:
- Um forte modelo de regressão logística da fonte (w_s)
- Apenas um pequeno conjunto rotulado do alvo
Uma estratégia simples é ajustar o modelo do alvo com uma penalidade que desencoraja afastar-se demais de (w_s). Embora o scikit-learn não exponha diretamente (|w-w_s|^2) para regressão logística, você pode aproximar a ideia com aumento de atributos (feature augmentation) ou com otimização personalizada.
Uma aproximação muito prática e amigável a bibliotecas é o aumento de atributos (ao estilo Daumé), que permite ao modelo aprender:
- pesos compartilhados entre domínios
- mais deslocamentos específicos por domínio
Conceitualmente, você transforma cada vetor de atributos original (x\in\mathbb{R}^d) em (\tilde{x}\in\mathbb{R}^{3d}):
- Para fonte: (\tilde{x} = [x, x, 0])
- Para alvo: (\tilde{x} = [x, 0, x])
Em seguida, treine um único modelo linear nos dados combinados. O bloco compartilhado aprende o que transfere; os blocos por domínio aprendem correções.
Isso pode funcionar bem para atributos esparsos de texto e é fácil de implementar para qualquer aprendiz linear.
Exemplo prático 3: Adaptação por sensor/instituição com alinhamento de covariância (covariance alignment) (estilo CORAL)
Quando duas instituições medem os mesmos fenômenos, mas com estrutura de escala/correlação diferente (calibração de sensores diferente), alinhar estatísticas de segunda ordem pode ajudar:
- Padronize os atributos.
- Calcule a covariância de fonte e alvo.
- Aplique uma transformação linear aos atributos da fonte para corresponder à covariância do alvo.
- Treine um regressor/classificador simples.
Isso costuma ser eficaz em cenários industriais e médicos em que a geometria dos atributos muda, mas a função de rotulagem subjacente é similar.
Aplicações (onde transferência não profunda é comum)
- Classificação de texto entre domínios: modelos de sentimento de avaliações de produtos para avaliações de restaurantes usando reponderação de instâncias ou aumento de atributos.
- Detecção de spam e abuso: transferência entre plataformas ou janelas de tempo com ajustes para deslocamento de covariáveis/deslocamento de rótulos.
- Risco de crédito entre regiões: modelos hierárquicos que compartilham efeitos globais, mas permitem deslocamentos específicos por região.
- Saúde entre hospitais: correção de deslocamento de rótulos, transferência de calibração, regressão bayesiana hierárquica multicêntrica.
- Manutenção preditiva: adaptar modelos entre máquinas/linhas com diferentes regimes de operação.
- Sistemas de recomendação: fatoração de matriz coletiva e filtragem colaborativa sensível ao domínio.
Relação com tipos de problema próximos
O aprendizado por transferência se sobrepõe a vários outros cenários neste wiki:
- Em comparação com Aprendizado Semi/Auto-Supervisionado, o aprendizado por transferência assume que você tem um problema/domínio fonte relacionado do qual pode “emprestar força”; o aprendizado semi/auto-supervisionado assume que você consegue explorar dados não rotulados no mesmo domínio.
- Em comparação com Supervisão Fraca, o aprendizado por transferência muda de onde os dados vêm; supervisão fraca muda como os rótulos são obtidos.
- Em comparação com Aprendizado Online, o aprendizado por transferência muitas vezes trata de mudança de domínio de lote para lote (treina aqui, implanta ali), enquanto o aprendizado online enfatiza atualizações sequenciais e deriva ao longo do tempo.
- Em comparação com Aprendizado Ativo, o aprendizado por transferência reduz a necessidade de rotulação ao reutilizar tarefas/domínios anteriores; aprendizado ativo reduz a necessidade de rotulação ao escolher quais pontos do alvo rotular.
Na prática, os melhores sistemas frequentemente combinam esses elementos (por exemplo, transferência + aprendizado ativo no domínio-alvo).
Orientação prática: escolhendo um método
Uma matriz útil como regra prática:
- Você acredita que (P(Y\mid X)) é estável, mas (P(X)) mudou → comece com ponderação por importância ou alinhamento de atributos.
- Você tem um bom modelo da fonte e um pequeno conjunto rotulado do alvo → tente transferência de parâmetros / regularização em direção à fonte ou aumento de atributos.
- Você tem muitas tarefas relacionadas com dados desiguais → use aprendizado multitarefa ou Bayes hierárquico (hierarchical Bayes).
- Os atributos diferem devido a diferenças de medição → tente calibração + alinhamento de covariância.
- Existem múltiplas fontes → pondere fontes por similaridade ao alvo (distância via classificador de domínio) ou use adaptação multifonte.
Sempre compare com baselines simples (somente alvo, combinados, indicadores de domínio). Métodos de transferência que não superam esses baselines geralmente não valem a complexidade adicional.
Armadilhas comuns
- Assumir deslocamento de covariáveis quando existe deslocamento de conceito: você pode “corrigir” a coisa errada.
- Sobreajustar o pequeno conjunto do alvo ao calibrar a força de adaptação.
- Desalinhamento de atributos (pré-processamento diferente, categorias ausentes, unidades alteradas).
- Avaliação com vazamento (leaky evaluation) (ajuste usando dados do teste do alvo).
- Pesos de importância extremos causando treinamento instável; corte e regularização são essenciais.
Resumo
O aprendizado por transferência não profundo fornece um conjunto de ferramentas para reutilizar conhecimento sem redes neurais profundas por meio de:
- Reponderação de instâncias da fonte para se assemelharem ao domínio-alvo
- Aprender atributos invariantes ao domínio via alinhamento ou métodos de subespaço
- Transferir parâmetros/distribuições a priori via regularização ou modelagem bayesiana hierárquica
- Explorar estrutura compartilhada entre tarefas (multitarefa) ou relações (grafos, fatoração)
Seu ponto forte é a praticidade: muitos métodos são simples, interpretáveis, eficientes e compatíveis com modelos clássicos como regressão logística, máquina de vetores de suporte, métodos de kernel e modelos bayesianos — tornando-os uma escolha padrão forte quando aprendizado profundo é desnecessário ou inviável.