Inicialización de los pesos y bias en Deep Learning

Autor: | Última modificación: 18 de agosto de 2022 | Tiempo de Lectura: 4 minutos
Temas en este post:

La inicialización de los pesos y bias en Deep Learning forma parte de los procesos más necesarios cuando se trabaja con redes neuronales profundas como parte del procesamiento Big Data, por lo que conocer cómo funciona y a qué hace referencia es imprescindible para buen data scientist.

Por este motivo, en este post, te explicamos qué es la inicialización de los pesos y bias en Deep Learning.

Inicialización de los pesos y bias en Deep Learning

La inicialización de los pesos y la bias en Deep Learning es muy importante para conseguir la convergencia de nuestra red a un mínimo adecuado. Así que vamos a ver algunas formas de inicializar los pesos.

Siguiendo con nuestro ejemplo del MNIST, nuestra matriz de pesos va a ser de 768 (entradas) x 10 (salidas).

Inicialización constante

Podemos inicializar nuestros pesos a cero:

W = np.zeros((768, 10))

A uno:

W = np.ones((768, 10))

O a una constante C:

W = np.ones((768, 10)) * C

Distribución normal y uniforme

También podemos inicializar los pesos usando una distribución uniforme, en la que se define un [upper_bound,lower_bound] y todos los números dentro del rango tienen la misma probabilidad de ser escogidos. Por ejemplo, para una distribución entre [−0.2,0.2]:

W = np.random.uniform(low=-0.2, high=0.2, size=(768, 10))

Con esta instrucción, inicializaremos la matriz de pesos W con valores extraídos del rango entre [−0.2,0.2] donde todos ellos tienen la misma probabilidad de ser extraídos.

También podemos hacerlo con una distribución normal o Gaussiana, la cual viene definida como:

Inicialización de los pesos y bias en Deep Learning 1

Donde, como ya sabéis:

  • μ es la media.
  • σ es la desviación estándar.
  • σ2 es la varianza.

Así que podríamos inicializar nuestros pesos con una distribución normal con μ=0 y σ=0.2, por ejemplo, de la siguiente forma:

Inicialización de los pesos y bias en Deep Learning 2

Inicialización: LeCun normal y uniforme

Otra forma más avanzada es el método de LeCun, también conocido como «Efficient backprop».

Este método define tres parámetros:

  • fin: número de entradas a la capa (en nuestro ejemplo, 768).
  • fout: número de salidas de la capa (en nuestro ejemplo, 10).
  • limit: queda definido según fin y fout como limit=3fin.

El código para inicializar W mediante este método usando una distribución uniforme sería:

W = np.random.uniform(low=-limit, high=limit, size=(F_in, F_out))

Y para una normal:

W = np.random.normal(low=-limit, high=limit, size=(F_in, F_out))

Inicialización: Glorot/Xavier normal y uniforme

Esta es, quizás, el método más empleado a la hora de hacer la inicialización de los pesos y bias en Deep Learning. De hecho, es el empleado por defecto cuando se utiliza el framework Keras.

En este caso, también se definen los mismos parámetros que con LeCun, pero varía el cálculo del limit:

Inicialización de los pesos y bias en Deep Learning 3

El código para inicializar W mediante este método sería el mismo que con LeCun.

Para una distribución uniforme sería:

W = np.random.uniform(low=-limit, high=limit, size=(F_in, F_out))

Y para una normal:

W = np.random.normal(low=-limit, high=limit, size=(F_in, F_out))

Inicialización: He et al./Kaiming/MSRA normal y uniforme

Este método debe su nombre a Kaiming He, el primer autor de Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification.

Normalmente, este método se usa cuando estamos entrenando redes neuronales muy profundas que usan un tipo particular de ReLU como activación: la Parametric ReLU.

El código en el caso de la uniforme es este:

limit = np.sqrt(6 / float(F_ini))

W = np.random.uniform(low=-limit, high=limit, size=(F_in, F_out))

Y en el caso de la normal, este:

limit = np.sqrt(2 / float(F_ini))

W = np.random.uniform(low=-limit, high=limit, size=(F_in, F_out))

Consejo

La inicialización de los pesos y bias en Deep Learning no suele ser determinante en el entrenamiento de una red, pero a veces puede hacer que la red no empiece a entrenar, porque no consigue converger. Por lo tanto, desde KeepCoding te aconsejamos usar la de Glorot. Aunque si un día te apetece comprobar si puedes conseguir que mejore la precisión, puedes atreverte a probar con otras.

Aprende más sobre el Big Data

Ahora que ya conoces cómo funciona la inicialización de los pesos y bias en Deep Learning, podrás tenerla en cuenta a la hora de llevar a cabo tu procesamiento de los macrodatos. Sin embargo, ¡todavía falta mucho más por aprender del Big Data!

De manera que, si quieres continuar formándote y convertirte en un experto en el manejo de Big Data, te presentamos nuestro Bootcamp Full Stack Big Data, Inteligencia Artificial & Big Data. Te ayudará a tener una visión global del mundo Big Data y explorarás de forma tanto teórica como práctica los sistemas que manejan los macrodatos. Para ello, también contarás con el apoyo de una serie de expertos en Big Data que te guiarán en los diferentes procesos. ¡Apúntate y conviértete en un data scientist profesional en menos de un año!

👉 Descubre más del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp ¡Descarga el temario!

👉 Prueba el Bootcamp Gratis por una Semana ¡Empieza ahora mismo!

👉 Conoce nuestros otros Bootcamps en Programación y Tecnología

[email protected]

¿Sabías que hay más de 5.000 vacantes para desarrolladores de Big Data sin cubrir en España? 

En KeepCoding llevamos desde 2012 guiando personas como tú a áreas de alta empleabilidad y alto potencial de crecimiento en IT con formación de máxima calidad.

 

Porque creemos que un buen trabajo es fuente de libertad, independencia, crecimiento y eso ¡cambia historias de vida!


¡Da el primer paso!