Qual é a diferença entre Gradient Descent e Stochastic Gradient Descent?

Qual é a diferença entre Gradient Descent e Stochastic Gradient Descent?

Não estou muito familiarizado com eles, você pode descrever a diferença com um pequeno exemplo?

Resposta

Para uma explicação rápida e simples:

Na descida gradiente (GD) e na descida gradiente estocástica (SGD), você atualiza um conjunto de parâmetros de maneira iterativa para minimizar uma função de erro.

Enquanto no GD, você tem que executar TODOS os exemplos em seu conjunto de treinamento para fazer uma única atualização para um parâmetro em uma iteração particular, no SGD, por outro lado, você usa APENAS UM ou SUBSET de amostra de treinamento de seu conjunto de treinamento para fazer a atualização de um parâmetro em uma iteração específica. Se você usar SUBSET, ele é chamado de Minibatch Stochastic gradient Descent.

Assim, se o número de amostras de treinamento for grande, na verdade muito grande, o uso de gradiente de descida pode demorar muito porque em cada iteração quando você estão atualizando os valores dos parâmetros, você está executando o conjunto de treinamento completo. Por outro lado, usar SGD será mais rápido porque você usa apenas uma amostra de treinamento e começa a se aprimorar logo na primeira amostra.

SGD frequentemente converge muito mais rápido em comparação com GD, mas a função de erro não é tão bem minimizado como no caso do GD. Freqüentemente, na maioria dos casos, a aproximação que você obtém no SGD para os valores dos parâmetros é suficiente porque eles atingem os valores ideais e continuam oscilando lá.

Se você precisar de um exemplo disso com um caso prático, verifique As notas de Andrew NG aqui, nas quais ele mostra claramente as etapas envolvidas em ambos os casos. cs229-notes

Fonte: Tópico do Quora

Comentários

  • obrigado, Resumidamente assim? Existem três variantes do Gradiente de descida: lote, estocástico e minibatch: o lote atualiza os pesos depois que todas as amostras de treinamento foram avaliadas. Estocástico, os pesos são atualizados após cada amostra de treinamento. O minibatch combina o melhor dos dois mundos. Não usamos o conjunto de dados completo, mas não usamos o único ponto de dados. Usamos um conjunto de dados selecionado aleatoriamente de nosso conjunto de dados. Dessa forma, reduzimos o custo de cálculo e alcançamos uma variação menor do que a versão estocástica.
  • Observe que o link acima para cs229-notes está desativado. No entanto, Wayback Machine, alinhado com a data da postagem, entrega – yay! web.archive.org/web/20180618211933/http://cs229.stanford.edu/…

Resposta

A inclusão da palavra estocástico simplesmente significa que as amostras aleatórias dos dados de treinamento são escolhidas em cada execução para atualizar o parâmetro durante a otimização, dentro da estrutura de gradiente descendente .

Fazer isso não apenas calculou os erros e atualizou os pesos em iterações mais rápidas (porque processamos apenas uma pequena seleção de amostras de uma vez), mas também muitas vezes ajuda a avançar para um ótimo mais rapidamente. Dê uma nas respostas aqui , para obter mais informações sobre por que usar minibatches estocásticos para treinamento oferece vantagens.

Uma talvez desvantagem é que o caminho para o ótimo (assumindo que seria sempre o mesmo ótimo) pode ser muito mais barulhento. Então, em vez de uma bela curva de perda suave, mostrando como o erro diminui em cada iteração de descida do gradiente, você pode ver algo como isto:

curva de perda ruidosa

Vemos claramente a perda diminuindo ao longo do tempo, no entanto, há grandes variações de uma época para outra (lote de treinamento para lote de treinamento), então a curva é ruidosa.

Isso ocorre simplesmente porque calculamos o erro médio sobre nosso subconjunto selecionado estocasticamente / aleatoriamente, de todo o conjunto de dados, em cada iteração. Algumas amostras produzirão um erro alto, outras baixo. Portanto, a média pode variar, dependendo de quais amostras usamos aleatoriamente para uma iteração de gradiente descendente.

Comentários

  • obrigado, Resumidamente assim? Existem três variantes do Gradient Descent: Batch, Stochastic e Minibatch: Batch atualiza os pesos após todas as amostras de treinamento terem sido avaliadas. Estocástico, os pesos são atualizados após cada amostra de treinamento. O Minibatch combina o melhor dos dois mundos. Não usamos o conjunto de dados completo, mas não usamos o ponto de dados único. Usamos um conjunto de dados selecionado aleatoriamente de nosso conjunto de dados. Dessa forma, reduzimos o custo de cálculo e obtemos uma variância menor do que a versão estocástica.
  • Eu ‘ d dizer que há lote, onde um lote é todo o conjunto de treinamento (basicamente uma época), então há minilote, onde um subconjunto é usado (então qualquer número menor que o conjunto inteiro $ N $) – este subconjunto é escolhido aleatoriamente, então é estocástico. Usar uma única amostra seria referido como aprendizagem online e é um subconjunto de minilote … Ou simplesmente minilote com n=1.
  • tks, isso está claro!

Resposta

Em gradiente descendente ou em gradiente descendente em lote , usamos todos os dados de treinamento por época, ao passo que, em Stochastic Gradient Descent, usamos apenas um único exemplo de treinamento por época e o minilote Gradient Descent fica entre esses dois extremos, no qual podemos usar um minilote (pequena porção ) de dados de treinamento por época, a regra de ouro para selecionar o tamanho do minilote é uma potência de 2, como 32, 64, 128 etc.
Para obter mais detalhes: notas de aula do cs231n

Comentários

  • obrigado, resumidamente gostou deste? Existem três variantes do Gradient Descent: Batch, Stochastic e Minibatch: Batch atualiza os pesos após todas as amostras de treinamento terem sido avaliadas. Estocástico, os pesos são atualizados após cada amostra de treinamento. O Minibatch combina o melhor dos dois mundos. Não usamos o conjunto de dados completo, mas não usamos o ponto de dados único. Usamos um conjunto de dados selecionado aleatoriamente de nosso conjunto de dados. Dessa forma, reduzimos o custo de cálculo e obtemos uma variação menor do que a versão estocástica.

Resposta

Gradiente descendente é um algoritmo para minimizar o $ J (\ Theta) $ !

Ideia: Para o valor atual de teta, calcule o $ J (\ Theta) $ , então dê um pequeno passo na direção do gradiente negativo. Repita.

Gradient_Descent

Atualizar equação = UpdateEqn

Algoritmo:

while True: theta_grad = evaluate_gradient(J,corpus,theta) theta = theta - alpha * theta_grad 

Mas o problema é que $ J (\ Theta) $ é a função de todos os corpus no Windows, então é muito caro para calcular.

Descida do gradiente estocástico amostrar repetidamente a janela e atualizar após cada uma

Algoritmo de descida do gradiente estocástico:

while True: window = sample_window(corpus) theta_grad = evaluate_gradient(J,window,theta) theta = theta - alpha * theta_grad 

Normalmente, o tamanho da janela de amostra é a potência de 2, digamos, 32, 64 como minilote.

Resposta

Ambos os algoritmos são bastante semelhantes. A única diferença vem durante a iteração. No Gradient Descent, consideramos todos os pontos no cálculo da perda e derivada, enquanto no Stochastic gradiente descendente, usamos um único ponto na função de perda e sua derivada aleatoriamente. Confira esses dois artigos, ambos inter-relacionados e bem explicados. Espero que ajude.

  1. Algoritmo de gradiente descendente

  2. Descida do gradiente estocástico .

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *