O tamanho do lote define o número de amostras que serão propagadas pela rede.
Por exemplo, digamos que você tenha 1050 amostras de treinamento e deseje configurar um valor batch_size
igual a 100. O algoritmo coleta as 100 primeiras amostras (de 1 a 100) do conjunto de dados de treinamento e treina a rede. Em seguida, pega as segundas 100 amostras (de 101 a 200) e treina a rede novamente. Podemos continuar executando esse procedimento até que tenhamos propagado todas as amostras através da rede. Problema pode acontecer com o último conjunto de amostras. Em nosso exemplo, usamos 1050, que não é divisível por 100 sem o restante. A solução mais simples é obter as 50 amostras finais e treinar a rede.
Vantagens de usar um tamanho de lote <número de todas as amostras:
Requer menos memória. Como você treina a rede usando menos amostras, o procedimento geral de treinamento exige menos memória. Isso é especialmente importante se você não conseguir caber todo o conjunto de dados na memória da sua máquina.
Normalmente, as redes treinam mais rápido com mini-lotes. Isso ocorre porque atualizamos os pesos após cada propagação. No nosso exemplo, propagamos 11 lotes (10 deles tinham 100 amostras e 1 com 50 amostras) e, após cada um deles, atualizamos os parâmetros da nossa rede. Se usássemos todas as amostras durante a propagação, faríamos apenas 1 atualização para o parâmetro da rede.
Desvantagens do uso de um tamanho de lote <número de todas as amostras:
- Quanto menor o lote, menos precisa será a estimativa do gradiente. Na figura abaixo, você pode ver que a direção do gradiente de mini lote (cor verde) flutua muito mais em comparação com a direção do gradiente de lote completo (cor azul).
O estocástico é apenas um minilote com batch_size
igual a 1. Nesse caso, o gradiente muda de direção ainda mais frequentemente do que um gradiente de minilote.