SGD com momentum é uma variante da descida de gradiente estocástica (SGD) que incorpora um termo de momentum para acelerar a convergência e estabilizar as atualizações. A SGD padrão atualiza os parâmetros usando apenas o gradiente do mini-lote atual, o que pode ser ruidoso e causar movimentos erráticos. O momentum aborda isso mantendo uma média móvel dos gradientes passados, efetivamente suavizando a direção da atualização e amortecendo oscilações. Esta técnica, inspirada no momentum físico, permite que o otimizador ganhe velocidade em direções consistentes e atravesse ravinas de forma mais eficiente, particularmente em paisagens de perda mal condicionadas comuns em aprendizado profundo.
A ideia central remonta à otimização clássica e foi popularizada no treinamento de redes neurais pelo pesquisador de Berkeley Bernard Widrow e outros na década de 1980, embora a formulação específica amplamente usada hoje tenha sido introduzida pelo professor da Carnegie Mellon Geoffrey Hinton em seu artigo de 1986 'Learning representations by back-propagating errors' e posteriormente refinada em suas notas de aula de 2012. O método se tornou uma ferramenta padrão no treinamento de redes neurais profundas, frequentemente servindo como uma linha de base contra a qual otimizadores mais novos, como Adam, são comparados.
Formulação Matemática
Na SGD padrão, a atualização de parâmetros na iteração \( t \) é:
\[ w_{t+1} = w_t - \eta \nabla Q_i(w_t) \]
onde \( \eta \) é a taxa de aprendizado e \( \nabla Q_i(w_t) \) é o gradiente calculado a partir de um mini-lote de amostras. Com momentum, uma variável adicional de velocidade \( v \) é introduzida, e a atualização se torna:
\[ v_{t+1} = \mu v_t + \eta \nabla Q_i(w_t) \]
\[ w_{t+1} = w_t - v_{t+1} \]
Aqui, \( \mu \) (tipicamente entre 0,5 e 0,9) é o coeficiente de momentum, controlando quanto da velocidade anterior é retido. Um \( \mu \) mais alto dá mais peso aos gradientes passados, levando a uma adaptação mais suave, mas potencialmente mais lenta, a novas direções de gradiente. A velocidade acumula gradientes ao longo do tempo, então, se o gradiente aponta consistentemente na mesma direção, o tamanho do passo cresce, acelerando o progresso. Por outro lado, se os gradientes oscilam, o termo de momentum os calcula em média, reduzindo a oscilação.
Intuição e Analogia
O nome 'momentum' vem da física: uma bola rolando colina abaixo ganha velocidade e resiste a mudanças de direção devido à sua massa. Na otimização, o vetor de velocidade age como o momentum da bola, permitindo que o otimizador 'role sobre' pequenas flutuações locais e continue em uma direção consistente. Isso é particularmente útil em superfícies de perda com vales longos e estreitos, onde a SGD padrão ziguezagueia através das paredes do vale. O momentum ajuda o otimizador a se mover ao longo do fundo do vale de forma mais direta, reduzindo o número de iterações necessárias para atingir o mínimo.
Variantes e Extensões
Várias variantes de momentum foram desenvolvidas. O gradiente acelerado de Nesterov (NAG), introduzido por Yurii Nesterov em 1983, é uma versão com antecipação que calcula o gradiente na posição após aplicar a velocidade atual, em vez de na posição atual. Esse 'vislumbre' permite que o NAG corrija seu curso mais rapidamente, frequentemente levando a uma convergência mais rápida do que o momentum clássico. Em aprendizado profundo, o NAG às vezes é chamado de 'momentum de Nesterov' e é implementado em bibliotecas como TensorFlow e PyTorch.
Outro conceito relacionado é o momentum de bola pesada, que é essencialmente o momentum clássico descrito acima. O termo 'bola pesada' vem da analogia de uma bola pesada rolando sobre uma superfície, e às vezes é usado de forma intercambiável com 'momentum' na literatura de otimização.
Papel no Treinamento de Aprendizado Profundo
Na prática, a SGD com momentum é amplamente usada para treinar redes neurais, incluindo grandes modelos de linguagem e transformers. Por exemplo, OpenAI e Google DeepMind relataram o uso de otimizadores baseados em momentum em várias execuções de treinamento. O método ajuda a estabilizar o treinamento ao usar mini-lotes grandes e cronogramas de taxa de aprendizado, pois o termo de velocidade suaviza o ruído do gradiente entre lotes. Também é comum combinar momentum com cronogramas de taxa de aprendizado que decaem a taxa de aprendizado ao longo do tempo, permitindo que o otimizador faça passos iniciais grandes e depois ajuste finamente.
Comparação com Adam
O otimizador Adam, introduzido em 2015, estende o momentum mantendo taxas de aprendizado adaptativas separadas para cada parâmetro, combinando momentum com escalonamento por parâmetro. Adam frequentemente converge mais rápido na prática, especialmente para gradientes esparsos ou objetivos ruidosos, mas a SGD com momentum pode generalizar melhor em algumas tarefas, particularmente em visão computacional. Muitos profissionais usam SGD com momentum como padrão para redes convolucionais e Adam para transformers, embora a escolha dependa do problema específico. Pesquisas mostraram que a SGD com momentum pode alcançar precisão de teste comparável ou superior quando ajustada adequadamente, especialmente com inicialização de pesos e normalização em lote.
Propriedades de Convergência
Teoricamente, a SGD com momentum mantém as garantias de convergência da SGD padrão sob suposições de convexidade. Para objetivos convexos, com uma taxa de aprendizado decrescente satisfazendo as condições de Robbins-Monro, o algoritmo converge quase certamente para um mínimo global. Para objetivos não convexos, converge para um mínimo local ou ponto estacionário. O termo de momentum não altera a taxa de convergência assintótica, mas pode melhorar os fatores constantes, o que significa que frequentemente atinge uma determinada precisão em menos iterações. No entanto, escolher o coeficiente de momentum certo é crucial; um valor muito alto pode causar overshooting e divergência, enquanto um valor muito baixo reduz o benefício.
Considerações Práticas
Ao implementar SGD com momentum, vários detalhes práticos importam. O coeficiente de momentum é frequentemente definido como 0,9 por padrão, mas valores como 0,95 ou 0,99 são usados para redes muito profundas. Algumas implementações usam um cronograma de momentum que aumenta \( \mu \) durante o treinamento, começando baixo e aumentando gradualmente. Além disso, o momentum interage com recorte de gradiente: recortar gradientes antes de aplicar a atualização de momentum impede que a velocidade cresça demais, o que é importante para treinar redes recorrentes ou modelos com gradientes instáveis. No treinamento distribuído, o momentum pode ser implementado de forma síncrona ou assíncrona, com momentum síncrono sendo mais comum para reprodutibilidade.
Contexto Histórico
O conceito de momentum na otimização precede o aprendizado profundo. Na década de 1960, Bernard Widrow e Ted Hoff desenvolveram o filtro de mínimos quadrados médios, que usava uma forma de momentum em suas atualizações. A formulação moderna para redes neurais é frequentemente creditada ao trabalho de Geoffrey Hinton de 1986, onde ele descreveu o 'método de momentum' como uma forma de acelerar a retropropagação. Desde então, tornou-se um item básico em bibliotecas de aprendizado de máquina, com implementações em scikit-learn, TensorFlow e PyTorch. Sua simplicidade e eficácia garantiram sua relevância contínua apesar da proliferação de otimizadores mais complexos.