Qual deve ser o tamanho do lote para a descida do gradiente estocástico?

Respostas:

72

O "tamanho da amostra" você está falando é referido como tamanho de lote , . O parâmetro de tamanho do lote é apenas um dos hiperparâmetros que você ajustará ao treinar uma rede neural com a descida de gradiente estocástico de mini-lote (SGD) e depende dos dados. O método mais básico de pesquisa por hiperparâmetros é fazer uma pesquisa em grade sobre a taxa de aprendizado e o tamanho do lote para encontrar um par que faça a rede convergir.B

Para entender qual deve ser o tamanho do lote, é importante ver a relação entre a descida do gradiente do lote, o SGD on-line e o mini-lote SGD. Aqui está a fórmula geral para a etapa de atualização de peso no mini-lote SGD, que é uma generalização dos três tipos. [ 2 ]

θt+1 1θt-ϵ(t)1 1Bb=0 0B-1 1eu(θ,mb)θ
  1. Descida em gradiente de lote, B=|x|
  2. Descida do gradiente estocástico on-line: B=1 1
  3. Descida de gradiente estocástico de mini-lote: mas B < | x | .B>1 1B<|x|

Observe que, com 1, a função de perda não é mais uma variável aleatória e não é uma aproximação estocástica.

O SGD converge mais rapidamente do que a descida gradual do gradiente "lote", porque atualiza os pesos depois de examinar um subconjunto selecionado aleatoriamente do conjunto de treinamento. Deixe- ser o nosso conjunto de treinamento e deixe m x . O tamanho do lote B é apenas a cardinalidade de m : B = | m | .xmxBmB=|m|

A descida do gradiente de lote atualiza os pesos usando os gradientes de todo o conjunto de dados x ; enquanto o SGD atualiza os pesos usando uma média dos gradientes para um mini lote m . (Usar a média em oposição a uma soma impede que o algoritmo execute etapas muito grandes se o conjunto de dados for muito grande. Caso contrário, você precisará ajustar sua taxa de aprendizado com base no tamanho do conjunto de dados.) O valor esperado deste a aproximação estocástica do gradiente usado no SGD é igual ao gradiente determinístico usado na descida do gradiente em lote. E [ L S G D ( θ , m ) ] = θxm .E[euSGD(θ,m)]=eu(θ,x)

Cada vez que coletamos uma amostra e atualizamos nossos pesos, isso é chamado de mini-lote . Cada vez que percorremos todo o conjunto de dados, isso é chamado de época .

Vamos dizer que nós temos algum vetor de dados , um vetor de peso inicial que parametriza nossa rede neural, q 0 : R S , e uma função de perda L ( θ , x ) : R SR DR S que estão tentando minimizar. Se tivermos exemplos de treinamento T e um tamanho de lote B , então podemos dividir esses exemplos de treinamento em mini-lotes C:x:RDθ0 0:RSeu(θ,x):RSRDRSTB

C=T/B

Por uma questão de simplicidade, podemos assumir que T é igualmente divisível por B. Embora, quando esse não seja o caso, como muitas vezes não seja, o peso adequado deva ser atribuído a cada minilote em função de seu tamanho.

Um algoritmo iterativo para SGD com épocas é dado abaixo:M

t0 0enquanto t<Mθt+1 1θt-ϵ(t)1 1Bb=0 0B-1 1eu(θ,mb)θtt+1 1

Nota: na vida real, estamos lendo esses dados de exemplo de treinamento da memória e, devido à pré-busca em cache e outros truques de memória realizados pelo seu computador, seu algoritmo será executado mais rapidamente se os acessos à memória forem coalescentes , ou seja, quando você ler a memória em ordem e não pule aleatoriamente. Portanto, a maioria das implementações do SGD embaralha o conjunto de dados e carrega os exemplos na memória na ordem em que serão lidos.

Os principais parâmetros para o SGD de baunilha (sem momento) descrito acima são:

  1. Taxa de aprendizagem: ϵ

Eu gosto de pensar no epsilon como uma função da contagem de épocas até uma taxa de aprendizado. Essa função é chamada de programação da taxa de aprendizado .

ϵ(t):NR

Se você deseja ter a taxa de aprendizado fixa, basta definir epsilon como uma função constante.

  1. Tamanho do batch

O tamanho do lote determina quantos exemplos você olha antes de fazer uma atualização de peso. Quanto mais baixo, mais ruidoso será o sinal de treinamento, mais alto será, mais tempo será necessário para calcular o gradiente para cada etapa.

Citações e leituras adicionais:

  1. Introdução à Aprendizagem Baseada em Gradiente
  2. Recomendações práticas para o treinamento baseado em gradiente de arquiteturas profundas
  3. Treinamento eficiente de mini-lote para otimização estocástica
sabalaba
fonte
11
For simplicity we can assume that D is evenly divisible by B. Você não quer dizer que T deve ser igualmente divisível por B?
Antoine
4
e para realmente responder à pergunta do OP, você pode adicionar B is typically chosen between 1 and a few hundreds, e.g. B = 32 is a good default value, with values above 10 taking advantage of the speed-up of matrix-matrix products over matrix-vector products.(a partir de papel de Bengio 2012)
Antoine
@sabalaba Ótima resposta. Mas não é que, na equação "Um algoritmo iterativo para SGD com épocas M seja dado abaixo", atualizaremos o peso após a execução de cada mini lote. Em outras palavras, não deve haver uma outra ansa (ao longo dos mini-C lotes) no interior do laço sobre o epoch ou seja, enquanto T <H
Kaushik Acharya
2
Nas estatísticas, uma amostra consiste em várias observações. Portanto, o tamanho da amostra é interpretado corretamente pelos estatísticos. Na ciência da computação (particularmente no aprendizado de máquina), uma amostra é uma única observação e um lote é uma coleção de amostras. Pode ser um pouco confuso. Uma amostra para estatísticos é um lote para cientistas de dados;) Fonte: en.wikipedia.org/wiki/Sample_size_determination
Oleg Melnikov
nm