Inicialización de los pesos y bias en Deep Learning

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

Algunos de nuestros reconocimientos:

Premios KeepCoding

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 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).

Deep Learning Bias (redes neuronales): métodos de inicialización

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

Igualmente, es posible comenzar la inicialización de los pesos mediante una distribución uniforme, en la que se especifica un rango [upper_bound,lower_bound] (límite superior e inferior) y todos los números dentro de ese intervalo tienen la misma probabilidad de ser seleccionados. Por ejemplo, para una distribución en el rango [−0.2, 0.2]: 

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

Mediante esta instrucción, estableceremos la matriz de pesos (W) con valores seleccionados del intervalo [−0.2, 0.2], donde todos los valores tienen la misma probabilidad de ser seleccionados.

También es posible realizar esta inicialización utilizando una distribución normal o gaussiana, que se define de la siguiente manera:

Inicialización de los pesos y bias en Deep Learning
  • μ es la media.
  • σ es la desviación estándar.
  • σ2 es la varianza.

Por lo tanto, podríamos iniciar la inicialización de nuestros pesos utilizando una distribución normal con μ=0 y σ=0.2. Un ejemplo de esto sería:

Inicialización de los pesos y bias en Deep Learning

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:

//Inicialización de los pesos y bias en Deep Learning
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

Este 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

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

Si quieres saber más sobre qué es el bias en una red neuronal y 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 sobre el 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!

Posts Relacionados

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado