Machine Learning · Insper

AutoML

Abordagem fundamental

Como gastar um orçamento de busca e como conferir o que a busca entregou

A pergunta que nenhuma aula fez

  • Todo modelo vem com botões; Seleção de Modelos explicou o que eles fazem, Validação Cruzada como comparar os resultados com honestidade.
  • Uma grade com 5 hiperparâmetros e 5 valores cada: 3.125 validações cruzadas, a maioria em regiões que já se mostravam ruins depois das primeiras doze.

otimização de hiperparâmetros

trata a própria busca como um problema de otimização

AutoML (aprendizado de máquina automatizado)

leva a mesma ideia ao pipeline inteiro: pré-processamento, família, hiperparâmetros, o ensemble final

O caminho desta parte

  1. Enquadrar a buscauma caixa-preta cara e ruidosa; o espaço de busca
  2. Grade ou aleatóriaBergstra & Bengio, medido
  3. Uma busca que aprendeum substituto e a melhoria esperada
  4. Cortar tentativas ruinshalving sucessivo e a sua unidade de orçamento
  5. Conferir o que ela entregavazamentos e um escore otimista
Cada etapa responde a uma pergunta: o que estamos otimizando e em qual espaço? → sem memória: grade ou aleatória? → as tentativas passadas podem escolher a próxima? → por que pagar inteira uma tentativa ruim? → o que a busca entregou de verdade?
Etapa 1 · o que estamos otimizando e em qual espaço?

Uma chamada à caixa-preta

\(\lambda\): uma configuração. \(f(\lambda)\): o seu escore de validação cruzada (CV). Ajustar = encontrar o \(\lambda\) com o maior \(f(\lambda)\).

  • kc1: 2.109 módulos de software de um sistema de voo da NASA, 21 métricas de código; alvo: um defeito foi encontrado depois? (15,5% com defeito)
  • Uma chamada = a área sob a curva ROC (ROC AUC) em CV 5-fold de um modelo de boosting.
Preveja. A mesma configuração, validada com 5 embaralhamentos diferentes dos folds. Ela marca o mesmo escore todas as vezes?

Cara, ruidosa e uma caixa-preta

ajustes5 embaralhamentos dos foldsmédia
valores padrão0,760 · 0,776 · 0,767 · 0,769 · 0,7690,768
árvores pequenas e lentas0,795 · 0,806 · 0,804 · 0,803 · 0,8050,803

cara

cada chamada são 5 ajustes; num projeto real, minutos ou horas. O orçamento é o número de chamadas.

ruidosa

de 0,760 a 0,776 para os mesmos ajustes: uma diferença de 0,01 talvez não seja real

caixa-preta

não há gradiente em relação a min_samples_leaf; inteiros, categorias, botões condicionais

Um método de ajuste é uma regra para escolher o próximo \(\lambda\), dados os que já foram avaliados.

Desenhando o espaço (1): a escala

Preveja. Sorteie uma taxa de aprendizado uniforme entre 0,001 e 1. Que fração dos sorteios cai em \([0{,}001;\ 0{,}01)\)?
taxa de aprendizado emuniformelog-uniforme
[0,001; 0,01)0,9%33,5%
[0,01; 0,1)9,1%33,2%
[0,1; 1)90,0%33,3%

À mão: \(0{,}009 / 0{,}999 = 0{,}9\%\); na escala log, cada uma das 3 décadas recebe um terço.

Tudo o que age de forma multiplicativa (taxas de aprendizado, C, alpha, número de folhas ou de vizinhos) ganha escala log: loguniform ou log=True no Optuna.

Desenhando o espaço (2): botões condicionais

  • C pertence à regressão logística, max_leaf_nodes ao boosting, gamma a um kernel RBF (de base radial).
  • Uma grade única sobre todos eles combinaria cada C com cada tamanho de árvore: a mesma regressão logística, ajustada repetidamente.
O espaço de busca é uma árvore: primeiro escolha a família, depois os botões dessa família. Seleção de Modelos usou uma lista de grades; o Optuna vai escrevê-la como um if.
Etapa 2 · buscar sem memória

Grade ou aleatória? O argumento

  • Um escore que depende de um hiperparâmetro \(x_1\) (uma lombada de largura 0,05); os outros \(d - 1\) não fazem nada.
  • Uma grade com \(k\) valores por eixo custa \(k^d\) avaliações, mas testa \(x_1\) em apenas \(k\) valores.
  • A busca aleatória com orçamento \(B\) testa \(x_1\) em \(B\) valores, qualquer que seja \(d\).
Preveja. 81 avaliações sobre 4 hiperparâmetros (uma grade 3 × 3 × 3 × 3). Como essa grade se compara com uma grade 3 × 3 de só 9 avaliações?

Grade ou aleatória? Medido em 4.000 problemas

dorçamentogradealeatória
290,3780,629
2810,8240,985
3270,3780,900
4810,3780,986
42560,5010,998
Uma grade 3 × 3 testa o hiperparâmetro importante em apenas 3 valores, 9 pontos aleatórios em 9; melhor escore médio contra o orçamento

Melhor escore médio. A grade paga cada eixo irrelevante com uma multiplicação do seu custo; a busca aleatória não paga nada (Bergstra & Bengio, 2012).

Simulador: mesmo orçamento, buscas diferentes

Preveja. Orçamento 81: quantos valores distintos de \(x_1\) a grade 9 × 9 testa e quantos a busca aleatória testa?

Etapa 3 · as tentativas passadas podem escolher a próxima?

Otimização bayesiana: uma busca que aprende

A busca aleatória sorteia a 27.ª configuração exatamente como a primeira. Quando cada avaliação custa uma hora, isso é desperdício.

  1. ajuste um modelo substituto barato aos pares (configuração, escore) vistos até agora: ele prevê o escore em qualquer ponto, com uma incerteza;
  2. escolha a próxima configuração maximizando uma função de aquisição: exploração local (escore previsto alto) contra exploração (incerteza alta);
  3. avalie, acrescente ao histórico, repita.

Um escore de mentira, com verdade conhecida: um pico largo de 0,78 em 0,25 e outro, mais alto e mais estreito, de 0,82 em 0,72.

O substituto: um processo gaussiano (GP)

Três avaliações até agora: 0,15 e 0,35 (0,72943), 0,95 (0,700). Melhor até agora: \(f^+ = 0{,}72943\).

\(x\)média \(\mu\)dp \(\sigma\)leitura
0,250,730760,00419entre dois pontos: quase certo, logo acima de \(f^+\)
0,550,722120,01246longe de qualquer ponto: abaixo de \(f^+\), três vezes mais incerto
0,720,713900,01318o pico verdadeiro, mas o substituto não sabe nada dele
Preveja. Qual dos três merece a próxima avaliação?

Melhoria esperada (EI): a fórmula

Se o escore em \(x\) fosse uma variável normal com a média \(\mu\) e o desvio-padrão \(\sigma\) do substituto, quanto ele superaria, em média, o melhor escore até agora, \(f^+\)? Não superar conta como zero.

\[ \mathrm{EI}(x) = \underbrace{(\mu - f^+)\,\Phi(z)}_{\text{exploração local}} + \underbrace{\sigma\,\varphi(z)}_{\text{exploração}}, \qquad z = \frac{\mu - f^+}{\sigma} \]

\(\Phi\): a distribuição acumulada da normal padrão; \(\varphi\): a sua densidade. O primeiro termo premia uma média prevista alta; o segundo, uma incerteza grande. EI vem do inglês expected improvement.

Preveja. Em 0,55 a média está abaixo de \(f^+\). A EI ali ainda pode ser positiva? Ela pode vencer 0,25, cuja média fica logo acima de \(f^+\)?

Melhoria esperada, à mão: quatro iterações

As três avaliações acima, 201 candidatas entre 0 e 1, um substituto com escala de comprimento 0,15. Preveja. Depois que a iteração 1 avaliar 0,25, para onde vai a iteração 2, e por quê?

Etapa 4 · por que pagar inteira uma tentativa ruim?

Halving sucessivo: um torneio

A maioria das configurações ruins se mostra ruim cedo: depois de poucas árvores ou treinada em poucas linhas (Jamieson & Talwalkar, 2016).

  1. comece \(n = 27\) configurações com um orçamento pequeno (10 árvores cada);
  2. fique com o melhor terço (\(\eta = 3\));
  3. dê aos sobreviventes 3 × mais orçamento; repita até sobrar uma.
Toda rodada custa o mesmo: \(27 \times 10 = 9 \times 30 = 3 \times 90 = 1 \times 270 = 270\) árvores ajustadas. Quatro rodadas, 1.080, contra \(27 \times 270 = 7.290\) para treinar as 27 por inteiro. No scikit-learn: HalvingRandomSearchCV.
Preveja. Com o orçamento contado em árvores, quais taxas de aprendizado vão parecer melhores depois de 10 árvores?

Halving sucessivo, rodada por rodada

As mesmas 27 configurações de boosting no kc1, com o orçamento contado em árvores (10 → 270) ou em linhas (60 → 1.620). Preveja. O vencedor de qual torneio vai ficar mais bem colocado quando as 27 forem pontuadas com o orçamento completo?

Etapa 5 · o que a busca entregou de verdade?

Ele otimiza o vazamento que você deu

bug_reports: preenchida depois do lançamento; o modelo precisa apontar módulos arriscados antes do lançamento, quando a contagem é zero para todo mundo.

Preveja. A mesma busca aleatória, com e sem a coluna. Qual modelo é melhor quando for usado de verdade?
ROC AUC
melhor CV, sem a coluna / com ela0,792 / 0,916
teste, vencedor com vazamento, coluna preenchida0,962
teste, vencedor honesto0,804
teste, vencedor com vazamento, como será usado (bug_reports = 0)0,782

Toda verificação automática passa. O vazamento está nos dados: só quem sabe quando cada coluna é registrada consegue pegá-lo.

Uma busca mais longa sobreajusta os dados de validação

Escore de CV da configuração escolhida e escore de teste dela, contra o número de tentativas, com 1.687 e com 300 linhas de desenvolvimento

1.687 linhas, de 10 para 150 tentativas: CV de 0,803 para 0,808, teste de 0,804 para 0,809. Honesto.

300 linhas: CV de 0,772 para 0,788, teste de 0,765 para 0,769. Três quartos do ganho relatado são sorte.

A partir de certo ponto, mais tentativas compram otimismo. Avalie a busca inteira com CV aninhada ou com um conjunto de teste trancado e usado uma só vez.

Resumo

  1. Ajustar é uma caixa-preta cara e ruidosa: o orçamento é o número de chamadas.
  2. Desenhe o espaço primeiro: escalas log e botões condicionais.
  3. A busca aleatória vence a grade quando só alguns botões importam.
  4. A otimização bayesiana aprende onde olhar: a melhoria esperada pondera uma média alta contra uma incerteza grande.
  5. O halving sucessivo corta cedo as tentativas ruins, se a ordem cedo prevê a final: a unidade de orçamento importa.
  6. Uma busca otimiza seus vazamentos e a própria sorte: avalie-a em dados intocados.
Lab fundamental · cerca de 30 min, em duplas

Grade ou aleatória, nas vogais: passos 1 a 5

  • phoneme: 5.404 vogais, orais ou nasais, cada uma descrita por 5 amplitudes de harmônicos; um modelo de boosting com parada antecipada, avaliado pelo ROC AUC.
  • Tranque um conjunto de teste, defina as baselines, escreva o espaço de busca e ponha uma grade 3 × 3 × 3 contra a busca aleatória com as mesmas 27 avaliações.
  • Notebook do lab (Jupyter ou Colab, Arquivo → Fazer upload de notebook); a partir do passo 6 ele precisa de !pip install optuna.
  • Em cada passo, responda ao Preveja antes de rodar.
  • Simulações: uma grade montada em volta do botão que importa (passo 4) e o vencedor em folds novos (passo 5).

Ritmo: passos 1 a 3 em 10 min; passo 4 e a primeira simulação em 10 min; passo 5 e a segunda em 10 min.