A aplicabilidade da descida em lote ou gradiente estocástico realmente depende do coletor de erros esperado.
A descida do gradiente em lote calcula o gradiente usando o conjunto de dados inteiro. Isso é ótimo para coletores de erros convexos ou relativamente suaves. Nesse caso, avançamos um pouco diretamente em direção a uma solução ótima, local ou global. Além disso, a descida do gradiente em lote, dada uma taxa de aprendizado recozido, 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 do SGD realmente usa um minibatch de várias amostras, por razões que serão explicadas um pouco mais tarde. O SGD funciona bem (suponho que não seja bom, mas melhor que a descida do gradiente em lote) para manifolds de erro que possuem muitos máximos / mínimos locais. Nesse caso, o gradiente um tanto mais ruidoso calculado usando o número reduzido de amostras tende a empurrar o modelo dos mínimos locais para uma região que, esperamos, seja mais ideal. Amostras únicas são realmente barulhentas, enquanto minibatches tendem a calcular um pouco a média do ruído emitido. Assim, a quantidade de empurrão é 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 pobres, mas grande o suficiente para que não t evitar os mínimos globais ou mínimos locais com melhor desempenho. (Incidentalmente, isso pressupõe que os melhores mínimos possuam 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. Geralmente, grandes conjuntos de dados 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, com os resultados armazenados e assim por diante. O Minibatch SGD, por outro lado, geralmente é intencionalmente pequeno o suficiente para ser computacionalmente tratável.
Geralmente, essa vantagem computacional é aproveitada pela realização de muito mais iterações do SGD, executando muito mais etapas do que a descida do gradiente em lote convencional. Isso geralmente resulta em um modelo muito próximo ao encontrado por descida em gradiente de lote ou melhor.
A maneira como 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 há uma área sombreada que representa as distribuições de entrada de todos os minibatches possíveis que eu poderia provar. Geralmente, é uma suposição razoável de que as distribuições de entrada de minibatch estão próximas da verdadeira distribuição de entrada. A descida do gradiente de lote, em todas as etapas, segue a rota mais íngreme para alcançar a verdadeira distribuição de entrada. O SGD, por outro lado, escolhe um ponto aleatório dentro da área sombreada e segue a rota mais íngreme em direção a esse ponto. Em cada iteração, porém, ele escolhe um novo ponto. A média de todas essas etapas aproximará a verdadeira distribuição de entrada, geralmente muito bem.
Como outra resposta sugere, o principal motivo para usar o SGD é reduzir o custo de computação do gradiente, mantendo a direção do gradiente em grande parte, quando a média é calculada sobre muitos mini lotes ou amostras - o que certamente ajuda a levá-lo aos mínimos locais.
A matemática por trás disso é que, o gradiente "verdadeiro" da função de custo (o gradiente para o erro de generalização ou para amostras infinitamente grandes configuradas) é a expectativa do gradiente sobre os dados verdadeiros que geram a distribuição ; o gradiente real calculado sobre um lote de amostras é sempre uma aproximação ao gradiente real com a distribuição empírica de dados .pdata p^data
Em primeiro lugar, o minibatch faz com que alguns problemas de aprendizado sejam tecnicamente invencíveis para serem atacáveis devido à demanda reduzida de computação com menor tamanho de lote.
Em segundo lugar, o tamanho reduzido do lote não significa necessariamente precisão reduzida do gradiente. As amostras de treinamento têm muitos ruídos, outliers ou vieses. Um minibatch amostrado aleatoriamente pode refletir a verdadeira distribuição de dados melhor (ou não pior) que o lote completo original. Se algumas iterações das atualizações de gradiente de minibatch fornecerem uma estimativa melhor, em geral o resultado médio de uma época pode ser melhor do que o gradiente calculado a partir de um lote completo.
Em terceiro lugar, o minibatch não apenas ajuda a lidar com amostras de dados desagradáveis, mas também ajuda a lidar com a função de custo desagradável que possui muitos mínimos locais. Como Jason_L_Bens menciona, algumas vezes os coletores de erro podem ser mais fáceis de capturar um gradiente regular em mínimos locais, enquanto mais difícil de capturar o gradiente temporariamente aleatório calculado com minibatch.
Finalmente, com a descida gradiente, você não está alcançando os mínimos globais em uma única etapa, mas repetindo a variedade de erros. O gradiente em grande parte 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 o ponto que você pode alcançar. Você realmente não se importa em todas as condições climáticas, o ponto é ideal globalmente ou mesmo localmente. Você só deseja alcançar um modelo razoável que traga um erro de generalização aceitável. O Minibatch facilita isso.
Você pode achar que o livro "Deep learning", de Ian Goodfellow et al., Tem boas discussões sobre esse tópico, se você o ler com atenção.
fonte
Para mim, o gradiente em lote se assemelha ao gradiente lean. No gradiente lean, o tamanho do lote é escolhido para que todos os parâmetros que devem ser atualizados também variem independentemente, mas não necessariamente ortogonalmente, no lote. Por exemplo, se o lote contiver 10 experiências, 10 linhas, é possível formar colunas independentes. 10 linhas permitem a atualização independente, mas não ortogonal, de 512 parâmetros.210−1=512
fonte