Entendo que a descida do gradiente estocástico pode ser usada para otimizar uma rede neural usando retropropagação, atualizando cada iteração com uma amostra diferente do conjunto de dados de treinamento. Qual deve ser o tamanho do lote?
49
Respostas:
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 ]
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 | .x m ⊂ x B m B = | 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 ) ] = ∇θ x m .E [∇ LSG D( θ , m ) ] = ∇ L ( θ , 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 S → R D → R 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: RS L (θ, x ): RS→ RD→ RS 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
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:
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 .
Se você deseja ter a taxa de aprendizado fixa, basta definir epsilon como uma função constante.
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:
fonte
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?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)