A ideia central por trás do SGD

Sep 30 2020

Pr. Hinton em seu popular curso no Coursera se refere ao seguinte fato :

Rprop não funciona realmente quando temos conjuntos de dados muito grandes e precisamos realizar atualizações de pesos de minilote. Por que não funciona com minilotes? Bem, as pessoas tentaram, mas acharam difícil fazer funcionar. O motivo pelo qual não funciona é que viola a ideia central por trás da descida do gradiente estocástico , que é quando temos uma taxa de aprendizado pequena o suficiente, ele calcula a média dos gradientes em minilotes sucessivos. Considere o peso, que obtém o gradiente de 0,1 em nove minilotes e o gradiente de -0,9 em décimos de minilotes. O que gostaríamos é que esses gradientes se cancelassem aproximadamente, de modo que permanecessem aproximadamente os mesmos. Mas não é o que acontece com rprop. Com rprop, aumentamos o peso 9 vezes e diminuímos apenas uma vez, de modo que o peso fica muito maior.

Como você pode ver, a ideia central por trás do SGD é que os gradientes sucessivos em minilotes devem ser calculados em média. Alguém tem alguma fonte formal válida para isso? existe alguma justificativa? Eu não encontrei nenhuma prova até agora.

Respostas

2 JavierTG Oct 07 2020 at 04:39

Influência da distribuição de geração de dados

Para ver isso, primeiro temos que mencionar que, nem usando a descida de gradiente em lote (usando todo o conjunto de dados para calcular o gradiente), nem usando a descida de gradiente em minilote, estamos calculando o valor verdadeiro (exato) do gradiente.

Para calcular o valor verdadeiro do gradiente, teríamos que usar o conjunto de todos os valores possíveis dos recursos, $x$, (e, portanto, as saídas $y$)

Mais formalmente, e referindo-se à quantidade que queremos minimizar como o valor esperado da função de perda por exemplo ($J(x,y,\theta)$, Onde $\theta$ são os parâmetros) wrt todo o possível $x,y$ valores, o verdadeiro gradiente $g$ É dado por: $$g = \frac{\partial}{\partial \theta}\mathbb{E}_{x,y\sim p_{data}}(J(x,y,\theta)) $$E se assumirmos certas condições, temos que:$$g = \mathbb{E}_{x,y\sim p_{data}}\left(\frac{\partial}{\partial \theta}J(x,y,\theta)\right) $$

Onde $p_{data}$é a distribuição de geração de dados (a distribuição a partir da qual os valores de$x$ e $y$são desenhados). No entanto, essa distribuição de geração de dados geralmente é desconhecida. Nós apenas conhecemos o conjunto de dados que recebemos.

Por causa disso, para atualizar os parâmetros usando todas as informações fornecidas (o conjunto de treinamento), em vez disso, usamos a distribuição empírica definida pelos dados de treinamento ($\hat{p}_{data}$), que coloca uma probabilidade de $1/m$ em cada um dos $m$ amostras $(x^{(1)}, y^{(1)}), \,(x^{(2)}, y^{(2)}),\,...\,,(x^{(m)}, y^{(m)})$do conjunto de dados. Portanto, o gradiente é aproximado por:$$ \begin{aligned} \hat{g}&=\frac{\partial}{\partial \theta}\mathbb{E}_{x,y\sim \hat{p}_{data}}(J(x,y,\theta))\\&=\frac{\partial}{\partial \theta}\left(\sum_{i=1}^m \frac{1}{m}J_i(x^{(i)},y^{(i)},\theta)\right)\\ &= \frac{1}{m}\sum_{i=1}^m\frac{\partial }{\partial \theta}J_i(x^{(i)},y^{(i)},\theta) \end{aligned} $$ Terminando com a descida do gradiente em lote.

Mas o que acontece com os minilotes?

Ao usar atualizações de mini-banhos, estamos continuamente vendo novos dados (assumindo que calculamos apenas uma época). Portanto, neste caso, usando minilotes, estamos usando a distribuição de geração de dados.

Isso significa que em cada atualização de minilote, ao amostrar essa distribuição de geração de dados, terminamos com uma estimativa ($\hat{g}$) do gradiente verdadeiro ($g$) que é imparcial, ou seja $\mathbb{E}_{x,y\sim p_{data}}(\hat{g})=g$. Para ver isso, e considerando$\text{s-sized}$ minilotes: $$\begin{aligned} \mathbb{E}_{x,y\sim p_{data}}(\hat{g})&=\mathbb{E}_{x,y\sim p_{data}}\left(\frac{g^{(1)}+...+g^{(s)}}{s}\right)\\ &=\frac{1}{s}(\mathbb{E}_{x,y\sim p_{data}}(g^{(1)}+...+g^{(s)}))\\ &=\frac{1}{s}s\,\,g=g \end{aligned} $$Desse modo, fazendo atualizações sucessivas de minilote, estaríamos tendendo em média (como mostrado por$\mathbb{E}_{x,y\sim p_{data}}(\hat{g})$) para atualizar nossos parâmetros com o valor real do gradiente. E é a isso que acho que os autores se referem na citação da pergunta.


Ótimas referências:

Livro de Aprendizado Profundo, Ian Goodfellow et. al Capítulo 8.1
Respostas daqui

1 cmn Oct 09 2020 at 23:07

Em uma etapa de descida de gradiente completo, a função de perda é definida como a média do termo de perda em pontos de amostra individuais. Para minimizar a função de perda, precisamos calcular a média dos gradientes individuais.

Na descida do gradiente estocástico, se não houver viés na seleção dos lotes, a média sobre os lotes resultaria em uma estimativa sem viés de todo o gradiente.

Por favor, dê uma olhada nas notas desta aula http://www.stat.cmu.edu/~ryantibs/convexopt-F18/scribes/Lecture_24.pdf