Como os modelos realmente aprendem, do gradiente descendente simples ao Adam
A acumulação de gradiente simula um batch maior quando a memória é limitada. Em vez de dar um passo depois de cada micro-batch, somas os gradientes de vários micro-batches, e depois dás um único passo de otimizador.
O tamanho de batch efetivo é o tamanho do micro-batch vezes o número de passos de acumulação. Isto permite que uma GPU pequena se comporte mais como se tivesse treinado num batch maior.
Um barril de água da chuva capta a ideia. Uma pequena caneca não consegue regar o jardim inteiro de uma vez, por isso deitas várias canecas num barril e depois usas a quantidade do barril. A acumulação de gradiente recolhe várias contribuições pequenas de gradiente antes de uma única atualização. A figura abaixo é literalmente este processo: cada novo termo é uma caneca, e as barras a subir são o barril a encher-se em direção ao seu total. A acumulação de gradiente é uma soma parcial de gradientes que trocas por um único passo.