Determinar o número de etapas para cada execução de treinamento

Há dois tipos de cargas de trabalho de treinamento:

  • vinculado à computação
  • não vinculada à computação

O treinamento limitado por computação é limitado pela quantidade de tempo que você pode gastar no treinamento, não pela quantidade de dados de treinamento ou algum outro fator. Em outras palavras, o tempo de treinamento "ideal" é sempre "o máximo que você puder pagar". Se você conseguir treinar por mais tempo ou de forma mais eficiente, a perda de treinamento vai diminuir. Com o ajuste adequado, a perda de validação também deve diminuir.

Acelerar o treinamento vinculado à computação é equivalente a melhorar o treinamento. No entanto, só porque uma carga de trabalho é limitada pela computação não significa que treinar por mais tempo ou mais rápido seja a única maneira de melhorar os resultados.

Quando o treinamento não é limitado por computação, você pode treinar pelo tempo que quiser. No entanto, treinar um modelo por mais tempo pode não ajudar muito ou até mesmo causar overfitting. Quando o treinamento não é limitado por computação:

  • É possível treinar até uma perda de treinamento muito baixa, a ponto de um treinamento adicional reduzir ligeiramente a perda de treinamento, mas não reduzir significativamente a perda de validação.
  • É mais fácil fazer ajustes, principalmente quando se trata de decaimento da taxa de aprendizado, já que eles têm uma interação muito forte com o orçamento de treinamento. Por outro lado, conseguir uma perda de treinamento baixa em um treinamento limitado por computação pode exigir uma programação de decaimento da taxa de aprendizado perfeitamente ajustada.

Independente de uma determinada carga de trabalho ser vinculada à computação ou não, os métodos que aumentam a variância dos gradientes (em lotes) geralmente diminuem o progresso do treinamento e, portanto, podem aumentar o número de etapas necessárias para atingir uma determinada perda de validação. Qualquer uma das seguintes situações pode causar uma variância de gradiente alta:

  • Usar um tamanho de lote menor.
  • Adição do aumento de dados.
  • Adicionar alguns tipos de regularização (por exemplo, regularização de eliminação).

Decidir por quanto tempo treinar quando o treinamento não é limitado por computação

Sua meta: treinar por tempo suficiente para que o modelo alcance o melhor resultado possível sem desperdiçar etapas de treinamento.

O objetivo principal é garantir que o treinamento seja longo o suficiente para que o modelo alcance o melhor resultado possível sem desperdiçar etapas desnecessárias. Em caso de dúvida, treine por mais tempo. Suas métricas de avaliação (por exemplo, precisão, recall, AUC ou F1) nunca devem piorar ao treinar por mais tempo, desde que você use corretamente a seleção retrospectiva de pontos de verificação e faça checkpoints com frequência suficiente.

Nunca ajuste o número max_train_steps em um estudo. Em vez disso, escolha um valor e use o mesmo em todos os testes. Com base nesses testes, crie um gráfico da etapa de treinamento que a seleção retrospectiva de pontos de verificação encontra para refinar a escolha de max_train_steps.

Por exemplo, se a melhor etapa for sempre durante os primeiros 10% do treinamento, o número máximo de etapas será muito alto. Como alternativa, se a melhor etapa estiver sempre nos últimos 25% do treinamento, talvez seja melhor treinar por mais tempo e ajustar a programação de decaimento. O número ideal de etapas de treinamento pode mudar quando a arquitetura ou os dados mudam (por exemplo, ao adicionar aumento de dados). A próxima seção descreve como escolher um valor candidato inicial para max_train_steps com base no número de etapas necessárias para "ajustar perfeitamente" o conjunto de treinamento usando uma taxa de aprendizado constante.

É possível diminuir max_train_steps se o processo de treinamento melhorar de alguma forma, por exemplo, com um otimizador ou uma programação de taxa de aprendizado mais bem ajustados.

Algoritmo para escolher um candidato inicial para max_train_steps usando uma varredura de taxa de aprendizado

Você pode escolher um candidato inicial para max_train_steps com um algoritmo de varredura da taxa de aprendizado. O algoritmo a seguir pressupõe que é possível não apenas ajustar "perfeitamente" o conjunto de treinamento, mas também fazer isso usando uma programação de taxa de aprendizado constante.

  1. Se for possível ajustar perfeitamente todo o conjunto de treinamento, vai existir uma configuração (com algum valor de max_train_steps) que se encaixa perfeitamente no conjunto de treinamento. Encontre uma configuração desse tipo e use o valor max_train_steps como ponto de partida N.
  2. Execute uma varredura de taxa de aprendizado constante (ou seja, pesquisa em grade da taxa de aprendizado) sem aumento de dados e sem regularização, em que cada teste treina por N etapas. O número de etapas necessárias para o teste mais rápido na varredura da taxa de aprendizado atingir uma performance de treinamento perfeita deve ser sua estimativa inicial para max_train_steps.

OBSERVAÇÃO: espaços de pesquisa ruins podem levar ao autoengano. Por exemplo, se todas as taxas de aprendizado em um estudo forem muito pequenas, você poderá concluir incorretamente que um valor muito grande de max_train_steps é necessário. No mínimo, verifique se a taxa de aprendizado ideal no estudo não está no limite do espaço de pesquisa.

Decidir por quanto tempo treinar quando o treinamento é limitado por computação

Em alguns casos, a perda de treinamento continua melhorando indefinidamente. Portanto, sua paciência e seus recursos computacionais se tornam os fatores limitantes. Mas você deve treinar o máximo que puder? Não necessariamente. Considere o seguinte:

  • É possível fazer ajustes mais eficazes executando um número maior de experimentos mais curtos, reservando as execuções mais longas de "duração de produção" para os modelos que você quer lançar.
  • À medida que o tempo de treinamento dos testes se aproxima do limite de paciência, os experimentos de ajuste se tornam mais relevantes para seus possíveis candidatos de lançamento, mas você pode concluir menos deles.
  • Você provavelmente consegue responder a muitas perguntas treinando apenas 10% da duração da produção. No entanto, suas conclusões nesse limite de tempo podem não se aplicar a experimentos com 20% da duração da produção, muito menos 100%.

Ajustar durante várias rodadas com limites crescentes de etapas de treinamento por teste é uma abordagem sensata. Você pode fazer quantas rodadas quiser, mas geralmente 1 a 3 são as mais práticas. Basicamente, tente entender o problema o máximo possível usando testes com um tempo de resposta muito rápido, compensando o seguinte:

  • Nível de detalhe do ajuste.
  • Relevância para as corridas finais e mais longas.

Quando um determinado limite de tempo por teste gerar insights úteis, aumente o tempo de treinamento e continue ajustando, verificando novamente suas conclusões das execuções mais curtas conforme necessário. Como ponto de partida, recomendamos duas rodadas de ajuste:

  • Rodada 1: execuções de menor duração para encontrar bons hiperparâmetros de modelo e otimizador.
  • Rodada 2: pouquíssimas execuções de longa duração em bons pontos de hiperparâmetros para gerar o modelo final.

A principal questão da 1ª para a 2ª rodada é:

Como ajustar as programações de redução da taxa de aprendizado.

Um erro comum ao ajustar as programações de taxa de aprendizado entre as rodadas é usar todas as etapas de treinamento extras com uma taxa de aprendizado muito pequena.

Rodada 1: muitos treinos curtos

Infelizmente, não há garantia de que bons hiperparâmetros encontrados em treinamentos curtos e incompletos ainda sejam boas opções quando você aumenta significativamente a duração do treinamento. No entanto, para alguns hiperparâmetros, as boas opções geralmente são correlacionadas o suficiente para que a rodada 1 seja útil. Quais valores de hiperparâmetros encontrados em execuções mais curtas são transferidos com sucesso para execuções de treinamento mais longas? Não sabemos. Precisamos de mais pesquisas. Mas, com base no que sabemos até agora, estas são nossas suspeitas em ordem decrescente de probabilidade de transferência:

  • Muito provável de ser transferido. A instabilidade inicial do treinamento pode ser resolvida na primeira rodada de ajuste usando um número menor de etapas de treinamento. Os seguintes hiperparâmetros são os mais propensos a serem transferidos:
    • Período de aquecimento
    • Inicialização
  • Provavelmente será transferido. Uma vitória drástica na arquitetura do modelo geralmente é transferida, mas muitos contraexemplos são prováveis.
  • Pode ser transferido. Os seguintes hiperparâmetros podem ser transferidos:
    • O algoritmo de otimização e os hiperparâmetros seriam transferidos "de forma solta".
    • Ampliação de dados.
    • Regularização. Se não for possível ajustar perfeitamente o conjunto de treinamento, o modelo poderá estar em um regime em que a regularização não vai ajudar muito.
  • Não é possível transferir. É improvável que a programação da taxa de aprendizado seja transferida perfeitamente. Training Compute-Optimal Large Language Models sugere que até mesmo as transferências de programação de decaimento, mas não acreditamos que isso seja verdade em geral. Por exemplo, ajustar o decaimento da raiz quadrada em um pequeno número de etapas de treinamento e depois estender para um grande número faz com que a maioria do treinamento ocorra em etapas muito pequenas. Você provavelmente vai conseguir um resultado "bom o suficiente" com a maioria das programações no limite do orçamento de treinamento extremo, mas vai notar melhorias significativas na performance se ele for ajustado. Understanding Short-Horizon Bias in Stochastic Meta-Optimization (em inglês) descreve os perigos de tentar escolher taxas de aprendizado de forma míope.

Segunda rodada: menos execuções, mas de maior duração

Execute a melhor configuração de hiperparâmetros da rodada 1.

Especulação: 🤖 use as etapas extras para estender o período de treinamento com uma taxa de aprendizado alta. Por exemplo, se você estiver usando uma programação linear, mantenha o comprimento do decaimento fixo desde a primeira rodada e estenda o período de lr constante no início. Para o decaimento de cosseno, mantenha a base lr da rodada 1 e estenda max_train_steps conforme descrito em Training Compute-Optimal Large Language Models.

Outras rodadas de treinamento podem ser úteis para equipes com todos os seguintes requisitos:

  • Modelagem muito avançada
  • Ajuste de pipelines
  • Execuções de treinamento de produção muito longas e caras

No entanto, execuções de treinamento adicionais geralmente são improdutivas.

Já descrevemos como fazer a transferência da rodada 1 para a rodada 2. Se você não se importa com o tempo de análise e se o uso eficiente dos recursos de computação é sua principal preocupação, recomendamos aumentar exponencialmente a duração das execuções de treinamento (e, portanto, o tempo de ponta a ponta para concluir um estudo) em várias rodadas de ajuste:

  • Em cada rodada, verifique sistematicamente se suas escolhas continuam oferecendo bons resultados.
  • Coloque novas ideias em um pipeline que as reduza progressivamente usando experimentos cada vez mais longos da etapa i para a etapa i+1.