A descida de gradiente não funciona da maneira que você sugeriu, mas um problema semelhante pode ocorrer.
Não calculamos a perda média do lote, calculamos os gradientes médios da função de perda. Os gradientes são a derivada da perda em relação ao peso e, em uma rede neural, o gradiente para um peso depende das entradas desse exemplo específico e também de muitos outros pesos no modelo.
Se o seu modelo tiver 5 pesos e você tiver um tamanho de minilote 2, poderá obter o seguinte:
gradients=(1.5,−2.0,1.1,0.4,−0.9)
gradients=(1.2,2.3,−1.1,−0.8,−0.7)
(1.35,0.15,0,−0.2,−0.8)
0
editar em resposta aos comentários:
kLiwj
∂L∂wj=1k∑ki=1∂Li∂wj
O código do tutorial ao qual você vinculou nos comentários usa o Tensorflow para minimizar a perda média.
1k∑ki=1Li
Para minimizar isso, ele calcula os gradientes da perda média em relação a cada peso e usa a descida do gradiente para atualizar os pesos:
∂L∂wj=∂∂wj1k∑ki=1Li
A diferenciação pode ser trazida para dentro da soma, portanto é a mesma que a expressão da abordagem no meu exemplo.
∂∂wj1k∑ki=1Li=1k∑ki=1∂Li∂wj
code line 170
?O motivo para usar mini-lotes é ter uma boa quantidade de exemplo de treinamento, de modo que o possível ruído seja reduzido pela média de seus efeitos, mas também não é um lote completo que, para muitos conjuntos de dados, possa exigir uma quantidade enorme de memória. Um fato importante é que o erro que você avalia é sempre distanteentre a saída prevista e a saída real: isso significa que não pode ser negativo; portanto, você não pode ter, como disse, um erro de 2 e -2 que se cancelam, mas que se tornaria um erro de 4 Em seguida, você avalia o gradiente do erro em relação a todos os pesos, para poder calcular qual alteração nos pesos os reduziria mais. Depois de fazer isso, você dá um "passo" nessa direção, com base na magnitude da sua taxa de aprendizado alfa. (Esses são os conceitos básicos, não entrarei em detalhes sobre a retropropagação para NNs profundos). Depois de executar este treinamento em seu conjunto de dados por um certo número de épocas, você pode esperar que sua rede convergir se sua etapa de aprendizado não for muito grande para faça divergir. Você ainda pode acabar no mínimo local, isso pode ser evitado inicializando diferentes pesos, usando otimizadores diferentes e tentando regularizar.
fonte