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
code line 170
?La razón para usar mini lotes es tener una buena cantidad de ejemplos de entrenamiento de tal manera que el posible ruido se reduzca promediando sus efectos, pero tampoco es un lote completo que para muchos conjuntos de datos podría requerir una gran cantidad de memoria. Un hecho importante es que el error que evalúa es siempre una distanciaentre su salida pronosticada y la salida real: eso significa que no puede ser negativo, por lo que no puede tener, como dijiste, un error de 2 y -2 que se cancele, sino que se convertirá en un error de 4 Luego evalúa el gradiente del error con respecto a todos los pesos, para que pueda calcular qué cambio en los pesos lo reduciría más. Una vez que lo hace, da un "paso" en esa dirección, en función de la magnitud de su tasa de aprendizaje alfa. (Estos son los conceptos básicos, no voy a entrar en detalles sobre la propagación hacia atrás para NN profundo) Después de ejecutar esta capacitación en su conjunto de datos durante un cierto número de épocas, puede esperar que su red converja si su paso de aprendizaje no es demasiado grande para hazlo divergir. Todavía podrías terminar en un mínimo local, esto se puede evitar inicializando sus pesos de manera diferente, utilizando optimizadores de diferenciador e intentando regularizar.
fuente