Redução de perda: gradiente descendente estocástico

No gradiente descendente, um lote é o conjunto de exemplos que você usa para calcular o gradiente em uma única iteração de treinamento. Até agora, presumimos que o lote tenha sido o conjunto de dados inteiro. Ao trabalhar na escala do Google, os conjuntos de dados geralmente contêm bilhões ou até centenas de bilhões de exemplos. Além disso, os conjuntos de dados do Google geralmente contêm um grande número de recursos. Consequentemente, um lote pode ser enorme. Um lote muito grande pode fazer com que até mesmo uma única iteração leve muito tempo para ser calculada.

Um grande conjunto de dados com exemplos de amostra aleatória provavelmente contém dados redundantes. Na verdade, a redundância torna-se mais provável à medida que o tamanho do lote aumenta. Algumas redundâncias podem ser úteis para suavizar gradientes com ruído, mas lotes enormes tendem a não ter valor preditivo muito maior do que lotes grandes.

E se pudéssemos conseguir o gradiente certo em média para muito menos computação? Ao escolher exemplos aleatórios em nosso conjunto de dados, poderíamos estimar (embora de forma barulhenta) uma grande média de uma muito menor. O gradiente descendente estocástico (SGD) leva essa ideia ao extremo, usando apenas um único exemplo (um tamanho de lote de 1) por iteração. Com iterações suficientes, o SGD funciona, mas tem muito ruído. O termo "estocástico" indica que o exemplo que compreende cada lote é escolhido aleatoriamente.

O gradiente descendente estocástico de minilotes (SGD com minilotes, na sigla em inglês) é um meio-termo entre a iteração em lote completo e o SGD. Geralmente,um minilote tem entre 10 e 1.000 exemplos, escolhidos aleatoriamente. O GDE com minilotes reduz a quantidade de ruído em SGD, mas ainda é mais eficiente do que o lote completo.

Para simplificar a explicação, focamos no gradiente descendente para um único atributo. O gradiente descendente também funciona em conjuntos de atributos que contêm vários atributos.