O gradiente descendente é um algoritmo de otimização que costuma ser usado para treinar modelos de aprendizado de máquina e redes neurais. Ele treina modelos de aprendizado de máquina minimizando os erros entre os resultados previstos e os reais.
Os dados de treinamento ajudam esses modelos a aprender com o tempo, e a função de custo na gradiente descendente atua especificamente como um barômetro, medindo sua precisão a cada iteração de atualizações de parâmetros. Até que a função esteja próxima ou igual a zero, o modelo continuará ajustando seus parâmetros para produzir o menor erro possível. Quando os modelos de aprendizado de máquina são otimizados quanto à precisão, eles podem ser ferramentas poderosas para aplicações de inteligência artificial (IA) e ciência da computação.
Leia por que a IBM foi escolhida como líder no relatório Gartner Magic Quadrant™ de 2023 em serviços de desenvolvedor de IA em nuvem.
Cadastre-se para receber o e-book no Presto
Antes de nos aprofundarmos no gradiente descendente, pode ser útil revisar alguns conceitos de regressão linear. Você deve se lembrar da seguinte fórmula para a inclinação de uma linha, que é y = mx + b, em que m representa a inclinação e b é a interceptação no eixo y.
Você também deve se lembrar de ter traçado um gráfico de dispersão em estatística e encontrado a linha de melhor ajuste, o que exigiu o cálculo do erro entre a saída real e a saída prevista (y-hat) usando a fórmula de erro quadrático médio. O algoritmo do gradiente descendente se comporta de maneira semelhante, mas é baseado em uma função convexa.
O ponto de partida é apenas um ponto arbitrário para avaliarmos o desempenho. A partir desse ponto de partida, encontraremos a derivada (ou inclinação) e, a partir daí, podemos usar uma linha tangente para observar o nível da inclinação. A inclinação informará as atualizações dos parâmetros, ou seja, os pesos e a tendência. A inclinação no ponto de partida será mais íngreme, mas à medida que novos parâmetros são gerados, a inclinação deve reduzir gradualmente até atingir o ponto mais baixo da curva, conhecido como ponto de convergência.
Similar ao processo de encontrar a linha de melhor ajuste na regressão linear, o objetivo do gradiente descendente é minimizar a função de custo ou o erro entre o y previsto e o y real. Para fazer isso, são necessários dois pontos de dados: uma direção e uma taxa de aprendizado. Esses fatores determinam os cálculos das derivadas parciais das iterações futuras, o que permite alcançar gradualmente o mínimo local ou global (ou seja, o ponto de convergência).
Existem três tipos de algoritmos de aprendizagem de gradiente descendente: gradiente descendente em lote, gradiente descendente estocástico e gradiente descendente em minilote.
O gradiente descendente em lote soma o erro de cada ponto em um conjunto de treinamento, atualizando o modelo somente depois que todos os exemplos de treinamento tiverem sido avaliados. Esse processo é conhecido como época de treinamento.
Embora esse agrupamento em lote proporcione eficiência computacional, ele ainda pode ter um longo tempo de processamento para grandes conjuntos de dados de treinamento, pois ainda precisa armazenar todos os dados na memória. O gradiente descendente em lote também costuma produzir um gradiente de erro estável e uma convergência, mas às vezes esse ponto de convergência não é o mais ideal, encontrando o mínimo local em vez do global.
O gradiente descendente estocástico (SGD) executa uma época de treinamento para cada exemplo dentro do conjunto de dados e atualiza os parâmetros de cada exemplo de treinamento, um de cada vez. Como você só precisa manter um exemplo de treinamento, eles são mais fáceis de armazenar na memória. Embora essas atualizações frequentes possam oferecer mais detalhes e velocidade, elas podem resultar em perdas na eficiência computacional quando comparadas ao gradiente descendente em lote. Suas atualizações frequentes podem resultar em gradientes ruidosos, mas isso também pode ser útil para escapar do mínimo local e encontrar o global.
O gradiente descendente em minilote combina conceitos do gradiente descendente em lote e do gradiente descendente estocástico. Ele divide o conjunto de dados de treinamento em lotes pequenos e executa atualizações em cada um desses lotes. Esta abordagem busca um equilíbrio entre a eficiência computacional do gradiente descendente em lote e a velocidade do gradiente descendente estocástico.
Embora o gradiente descendente seja a abordagem mais comum para os problemas de otimização, ela tem seus próprios desafios. Alguns deles incluem:
Para problemas convexos, o gradiente descendente pode encontrar o mínimo global com facilidade, mas à medida que surgem problemas não convexos, o gradiente descendente pode ter dificuldade para encontrar o mínimo global, onde o modelo obtém os melhores resultados.
Lembre-se de que quando a inclinação da função de custo é igual ou próxima de zero, o modelo para de aprender. Alguns cenários além do mínimo global também podem produzir esta inclinação, que são os mínimos locais e os pontos de sela. Os mínimos locais imitam a forma de um mínimo global, onde a inclinação da função de custo aumenta em ambos os lados do ponto atual. Porém, com pontos de sela, o gradiente negativo existe apenas em um lado do ponto, atingindo um máximo local de um lado e um mínimo local do outro. Seu nome é inspirado na sela de um cavalo.
Os gradientes ruidosos podem ajudar o gradiente a escapar dos mínimos locais e dos pontos de sela.
Em redes neurais mais profundas, em particular nas redes neurais recorrentes, também podemos encontrar outros dois problemas quando o modelo é treinado com gradiente descendente e retropropagação.
Desde os fluxos de trabalho de negócios até as operações de TI, nós temos você coberto com automação alimentada por IA.Descubra como as empresas líderes estão se transformando.
A IBM Research propõe um algoritmo de gradiente descendente estocástico distribuído e com sincronia em massa que permite a agregação esparsa de gradientes de aprendizes individuais.
Implemente decision trees impulsionadas por gradiente usando o algoritmo XGBoost para executar uma tarefa de classificação.