Suponha que temos algum conjunto de treinamento $ (x _ {(i)}, y _ {(i)}) $ para $ i = 1, \ dots, m $ . Suponha também que executamos algum tipo de algoritmo de aprendizado supervisionado no conjunto de treinamento. As hipóteses são representadas como $ h _ {\ theta} (x _ {(i)}) = \ theta_0 + \ theta_ {1} x _ {(i) 1} + \ cdots + \ theta_ { n} x _ {(i) n} $ . Precisamos encontrar os parâmetros $ \ mathbf {\ theta} $ que minimizam a “distância” entre $ y _ {(i )} $ e $ h _ {\ theta} (x _ {(i)}) $ . Seja $$ J (\ theta) = \ frac {1} {2} \ sum_ {i = 1} ^ {m} (y _ {(i)} – h _ {\ theta } (x _ {(i)}) ^ {2} $$
Então, queremos encontrar $ \ theta $ que minimiza $ J (\ theta) $ . Na descida gradiente, inicializamos cada parâmetro e realizamos a seguinte atualização: $$ \ theta_j : = \ theta_j- \ alpha \ frac {\ partial} {\ partial \ theta_ {j}} J (\ theta) $$
Qual é a principal diferença entre a descida do gradiente em lote e a descida do gradiente estocástico?
Ambos usam a regra de atualização acima. Mas um é melhor do que o outro?
Resposta
A aplicabilidade do lote ou da descida gradiente estocástica realmente depende da variedade de erros esperada.
A descida do gradiente em lote calcula o gradiente usando todo o conjunto de dados. Isso é ótimo para variedades de erro convexas ou relativamente suaves. Nesse caso, movemos um pouco chapéu diretamente para uma solução ideal, local ou global. Além disso, a descida do gradiente em lote, dada uma taxa de aprendizagem recozida, acabará por encontrar o mínimo localizado em sua bacia de atração.
A descida do gradiente estocástico (SGD) calcula o gradiente usando uma única amostra. A maioria das aplicações de SGD realmente usa um minibatch de várias amostras, por motivos que serão explicados um pouco mais tarde. SGD funciona bem (não bem, eu suponho, mas melhor do que a descida de gradiente em lote) para variedades de erro que têm muitos máximos / mínimos locais. caso, o gradiente um pouco mais barulhento calculado usando o número reduzido de amostras tende a empurrar o modelo dos mínimos locais para uma região que esperançosamente é mais ideal. Amostras únicas são realmente ruidosas, enquanto os minibatches tendem a tirar a média de um pouco do ruído. , a quantidade de solavanco é reduzida ao usar minibatches. Um bom equilíbrio é alcançado quando o tamanho do minibatch é pequeno o suficiente para evitar alguns dos mínimos locais ruins, mas grande o suficiente para não evitar os mínimos globais ou de melhor desempenho l ocal minima. (Incidentemente, isso assume que os melhores mínimos têm uma bacia de atração maior e mais profunda e, portanto, são mais fáceis de cair.)
Um benefício do SGD é que ele é computacionalmente muito mais rápido. Grande os conjuntos de dados frequentemente não podem ser mantidos na RAM, o que torna a vetorização muito menos eficiente. Em vez disso, cada amostra ou lote de amostras deve ser carregado, trabalhado, os resultados armazenados e assim por diante. O Minibatch SGD, por outro lado, geralmente é intencionalmente reduzido o suficiente para ser computacionalmente tratável.
Normalmente, essa vantagem computacional é aproveitada pela realização de muito mais iterações de SGD, fazendo muito mais etapas do que a descida gradiente de lote convencional . Isso geralmente resulta em um modelo muito próximo ao que seria encontrado por meio de descida de gradiente em lote, ou melhor.
A maneira que gosto de pensar em como o SGD funciona é imaginar que tenho um ponto que representa minha distribuição de entrada. Meu modelo está tentando aprender essa distribuição de entrada. Ao redor da distribuição de entrada está uma área sombreada que representa as distribuições de entrada de todos os minibatches possíveis que eu poderia amostrar. É geralmente uma suposição justa que as distribuições de entrada de minibatch estão próximas da distribuição de entrada verdadeira. A descida do gradiente de lote, em todas as etapas, toma a rota mais íngreme para alcançar a distribuição de entrada verdadeira. SGD, por outro lado, escolhe um ponto aleatório dentro da área sombreada e faz o caminho mais íngreme em direção a esse ponto. A cada iteração, no entanto, ele escolhe um novo ponto. A média de todas essas etapas se aproximará da distribuição real de entrada, geralmente muito bem.
Comentários
- Na prática, ninguém usa o Batch Gradient Descent. É ‘ simplesmente muito caro em termos de computação para não tanto de um ganho. (O ganho é que você ‘ está realmente diminuindo o ” true ” gradiente.) Quando você tem uma função de perda altamente não convexa, você só precisa avançar principalmente na direção certa e você ‘ eventualmente convergirá para n um mínimo local. Assim, minibatch SGD.
- @Jason_L_Bens você tem alguma referência (artigos ou textos online) onde eu possa ler mais sobre esses algoritmos?
- @ user110320 Não logo de cara, não, embora eles ‘ são algoritmos muito comuns e, portanto, deve haver uma tonelada de recursos disponíveis sobre o tópico com um pouco de pesquisa. Se você ‘ está procurando uma abordagem geral, eu ‘ d recomendo a leitura de Yoshua Bengio ‘ s Learning Deep Architectures for AI. É ‘ onde comecei.
Resposta
Como outra resposta sugere, o principal motivo para usar SGD é reduzir o custo de computação do gradiente, mantendo em grande parte a direção do gradiente quando calculada a média de muitos minilotes ou amostras – isso certamente ajuda a trazer você aos mínimos locais.
- Por que o minibatch funciona .
A matemática por trás disso é que, o ” true ” gradiente da função de custo (o gradiente para o erro de generalização ou para o conjunto de amostras infinitamente grandes) é a expectativa do gradiente $ g $ sobre a distribuição de geração de dados reais $ p_ {data} $ ; o gradiente real $ \ hat {g} $ calculado sobre um lote de amostras é sempre uma aproximação do gradiente verdadeiro com a distribuição de dados empíricos $ \ hat {p} _ {data} $ . $$ \ hat {g} = E _ {\ hat {p} _ {dados}} ({\ parcial J (\ theta) \ over \ parcial \ theta}) $$ A descida do gradiente em lote pode trazer a você o gradiente ” ideal ” dado todas as suas amostras de dados, não é o ” true ” gradiente. Um lote menor (ou seja, um minibatch) provavelmente não é tão ideal quanto o lote completo, mas ambos são aproximações – assim como o minibatch de amostra única (SGD).
Presumindo que não haja dependência entre os $ m $ amostras em um minibatch, o $ \ hat {g} (m) $ calculado é um imparcial estimativa do gradiente verdadeiro. Os erros padrão (quadrados) das estimativas com diferentes tamanhos de minibatch são inversamente proporcionais aos tamanhos do minibatch. Ou seja, $$ {SE ({\ hat {g} (n)}) \ over SE ({\ hat {g} (m)})} = {\ sqrt { m \ over n}} $$ Ou seja, a redução do erro padrão é a raiz quadrada do aumento do tamanho da amostra. Isso significa que, se o tamanho do minibatch for pequeno, a taxa de aprendizado também deve ser pequena, a fim de obter estabilidade sobre a grande variação. Quando as amostras não são independentes, a propriedade da estimativa imparcial não é mais mantida. Isso exige que você embaralhe as amostras antes do treinamento, se as amostras não forem sequenciadas aleatoriamente o suficiente.
- Por que o minibatch trabalhe melhor .
Em primeiro lugar, o minibatch torna alguns problemas de aprendizagem de tecnicamente intratáveis para tratáveis devido à demanda de computação reduzida com tamanho de lote menor.
Em segundo lugar, o tamanho reduzido do lote não significa necessariamente uma precisão reduzida do gradiente. Muitos dos exemplos de treinamento têm muitos ruídos, valores discrepantes ou preconceitos. Um minibatch amostrado aleatoriamente pode refletir a distribuição de geração de dados reais melhor (ou não pior) do que o lote completo original. Se algumas iterações das atualizações de gradiente de minibatch fornecem uma estimativa melhor, em geral o resultado médio de uma época pode ser melhor do que o gradiente calculado de um lote completo.
Em terceiro lugar, o minibatch não ajuda apenas a lidar com problemas desagradáveis amostras de dados, mas também ajudam a lidar com a função de custo desagradável que tem muitos mínimos locais. Como Jason_L_Bens menciona, às vezes as variedades de erro podem ser mais fáceis de capturar um gradiente regular em um mínimo local, enquanto mais difícil de capturar o gradiente aleatório temporariamente calculado com minibatch.
Finalmente, com gradiente descendente, você não atingindo os mínimos globais em uma etapa, mas iterando no coletor de erro. Em grande parte, o gradiente fornece apenas a direção para iterar. Com o minibatch, você pode iterar muito mais rápido. Em muitos casos, quanto mais iterações, melhor ponto você pode chegar. Você realmente não se importa com o clima, se o ponto é ideal globalmente ou mesmo localmente. Você apenas deseja chegar a um modelo razoável que apresente um erro de generalização aceitável. O Minibatch torna isso mais fácil.
Você pode encontrar o livro ” Aprendizado profundo ” de Ian Goodfellow, et al, tem discussões muito boas sobre este tópico se você lê-lo com atenção.
Comentários
- Para problemas de otimização convexa, o que você disse está correto.Mas para usar métodos de gradiente em funções não convexas, você perdeu um motivo muito crítico de que SGD é melhor do que GD em lote. Veja minha resposta datascience.stackexchange.com/questions/16807/…
- @horaceT Obrigado por seu comentário. Como o ponto que você mencionou foi descrito por Jason_L_Bens acima com detalhes, não me preocupei em repetir, mas referindo sua resposta no último terceiro parágrafo, com o devido respeito. Para o problema de otimização de gradiente descendente, o não convexo é refletido pelos mínimos locais, incluindo o ponto de sela (consulte o último terceiro parágrafo); e para fins de descrição, minha resposta descreve SGD como minibatch, mas com um tamanho de lote de 1 (consulte o terceiro parágrafo).
- Por que você disse virtualmente em * finalmente em uma época, você está virtualmente computando a média dos gradientes com base em todas as amostras fornecidas. *? Não ‘ você acha que esta afirmação está errada devido à atualização dos pesos em cada etapa?
- @Media Você está certo. Eu ‘ removi o último parágrafo. Obrigado.
Resposta
Para mim, o gradiente de lote se assemelha ao gradiente enxuto. No gradiente enxuto, o tamanho do lote é escolhido de forma que cada parâmetro que deve ser atualizado também varie de forma independente, mas não necessariamente ortogonalmente, no lote. Por exemplo, se o lote contém 10 experimentos, 10 linhas, então é possível formar $ 2 ^ {10-1} = 512 $ colunas independentes. 10 linhas permitem a atualização independente, mas não ortogonal, de 512 parâmetros.