Cómo usar vl_nnbnorm en mi propia implementación de una red neuronal

Realmente, realmente ayuda si considera el paso de la norma del lote como una capa separada.

Suponga que desea aplicar la norma de lote a una capa L. La normalización se realiza antes de la entrada, por lo que es como agregar una nueva capa antes de L. Esta nueva capa recibe la entrada que lL recibió antes, y realiza un seguimiento de un gamma y un beta, que son vectores con dimensión, el número de canales de L. Init para gamma es (generalmente) todos unos y beta (generalmente) todos ceros.

Un recordatorio de que la entrada es 4D: altura, ancho, canal y número de lote. Si desea trabajar con vl_nnbnorm en el caso de redes no convencidas, tendrá que usar la remodelación.

Utiliza vl_nnbnorm (input, gamma, beta) para generar la salida. Esta salida, que se alimentará a la siguiente capa, también es 4D, siguiendo el mismo esquema que la entrada.
Querrás conservar los momentos que genera vl_nnbnorm. En general, lo que se hace es un promedio variable (acumulativo) para tener una idea del promedio de la media y la varianza de las características en todo el conjunto de entrenamiento. Esto será importante para las pruebas.
Deberá mantener un rastro de la entrada y salida para la propagación hacia atrás. Vamos a nombrarlos respectivamente X e Y.

Ahora que tiene la salida, puede alimentarla como entrada a su capa L, y está listo para el pase hacia adelante.

Para el paso de propagación hacia atrás: su capa L le está dando el DZDY. Desea calcular el gradiente para gamma, el gradiente para beta (sus parámetros) y el error en la entrada (para alimentar a la capa anterior, si hay una). Para hacer esto, ejecuta vl_nnbnorm (X, gamma, beta, DZDY). Esto genera DZDX, DZDG, DZDB, ​​respectivamente, el error de entrada (para alimentar a las capas anteriores), el gradiente en gamma, el gradiente en beta.
Puede usar esos gradientes para el aprendizaje clásico en gamma y beta.

Una vez que hayas terminado con el entrenamiento, querrás probar. Aquí es donde mantener los momentos ayuda: en lugar de hacer que la máquina calcule la media y la desviación estándar en los lotes de prueba (que es trampa, no debería tener acceso a esa información), utiliza la estimación del promedio en el conjunto de entrenamiento.
Por lo tanto, al realizar la prueba, su capa de normalización por lotes utilizará vl_nnbnorm (input, gamma, beta, momentos).

¿Espero que todo esto haya ayudado?