Qual é o tamanho do lote na rede neural?

175

Estou usando Python Keras packagepara rede neural. Este é o link . É batch_sizeigual ao número de amostras de teste? Da Wikipedia, temos esta informação:

No entanto, em outros casos, a avaliação do gradiente de soma pode exigir avaliações dispendiosas dos gradientes de todas as funções de soma. Quando o conjunto de treinamento é enorme e não existem fórmulas simples, avaliar as somas de gradientes se torna muito caro, porque a avaliação do gradiente requer a avaliação de todos os gradientes das funções summand. Para economizar no custo computacional a cada iteração, a descida estocástica do gradiente mostra um subconjunto de funções summand a cada etapa. Isso é muito eficaz no caso de problemas de aprendizado de máquina em larga escala.

As informações acima estão descrevendo dados de teste? É o mesmo que batch_sizeem keras (número de amostras por atualização de gradiente)?

user2991243
fonte
3
É bom ver o curso class.coursera.org/ml-005/lecture/preview , especialmente para a semana 4-6 + 10. A Wikipedia pode não ser um recurso tão valioso para o aprendizado de redes neurais.
404pio 22/05/2015

Respostas:

230

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_sizeigual 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).

Instruções de gradiente para diferentes configurações de lote

O estocástico é apenas um minilote com batch_sizeigual a 1. Nesse caso, o gradiente muda de direção ainda mais frequentemente do que um gradiente de minilote.

itdxer
fonte
3
Não, não fiz. Essa é uma técnica popular em redes neurais e essa terminologia você pode ver em diferentes bibliotecas, livros e artigos. Deseja verificar o erro dos dados de teste em todas as épocas ou apenas verificar o modelo após o treinamento?
Itdxer 22/05
1
A rede também converge mais rapidamente, pois o número de atualizações é consideravelmente maior. Configurar o tamanho do mini lote é uma espécie de arte, muito pequena e você corre o risco de tornar seu aprendizado muito estocástico, mais rápido, mas convergirá para modelos não confiáveis, muito grandes e não caberão na memória e ainda levarão séculos.
Ramalho
2
Normalmente, quando as pessoas dizem que aprendem on-line, elas querem dizer batch_size=1. A idéia por trás do aprendizado on-line é que você atualize seu modelo assim que vir o exemplo. Com um tamanho de lote maior, significa que primeiro você está analisando as várias amostras antes de fazer a atualização. Em RNN, o tamanho do lote pode ter significados diferentes. Geralmente, é comum dividir a sequência de treinamento em uma janela de tamanho fixo (como 10 palavras). Nesse caso, incluir 100 dessas janelas durante o treinamento significa que você possui batch_size=100.
itdxer
1
@ Oleg Melnikov, se o seu último lote tiver tamanho significativamente menor (digamos que seria 1 em vez de 50), a estimativa para o gradiente seria menos precisa e pode estragar um pouco seus pesos. Na imagem acima, imagine que você faça 10 atualizações com um mini lote 100 (linhas verdes) e uma com mini lote 1 (linha vermelha). O que significa que, na próxima época, algumas iterações iniciais poderão começar a resolver problemas com a última atualização do mini lote 1 da época anterior.
itdxer
1
@OlegMelnikov MIT livro de aprendizagem profunda tem uma boa explicação relacionada com este problema (capítulo 8.1.3): deeplearningbook.org/contents/optimization.html
itdxer
153

Na terminologia da rede neural:

  • uma época = uma passagem para frente e uma passagem para trás de todos os exemplos de treinamento
  • tamanho do lote = o número de exemplos de treinamento em uma passagem para frente / trás. Quanto maior o tamanho do lote, mais espaço de memória será necessário.
  • número de iterações = número de passes, cada passe usando o número de exemplos [tamanho do lote]. Para ser claro, uma passagem = uma passagem para frente + uma passagem para trás (não contamos a passagem para frente e para trás como duas passagens diferentes).

Exemplo: se você tiver 1000 exemplos de treinamento e seu tamanho de lote for 500, serão necessárias duas iterações para concluir uma época.

FYI: Tamanho do lote de troca versus número de iterações para treinar uma rede neural

Franck Dernoncourt
fonte
Mas qual é a diferença entre usar números de [tamanho do lote] de exemplos e treinar a rede em cada exemplo e prosseguir com os próximos exemplos de números [tamanho do lote]. Como você passa um exemplo pela rede, aplica o SGD e segue o exemplo seguinte, não fará diferença se o tamanho do lote for 10, 1000 ou 100000. Após o número de exemplos de [tamanho do lote], o próximo exemplo de próximo lote seguirá. Só faz diferença se os números do [tamanho do lote] do exemplo passarem [número de iterações] vezes a rede e, em seguida, continuar com os próximos exemplos [do tamanho do lote].
Erhard Dinhobl
Uma distinção importante é que a etapa de aprendizado (uma etapa) é aplicada uma vez para cada lote, enquanto você precisa percorrer todos os lotes para fazer uma época. Portanto, a diferença também é algorítmica, não apenas na memória: lotes maiores significam que você calcula a média do gradiente em mais amostras.
meduz 7/09/18
Qual é a diferença entre época e iterações?
Goldname
2
A época @Goldname 1 inclui todos os exemplos de treinamento, enquanto 1 iteração inclui apenas o número [tamanho do lote] de exemplos de treinamento.
Franck Dernoncourt
3

Ao resolver com uma CPU um Problema de Otimização, você aplica Iterativamente um Algoritmo sobre alguns Dados de Entrada. Em cada uma dessas iterações, você geralmente atualiza uma métrica do seu problema executando alguns cálculos nos dados. Agora, quando o tamanho dos seus dados é grande, pode ser necessário um tempo considerável para concluir todas as iterações e consumir muitos recursos. Às vezes, você escolhe aplicar esses cálculos iterativos em uma parte dos dados para economizar tempo e recursos computacionais. Essa parte é o batch_size e o processo é chamado (no Neural Network Lingo) de processamento de dados em lote. Quando você aplica seus cálculos em todos os seus dados, realiza o processamento de dados online. Eu acho que a terminologia vem dos anos 60, e mesmo antes. Alguém se lembra do. arquivos do bat bat? Mas é claro que o conceito encarnado significa um segmento ou parte dos dados a serem usados.

pebox11
fonte
2

A documentação para Kerassobre o tamanho do lote pode ser encontrado sob a fitfunção nos Modelos (API funcional) página

batch_size: Inteiro ou Nenhum. Número de amostras por atualização de gradiente. Se não especificado, batch_size será padronizado como 32.

Se você tiver um pequeno conjunto de dados, seria melhor tornar o tamanho do lote igual ao tamanho dos dados de treinamento. Primeiro tente com um pequeno lote e depois aumente para economizar tempo. Como o itdxer mencionou, há uma troca entre precisão e velocidade.

otayeby
fonte