¿Cuál es el beneficio de la distribución normal truncada al inicializar pesos en una red neuronal?

13

Al inicializar los pesos de conexión en una red neuronal de avance, es importante inicializarlos aleatoriamente para evitar cualquier simetría que el algoritmo de aprendizaje no pueda romper.

La recomendación que he visto en varios lugares (por ejemplo, en el tutorial MNIST de TensorFlow ) es usar la distribución normal truncada usando una desviación estándar de , dondeNes el número de entradas a la capa de neurona dada.1NN

Creo que la fórmula de desviación estándar garantiza que los gradientes retropropagados no se disuelvan o amplifiquen demasiado rápido. Pero no sé por qué estamos usando una distribución normal truncada en lugar de una distribución normal regular. ¿Es para evitar pesos atípicos raros?

MiniQuark
fuente
¿Puede proporcionar la fuente de esta recomendación y / o la cita directa?
Tim
+ Tim Buen punto, agregué un enlace a un ejemplo. Creo que también vi esta recomendación en un documento sobre buenas prácticas de redes neuronales (sin embargo, no puedo encontrarla).
MiniQuark

Respuestas:

13

Creo que se trata de la saturación de las neuronas. Piensa que tienes una función de activación como sigmoide.

ingrese la descripción de la imagen aquí

Si su valor de peso obtiene valor> = 2 o <= - 2, su neurona no aprenderá. Por lo tanto, si trunca su distribución normal, no tendrá este problema (al menos desde la inicialización) en función de su variación. Creo que es por eso que es mejor usar normal truncado en general.

Güngör Basa
fuente
Sí, eso tiene sentido, gracias. Creo que quiso decir "valor> = 2", no 1.
MiniQuark
sí, se supone que es valor> = 2
Güngör Basa
4

El beneficio de usar la distribución normal truncada es evitar la generación de "neuronas muertas" debido al uso de relu_logits , que se explica aquí .

En general, se deben inicializar los pesos con una pequeña cantidad de ruido para romper la simetría y evitar 0 gradientes. Como estamos usando neuronas ReLU, también es una buena práctica inicializarlas con un sesgo inicial ligeramente positivo para evitar "neuronas muertas".

Lerner Zhang
fuente
No estoy seguro de cómo usar truncated_normal evitará las neuronas muertas: no agregará ningún "sesgo inicial ligeramente positivo". ¿Puedes por favor elaborar?
MiniQuark
1
porque la retropropagación solo actualizará las neuronas 'vivas', con alguna contribución distinta de cero a la propagación
Jason