En serio, ¿qué inicialización de peso funciona para entrenar redes neuronales?

Hay varios enfoques teóricos para esta pregunta (use Google Scholar para encontrar los documentos relevantes).
Sin embargo, algunos investigadores han encontrado que otros valores producen mejores resultados.

Una forma de reducir el tiempo necesario para entrenar es comenzar con los vectores propios de la entrada. Sin embargo, no he intentado esto, pero si lo usa, es posible que desee dividir los valores por alguna constante.

Lo general que desea hacer es evitar la saturación en sus funciones de salida porque entonces la derivada de las funciones de salida está cerca de 0, lo que limita el aprendizaje en ese peso. Los pesos que consigan esto dependen de su función de salida y del número de entradas en cada capa.
Si no utiliza las neuronas de polarización, puede calcular fácilmente el intervalo apropiado para los pesos dada la cantidad de entradas. Si usa una neurona sesgada, se vuelve un poco más complicada y sugiero prueba y error.

Lo importante aquí es usar diferentes intervalos para inicializar diferentes capas.

Me ha resultado muy útil trazar histogramas de las salidas de todas las capas a intervalos regulares (especialmente antes de comenzar el entrenamiento).

Como puede ver, todas las salidas (excepto el sesgo) se centran alrededor del medio de la función de salida (tanh para los primeros tres y logístico para la última capa). Esto evita la saturación al comienzo del entrenamiento.

También podría ayudarlo a trazar los cambios de peso durante el entrenamiento para determinar buenos puntos de partida. Eso se vería algo así:

No creo que haya una buena respuesta a esta pregunta.

¡Busque el teorema de no almuerzo gratis!

Esencialmente, entrenar una red neuronal es buscar un buen conjunto de pesas. El teorema esencialmente nos dice que si me dices tu algoritmo, ¡entonces puedo encontrar un problema para el cual es una mala estrategia!

Cada problema necesita algunos experimentos para encontrar lo que funciona para él.