Depois de um ano e meio, volto à minha resposta porque minha resposta anterior estava errada.
O tamanho do lote afeta significativamente o aprendizado. O que acontece quando você coloca um lote na rede é que calcula a média dos gradientes. O conceito é que, se o tamanho do lote for grande o suficiente, isso fornecerá uma estimativa suficientemente estável do que seria o gradiente do conjunto de dados completo. Ao coletar amostras do seu conjunto de dados, você estima o gradiente enquanto reduz significativamente o custo computacional. Quanto mais baixo você for, menos precisa será sua estimativa; no entanto, em alguns casos, esses gradientes ruidosos podem realmente ajudar a escapar dos mínimos locais. Quando está muito baixo, os pesos da sua rede podem simplesmente saltar se os dados estiverem barulhentos e eles não conseguirem aprender ou convergirem muito lentamente, afetando negativamente o tempo total de computação.
Outra vantagem do lote é o cálculo da GPU, pois as GPUs são muito boas para paralelizar os cálculos que ocorrem nas redes neurais se parte da computação for a mesma (por exemplo, multiplicação de matriz repetida na mesma matriz de peso da sua rede). Isso significa que um tamanho de lote de 16 terá menos que o dobro da quantidade de um tamanho de lote de 8.
No caso de você precisar de tamanhos de lote maiores, mas não caber em sua GPU, você pode alimentar um lote pequeno, salvar as estimativas de gradiente e alimentar um ou mais lotes e, em seguida, fazer uma atualização de peso. Dessa forma, você obtém um gradiente mais estável porque aumentou o tamanho do lote virtual.
RESPOSTA ERRADA E ANTIGA: [[[Não, o tamanho do lote, em média, influencia apenas a velocidade do seu aprendizado, não a qualidade do aprendizado. O batch_sizes também não precisa ter potências de 2, embora eu entenda que certos pacotes permitem apenas potências de 2. Você deve tentar obter seu batch_size o mais alto possível, que ainda se encaixa na memória da sua GPU para obter a velocidade máxima possível .]]]]