Guia para iniciar um novo projeto

Nesta seção, explicamos como escolher o seguinte no início de um projeto de ML:

  • a arquitetura do modelo
  • o otimizador
  • o tamanho do lote
  • a configuração inicial

Suposições

O conselho nesta seção pressupõe o seguinte:

  • Você já formulou o problema e preparou os dados de treinamento até certo ponto.
  • Você já configurou um pipeline de treinamento e teste.
  • Você já selecionou e implementou métricas que são as mais representativas possível do que você planeja medir no ambiente implantado.

Supondo que você atende a todos os pré-requisitos anteriores, está tudo pronto para se dedicar à arquitetura do modelo e à configuração do treinamento.

Escolher a arquitetura do modelo

Vamos começar com as seguintes definições:

  • Uma arquitetura de modelo é um sistema para produzir previsões. Uma arquitetura de modelo contém o framework para converter dados de entrada em previsões, mas não contém valores de parâmetros. Por exemplo, uma rede neural com três camadas escondidas de 10 nós, 5 nós e 3 nós, respectivamente, é uma arquitetura de modelo.
  • Um model é uma arquitetura de modelo mais valores específicos para todos os parâmetros. Por exemplo, um modelo consiste na rede neural descrita na definição da arquitetura de modelo, além de valores específicos para os pesos e viés de cada nó.
  • Uma família de modelos é um modelo para a construção de uma arquitetura de modelo com um conjunto de hiperparâmetros.

A escolha da arquitetura de modelo significa escolher um conjunto de modelos diferentes (um para cada configuração de hiperparâmetros do modelo).

Quando possível, tente encontrar uma base de código documentada que aborde algo o mais próximo possível do problema atual. Depois reproduza esse modelo como ponto de partida.

Escolha o otimizador

Nenhum otimizador é o "melhor" em todos os tipos de problemas de machine learning e arquiteturas de modelo. Até mesmo comparar o desempenho dos otimizadores é difícil. 🤖Recomendamos o uso de otimizadores conhecidos e conhecidos, especialmente ao iniciar um novo projeto.

Recomendamos escolher o otimizador mais popular para o tipo de problema em que você está trabalhando. Recomendamos os seguintes otimizadores bem estabelecidos:

Preste atenção a todos os argumentos do otimizador escolhido. Otimizadores com mais hiperparâmetros normalmente exigem mais esforço de ajuste. Isso é particularmente difícil nos estágios iniciais de um projeto, quando você está tentando encontrar os melhores valores de vários outros hiperparâmetros (por exemplo, taxa de aprendizado), enquanto trata os argumentos do otimizador como incômodos. Portanto, recomendamos a seguinte abordagem:

  1. No início do projeto, escolha um otimizador sem muitos hiperparâmetros ajustáveis. Veja dois exemplos:
    • GDE com momentum fixo.
    • Adam com Épsilon, Beta1 e Beta2 fixos.
  2. Nos estágios posteriores do projeto, mude para um otimizador mais geral que ajuste mais hiperparâmetros em vez de corrigi-los para valores padrão.

Escolher o tamanho do lote

Resumo: o tamanho do lote rege a velocidade de treinamento. Não use esse tamanho para ajustar diretamente o desempenho do conjunto de validação.

O tamanho do lote determina muito o tempo de treinamento e o consumo de recursos de computação. Aumentar o tamanho do lote geralmente diminui o tempo de treinamento, o que:

  • permite ajustar os hiperparâmetros mais detalhadamente em um intervalo de tempo fixo, potencialmente produzindo um modelo final melhor.
  • Reduz a latência do ciclo de desenvolvimento, permitindo que novas ideias sejam testadas com mais frequência.

Aumentar o tamanho do lote pode diminuir ou aumentar o consumo de recursos ou manter o consumo inalterado.

Não trate o tamanho do lote como um hiperparâmetro ajustável para o desempenho do conjunto de validação. Se todas as condições a seguir forem atendidas, o desempenho do modelo não dependerá do tamanho do lote:

  • Todos os hiperparâmetros do otimizador estão bem ajustados.
  • A regularização é suficiente e bem ajustada.
  • O número de etapas de treinamento é suficiente.

O mesmo desempenho final precisa ser atingível usando qualquer tamanho de lote (consulte Shallue e outros em 2018 e Por que o tamanho do lote não pode ser ajustado para melhorar diretamente o desempenho do conjunto de validação?).

Determinar os tamanhos de lote viáveis e estimar a capacidade de processamento do treinamento

Para um determinado modelo e otimizador, o hardware disponível normalmente aceita uma variedade de tamanhos de lote. O fator limitante geralmente é a memória do acelerador. Infelizmente, pode ser difícil calcular os tamanhos de lote que cabem na memória sem executar ou, pelo menos, compilar o programa de treinamento completo. A solução mais fácil geralmente é executar jobs de treinamento em diferentes tamanhos de lote (por exemplo, aumentar a potência de 2) por um pequeno número de etapas até que um dos jobs exceda a memória disponível. Para cada tamanho de lote, treine por tempo suficiente para ter uma estimativa confiável da capacidade de treinamento:

capacidade de processamento do treinamento = o número de exemplos processados por segundo

ou, de maneira equivalente, o tempo por etapa:

tempo por etapa = tamanho do lote / capacidade de treinamento

Quando os aceleradores ainda não estiverem saturados, se o tamanho do lote dobrar, a capacidade de treinamento também precisará dobrar (ou pelo menos quase dobrar). Equivalentemente, o tempo por etapa precisa ser constante (ou pelo menos quase constante) à medida que o tamanho do lote aumenta. Se esse não for o caso, o pipeline de treinamento terá um afunilamento, como E/S ou sincronização entre nós de computação. Considere diagnosticar e corrigir o gargalo antes de continuar.

Se a capacidade de treinamento aumentar até um tamanho máximo de lote, considere apenas os tamanhos até esse tamanho máximo, mesmo que o hardware seja compatível com um tamanho de lote maior. Todos os benefícios de usar um tamanho de lote maior pressupõem que a capacidade de treinamento aumenta. Se não acontecer, corrija o gargalo ou use o tamanho de lote menor.

O acúmulo de gradiente simula um tamanho de lote maior do que o hardware aceita e, portanto, não oferece benefícios de capacidade. Em geral, evite o acúmulo de gradientes no trabalho aplicado.

Talvez seja necessário repetir essas etapas sempre que você mudar o modelo ou o otimizador. Por exemplo, uma arquitetura de modelo diferente pode permitir que um tamanho de lote maior caiba na memória.

Escolha o tamanho do lote para minimizar o tempo de treinamento

Esta é nossa definição de tempo de treinamento:

  • tempo de treinamento = (tempo por passo) x (número total de passos)

Muitas vezes, o tempo por etapa é aproximadamente constante para todos os tamanhos de lote viáveis. Isso acontece quando:

  • Não há sobrecarga de cálculos paralelos.
  • Todos os gargalos de treinamento foram diagnosticados e corrigidos. Consulte a seção anterior para saber como identificar gargalos de treinamento. Na prática, geralmente há pelo menos um pouco de sobrecarga com o aumento do tamanho do lote.

À medida que o tamanho do lote aumenta, o número total de etapas necessárias para atingir uma meta de desempenho fixa normalmente diminui, desde que você ajuste novamente todos os hiperparâmetros relevantes ao alterar o tamanho do lote. (Consulte Shallue e outros, 2018). Por exemplo, dobrar o tamanho do lote pode reduzir pela metade o número total de etapas necessárias. Essa relação é chamada de escalonamento perfeito e deve ser mantida para todos os tamanhos de lote até um tamanho de lote crítico.

Além do tamanho crítico do lote, aumentar o tamanho produz retornos decrescentes. Ou seja, aumentar o tamanho do lote não reduz mais o número de etapas de treinamento, mas nunca o aumenta. Portanto, o tamanho do lote que minimiza o tempo de treinamento geralmente é o maior tamanho de lote que ainda reduz o número de etapas de treinamento necessárias. Esse tamanho de lote depende do conjunto de dados, do modelo e do otimizador. É um problema em aberto de como calculá-lo, em vez de encontrá-lo experimentalmente para cada novo problema. 🤖

Ao comparar tamanhos de lote, tenha cuidado com a distinção entre o seguinte:

  • Um orçamento de exemplo ou orçamento de época: executar todos os experimentos e corrigir o número de apresentações de exemplo de treinamento.
  • Um orçamento de etapas, que executa todos os experimentos com um número fixo de etapas de treinamento.

A comparação de tamanhos de lote com um orçamento de período apenas analisa o regime de escalonamento perfeito, mesmo quando tamanhos de lote maiores ainda podem fornecer uma aceleração significativa ao reduzir o número de etapas de treinamento necessárias. Muitas vezes, o maior tamanho de lote aceito pelo hardware disponível é menor que o tamanho crítico. Portanto, uma boa regra prática (sem executar nenhum experimento) é usar o maior tamanho de lote possível.Não há motivo para usar um tamanho de lote maior se ele acabar aumentando o tempo de treinamento.

Escolha o tamanho do lote para minimizar o consumo de recursos

Há dois tipos de custos de recursos associados ao aumento do tamanho do lote:

  • Custos iniciais. Por exemplo, comprar novo hardware ou reescrever o pipeline de treinamento para implementar o treinamento com várias GPUs / TPUs.
  • Custos de uso. Por exemplo, faturamento nos orçamentos de recursos da equipe, faturamento de um provedor de nuvem, custos de eletricidade / manutenção.

Se houver custos iniciais significativos para aumentar o tamanho do lote, pode ser melhor adiar esse aumento até que o projeto esteja mais fácil e seja mais fácil avaliar a relação custo-benefício. A implementação de programas de treinamento paralelo de vários hosts pode introduzir bugs e problemas sutis. Por isso, provavelmente é melhor começar com um pipeline mais simples. Por outro lado, uma grande aceleração no tempo de treinamento pode ser muito benéfico no início do processo, quando muitos experimentos de ajuste são necessários.

Nos referimos ao custo total de uso (que pode incluir vários tipos diferentes de custos) como o consumo de recursos, calculado da seguinte maneira:

consumo de recursos = consumo de recursos por etapa x número total de etapas

Aumentar o tamanho do lote geralmente reduz o número total de etapas. O aumento ou a diminuição do consumo do recurso depende de como o consumo por etapa muda, o que depende do tamanho do lote da seguinte maneira:

  • Aumentar o tamanho do lote pode diminuir o consumo de recursos. Por exemplo, se cada etapa com o tamanho de lote maior puder ser executada no mesmo hardware que o tamanho de lote menor (com apenas um pequeno aumento no tempo por etapa), qualquer aumento no consumo de recursos por etapa poderá ser superado pela redução no número de etapas.
  • Aumentar o tamanho do lote não altera o consumo de recursos. Por exemplo, se dobrar o tamanho do lote pela metade do número de etapas necessárias e dobrar o número de GPUs usadas, o consumo total (em termos de GPU/hora) não mudará.
  • Aumentar o tamanho do lote pode aumentar o consumo de recursos. Por exemplo, se o aumento do tamanho do lote exigir hardware atualizado, o aumento no consumo por etapa poderá superar a redução no número de etapas.

Alterar o tamanho do lote requer o reajuste da maioria dos hiperparâmetros

Os valores ideais da maioria dos hiperparâmetros são sensíveis ao tamanho do lote. Portanto, alterar o tamanho do lote normalmente requer reiniciar o processo de ajuste. Veja a seguir os hiperparâmetros que interagem mais fortemente com o tamanho do lote e, portanto, são mais importantes para serem ajustados separadamente para cada tamanho:

  • Os hiperparâmetros do otimizador (por exemplo, taxa de aprendizado e momentum)
  • Os hiperparâmetros de regularização

Observe isso ao escolher o tamanho do lote no início de um projeto. Se você precisar mudar para um tamanho de lote diferente posteriormente, pode ser difícil, demorado e caro reajustar os outros hiperparâmetros para o novo tamanho de lote.

Como a norma de lote interage com o tamanho do lote

A norma de lote é complicada e, em geral, precisa usar um tamanho de lote diferente do cálculo do gradiente para calcular estatísticas. Consulte os Detalhes de implementação da normalização em lote para ver uma discussão detalhada.

Escolher a configuração inicial

O primeiro estágio no ajuste de hiperparâmetros é determinar pontos de partida para:

  • a configuração do modelo (por exemplo, número de camadas)
  • os hiperparâmetros do otimizador (por exemplo, taxa de aprendizado)
  • o número de etapas de treinamento

Determinar essa configuração inicial requer algumas execuções de treinamento configuradas manualmente e tentativa e erro.

Nosso princípio orientador é o seguinte:

Encontre uma configuração simples, relativamente rápida e com consumo de recursos relativamente baixo que consiga um desempenho razoável.

onde:

  • Simples significa evitar recursos de pipeline desnecessários, como regularizações especiais ou truques de arquitetura. Por exemplo, um pipeline sem regularização de dropout (ou com regularização de dropout desativada) é mais simples do que um com regularização de dropout.
  • O desempenho Razoável depende do problema, mas, no mínimo, um modelo treinado razoável tem um desempenho muito melhor do que a chance aleatória no conjunto de validação.

Escolher uma configuração inicial rápida e que consuma recursos mínimos torna o ajuste de hiperparâmetros muito mais eficiente. Por exemplo, comece com um modelo menor.

Escolher o número de etapas de treinamento envolve equilibrar a seguinte tensão:

  • O treinamento para mais etapas pode melhorar o desempenho e simplifica o ajuste de hiperparâmetros. Para mais detalhes, consulte Shallue et al., 2018.
  • Por outro lado, treinar para menos etapas significa que cada execução de treinamento é mais rápida e usa menos recursos, aumentando a eficiência do ajuste ao reduzir o tempo entre os ciclos e permitindo que você execute mais experimentos em paralelo. Além disso, se você escolher um orçamento de etapas desnecessariamente grande no início do projeto, pode ser difícil alterá-lo posteriormente no projeto. Por exemplo, depois de ajustar o cronograma de taxa de aprendizado para esse número de etapas.