Há dois tipos de cargas de trabalho de treinamento:
- vinculada à computação
- sem limite de computação
O treinamento limitado pela computação é limitado pelo tempo que você pode passar no treinamento, não pela quantidade de dados de treinamento que você tem ou por algum outro fator. Em outras palavras, o tempo de treinamento "ideal" é sempre "contanto que você possa pagar". Se você conseguir treinar por mais tempo ou de modo mais eficiente, a perda de treinamento deve cair. Com o ajuste adequado, a perda de validação também deve cair.
Acelerar o treinamento vinculado à computação é equivalente a melhorar o treinamento. Dito isso, só porque uma carga de trabalho é limitada por computação não significa que o treinamento mais longo ou mais rápido é a única maneira de melhorar os resultados.
Quando o treinamento não estiver vinculado à computação, será possível pagar 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 estiver vinculado à computação:
- É possível treinar com uma perda de treinamento muito baixa, a ponto de que o treinamento extra possa reduzir ligeiramente a perda de treinamento, mas não significativamente.
- É possível ajustar com mais facilidade, especialmente ao ajustar programações de redução de taxa de aprendizado, porque elas têm uma interação particularmente forte com o orçamento de treinamento. Por outro lado, receber uma baixa perda de treinamento no treinamento vinculado à computação pode exigir uma programação de redução de taxa de aprendizado ajustada para a perfeição.
Independentemente de uma determinada carga de trabalho ser ou não limitada por computação, os métodos que aumentam a variação dos gradientes (em lotes) normalmente diminuem o progresso do treinamento e, portanto, podem aumentar o número de etapas de treinamento necessárias para atingir uma perda de validação específica. Qualquer um dos seguintes pode causar uma alta variação de gradiente:
- Usar um tamanho de lote menor.
- Adicionar ampliação de dados.
- Adição de alguns tipos de regularização (por exemplo, regularização de dropout).
Decida quanto tempo será treinado quando o treinamento não estiver vinculado à computação
Sua meta: treinar por tempo suficiente para que o modelo alcance o melhor resultado possível sem desperdiçar as etapas de treinamento.
Seu objetivo principal é garantir que você treine por tempo suficiente para que o modelo alcance o melhor resultado possível sem desperdiçar etapas de treinamento desnecessárias. Quando estiver em dúvida, erre o treinamento por mais tempo. Suas métricas de avaliação (por exemplo, precisão, recall, AUC ou F1) nunca devem se degradar durante o treinamento por mais tempo, supondo que você use corretamente a seleção de ponto de controle retrospectivo e o ponto de verificação com frequência suficiente.
Nunca ajuste o número de max_train_steps
em um estudo. Em vez disso, escolha um valor e use-o para todos os testes. A partir desses testes, plote a etapa de treinamento
que a seleção de checkpoint retrospectiva 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 for consistentemente nos últimos 25% do treinamento, você poderá se beneficiar do treinamento por mais tempo e ajustar a programação de redução.
O número ideal de etapas de treinamento pode mudar quando a arquitetura ou os dados são alterados (por exemplo, adicionando 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" ao conjunto de treinamento usando uma taxa de aprendizado constante.
É possível diminuir o 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 ajustada.
Algoritmo para escolher um candidato inicial para max_train_steps usando uma varredura de taxa de aprendizado
Escolha um candidato inicial para max_train_steps
com um algoritmo de varredura de taxa de aprendizado. O algoritmo a seguir pressupõe que é possível não apenas "perfeitamente" se ajustar ao conjunto de treinamento, mas também fazer isso usando uma programação constante de taxa de aprendizado.
- Se for possível ajustar perfeitamente todo o conjunto de treinamento, será necessário ter uma configuração com valor
max_train_steps
que se encaixe perfeitamente no conjunto de treinamento. Encontre qualquer configuração desse tipo e use o valor dela comomax_train_steps
como ponto de partidaN
. - executar uma varredura constante de taxa de aprendizado, ou seja, uma pesquisa em grade da taxa de aprendizado, sem aumento de dados e sem regularização, em que cada teste é treinado para as etapas
N
; O número de etapas necessárias para a avaliação mais rápida na varredura de taxa de aprendizado atingir o desempenho de treinamento perfeito deve ser seu palpite inicial paramax_train_steps
.
OBSERVAÇÃO: espaços de pesquisa incorretos podem levar a fraudes.
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.
Decida por quanto tempo treinar quando o treinamento for vinculado à computação
Em alguns casos, a perda de treinamento continua melhorando indefinidamente. Portanto, sua paciência e seus recursos computacionais se tornam os fatores limitadores. Mas como treinar, desde que você possa arcar com os custos? Não necessariamente. Recomendamos o seguinte:
- Você pode ajustar com mais eficiência executando um número maior de experimentos mais curtos, reservando as "durações de produção" mais longas para os modelos que pretende 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 os candidatos a lançamento em potencial, mas é possível concluir menos deles.
- Você provavelmente responderá muitas perguntas enquanto treina apenas cerca de 10% da duração da produção. No entanto, suas conclusões até esse limite de tempo podem não se aplicar a experimentos em 20% da duração da produção, muito menos 100%.
O ajuste durante vários ciclos com limites crescentes de etapas de treinamento por teste é uma abordagem sensata. Você pode executar quantas rodadas quiser, mas a maioria delas é mais prática. Basicamente, tente entender o problema o máximo possível usando testes com tempo de resposta muito rápido, compensando o seguinte:
- Ajuste de detalhes.
- Relevância para as execuções finais mais longas.
Depois que um determinado limite de tempo por teste tiver gerado insights úteis, aumente o tempo de treinamento e continue ajustando, verificando suas conclusões com base em execuções mais curtas, conforme necessário. Como ponto de partida, recomendamos dois ajustes:
- Etapa 1: duração mais curta para encontrar bons hiperparâmetros de modelo e do otimizador
- Etapa 2: muito poucas durações longas são executadas em bons pontos de hiperparâmetros para conseguir o modelo final.
A maior pergunta que acontece na primeira rodada é a seguinte:
Como você ajusta as programações de redução da taxa de aprendizado?
Uma armadilha comum ao ajustar as programações de taxa de aprendizado entre rodadas é usar todas as etapas extras de treinamento com uma taxa de aprendizado muito pequena.
1a rodada: muitos treinos curtos
Infelizmente, não há garantia de que bons hiperparâmetros encontrados em treinamento curto e incompleto ainda sejam boas opções quando você aumenta significativamente a duração do treinamento. No entanto, para alguns hiperparâmetros, as boas escolhas 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. No entanto, com base no que sabemos até agora, aqui estão nossas suspeitas em diminuir a probabilidade de transferência:
- Muito provável. A instabilidade inicial do treinamento pode ser resolvida na primeira rodada de ajustes usando um número menor de etapas de treinamento.
Os hiperparâmetros a seguir têm maior probabilidade de transferência:
- Duração do 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 hiperparâmetros a seguir podem ser transferidos:
- O algoritmo de otimização e os hiperparâmetros seriam "perdidos" para transferência.
- Aumento de dados.
- Regularização. Se não for possível ajustar perfeitamente o conjunto de treinamento, o modelo pode estar em um regime em que a regularização provavelmente não ajudará muito.
- Baixa probabilidade de transferir. É improvável que a programação da taxa de aprendizado seja transferida perfeitamente. Como treinar modelos de linguagem grandes otimizados para computação sugere que até mesmo as transferências de programação deterioram-se, mas não acreditamos que isso seja geral. Por exemplo, o ajuste da redução do quadrado em um pequeno número de etapas de treinamento e, em seguida, a extensão para um número grande faz com que a maior parte do treinamento ocorra em etapas muito pequenas. Você provavelmente conseguirá um resultado "bom o suficiente" com a maioria das programações no limite de orçamento de treinamento extremo, mas provavelmente notará melhorias perceptíveis de desempenho se ele estiver ajustado. Noções básicas sobre viés de curto prazo na metaotimização estocástico, descreve os perigos de tentar escolher taxas de aprendizado de forma mítica.
Etapa 2: menos execuções, mas maior duração
Execute a melhor configuração de hiperparâmetro da primeira rodada.
Especulação: 🤖 Use as etapas extras para estender o período de treinamento
a uma alta taxa de aprendizado. Por exemplo, se você estiver usando uma programação linear, mantenha o comprimento da redução fixo do Round 1 e estenda o período da constante lr
no início. Para redução de cosseno, mantenha a lr
de base da primeira rodada e estenda max_train_steps
conforme descrito em Como treinar modelos de linguagem grandes otimizados para computação.
As rodadas adicionais de treinamento podem ser úteis para equipes com todos os itens a seguir:
- Modelagem muito madura
- Como ajustar pipelines
- Treinamentos de produção muito longos e caros
No entanto, muitas execuções de treinamento muitas vezes não são produtivas.
Já descrevemos como transferir da primeira rodada para a segunda rodada. Se você não se preocupa com o tempo de análise e se o uso eficiente de recursos de computação é uma preocupação substituta, 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 diferentes de ajuste:
- Em cada rodada, garanta sistematicamente que suas escolhas continuem fornecendo bons resultados.
- Coloque novas ideias em um pipeline que as arrisque progressivamente usando experimentos cada vez mais longos da etapa i à etapa i+1.