Qual é o tamanho do lote na rede neural?

Estou usando Python Keras package para rede neural. Este é o link . batch_size é igual ao número de amostras de teste? Na Wikipedia, temos isso informações:

No entanto, em outros casos, avaliar o gradiente de soma pode exigir avaliações caras 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 dos gradientes torna-se muito caro, porque avaliar o gradiente requer a avaliação de todos os gradientes das funções somadas. Para economizar no custo computacional em cada iteração, a descida gradiente estocástica faz a amostragem de um subconjunto de funções somadas em cada etapa. Isso é muito eficaz no caso de problemas de aprendizado de máquina em grande escala.

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

Comentários

Resposta

O tamanho do lote define o número de amostras que serão propagadas pela rede.

Por exemplo , digamos que você tenha 1.050 amostras de treinamento e deseja configurar um batch_size igual a 100. O algoritmo pega as primeiras 100 amostras (da 1ª a 100ª) do conjunto de dados de treinamento e treina a rede. Em seguida, ele pega as segundas 100 amostras (da 101ª a 200ª) e treina a rede novamente. Podemos continuar fazendo este procedimento até que tenhamos propagado todas as amostras através da rede. P roubo pode acontecer com o último conjunto de amostras. Em nosso exemplo, usamos 1050, que não é divisível por 100 sem o resto. A solução mais simples é apenas 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 requer menos memória. “é especialmente importante se você não puder colocar todo o conjunto de dados na memória de sua máquina.

  • Normalmente as redes treinam mais rápido com minilotes. Isso porque nós atualizamos os pesos após cada propagação. Em nosso exemplo, propagamos 11 lotes (10 deles tinham 100 amostras e 1 tinha 50 amostras) e após cada um deles atualizamos os parâmetros de nossa rede. Se usássemos todas as amostras durante a propagação, faríamos apenas 1 atualização para o parâmetro “s da rede.

Desvantagens de usar 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 do minilote (cor verde) flutua muito mais em comparação com a direção do gradiente do lote completo (cor azul).

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

O estocástico é apenas um minilote com batch_size igual a 1. Nesse caso, o gradiente muda sua direção com ainda mais frequência do que um gradiente de minilote.

Comentários

  • Não, eu não ‘ t. Esta é uma técnica popular em redes neurais e esta terminologia pode ser encontrada em diferentes bibliotecas, livros e artigos. Você quer verificar o erro de dados de teste em cada época ou apenas verificar o modelo após o treinamento?
  • A rede também converge mais rápido, pois o número de atualizações é consideravelmente maior. Configurar o tamanho do minilote é uma espécie de arte, muito pequeno 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á na memória e ainda levará muito tempo.
  • Isso significa que batch_size=<size of dataset> são considerados aprendizagem online, ou melhor, batch_size=1? E tudo isso permanece verdadeiro para os RNNs também? Ao usar batch_size em RNNs, o lote é considerado uma espécie de timestep virtual em que todas as instâncias desse lote serão calculadas como se ocorressem ao mesmo tempo ?
  • Normalmente, quando as pessoas dizem que aprendizagem online, eles querem dizer batch_size=1. A ideia por trás do aprendizado online é que você atualize seu modelo assim que vê o exemplo. Com um tamanho de lote maior, significa que primeiro você está examinando as várias amostras antes de fazer a atualização. Em RNN, o tamanho do lote pode ter significados diferentes.Normalmente, é ‘ comum dividir a sequência de treinamento em uma janela de tamanho fixo (como 10 palavras). Neste caso, incluir 100 dessas janelas durante o treinamento significa que você tem batch_size=100.
  • @Oleg Melnikov, se seu último lote tiver um tamanho significativamente menor (deixe ‘ s dizem que seria 1 em vez de 50) então a estimativa para o gradiente seria menos precisa e pode bagunçar um pouco seus pesos. Na imagem acima, imagine que você faça 10 atualizações com um minilote 100 (linhas verdes) e uma com minilote 1 (linha vermelha). O que significa que na próxima época, algumas primeiras iterações podem começar a resolver o problema com a última atualização do minilote 1 da época anterior.

Resposta

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 / para trás. Quanto maior o tamanho do lote, mais espaço de memória você “precisará.
  • número de iterações = número de passagens, cada passagem usando [tamanho do lote] número de exemplos. 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 o tamanho do lote for 500, serão necessárias 2 iterações para completar 1 época.

Para sua informação: Tamanho do lote de compensação versus número de iterações para treinar uma rede neural

Comentários

  • Mas qual é a diferença entre usando números de exemplos de [tamanho de lote] e treinar a rede em cada exemplo e prosseguir com os próximos exemplos de números de [tamanho de lote]. Já que você passa um exemplo pela rede e aplica SGD e pega o próximo exemplo e assim por diante, não fará diferença se o tamanho do lote é 10 ou 1000 ou 100000. Após [batc h tamanho] números de exemplos é feito o próximo exemplo do próximo lote seguirá. Só faz diferença se os números de [tamanho do lote] do exemplo passarem [número de iterações] vezes a rede e, em seguida, continuar com os próximos exemplos [tamanho do lote].
  • Uma distinção importante é que a etapa de aprendizagem (uma etapa) é aplicada uma vez para cada lote, enquanto você tem que 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 sobre mais amostras.
  • Qual ‘ é a diferença entre época e iterações ?
  • @Goldname 1 epoch inclui todos os exemplos de treinamento, enquanto 1 iteração inclui apenas [tamanho do lote] número de exemplos de treinamento.
  • Então: Se o número de épocas for constante, e nós ‘ repondo o gráfico de convergência com cada ponto representando o resultado após cada época, podemos esperar que o gráfico resultante seja ‘ mais suave ‘ (e o treinamento para ser mais lento) conforme diminuímos batch_size?

Resposta

Ao resolver um problema de otimização com uma CPU ou GPU, você aplica iterativamente um algoritmo sobre alguns dados de entrada. Em cada uma dessas iterações, você normalmente atualiza uma métrica do seu problema ao fazer alguns cálculos nos dados. Agora, quando o tamanho dos seus dados é grande, pode ser necessário um tempo considerável para concluir cada iteração e pode consumir muitos recursos. Portanto, às vezes você opta por aplicar esses cálculos iterativos em uma parte dos dados para economizar tempo e recursos computacionais. Esta parte é 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, você faz o processamento de dados online. Acho que a terminologia vem dos anos 60 e até antes. Alguém se lembra dos arquivos .bat DOS? Mas é claro que o conceito encarnou para significar um segmento ou parte dos dados a serem usados.

Resposta

A documentação para Keras sobre o tamanho do lote pode ser encontrada em fit função na página Modelos (API funcional)

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

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

Resposta

O tamanho do lote é um hiperparâmetro que define o número da amostra a ser trabalhada antes de atualizar os parâmetros do modelo interno.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *