toco O que é descida de gradiente? - Unite.AI
Entre em contato
Masterclass de IA:

AI 101

O que é descida de gradiente?

mm
Atualização do on

O que é uma descida de gradiente?

Se você leu sobre como as redes neurais são treinadas, é quase certo que já se deparou com o termo “gradiente descendente” antes. Gradiente descendente é o principal método de otimizar o desempenho de uma rede neural, reduzindo a taxa de perdas/erros da rede. No entanto, a descida gradiente pode ser um pouco difícil de entender para aqueles que são novos no aprendizado de máquina, e este artigo se esforçará para fornecer uma intuição decente sobre como funciona a descida gradiente.

A descida do gradiente é um algoritmo de otimização. É usado para melhorar o desempenho de uma rede neural fazendo ajustes nos parâmetros da rede de forma que a diferença entre as previsões da rede e os valores reais/esperados da rede (referidos como perda) seja a menor possível. A descida do gradiente pega os valores iniciais dos parâmetros e usa operações baseadas em cálculo para ajustar seus valores aos valores que tornarão a rede o mais precisa possível. Você não precisa saber muito de cálculo para entender como funciona a descida de gradiente, mas precisa ter uma compreensão de gradientes.

O que são gradientes?

Suponha que haja um gráfico que represente a quantidade de erros que uma rede neural comete. A parte inferior do gráfico representa os pontos de menor erro, enquanto a parte superior do gráfico é onde o erro é maior. Queremos ir do topo do gráfico para baixo. Um gradiente é apenas uma forma de quantificar a relação entre o erro e os pesos da rede neural. A relação entre essas duas coisas pode ser representado graficamente como uma inclinação, com pesos incorretos produzindo mais erros. A inclinação da inclinação/gradiente representa a rapidez com que o modelo está aprendendo.

Uma inclinação mais acentuada significa que grandes reduções no erro estão sendo feitas e o modelo está aprendendo rapidamente, enquanto se a inclinação for zero, o modelo está em um platô e não está aprendendo. Podemos descer a inclinação para menos erro calculando um gradiente, uma direção de movimento (mudança nos parâmetros da rede) para o nosso modelo.

Vamos mudar um pouco a metáfora e imaginar uma série de colinas e vales. Queremos chegar ao sopé da colina e encontrar a parte do vale que representa a menor perda. Quando começamos no topo da colina, podemos dar grandes passos descendo a colina e ter a certeza de que estamos indo em direção ao ponto mais baixo do vale.

No entanto, à medida que nos aproximamos do ponto mais baixo do vale, nossos passos precisarão se tornar menores, ou então poderemos ultrapassar o verdadeiro ponto mais baixo. Da mesma forma, é possível que, ao ajustar os pesos da rede, os ajustes possam realmente afastá-la do ponto de menor perda e, portanto, os ajustes devem diminuir com o tempo. No contexto de descer uma colina em direção a um ponto de menor perda, o gradiente é um vetor/instruções detalhando o caminho que devemos seguir e o tamanho de nossos passos.

Agora que sabemos que gradientes são instruções que nos dizem em qual direção mover (quais coeficientes devem ser atualizados) e quão grandes são os passos que devemos dar (quanto os coeficientes devem ser atualizados), podemos explorar como o gradiente é calculado.

Calculando gradientes e descida de gradiente

A descida do gradiente começa em um local de alta perda e, por meio de várias iterações, avança na direção da menor perda, visando encontrar a configuração de peso ideal. Foto: Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Para realizar a descida do gradiente, os gradientes devem primeiro ser calculados. Em ordem para calcular o gradiente, precisamos conhecer a função perda/custo. Usaremos a função de custo para determinar a derivada. Em cálculo, a derivada refere-se apenas à inclinação de uma função em um determinado ponto, então estamos basicamente calculando a inclinação da colina com base em a função de perda. Determinamos a perda executando os coeficientes através da função de perda. Se representarmos a função de perda como “f”, podemos afirmar que a equação para calcular a perda é a seguinte (estamos apenas executando os coeficientes por meio de nossa função de custo escolhida):

Perda = f(coeficiente)

Em seguida, calculamos a derivada ou determinamos a inclinação. Obter a derivada da perda nos dirá qual direção é para cima ou para baixo na inclinação, dando-nos o sinal apropriado para ajustar nossos coeficientes. Representaremos a direção apropriada como “delta”.

delta = função_derivativa(perda)

Agora determinamos qual direção é descendente em direção ao ponto de menor perda. Isso significa que podemos atualizar os coeficientes nos parâmetros da rede neural e, com sorte, reduzir a perda. Atualizaremos os coeficientes com base nos coeficientes anteriores menos a alteração apropriada no valor conforme determinado pela direção (delta) e um argumento que controla a magnitude da alteração (o tamanho do nosso passo). O argumento que controla o tamanho da atualização é chamado de “taxa de Aprendizagem” e vamos representá-lo como “alfa”.

coeficiente = coeficiente – (alfa * delta)

Em seguida, apenas repetimos esse processo até que a rede tenha convergido em torno do ponto de menor perda, que deve ser próximo de zero.

É muito importante escolher o valor certo para a taxa de aprendizado (alfa). A taxa de aprendizado escolhida não deve ser nem muito pequena nem muito grande. Lembre-se de que, à medida que nos aproximamos do ponto de menor perda, nossos passos devem se tornar menores ou então ultrapassaremos o verdadeiro ponto de menor perda e acabaremos do outro lado. O ponto de menor perda é pequeno e se nossa taxa de variação for muito grande o erro pode acabar aumentando novamente. Se os tamanhos dos passos forem muito grandes, o desempenho da rede continuará oscilando em torno do ponto de menor perda, ultrapassando-o de um lado e depois do outro. Se isso acontecer, a rede nunca convergirá para a verdadeira configuração de peso ideal.

Em contraste, se a taxa de aprendizado for muito pequena, a rede pode levar um tempo extraordinariamente longo para convergir para os pesos ideais.

Tipos de gradiente descendente

Agora que entendemos como o gradiente descendente funciona em geral, vamos dar uma olhada em alguns dos diferentes tipos de gradiente descendente.

Batch Gradient Descent: Esta forma de gradiente descendente percorre todas as amostras de treinamento antes de atualizar os coeficientes. Esse tipo de descida de gradiente provavelmente é a forma computacionalmente mais eficiente de descida de gradiente, pois os pesos são atualizados apenas quando todo o lote é processado, o que significa que há menos atualizações no total. No entanto, se o conjunto de dados contiver um grande número de exemplos de treinamento, a descida do gradiente em lote poderá fazer com que o treinamento demore muito.

Descida de Gradiente Estocástico: Na Descida de Gradiente Estocástico, apenas um único exemplo de treinamento é processado para cada iteração de descida de gradiente e atualização de parâmetro. Isso ocorre para cada exemplo de treinamento. Como apenas um exemplo de treinamento é processado antes que os parâmetros sejam atualizados, ele tende a convergir mais rapidamente do que o Batch Gradient Descent, pois as atualizações são feitas antes. No entanto, como o processo deve ser executado em todos os itens do conjunto de treinamento, pode levar muito tempo para ser concluído se o conjunto de dados for grande e, portanto, use um dos outros tipos de descida de gradiente, se preferir.

Mini-Batch Gradient Descent: Mini-Batch Gradient Descent opera dividindo todo o conjunto de dados de treinamento em subseções. Ele cria mini-lotes menores que são executados pela rede e, quando o mini-lote é usado para calcular o erro, os coeficientes são atualizados. A Descida Gradiente Mini-lote atinge um meio termo entre a Descida Gradiente Estocástica e a Descida Gradiente Batch. O modelo é atualizado com mais frequência do que no caso do Batch Gradient Descent, o que significa uma convergência ligeiramente mais rápida e robusta nos parâmetros ideais do modelo. Também é mais eficiente computacionalmente do que a descida de gradiente estocástica

Blogueiro e programador com especialidades em Machine Learning e Aprendizagem profunda tópicos. Daniel espera ajudar outras pessoas a usar o poder da IA ​​para o bem social.