RAdam, abreviação de Rectified Adam, é um algoritmo de otimização para treinamento de redes neurais. Foi introduzido em 2019 por Liyuan Liu, Haoming Jiang, Pengcheng He, Weizhu Chen, Xiaodong Liu, Jianfeng Gao e Jiawei Han no artigo "On the Variance of the Adaptive Learning Rate and Beyond". O RAdam aborda um problema conhecido do otimizador Adam, em que a taxa de aprendizado adaptativa pode ter alta variância no início do treinamento, levando a uma convergência ruim ou a um desempenho final subótimo. Ao retificar essa variância, o RAdam visa combinar os benefícios da convergência rápida do Adam com a estabilidade da descida do gradiente estocástica (SGD).
O RAdam é amplamente utilizado em aprendizado profundo, especialmente no treinamento de transformers e grandes modelos de linguagem, onde demonstrou desempenho competitivo com o AdamW e outras variantes. Ele está implementado nos principais frameworks de aprendizado profundo, incluindo PyTorch e TensorFlow, e é uma escolha padrão em alguns pipelines de treinamento.
Contexto: O Otimizador Adam e Suas Limitações
O otimizador Adam, introduzido por Diederik Kingma e Jimmy Ba em 2014, é um método popular de taxa de aprendizado adaptativa que calcula taxas de aprendizado individuais para cada parâmetro com base em estimativas dos primeiros e segundos momentos dos gradientes. O Adam tem sido altamente bem-sucedido no treinamento de redes neurais profundas, mas apresenta problemas conhecidos. Um deles é que a taxa de aprendizado adaptativa pode ser muito grande nos estágios iniciais do treinamento, especialmente quando a estimativa do segundo momento é pequena. Isso pode levar a atualizações grandes que fazem o modelo convergir para mínimos acentuados, que frequentemente generalizam mal. Além disso, o Adam pode exigir um ajuste cuidadoso da taxa de aprendizado e de outros hiperparâmetros.
Várias variantes foram propostas para abordar esses problemas, como o AdamW, que desacopla a decadência de peso, e o AMSGrad, que usa um máximo dos gradientes quadrados passados. No entanto, essas variantes não abordam diretamente a variância na taxa de aprendizado adaptativa.
O Problema da Variância no Adam
No Adam, a taxa de aprendizado adaptativa é calculada como a razão entre a estimativa do primeiro momento e a raiz quadrada da estimativa do segundo momento. No início do treinamento, a estimativa do segundo momento é inicializada em zero e é atualizada com uma correção de viés. No entanto, a correção de viés ainda pode deixar a estimativa com alta variância, especialmente quando a taxa de decaimento (beta2) está próxima de 1. Essa variância faz com que a taxa de aprendizado flutue drasticamente, o que pode levar a um treinamento instável e a uma convergência ruim.
A principal percepção do RAdam é quantificar essa variância e aplicar um termo de retificação que reduz a taxa de aprendizado quando a variância é alta, e a aumenta gradualmente à medida que a variância diminui. Isso é análogo à unidade linear retificada (ReLU), que limita valores negativos a zero.
Como o RAdam Funciona
O RAdam calcula a taxa de aprendizado adaptativa de forma semelhante ao Adam, mas com um termo de retificação adicional. O algoritmo mantém o primeiro momento (média) e o segundo momento (variância não centralizada) dos gradientes, denotados como m_t e v_t, respectivamente. Ele também rastreia o passo de tempo t e a taxa de decaimento beta2.
Em cada passo, o RAdam calcula as estimativas corrigidas por viés: m_t_hat = m_t / (1 - beta1^t) e v_t_hat = v_t / (1 - beta2^t). Em seguida, calcula um parâmetro rho_t = (1 - beta2^t) (2 / (1 - beta2) - 1) - t, que mede o comprimento efetivo da média móvel. Se rho_t for maior que um limiar (tipicamente 4), o RAdam usa o termo retificado: a taxa de aprendizado é escalada por sqrt((rho_t - 4) (rho_t - 2) rho_t / ((rho_t - 4) (rho_t - 2) rho_t - 4 (rho_t - 2) * (rho_t - 2))). Se rho_t for menor ou igual a 4, a atualização é simplificada para usar o primeiro momento diretamente, semelhante ao SGD com momentum.
Essa retificação garante que a taxa de aprendizado não seja muito grande nos estágios iniciais, evitando que o modelo dê passos excessivamente grandes que possam levar a mínimos ruins.
Vantagens do RAdam
O RAdam oferece várias vantagens sobre o Adam e outros otimizadores. Primeiro, ele reduz a necessidade de aquecimento da taxa de aprendizado, que é frequentemente exigido pelo Adam para evitar instabilidade inicial. Isso simplifica o ajuste de hiperparâmetros e pode economizar tempo de treinamento. Segundo, o RAdam demonstrou melhorar o desempenho de generalização em várias tarefas, incluindo classificação de imagens e modelagem de linguagem, em comparação com o Adam. Terceiro, ele é computacionalmente eficiente, adicionando apenas uma pequena sobrecarga à atualização do Adam.
Estudos empíricos mostraram que o RAdam tem bom desempenho em uma variedade de modelos, incluindo redes neurais convolucionais e transformers. Ele é particularmente útil ao treinar com tamanhos de lote pequenos ou quando os dados são ruidosos, pois a variância nos gradientes é maior nesses cenários.
O RAdam na Prática
O RAdam está implementado em bibliotecas populares de aprendizado profundo. No PyTorch, está disponível como torch.optim.RAdam. No TensorFlow, está disponível via API Keras como tf.keras.optimizers.RAdam. Pode ser usado como substituto direto do Adam, com os mesmos hiperparâmetros (taxa de aprendizado, beta1, beta2, epsilon). Os valores padrão são tipicamente learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8.
Na prática, o RAdam tem sido usado no treinamento de modelos em larga escala, incluindo alguns grandes modelos de linguagem e transformers. Por exemplo, foi adotado em certos pipelines de treinamento para modelos como variantes do GPT e BERT, onde mostrou desempenho comparável ou melhor que o AdamW. No entanto, o AdamW continua sendo uma escolha popular devido à sua decadência de peso desacoplada, que pode ser benéfica para regularização. Alguns profissionais combinam o RAdam com decadência de peso ou o usam com um cronograma de taxa de aprendizado cosseno.
Comparação com Outros Otimizadores
O RAdam é frequentemente comparado com Adam, AdamW e SGD com momentum. Em comparação com o Adam, o RAdam proporciona treinamento mais estável sem a necessidade de aquecimento e, frequentemente, leva a uma melhor generalização. Em comparação com o AdamW, o RAdam não desacopla a decadência de peso, mas pode ser combinado com regularização L2. Em alguns benchmarks, o RAdam supera o AdamW em tarefas como classificação de imagens, enquanto em outros o AdamW é superior. A escolha depende do problema específico e dos hiperparâmetros.
O RAdam também se relaciona com outras técnicas de redução de variância, como recorte de gradiente, que podem ser usadas em conjunto com o RAdam para estabilizar ainda mais o treinamento. Além disso, o RAdam pode ser usado com cronogramas de taxa de aprendizado como recozimento cosseno ou decaimento por etapas.
Extensões e Variantes
Várias extensões do RAdam foram propostas. Por exemplo, o RAdam foi combinado com lookahead, uma técnica que mantém um conjunto de pesos lentos, para criar o otimizador Ranger, que mostrou forte desempenho em várias tarefas. Outra variante é o AdaBelief, que modifica o segundo momento para usar o desvio da média, mas o RAdam permanece como uma linha de base para comparação.
A pesquisa também explorou as propriedades teóricas do RAdam, fornecendo garantias de convergência sob certas condições. O termo de retificação é derivado da análise da variância da taxa de aprendizado adaptativa, e foi demonstrado que reduz a lacuna de generalização.
Conclusão
O RAdam é um otimizador robusto que aborda o problema da variância no Adam, levando a um treinamento mais estável e com melhor generalização. É fácil de usar, amplamente disponível e comprovadamente eficaz em muitas aplicações de aprendizado profundo. Embora nem sempre seja a melhor escolha, é uma ferramenta valiosa no arsenal de otimizadores, especialmente para treinar modelos grandes onde a estabilidade é crítica.
Para leitura adicional, veja Adam, variantes de SGD e técnicas de otimização em aprendizado profundo.