Machine Learning · Insper

AutoML

Abordagem avançada

Dentro das buscas mais espertas e até onde a automação vai

O caminho desta parte

  1. Questionar o substitutoa escala de comprimento decide o que ele acha
  2. Modelar as boas tentativasdensidades do TPE; espaços define-by-run do Optuna
  3. Podar e dividir a apostaparar uma tentativa cedo; os brackets do Hyperband
  4. O pipeline inteiroCASH, sistemas de AutoML, o resto do trabalho
Cada etapa responde a uma pergunta: dá para confiar no substituto? → e se modelarmos as boas tentativas em vez do escore? → uma tentativa pode parar cedo e dá para dividir a aposta? → até onde a automação vai?
Etapa 1 · dá para confiar no substituto?

As hipóteses do substituto importam

As quatro iterações da parte fundamental, refeitas a partir de 100 trios iniciais aleatórios, 30 avaliações cada, com a otimização bayesiana e com a busca aleatória. Fração das rodadas que chegaram a 0,81:

em até 10em até 20em até 30
bayesiana, escala de comprimento 0,1540%65%65%
bayesiana, escala de comprimento 0,1061%92%92%
busca aleatória37%54%65%
Com 0,15 o substituto tem certeza demais de que o escore é suave: prevê um 0,70 plano e certo sobre o pico estreito e para de procurar. Um modelo errado toma decisões erradas com confiança.
Etapa 2 · e se modelarmos as boas tentativas em vez do escore?

TPE: modelar \(x\) dado o escore

  • Tree-structured Parzen Estimator: separe as tentativas nas boas (a melhor fração \(\gamma\)) e no resto.
  • Densidade dos valores bons \(\ell(x)\), densidade dos outros \(g(x)\): uma lombada gaussiana por tentativa.
  • Amostre onde \(\ell(x)/g(x)\) é maior (Bergstra et al., 2011).
\(x\)0,10,250,50,70,9
\(\ell / g\)0,031,240,455,730,09
12 tentativas aleatórias, 2 das 3 boas perto de 0,68: a próxima tentativa vai para 0,710, que marca 0,817. Um par de densidades unidimensionais por botão: inteiros, categorias e botões condicionais são fáceis.

Optuna: TPE contra busca aleatória, medido

Seis hiperparâmetros: um importa muito, um importa pouco, quatro não importam nada. Melhor possível: 0,870. 20 sementes.

Preveja. Depois de 10 tentativas, quem está à frente?
melhor médio depois de10204060 tentativas
aleatória0,8120,8190,8300,843
TPE0,8120,8470,8570,860

Idênticos em 10: as 10 primeiras tentativas do TPE são aleatórias. Depois de 40, ele está acima do que a busca aleatória alcança depois de 60.

Define-by-run: o espaço de busca é código


def build(trial):
    family = trial.suggest_categorical('family', ['logistic', 'boosting'])
    if family == 'logistic':
        C = trial.suggest_float('C', 1e-3, 1e2, log=True)
        return make_pipeline(FunctionTransformer(np.log1p), StandardScaler(),
                             LogisticRegression(C=C, max_iter=2000))
    return HistGradientBoostingClassifier(
        learning_rate=trial.suggest_float('learning_rate', 0.01, 0.5, log=True), ...)
  
No kc1 a melhor é uma regressão logística, C ≈ 0,03, 0,798, empatada com o boosting escolhido à mão; o TPE gastou 31 das 40 tentativas nela. Um espaço que deixa de fora o modelo simples nunca vai poder lhe dizer que você não precisava do complicado.
Etapa 3 · uma tentativa pode parar cedo e dá para dividir a aposta?

Poda: pare cedo uma tentativa ruim

  • O objetivo informa a média corrente depois de cada fold (trial.report).
  • O podador pela mediana para uma tentativa pior do que a mediana das tentativas anteriores no mesmo fold.
10 de 40
tentativas podadas
171 de 200
folds ajustados: 15% do orçamento economizado
Podar é apostar que uma tentativa que começa mal termina mal: a aposta que o halving sucessivo faz para um torneio inteiro, aqui feita uma tentativa de cada vez.

Hyperband: vários torneios

Quão agressivo deve ser o torneio do halving sucessivo? O Hyperband roda brackets de agressividade diferente, cada um custando mais ou menos o mesmo (Li et al., 2018).

bracketrodadas (configurações × orçamento)custo
s = 327 × 1 → 9 × 3 → 3 × 9 → 1 × 27108
s = 212 × 3 → 4 × 9 → 1 × 2799
s = 16 × 9 → 2 × 27108
s = 04 × 27 (busca aleatória pura)108
Se a ordem inicial for confiável, o bracket 3 acha o vencedor barato; se for enganosa, o bracket 0 ainda dá uma chance justa a quem aprende devagar. 423 unidades para 49 configurações.
Etapa 4 · até onde a automação vai?

AutoML de pipeline completo: o problema CASH

Combined Algorithm Selection and Hyperparameter optimization: seleção do algoritmo e dos hiperparâmetros juntos (Thornton et al., 2013).

sistemacomo buscao que devolve
auto-sklearnotimização bayesiana, com partida a quente a partir de conjuntos de dados parecidosum ensemble (ensemble selection)
TPOTprogramação genética sobre árvores de pipelineo melhor pipeline, como código scikit-learn
AutoGluon-Tabularpouca busca: bagging e empilhamento em várias camadasum ensemble empilhado
FLAMLatenta ao custo: configurações baratas primeiroo melhor modelo único num orçamento de tempo
Duas ideias se repetem: ensembles de modelos bons e diferentes e partidas a quente. Você ainda escreve o rótulo, a métrica, o limite de tempo e, antes de tudo isso, as tabelas de treino e de teste.

O resto do trabalho

formular o problema

o que é previsto, para quem, em que momento e quanto custa um erro

escolher a métrica

84,5% dos módulos do kc1 são limpos: uma busca por acurácia aprova um modelo que nunca aponta nada

o desenho da validação

grupos, ordem no tempo e vazamentos são explorados pela busca, não corrigidos

dados e atributos

remover uma coluna vazada mudou a precisão média em 0,18; o ajuste, em 0,007

E a implantação: um ensemble empilhado de 40 modelos pode ser o mais difícil de servir, explicar e retreinar.

Um padrão prático

  1. Tranque um conjunto de teste e fixe um único cv.
  2. Baselines primeiro: um dummy, um modelo linear, um boosting com os valores padrão.
  3. Busca aleatória ou Optuna, de 30 a 100 tentativas, escalas log, o modelo simples no espaço.
  4. Para dados grandes ou modelos lentos: halving ou poda, com uma unidade de orçamento que não interaja com os botões.
  5. Pare quando o melhor escore deixar de se mover mais do que o próprio desvio-padrão entre folds.
  6. Relate o escore de teste trancado ou uma CV aninhada da busca inteira, nunca o melhor escore da própria busca.
Lab avançado · cerca de 35 min, em duplas

Quatro buscas, um orçamento: passos 6 a 10

phoneme, continuação: o TPE com Optuna e o halving sucessivo se juntam à grade e à busca aleatória dos passos 4 e 5, com o mesmo orçamento.

Escolhido pelo escore de validação cruzada (CV): o vencedor do halving, CV 0,9528, área sob a curva ROC (ROC AUC) de teste 0,9455; os valores padrão caem o mesmo tanto (0,9468 → 0,9374).

Busca aleatória: best_score_ 0,9499; estimativa aninhada 0,9472 ± 0,0067.

Mesmo notebook do lab, a partir do passo 6 (!pip install optuna). Simulações: árvores como orçamento (passo 7) e os valores padrão nos mesmos folds externos (passo 10).

Ritmo: passos 6, 7 e a primeira simulação em 15 min; 8 e 9 em 10 min; passo 10 e a segunda em 10 min.

Melhor ROC AUC de CV até aqui no phoneme para grade, busca aleatória, TPE e halving