El descenso de gradiente no funciona del modo sugerido, pero puede ocurrir un problema similar.
No calculamos la pérdida promedio del lote, calculamos los gradientes promedio de la función de pérdida. Los gradientes son la derivada de la pérdida con respecto al peso y en una red neuronal el gradiente para un peso depende de las entradas de ese ejemplo específico y también depende de muchos otros pesos en el modelo.
Si su modelo tiene 5 pesos y tiene un tamaño de mini lote de 2, puede obtener esto:
Ejemplo 1. Pérdida = 2,gradients=(1.5,−2.0,1.1,0.4,−0.9)
Ejemplo 2. Pérdida = 3,gradients=(1.2,2.3,−1.1,−0.8,−0.7)
El promedio de los gradientes en este mini lote se calcula, son(1.35,0.15,0,−0.2,−0.8)
El beneficio de promediar sobre varios ejemplos es que la variación en el gradiente es menor, por lo que el aprendizaje es más consistente y menos dependiente de los detalles de un ejemplo. Observe cómo el gradiente promedio para el tercer peso es , este peso no cambiará esta actualización de peso, pero probablemente no será cero para los siguientes ejemplos elegidos que se calculan con diferentes pesos.0
editar en respuesta a los comentarios:
En mi ejemplo anterior, se calcula el promedio de los gradientes. Para un tamaño de mini lote de donde calculamos la pérdida para cada ejemplo, nuestro objetivo es obtener el gradiente promedio de la pérdida con respecto a un peso .kLiwj
La forma en que lo escribí en mi ejemplo promedió cada gradiente como:∂L∂wj=1k∑ki=1∂Li∂wj
El código tutorial al que se vinculó en los comentarios usa Tensorflow para minimizar la pérdida promedio.
Tensorflow tiene como objetivo minimizar1k∑ki=1Li
Para minimizar esto, calcula los gradientes de la pérdida promedio con respecto a cada peso y utiliza el descenso de gradiente para actualizar los pesos:
∂L∂wj=∂∂wj1k∑ki=1Li
La diferenciación puede llevarse dentro de la suma, por lo que es la misma que la expresión del enfoque en mi ejemplo.
∂∂wj1k∑ki=1Li=1k∑ki=1∂Li∂wj