Você tem um processo de otimização em que cada tentativa custa caro, seja em tempo ou em dinheiro. Pode ser o treinamento de Machine Learning (ML), em que cada execução leva horas e dezenas de dólares, ou um teste A/B em que cada iteração pode levar um dia e potencialmente milhares de dólares em receita perdida. Ou pode ser a gestão da cadeia de suprimentos de uma fábrica, em que escolher os insumos do dia para garantir o menor custo e a maior produção é uma aposta: um palpite errado pode custar um dia inteiro e muito dinheiro.
Se uma tentativa não sai boa o suficiente, você tenta de novo. Mas você não quer ficar chutando parâmetros quando cada tentativa sai cara; você quer convergir para os melhores parâmetros viáveis no menor número possível de tentativas.
Esta série de três posts vai apresentar uma nova abordagem para reduzir o custo do treinamento de ML e de outros processos de otimização: o fluxo de otimização Black Box com o Google Vertex AI Vizier.
Vale lembrar que o Vizier não serve só para Machine Learning. Ele nem sabe que você está fazendo ML; não se envolve nas tentativas em si. O Vizier só sabe o que você conta a ele: os parâmetros e a métrica do objetivo (o quão bem cada tentativa saiu). Você é o especialista e executa o treinamento de ML ou outro processo a ser otimizado, enquanto o Vizier atua como um consultor externo que oferece sugestões para a próxima rodada.
No treinamento de ML, você pode usar o Vertex AI Vizier para escolher os melhores hiperparâmetros possíveis — aqueles que configuram a execução do treinamento como um todo —, como regularização, taxas de aprendizado ou o número e o tamanho das camadas. Além disso, o próprio tipo de modelo a ser usado na próxima execução é um parâmetro a ser explorado: por exemplo, se um problema de classificação binária deve ser resolvido com Naive Bayes, Regressão Logística ou XGBoost.
Como o Vertex AI Vizier apenas aconselha o treinamento de fora, dá para usá-lo com qualquer tipo de ML. Você pode estar usando o Google Vertex SDK para iniciar jobs de treinamento personalizados ou treinando seu próprio modelo TensorFlow ou PyTorch dentro de um container customizado.
Como usar o Vizier
Talvez você já conheça bibliotecas de tuning de hiperparâmetros como as do Scikit e do Hyperopt. Elas executam tentativas repetidas de ML, ajustando os hiperparâmetros a cada rodada para tentar convergir até o melhor resultado.
Já um serviço de tuning de hiperparâmetros como os do Google e da AWS simplifica radicalmente o processo, eliminando a necessidade de configurar bibliotecas e infraestrutura de computação.
O Vertex AI Vizier vai um passo além com o processo Black Box que vou descrever nesta série. A diferença básica está no padrão de uso: com o Vizier, você executa tentativas interativas, em que pede conselhos ao Vertex AI Vizier a cada rodada e ele devolve sugestões com base apenas no quanto os resultados anteriores foram bons.
O processo
Estes são os passos gerais para implementar o fluxo de trabalho com o Vertex AI Vizier:
- Primeiro, crie um study no Vertex AI Vizier, no qual haverá várias tentativas. O study é definido por uma configuração que descreve os objetivos (as medições/métricas) e os valores de entrada (hiperparâmetros) dos seus experimentos, chamados de tentativas.
- Execute uma tentativa: treinando um modelo de Machine Learning ou rodando outro processo que você precisa otimizar.
- Invoque o Vertex AI Vizier, enviando os parâmetros junto com a métrica de otimização daquela tentativa. No caso do treinamento de um modelo de ML, essa métrica pode ser, por exemplo, cross-entropy loss ou balanced accuracy nos seus dados de validação, após a divisão usual entre treino, validação e teste.
- A resposta a essa requisição traz sugestões para a próxima tentativa. Inclui um ou mais conjuntos de parâmetros, que você pode usar para definir a próxima rodada.
- Execute a próxima tentativa, normalmente com base nos parâmetros sugeridos. Mas eles são apenas sugestões: você pode escolher seus próprios parâmetros. De qualquer forma, o Vertex AI Vizier vai continuar aprendendo.
- Siga para a próxima tentativa.
- Pare de iterar depois de fazer tentativas suficientes (mais detalhes a seguir).
Fluxograma da interação com o Vizier
O Vertex AI Vizier é um software-as-a-service. Você simplesmente chama um serviço REST por meio de uma API Python prática, que vou abordar mais adiante.
Como é uma chamada de API
Veja um exemplo de entrada e saída. É um pouco simplificado, mas mostra a essência da invocação REST. (Na prática, você usaria um cliente Python, que veremos depois.)
Entrada:
{
"Params": {"flour": 0.21, "recipe": "Pam's chocolate chip", "eggs": 2 },
"rating": 8.1
}
Saída:
{"flour": 0.32, "recipe": "Chocoflake", "eggs": 1}
Este JSON é um exemplo de otimização de receita de cookies, que foi de fato realizada pela equipe de pesquisa: assar cookies é tão caro e demorado que ninguém quer fazer isso centenas de vezes!
Os parâmetros incluem as quantidades por ingrediente: temos um parâmetro float e outro inteiro. Outro parâmetro é a escolha da receita, que é um parâmetro categórico (com algumas opções, sem ordenação entre elas).
A entrada também inclui a métrica de sucesso, que é a nota dos provadores para os cookies.
A saída, ou seja, a resposta da chamada REST, é uma sugestão (na prática, possivelmente várias) de parâmetros para usar na próxima rodada de fornadas.
Executando as tentativas em um study
Você pode rodar as tentativas de forma iterativa, mas também pode executar várias em paralelo. Você pede ao Vertex AI Vizier várias sugestões, digamos cinco, e então roda as cinco tentativas ao mesmo tempo. O paralelismo tem um trade-off: por um lado, acelera o processo; por outro, há vantagem em rodar de forma iterativa, porque assim o Vizier consegue refinar suas recomendações para cada tentativa com base em todas as anteriores.
O número de tentativas pode ser predeterminado, digamos vinte: a recomendação é dez vezes o número de parâmetros. Como alternativa, o Vizier pode sugerir o momento de parar com base na convergência dos resultados. Essa economia no número de tentativas é importante, já que cada uma sai cara.
Para onde vamos a partir daqui
Em fevereiro de 2023, o Vizier passou a estar disponível em uma versão open-source. Recomendo que você explore a implementação. No entanto, a versão open-source não contém o algoritmo central de otimização Bayesiana, e o serviço Vertex AI Vizier entrega facilidade de uso, escalabilidade e robustez. Nesta série de posts, vamos focar apenas no Vertex AI Vizier.
Neste primeiro post, apresentamos um resumo de como usar o Vertex AI Vizier. O segundo vai explicar as vantagens dessa abordagem "Black Box": ao deixar com você a responsabilidade pelos processos pesados de otimização, você faz o que sabe fazer de melhor, como estruturar seu treinamento de ML ou outros processos custosos. Enquanto isso, o Vertex AI Vizier faz o que ele sabe fazer de melhor: guiar você até o melhor resultado no menor número de tentativas.