Compreendendo a descida gradiente do minilote

Sep 18 2020

Eu gostaria de entender as etapas da descida gradiente de minilote para treinar uma rede neural.

Meus dados de trem $(X,y)$ tem dimensão $(k \times n)$ e $(1 \times n)$, Onde $k$ é o número de recursos e $n$ é o número de observações.

Para cada camada $l=1,...L$ meus parâmetros são $W^{[l]}$ de dimensão $(n^{[l]} \times n^{[l-1]})$, Onde $n^{[0]}=k$

a) Primeiro eu inicializo os parâmetros aleatoriamente $W^{[l]}$ para $l=1,...L$.

b) Eu tiro uma amostra do comprimento $p\in[1,n]$ dos meus dados de treinamento, denotados por $(X^{(1)},y^{(1)})$ para o número da amostra $1$.

c) Eu calculo o custo $J^{(1)}(W)$ com a primeira inicialização dos parâmetros e a primeira amostra dos dados do trem.

d) Na retropropagação, eu atualizo os parâmetros para $l=L,...1$ de acordo com uma taxa de aprendizagem $\alpha$: $$ W^{[l]} = W^{[l]} - \alpha \text{ } \frac{\partial J^{(1)}(W)}{\partial W^{[l]}}$$

Agora fiz uma etapa da descida do gradiente com uma amostra dos dados do trem. Como o algoritmo continua?

Ele repete as etapas (c) e (d) com o "novo" $W^{[l]}$ em uma segunda amostra dos dados do trem $(X^{(2)},y^{(2)})$?

Nesse caso, ela continuará até a convergência, quando cada atualização no gradiente de descida for feita com diferentes amostras dos dados do trem?

Por favor, deixe-me saber se algo não estiver claro.

Respostas

1 Nikaido Sep 18 2020 at 18:11

TL; DR;

Sim você está correto.


RESPOSTA LONGA

Vou te dar um pouco de contexto

Existem três "tipos" principais de Gradiente Descendente:

  • Gradiente de descida em lote
  • Descida gradiente estocástico
  • Gradiente de descida em minilote

Esses algoritmos diferem para o tamanho do lote do conjunto de dados.

Terminologia

  • epochs: epochs é o número de vezes em que o conjunto de dados completo é passado para frente e para trás pelo algoritmo de aprendizagem
  • iterações: o número de lotes necessários para completar uma época
  • tamanho do lote: é o tamanho de uma amostra do conjunto de dados

Gradiente de descida em lote

Se você estiver trabalhando com dados de treinamento que cabem na memória (RAM / VRAM), a escolha é em Batch Gradient Descent. Neste caso, o tamanho do lote é igual a todo o conjunto de dados. Isso significa que o modelo é atualizado apenas quando todo o conjunto de dados é passado.

for epoch in number of epochs:
    - for all the training instances in the dataset compute the derivative of the cost function
    - update the weights

Descida gradiente estocástico

É uma estimativa da descida do gradiente em lote. O tamanho do lote é igual a 1. Isso significa que o modelo é atualizado apenas com uma instância de treinamento por vez.

for epoch in number of epochs:
    for instance in total dataset:
        - for the current instance compute the derivative of the cost function 
        - update the weights

Gradiente de descida em minilote

É uma generalização da Descida do Gradiente Estocástico. O tamanho do lote é igual a um valor> = 1. Isso significa que o modelo é atualizado por lote.

for epoch in number of epochs:
    for batch in num of batches:
        - for all the training instances in the batch sample compute the derivative of the cost function
        - update the weights

Exemplo: só para ficar mais claro, vamos supor que temos um conjunto de dados de 1000 instâncias (n_of_instances) e digamos que para cada tipo de descida gradiente temos um número fixo de épocas (n_of_epochs) igual a 100 e como tamanho de lote para descida gradiente de minibote temos 100 (batch_size), e então 10 iterações (n_of_iterations = n_of_instances / batch_size = 1000/100 = 10).

  • Gradiente descendente em lote: o modelo será atualizado 100 vezes (n_of_epochs)
  • Estocástico Gradiente Descendente: o modelo será atualizado 100.000 vezes (n_of_epochs * n_of_instances = 100 * 1000)
  • Gradiente de descida em minilote: o modelo será atualizado 1000 vezes (n_of_iterations * n_of_epochs = 10 * 100)

A regra geral é usar a descida gradiente do lote se você puder ajustar todo o conjunto de dados na memória. Ao contrário, dependendo do tamanho da instância, a escolha será uma descida gradiente de minilote com um lote de tamanho fixo que pode caber inteiramente na memória. Normalmente, quando você usa a descida do gradiente do minilote, a convergência do erro será mais ruidosa em comparação com a descida do gradiente do lote, devido à variabilidade do conteúdo dos lotes

Algumas referências úteis:

  • épocas vs lote vs iterações
  • Lote, mini-lote e descida gradiente estocástico
  • Descida de gradiente de mini lote
  • Compreendendo o gradiente de minilote dexcent