O gradiente descendente estocástico (frequentemente abreviado como SGD) é um método iterativo para otimizar uma função objetivo com propriedades de suavidade adequadas, como diferenciabilidade ou subdiferenciabilidade. Ele pode ser considerado uma aproximação estocástica da otimização por gradiente descendente, pois substitui o gradiente real, calculado a partir de todo o conjunto de dados, por uma estimativa deste, calculada a partir de um subconjunto selecionado aleatoriamente dos dados. Especialmente em problemas de otimização de alta dimensionalidade, isso reduz a carga computacional muito elevada, alcançando iterações mais rápidas em troca de uma taxa de convergência mais baixa. A ideia básica por trás da aproximação estocástica pode ser rastreada até o algoritmo de Robbins-Monro da década de 1950. Hoje, o gradiente descendente estocástico se tornou um método de otimização importante em aprendizado de máquina e inteligência artificial de forma mais ampla.
Contexto
Tanto a estimativa estatística quanto o aprendizado de máquina consideram o problema de minimizar uma função objetivo que tem a forma de uma soma: Q(w) = (1/n) * somatório de i=1 até n de Q_i(w), onde w que minimiza Q(w) deve ser estimado. Cada função somando Q_i está tipicamente associada à i-ésima observação no conjunto de dados usado para treinamento. Na estatística clássica, os problemas de minimização de soma surgem nos mínimos quadrados e na estimativa de máxima verossimilhança para observações independentes. A classe geral de estimadores que surgem quando se minimizam somas é chamada de estimadores M. No entanto, na estatística, é há muito reconhecido que exigir até mesmo uma minimização local é demasiado restritivo para alguns problemas de estimativa de máxima verossimilhança. Portanto, os teóricos estatísticos contemporâneos frequentemente consideram pontos estacionários da função de verossimilhança, ou zeros de sua derivada, a função escore e outras equações de estimativas.
O problema também ocorre na minimização de risco empírico. Aí, Q_i(w) é o valor da função de perda para o i-ésimo exemplo, e Q(w) é o risco empírico. Quando usado para minimizar a função acima, um método padrão (ou "em lote") de gradiente descendente realizaria iterações na forma w := w - eta nabla Q(w) = w - (eta/n) sum_{i=1}^{n} nabla Q_i(w). O tamanho do passo é denotado por eta, às vezes chamado de taxa de aprendizado em aprendizado de máquina, e o símbolo ":=" denota a atualização de uma variável no algoritmo.
Em muitos casos, as funções somando têm uma forma com número de parâmetros simples que permite avaliações baratas da função-soma e do gradiente somado. Por exemplo, em estatística, as famílias exponenciais com um parâmetro permitem avaliações econômicas da função e do gradiente. No entanto, em outros casos, avaliar o gradiente somado pode exigir avaliações caras dos gradientes de todas as funções somando. Quando o conjunto de treinamento é enorme e não existem fórmulas simples, avaliar as somas dos gradientes torna-se muito caro, pois cada gradiente requer avaliar todos os gradientes das funções somando. Para economizar nos custos computacionais a cada iteração, o gradiente descendente estocástico amostra um subconjunto das funções somando a cada passo. Isso é muito eficaz em problemas de aprendizado de máquina de grande escala.
Método Iterativo
No gradiente descendente estocástico (ou "online"), o gradiente verdadeiro de Q(w) é aproximado por um gradiente em uma única amostra: w := w - eta * nabla Q_i(w). Conforme o algoritmo percorre o conjunto de treinamento, ele executa a atualização acima para cada amostra de treinamento. Várias passagens podem ser feitas sobre o conjunto de treinamento até que o algoritmo converg. Se isso for feito, os dados podem ser embaralhados para cada passagem para evitar ciclos. Implementações típicas podem usar uma taxa de aprendizado adaptativa para que o algoritmo convenha.
Um acordo entre calcular o gradiente verdadeiro e o gradiente em uma única amostra é calcular o gradiente em relação a mais de uma amostra de treinamento, chamada de "mini-grade", em cada passo. Isso pode funcionar significativamente melhor do que o gradiente descendente estocástico "verdadeiro" descrito, porque o código pode usar bibliotecas de vetorização em vez de computar cada passo separadamente, como foi mostrado pela primeira vez no contexto do algoritmo de retropropagação no modo-agrupado. Também pode resultar em convergência mais suave, pois o gradiente computado em cada passo é a média de mais amostras de treinamento.
A convergência do gradiente descendente estocástico tem sido analisada usando teorias de minimização convexa e da aproximação estocástica. Em resumo, quando as taxas de aprendizado eta diminuem com uma taxa apropriada, e sujeito a suposições relativamente moderadas, o gradiente descendente estocástico converge quase certamente para um mínimo global quando a função objetivo é consistente com minimização convexa ou pseudoconvexa, e caso contrário converge quase certamente para um mínimo local. Isso é uma consequência do teorema de Robbins e Siegmund.
Regressão Linear
Suponhos que queremos ajustar uma linha reta y = a + bx a um conjunto de exemplos de treinamento (x_i, y_i) usando mínimos quadrados. A função objetivo é dada por soma de residuos. O gradiente descendente em lote calcularia o gradiente de Q em relação a a e b usando todos os n exemplos. O gradiente descendente estocástico, em contraste, escolhe um exemplo aleatório i e atualiza a e b usando apenas o gradiente do erro quadrado para esse exemplo: a := a - eta (-2)(y_i - (a + bx_i)), e b := b - eta (-2x_i)(y_i - (a + bx_i)). Isso é muito mais barato por iteração, especialmente quando uma é grande.
Aplicações em Aprendizado de Máquina
O gradiente descendente estocástico é a pedra angular do treinamento de redes neurais e modelos de aprendizado profundo. Nesse contexto, a função objetivo é tipicamente o logloss em risco empírico, e a função de perda mede a discrepância entre as saídas previstas e atuais. Por exemplo, em treinamento de um modelo transformer para processamento de linguagem natural, o SGD ou suas variantes são usadas para atualizar os pesos da rede com base em mini-batches de dados de texto. O método é particularmente eficaz em problemas de grande escala, tais como aqueles em modelos de linguagem amplos, onde os dados de treinamento podem consistir em bilhões de tokens.
SGD também tem sido aplicado em outros domínios, incluindo visão computacional (embora não nos slugs fornecidos, é uma aplicação comum), aprendizado por reforço, e IA generativa. Em IA generativa, modelos como as séries GPT da OpenAI e o Claude da Anthropic| são treinados usando técnicas de otimização estocástica. A escolha do otimizador, muitas vezes SGD com momento ou [[adam-optimizer|otimizador Adam, afeta significativamente a velocidade e a qualidade da convergência.
Variantes e Melhorias
Várias variantes do gradiente descendente estocástico foram desenvolvidas para resolver suas limitações, como convergência lenta e sensibilidade à taxa de aprendizado. Elas incluem variantes de SGD como momento, gradiente acelerado de Nesterov, AdaGrad, RMSProp e o otimizador Adam. Cada variante modifica a regra de atualização para melhorar as propriedades de convergência. Por exemplo, o momento adiciona uma fração da atualização anterior à atual corrente, ajudando a acelerar os gradientes na direção correta e amortecer oscilações. Adam, o nome para "Estimativa Adaptativa de Momentos", mantém taxas de aprendizado por parâmetro que são adaptadas com base nas estimativas dos primeiros e segundos momentos dos gradientes.
Outra melhoria importante é o uso de [[learning-rate-schedule|agendadores de taxa de aprendizado] agendadores, que ajustam a taxa durante o treinamento. Esses eficaz comuns encoölvem a degradação em degraу dexa, decadência exponencial e anelamento de cossenos. Estes ajudar a convergência de modo mais confiável ao reduzir o passo a medida que a otimização avança.
Outras técnicas que interagem com SGD incluem o [[gradient-clipping|recorte de gradiente] clipping, que previne gradientes explosão aumentando dos gradientes que excedem um limiar, e a normalização de camada e normalização de camada lis, que estabilizam a distribuição de entradas para cada camada, muitas vezes permitindo taxas de aprendizado maiores.
Convergência e Desafios
Embora o SGD seja computacionalmente eficiente, ele introduz variância nas estimativas de gradiente, o que pode fazer com a perda vari. A taxa de convergência do SGD é geralmente mais lenta do que a de gradiente em lote em termos de número de iterações, mas o custo por iteracão é muito menor, resultando em treinamento mais rápido em definições de definição e grande escala. A escolha do tamanho do mini-lote é um hiperparâmetro crítico: lotes menores introduzem mais ruído mas exigem menos memória, enquanto os lotes maiores fornecem gradientes mais suaves, mas podem convergir para mínimos mais agudos, o que degrada na generalização.
O SGD também pode ficar preso em pontos de sela ou mínimos locais, especialmente em problemas não convexos como aprendizado profundo. Várias estratégias, tais como reinicializar, usar momentum ou empregar taxas adaptativas, ajudam a mitigar esses problemas. Na prática, o SGD e suas variantes têm sido notavelmente bem-sucedidos no treinamento de redes profundas, alcançando resultados estado de arte-Ascend ou melhor em muitas tarefas.
Contexto Histórico
As raizes do gradiente descendente estocástico residem no algoritmo algoritmos de Robbins-Mon invenção de Herbert Robbins e Sutton Monro em 1951 para aproximação estocástica. O método foi adaptado para aprendizado de máquina em 1980, particularmente no contexto da retropropagação para redes neurais. O term "gradiente descendente estocástico" se tornou amplamente usado com o crescimento do campo de aprendizado de máquina. Hoje, é uma ferramenta fundamental de todos os praticantes de aprendizado de máquina, e ele implementado em todos os principais frameworks de aprendizado avançado, incluindo os usados por empresas como Google DeepMind, Amazon Web Services e Microsoft Azure.