[MUSIC] Bienvenidos. En este video vamos a ver la normalización por lotes, también conocido como batch normalization. you vimos en videos anteriores la importancia de normalizar los valores de entrada, para acelerar la velocidad de aprendizaje de nuestro modelo. Por ejemplo, si tenemos un modelo sencillo como este, que tiene tres valores de entrada, x1, x2, y x3, y tiene una neurona donde se multiplican pesos w y b para dar salida a nuestro y-sombrero. Vimos que podemos normalizar los valores de x1, x2, y x3, de tal manera que la normalización nos otorgue una media de 0, y una varianza de 1. En ese caso, lo que hacemos es cambiar nuestro espacio de búsqueda para nuestros parámetros w y b, de una zona más compleja, para encontrar un optimo, a una zona mucho más distribuida, y más fácil para el algoritmo encontrar cuáles son los puntos unión de los parámetros que maximice nuestro modelo. [MUSIC] Ahora bien, ¿qué sucede en el caso de una red neuronal? Para este caso, lo que tenemos son muchas capas donde, de nuevo, tenemos nuestros inputs de entrada, x1, x2, y x3, que podemos normalizar, y eso nos va a ayudar a que sea mucho más rápido el entrenamiento de nuestra primera capa. Ahora bien, luego del entrenamiento de esa primera capa, va a haber nuevamente una salida, que va a dar nuestra función de activación de esta segunda capa, que va a ser como input de la tercera capa. Lo mismo de la tercera como input de la cuarta. Y lo mismo de la cuarta como input de la nueva final para la salida de nuestro modelo. En ese caso, podemos asimilar esto a que, en cada una de las capas vamos a tener valores de entrada que podemos normalizar como entrada de la siguiente. Es decir, si estamos parados en la segunda capa, tenemos nuestra función de activación, a[1] en este caso, que sería la salida de nuestra primera capa de la red. Estos valores los podemos volver a normalizar para que el input de la tercera capa sea, de una forma, mucho más fácil de entrenar. Lo mismo pasa en la siguiente capa con a[2], y lo mismo pasa en la última capa con la función de activación 3. Acá vemos, entonces, que los valores que vamos a darle como entrada pueden ser, vamos a normalizar la función de activación a[l] en cada una de las capas. O, lo que también podemos hacer es, normalizar antes de la activación, es decir, los valores de z, cuando recién calculamos la multiplicación de nuestros parámetros. Vamos a ver que, en la mayor parte de la bibliografía, casi siempre tendemos a normalizar los parámetros de z, con lo cual, eso es lo que vamos a tender a normalizar nosotros en esta explicación de normalización por lotes. Ahora bien, ¿cómo aplicamos esta normalización a nuestra red neuronal? Lo que vamos a hacer es, para cada una de las capas de nuestras redes, y para cada capa l determinada de nuestra red. Lo que vamos a hacer, es calcular por un lado la media, calculada de forma de 1 / n, que es la cantidad de observaciones de nuestro data set, de la sumatoria de los valores de z. Y calcular la varianza, por otro lado, también para todas las observaciones de nuestro data set. Con estos dos valores calculados, la media y la varianza, vamos a aplicar una fórmula de normalización sobre z, que nos dé, justamente, esta z normalizada con media 0 y varianza 1. Ahora bien, no necesariamente nosotros vamos a querer que todas las capas de nuestra red tengan una media de 0 y una varianza de 1, si no que puede que queramos que tengan otro tipo de distribuciones. Para eso, lo que vamos a aplicar va a ser, esta z-sombrero, que lo que la vamos a multiplicar por dos parámetros, gamma y beta. Estos dos parámetros van a ser parámetros entrenables para nuestra red, con lo cual los sumamos a los parámetros entrenables que vimos hasta este momento. Y nos van a permitir que las salidas de las capas sean normalizadas, pero con una distribución distinta a la distribución normal. O, que sean iguales a normal si los parámetros gamma y beta son tales que generen esa salida de distribución. [MUSIC] Bien, hasta ahora vimos todo lo que es la normalización para todo el data set. Ahora, si ustedes recuerdan, estamos hablando que, el entrenamiento actualmente lo estamos realizando a través de mini-batches, o lotes. Esos lotes lo que van a hacer es, mirar una cierta cantidad de observaciones al mismo tiempo, en vez de mirar todo el data set de una sola vez. Por eso viene el nombre de mini-batch, y por eso, cuando nosotros hagamos este tipo de normalizaciones, lo que vamos a hacer es, aplicar la misma fórmula que vimos hasta ahora, aplicado para todo el data set. Simplemente que, en vez de dividir por n, es decir, por todas las observaciones del data set. Lo que le vamos a dar, en cada iteración del cálculo de la media y de la varianza, son las observaciones de ese lote, o de ese mini-batch que estemos trabajando. Entonces, calculado esa media y esa varianza para cada uno de esos mini-batch, vamos a aplicar la normalización, y vamos a actualizar los pesos de los parámetros gamma y beta. Una aclaración más acá, hay que tener en cuenta que este parámetro beta no es lo mismo que el parámetro beta que usamos al momento de algoritmos de optimización que vimos en videos anteriores. Este es un parámetro beta distinto, simplemente tienen el mismo nombre, pero está hablando de parámetros que se entrenan por separado. En resumen, vimos que podemos normalizar los lotes, y esto nos permite tener un entrenamiento mucho más rápido del algoritmo que estamos entrenando, y obtener resultados predictivos mejores gracias a esa velocidad. Vimos que esa normalización la podemos hacer por mini-batches, o por lotes. Y que, para ese entrenamiento lo que vamos a agregar, van ser dos parámetros entrenables, gamma y beta, que nos van a permitir tener distintos tipos de distribuciones en cada una de las capas. Un dato adicional que no hablamos hasta ahora es que. En test, como no tenemos una media y una varianza determinada, porque en test lo que podemos estar viendo es una observación por vez. Lo que vamos a hacer es, tomar los valores que tenemos en train, tanto para la media como para la varianza. Que eso, hay varias formas de hacerlo. Uno es, tomarlo para todo el data set entero de train. Y otra es, usando una media ponderada, como vemos también en un video pasado, para tener un valor lo más actualizado posible, de cuál debería ser ese valor, y poder utilizarlo para el testeo que estamos haciendo de nuestro modelo. Muchas gracias, y seguimos el próximo video. [MUSIC]