Esta seção explica como escolher o seguinte no início do em um projeto de ML:
- a arquitetura do modelo
- o otimizador
- o tamanho do lote
- a configuração inicial
Suposições
As recomendações nesta seção pressupõem o seguinte:
- Você já formou o problema, e preparou seus 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 possível do que você planeja medir no ambiente implantado.
Supondo que você tenha atendido a todos os pré-requisitos anteriores, agora está pronto para e dedicar tempo à arquitetura do modelo e à configuração do treinamento.
Escolha 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 parameter correspondentes. 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 modelo é uma arquitetura de modelo com valores específicos para todos os parâmetros. Por exemplo, um modelo consiste na rede neural descrita na definição da arquitetura do modelo, mais valores específicos do o peso e o viés de cada nó.
- Uma família de modelos é um modelo para a construção de uma arquitetura de modelo que recebeu um conjunto de hiperparâmetros.
Escolher a arquitetura do modelo realmente significa escolher um conjunto de (um para cada configuração dos 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. Em seguida, reproduza esse modelo um ponto de partida.
Escolha o otimizador
Nenhum otimizador é o "melhor" em todos os tipos de problemas de machine learning e arquiteturas de modelos. Mesmo apenas comparando o desempenho dos otimizadores é difícil. 🤖Recomendamos o uso de otimizadores conhecidos e bem estabelecidos, especialmente ao iniciar um novo projeto.
Recomendamos escolher o otimizador mais usado para o tipo de problema em que você está trabalhando. Recomendamos os seguintes otimizadores bem estabelecidos:
- SGD com impulso. Recomendamos a variante Nesterov.
- Adam e NAdam, que são mais gerais que GDE com impulso. Observe que Adam tem quatro argumentos ajustáveis e eles podem ser importantes. Consulte Como os hiperparâmetros de Adam devem está ajustado?.
Preste atenção a todos os argumentos do otimizador escolhido. Os otimizadores com mais hiperparâmetros costumam exigir 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 e inconvenientes. Portanto, recomendamos a seguinte abordagem:
- No início do projeto, escolha um otimizador sem muitos ajustáveis
e ajustar os hiperparâmetros. Aqui estão dois exemplos:
- GDE com impulso fixo.
- Adam com Epsilon, Beta1 e Beta2 corrigidos.
- Nas fases posteriores do projeto, mude para um otimizador mais geral que ajusta mais hiperparâmetros em vez de corrigi-los nos valores padrão.
Escolha o tamanho do lote
Resumo: o tamanho do lote controla a velocidade do treinamento. não use o tamanho do lote para ajustar diretamente o desempenho do conjunto de validação.
O tamanho do lote determina muito o tempo de treinamento e o recurso de computação e consumo. Aumentar o tamanho do lote geralmente diminui o tempo de treinamento que:
- ajustar os hiperparâmetros mais detalhadamente em um período fixo; nesse intervalo, o que pode gerar um modelo final melhor.
- Reduz a latência do ciclo de desenvolvimento, permitindo o surgimento de novas ideias ou testada com mais frequência.
Aumentar o tamanho do lote pode diminuir ou aumentar o consumo de recursos. ou deixar o consumo de recursos inalterado.
Não trate o tamanho do lote como um hiperparâmetro ajustável para validação do conjunto de dados. Se todas as as condições a seguir forem atendidas, o desempenho do modelo não deve depender 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 deve ser atingível com qualquer tamanho de lote (Consulte Shallue et al. 2018 e Por que o tamanho do lote não deve ser ajustado para melhorar diretamente o desempenho do conjunto de validação?)
Determinar os tamanhos viáveis de lote e estimar a capacidade de processamento do treinamento
Para um determinado modelo e otimizador, o hardware disponível geralmente dá suporte diversos tamanhos de lote. O fator limitante geralmente é na memória do acelerador. Infelizmente, pode ser difícil calcular quais os tamanhos de lotes cabem na memória sem executar, ou pelo menos compilar, um 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) para uma pequena o número de etapas até que um dos jobs exceda a memória disponível. Para tamanho de cada lote, treine por tempo suficiente para ter uma estimativa confiável capacidade de processamento de treinamento:
capacidade de processamento do treinamento = o número de exemplos processados por segundo
ou, equivalente, o tempo por etapa:
tempo por etapa = tamanho do lote / capacidade de treinamento do treinamento
Quando os aceleradores ainda não estiverem saturados, se o tamanho do lote dobrar, a capacidade de treinamento também deve dobrar (ou pelo menos quase dobrar). Igualmente, o tempo por etapa deve ser constante (ou pelo menos constante) conforme o tamanho do lote aumenta. Se esse não for o caso, o pipeline de treinamento tem um gargalo, como E/S ou sincronização entre nós de computação. Diagnosticar e corrigir o gargalo antes de continuar.
Se a capacidade de treinamento aumentar até um determinado tamanho de lote máximo, considere apenas os tamanhos até o tamanho máximo, mesmo se o hardware aceita um tamanho de lote maior. Todos os benefícios de usar um tamanho de lote maior pressupõem a capacidade de treinamento aumenta. Caso contrário, corrija o gargalo ou use o tamanho de lote menor.
O acúmulo de gradiente simula um lote maior que o hardware e, portanto, não oferece benefícios de capacidade de processamento. Você deve geralmente evitam o acúmulo de gradientes no trabalho aplicado.
Talvez seja necessário repetir essas etapas sempre que você alterar o modelo ou otimizador. Por exemplo, uma arquitetura de modelo diferente pode permitir um tamanho de lote maior para caber 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 etapa) x (número total de etapas)
Muitas vezes, você pode considerar o tempo por passo como aproximadamente constante para todos os tamanhos de lote viáveis. Isso acontece quando:
- Não há sobrecarga de cálculos paralelos.
- Todos os gargalos do treinamento foram diagnosticados e corrigidos. Consulte a seção anterior para saber como identificar gargalos de treinamento. Na prática, geralmente há pelo menos alguns de aumento do tamanho do lote.
Conforme o tamanho do lote aumenta, o número total de etapas necessárias para atingir uma meta fixa de desempenho costuma diminuir, desde que você reajuste os hiperparâmetros relevantes ao alterar o tamanho do lote. Consulte Shallue e outros de 2018. Por exemplo, dobrar o tamanho do lote pode reduzir pela metade o número total de e as etapas necessárias. Essa relação é chamada de escalonamento perfeito e precisa manter todos os tamanhos de lote até um tamanho crítico.
Além do tamanho crítico do lote, aumentar esse tamanho produz retornos decrescentes. Ou seja, aumentar o tamanho do lote não reduz mais o número de etapas de treinamento, mas nunca aumenta. Portanto, o tamanho do lote que minimiza o tempo de treinamento costuma ser o maior tamanho de lote que ainda reduz o número de etapas de treinamento obrigatórios. O tamanho do lote depende do conjunto de dados, modelo e otimizador, e é um problema em aberto para calculá-lo, além de encontrando-a experimentalmente para cada novo problema. 🤖
Ao comparar tamanhos de lote, tenha cuidado com a distinção entre os seguintes itens:
- Um exemplo de orçamento ou um orçamento de época que executa todos os experimentos corrigir o número de apresentações de exemplos de treinamento.
- Um orçamento de etapa, ou seja, a execução de todos os experimentos com um número fixo de etapas de treinamento.
Comparar tamanhos de lote com um orçamento de época sonda apenas o estado em um regime de escalonamento, mesmo quando tamanhos de lote maiores ainda podem proporcionar e acelerar significativamente o processo, reduzindo o número de etapas de treinamento necessárias. Frequentemente, o maior tamanho de lote aceito pelo hardware disponível é menor que o tamanho crítico do lote. Portanto, uma boa regra (sem realizar experimentos) é usar o maior lote de dados tamanho de lote maior.Não faz sentido usar um tamanho de lote maior 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, a compra de um novo hardware ou a regravação da pipeline de treinamento para implementar o treinamento com várias GPUs / TPUs.
- Custos de uso. Por exemplo, o faturamento de acordo com os 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, talvez seja melhor adiar o aumento do tamanho do lote até que o projeto amadureceu e é mais fácil avaliar a compensação de custo-benefício. Implementar programas de treinamento paralelo com vários hosts pode introduzir bugs e problemas sutis então, provavelmente é melhor começar com um pipeline. Por outro lado, uma maior aceleração no tempo de treinamento pode ser muito benéfico no início do processo, quando muitos ajustes experimentos são necessários.
Nos referimos ao custo total de uso (que pode incluir diversos tipos de custos) que o consumo de recursos, calculado da seguinte forma:
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 como o consumo por etapa muda, dependendo do tamanho do lote da seguinte forma:
- Aumentar o tamanho do lote pode diminuir o consumo de recursos. Por exemplo, se for possível executar cada etapa com o tamanho de lote maior no mesmo hardware que o tamanho de lote menor (com apenas uma pequena aumento no tempo por etapa) e, em seguida, qualquer aumento o consumo por etapa pode ser superado pela redução da o número de etapas.
- Aumentar o tamanho do lote pode não alterar o consumo de recursos. Por exemplo, se dobrar o tamanho do lote pela metade o número de etapas necessário e dobra o número de GPUs usadas, o consumo total (em termos de horas de GPU) não muda.
- Aumentar o tamanho do lote pode aumentar o consumo de recursos. Por exemplo, se aumentar o tamanho do lote exigir hardware atualizado, o aumento no consumo por etapa pode compensar a redução o número de etapas.
Mudar o tamanho do lote exige um novo ajuste 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 exige iniciar o ajuste o processo novamente. Os hiperparâmetros que interagem mais fortemente com o tamanho do lote e, portanto, é mais importante ajustar separadamente para cada tamanho de lote, são os seguintes:
- 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 mais tarde, pode ser reajustar os outros hiperparâmetros é difícil, demorado e caro para o novo tamanho do lote.
Como a norma do lote interage com o tamanho do lote.
A norma em lote é complicada e, em geral, deve usar um lote diferente maior do que o cálculo do gradiente para calcular estatísticas. Consulte Implementação da normalização em lote detalhes para uma discussão detalhada.
Escolha a configuração inicial
O primeiro estágio do 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
A determinação dessa configuração inicial exige alguns ajustes em execuções de treinamento configuradas e tentativa e erro.
Nosso princípio orientador é o seguinte:
Encontrar um consumo simples, relativamente rápido e com baixo consumo de recursos configuração que tenha um desempenho razoável.
em que:
- Simples significa evitar atributos de pipeline desnecessários, como ou truques de arquitetura. Por exemplo, um pipeline suspensão regularização (ou com a regularização de dropout desativada) é mais simples do que uma com regularização de dropout.
- Um desempenho razoável depende do problema, mas, no mínimo, uma um modelo treinado razoável tem um desempenho muito melhor do que o acaso no conjunto de validação.
Escolher uma configuração inicial rápida e que consuma o mínimo 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 com mais etapas pode melhorar o desempenho e simplificar os hiperparâmetros sintonização. Para mais detalhes, consulte Shallue e outros 2018).
- Por outro lado, treinar para menos etapas significa que cada execução de treinamento mais rápido e usa menos recursos, aumentando a eficiência do ajuste ao reduzir o tempo entre os ciclos e permitindo que você realize mais experimentos em paralelo. Além disso, se você escolher um orçamento de etapa desnecessariamente grande no início do projeto, pode ser difícil alterá-lo posteriormente no projeto; por exemplo, depois de ajustar a programação da taxa de aprendizado para esse número de etapas.