Visão geral do ajuste de hiperparâmetro

O ajuste de hiperparâmetros aproveita a infraestrutura de processamento do Google Cloud para testar diferentes configurações de hiperparâmetros ao treinar seu modelo. Esse recurso pode fornecer valores otimizados para hiperparâmetros, o que maximiza a precisão preditiva do modelo.

O que é um hiperparâmetro?

Os hiperparâmetros contêm os dados que controlam o próprio processo de treinamento.

Seu aplicativo de treinamento lida com três categorias de dados durante o treinamento do modelo:

  • Os dados de entrada, também chamados de dados de treinamento, formam uma coleção de registros individuais (instâncias) com as características que são importantes para o problema de machine learning. Esses dados configuram o modelo durante o treinamento para fazer predições precisas sobre novas instâncias de dados semelhantes. No entanto, os valores nos dados de entrada nunca se tornam diretamente parte do modelo.

  • Os parâmetros do modelo são as variáveis que a técnica de machine learning escolhida usa para ajustar os dados. Por exemplo, uma rede neural profunda (DNN, na sigla em inglês) é composta por nós de processamento (neurônios), cada um com uma operação realizada nos dados enquanto eles trafegam pela rede. Quando a DNN é treinada, cada node tem um valor de peso que informa ao modelo o impacto que ele tem na predição final. Esses pesos são um exemplo dos parâmetros do modelo. De muitas formas, esses parâmetros são o modelo. Ou seja, são eles que diferenciam seu modelo específico de outros modelos do mesmo tipo que trabalham com dados semelhantes.

  • Os hiperparâmetros são variáveis que controlam o próprio processo de treinamento. Por exemplo, faz parte da criação de uma DNN está decidindo quantas camadas ocultas os nós serão usadas entre as camadas de entrada e saída e quantos nós cada camada oculta pode usar. Essas variáveis não estão diretamente relacionadas aos dados de treinamento. Elas são variáveis de configuração. Os parâmetros mudam durante um job de treinamento, enquanto os hiperparâmetros geralmente permanecem constantes durante um job.

Os parâmetros do modelo são otimizados (ou seja, "ajustados") pelo processo de treinamento. Você executa os dados por meio das operações do modelo, compara a predição resultante com o valor real de cada instância de dados, avalia a precisão e ajusta até encontrar os melhores valores. Os hiperparâmetros são ajustados por meio da execução de todo o job de treinamento, a observação da precisão agregada e o ajuste. Nos dois casos, você está modificando a composição do modelo para encontrar a melhor combinação para lidar com o problema.

Sem uma tecnologia automatizada como o ajuste de hiperparâmetro da Vertex AI, é preciso fazer ajustes manuais nos hiperparâmetros ao longo de vários treinamentos para chegar aos valores ideais. O ajuste torna mais fácil e menos entediante o processo de determinar as melhores configurações de hiperparâmetros.

Como funciona o ajuste de hiperparâmetro

O ajuste de hiperparâmetro realiza vários testes do aplicativo de treinamento com valores para os hiperparâmetros escolhidos, definidos dentro dos limites especificados. A Vertex AI rastreia os resultados de cada teste e faz ajustes nas avaliações subsequentes. Quando o job é concluído, você recebe um resumo de todos os testes, junto com a configuração de valores mais eficaz de acordo com os critérios especificados por você.

O ajuste de hiperparâmetros requer uma comunicação explícita entre a Vertex AI e o aplicativo de treinamento. O aplicativo de treinamento define todas as informações que o modelo precisa. Você define os hiperparâmetros (variáveis) que quer ajustar e as variáveis de destino usadas para avaliar cada teste.

Saiba mais sobre a otimização bayesiana para o ajuste de hiperparâmetros.

Além da otimização bayesiana, a Vertex AI otimiza os jobs de ajuste de hiperparâmetros. Se você estiver fazendo ajustes de hiperparâmetros de modelos semelhantes, alterando apenas a função objetiva ou adicionando uma nova coluna de entrada, a Vertex IA conseguirá se aprimorar ao longo do tempo, o que tornará o ajuste do hiperparâmetro mais eficiente.

O que o ajuste de hiperparâmetro otimiza

O ajuste de hiperparâmetro otimiza as variáveis de destino especificadas, chamadas de métricas de hiperparâmetros. A precisão do modelo, calculada com base em uma passagem de avaliação, é uma métrica comum. As métricas precisam ser numéricas.

Ao configurar um job de ajuste de hiperparâmetros, você define o nome e a meta de cada métrica. A meta especifica se você quer ajustar o modelo para maximizar ou minimizar o valor dessa métrica.

Como a Vertex AI consegue suas métricas

Use o pacote cloudml-hypertune do Python para transmitir métricas para a Vertex AI. Essa biblioteca fornece funções auxiliares para informar métricas à Vertex AI.

Saiba mais sobre como relatar métricas de hiperparâmetros.

O fluxo de valores de hiperparâmetro

Sem o ajuste de hiperparâmetro, você pode configurar os hiperparâmetros como quiser no aplicativo de treinamento. Por exemplo, você pode configurá-los passando argumentos de linha de comando para o módulo principal do aplicativo ou alimentá-los para o aplicativo em um arquivo de configuração.

Ao usar o ajuste do hiperparâmetro, é necessário usar o procedimento a seguir para definir os valores dos hiperparâmetros que você está usando para o ajuste:

  • Defina um argumento de linha de comando no módulo de treinamento principal para cada hiperparâmetro ajustado.

  • Use o valor passado nesses argumentos para definir o hiperparâmetro correspondente no código do TensorFlow do aplicativo.

Ao configurar um job de ajuste de hiperparâmetros, você define cada hiperparâmetro a ser ajustado, o tipo de dados deles e o intervalo de valores. Identifique cada hiperparâmetro usando exatamente o mesmo nome do argumento correspondente que você definiu no módulo principal. O serviço de treinamento inclui argumentos de linha de comando com esses nomes durante a execução do aplicativo.

Saiba mais sobre os requisitos para analisar argumentos de linha de comando.

Selecionar hiperparâmetros para ajuste

Há poucas orientações sobre como escolher os hiperparâmetros a serem ajustados. Se você tiver experiência na técnica de aprendizado da máquina que está usando, talvez tenha uma ideia de como os hiperparâmetros se comportam. As comunidades de aprendizado de máquina também são uma bom lugar para conseguir informações.

No entanto, quem escolhe é você, e por isso é importante entender as implicações. Todo hiperparâmetro que você decidir ajustar tem o potencial de aumentar o número de testes necessários para um job de ajuste bem-sucedido. Quando você executa um job de ajuste de hiperparâmetros na Vertex AI, o valor cobrado é baseado na duração dos testes iniciados pelo job de ajuste de hiperparâmetro. Uma escolha cuidadosa dos hiperparâmetros a ajustar pode reduzir o tempo e o custo do job de ajuste de hiperparâmetros.

Tipos de dados de hiperparâmetros

Em um objeto ParameterSpec, você especifica o tipo de dados de hiperparâmetros como uma instância de uma especificação de valor de parâmetro. A tabela a seguir lista as especificações de valor de parâmetro compatíveis.

Tipo Tipo de dado Intervalos de valor Dados de valor
DoubleValueSpec DOUBLE minValue e maxValue Valores de ponto flutuante
IntegerValueSpec INTEGER minValue e maxValue Valores inteiros
CategoricalValueSpec CATEGORICAL categoricalValues Lista de strings de categoria
DiscreteValueSpec DISCRETE discreteValues Lista de valores em ordem crescente

Escalonar hiperparâmetros

Em um objeto ParameterSpec, é possível especificar que o escalonamento seja feito neste hiperparâmetro. O escalonamento é recomendado para os tipos de dados DOUBLE e INTEGER. Estes são os tipos de escalonamento disponíveis:

  • SCALE_TYPE_UNSPECIFIED: nenhum escalonamento é aplicado a este hiperparâmetro.
  • UNIT_LINEAR_SCALE: dimensiona linearmente o espaço viável de 0 a 1.
  • UNIT_LOG_SCALE: dimensiona o espaço viável de maneira logarítmica de 0 a 1. Todo o espaço viável precisa ser estritamente positivo.
  • UNIT_REVERSE_LOG_SCALE: escalona o espaço viável "reverter" de 0 a 1. O resultado é que os valores próximos ao topo do espaço viável são distribuídos mais do que os pontos próximos à parte inferior. Todo o espaço viável precisa ser estritamente positivo.

Hiperparâmetros condicionais

O objeto ConditionalParameterSpec permite adicionar hiperparâmetros a um teste quando o valor do hiperparâmetro pai corresponde a uma condição especificada por você.

Por exemplo, é possível definir um job de ajuste de hiperparâmetro com o objetivo de encontrar um modelo ideal usando a regressão linear ou uma rede neural profunda (DNN, na sigla em inglês). Para permitir que o job de ajuste especifique o método de treinamento, defina um hiperparâmetro categórico chamado training_method com as seguintes opções: LINEAR_REGRESSION e DNN. Quando training_method for LINEAR_REGRESSION, o job de ajuste precisará especificar um hiperparâmetro para a taxa de aprendizado. Quando o training_method é DNN, o job de ajuste precisa especificar parâmetros para a taxa de aprendizado e o número de camadas ocultas.

Como o número de camadas ocultas é aplicável somente quando training_method de um teste é DNN, você define um parâmetro condicional que adiciona um hiperparâmetro chamado num_hidden_layers quando training_method é DNN.

Como a taxa de aprendizado é usada pelas duas opções training_method, você precisa decidir se esse hiperparâmetro condicional será compartilhado. Se o hiperparâmetro for compartilhado, o job de ajuste usará o que ele aprendeu nos testes de LINEAR_REGRESSION e DNN para ajustar a taxa de aprendizado. Nesse caso, faz mais sentido ter taxas de aprendizado separadas para cada training_method, já que a taxa de aprendizado para treinar um modelo usando LINEAR_REGRESSION não afeta a taxa de aprendizado para treinamento um modelo usando DNN. Portanto, você define os seguintes hiperparâmetros condicionais:

  • Um hiperparâmetro denominado learning_rate que é adicionado quando training_method é LINEAR_REGRESSION.
  • Um hiperparâmetro denominado learning_rate que é adicionado quando training_method é DNN.

Com os hiperparâmetros condicionais, você define os hiperparâmetros para o job de ajuste como um gráfico. Isso permite que você ajuste seu processo de treinamento usando diferentes técnicas de treinamento, cada uma com as próprias dependências de hiperparâmetro.

Algoritmos de pesquisa

Você pode especificar um algoritmo de pesquisa no objeto StudySpec. Se você não especificar um algoritmo, o job usará o algoritmo padrão da Vertex AI. O algoritmo padrão aplica a otimização bayesiana para chegar à solução ideal com uma pesquisa mais eficaz sobre o espaço do parâmetro.

Os valores disponíveis são:

  • ALGORITHM_UNSPECIFIED: o mesmo que não especificar um algoritmo. A Vertex AI escolhe o melhor algoritmo de pesquisa entre bandidos de processo gaussianos, pesquisa de combinação linear ou as variantes deles.

  • GRID_SEARCH: uma pesquisa de grade simples dentro do espaço viável. Essa opção será útil principalmente se você quiser especificar uma quantidade de tentativas maior do que o número de pontos no espaço viável. Nesse casos, se você não especificar uma pesquisa de grade, o algoritmo padrão da Vertex AI poderá gerar sugestões duplicadas. Para usar a pesquisa de grade, todos os parâmetros precisam ser do tipo INTEGER, CATEGORICAL ou DISCRETE.

  • RANDOM_SEARCH: uma pesquisa aleatória simples dentro do espaço viável.

A seguir