¿Cómo se actualizan los pesos en el método de aprendizaje por lotes en redes neuronales?

15

¿Alguien puede decirme cómo se supone que debo construir una red neuronal utilizando el método por lotes?

He leído que, en el modo por lotes, para todas las muestras en el conjunto de entrenamiento, calculamos el error, los delta y, por lo tanto, los pesos delta para cada neurona en la red y luego, en lugar de actualizar inmediatamente los pesos, los acumulamos y luego, antes de comenzar En la próxima época, actualizamos los pesos.

También leí en alguna parte que, el método por lotes es como el método en línea, pero con la diferencia de que uno solo necesita sumar los errores para todas las muestras en el conjunto de entrenamiento y luego tomar el promedio y luego usarlo para actualizar los pesos como uno lo hace en el método en línea (la diferencia es solo ese promedio) así:

for epoch=1 to numberOfEpochs

   for all i samples in training set

         calculate the errors in output layer
         SumOfErrors += (d[i] - y[i])
   end

   errorAvg = SumOfErrors / number of Samples in training set

   now update the output layer with this error
   update all other previous layers

   go to the next epoch

end
  • ¿Cuál de estos es realmente la forma correcta del método por lotes?
  • En el caso del primero, ¿no se acumulan todos los pesos delta en un número enorme?
Rika
fuente
1
El método "correcto" depende del contexto. Resulta que en muchos casos, actualizar los pesos solo una vez por época convergerá mucho más lentamente que la actualización estocástica (actualizar los pesos después de cada ejemplo). Agregaré que existe un consenso de que generalmente querrá usar alguna forma de actualización por lotes, pero con mucha más frecuencia que 1x por época.
Tahlor

Respuestas:

9

Usar el promedio o la suma son equivalentes, en el sentido de que existen pares de tasas de aprendizaje para las cuales producen la misma actualización.

Para confirmar esto, primero recuerde la regla de actualización:

Δwyoj=-αmiwyoj

μminortenorteμminortew

Δwyoj=-α(norteμ)wyoj=-αnorteμwyoj

ΔwΔw

Sean Easter
fuente
1
¿El descenso de gradiente de mini lotes es el mismo descenso de gradiente de lotes? Estoy perdido aquí! si no, ¿cuál es la diferencia entre estos? Corríjame si me equivoco, en el modo Batch, todo el conjunto de datos debe leerse en lotes, se calculan los gradientes, y cuando se leen todos, se promedian y luego se actualizan los parámetros, mientras que, en mini-lote, cada se lee el lote, se calculan los gradientes y luego se actualizan los parámetros, y luego se lee el siguiente mini lote hasta que finaliza una época.
Rika
1
Esa es la definición generalmente dada: actualizar los parámetros usando un subconjunto de los datos de entrenamiento a la vez. (Hay algunos métodos en los que los mini lotes se muestrean aleatoriamente hasta la convergencia, es decir, el lote no se atravesará en una época). Vea si esto es útil.
Sean Easter
0

Las dos respuestas son equivalentes. Yo personalmente lo consideraría como un error promedio en lugar de la suma. Pero recuerde que el descenso de gradiente tiene un parámetro llamado tasa de aprendizaje, y que solo se resta una parte del gradiente del error. Entonces, si el error se define como el total del promedio, se puede compensar cambiando la tasa de aprendizaje.

jlimahaverford
fuente
gracias, pero si son realmente lo mismo, ¿por qué molestarse en desperdiciar tanta memoria en retener las actualizaciones acumulativas para cada patrón, cuando solo podemos sumar los errores que serían solo una variable simple?
Rika