Acabo de escuchar que es una buena idea elegir los pesos iniciales de una red neuronal del rango , donde es el cantidad de entradas a una neurona dada. Se supone que los conjuntos están normalizados: media 0, varianza 1 (no sé si esto importa).d
¿Por qué es una buena idea?
Respuestas:
Supongo que estás usando neuronas logísticas y que estás entrenando por gradiente descendente / propagación hacia atrás.
La función logística es casi plana para grandes entradas positivas o negativas. La derivada en una entrada de es aproximadamente , pero en la derivada es aproximadamente . Esto significa que si la entrada de una neurona logística es , entonces, para una señal de entrenamiento dada, la neurona aprenderá aproximadamente veces más lentamente que si la entrada fuera .1 / 10 10 1 / 22 000 10 2200 22 1 / 10 10 1 / 22000 10 2200 2
Si desea que la neurona aprenda rápidamente, necesita producir una señal de entrenamiento enorme (como con una función de pérdida de entropía cruzada) o desea que la derivada sea grande. Para hacer que la derivada sea grande, establezca los pesos iniciales para que a menudo obtenga entradas en el rango .[−4,4]
Los pesos iniciales que le dé podrían funcionar o no. Depende de cómo se normalizan las entradas. Si las entradas están normalizadas para tener media y desviación estándar , entonces una suma aleatoria de términos con pesos uniformes en tendrá media y varianza , independiente de . La probabilidad de que obtenga una suma fuera de es pequeña. Eso significa que a medida que aumenta , no está causando que las neuronas comiencen a saturarse para que no aprendan.1 d ( - 10 1 d 01(−1d√,1d√) 0 d[-4,4]d13 d [−4,4] d
Con entradas que no están normalizadas, esos pesos pueden no ser efectivos para evitar la saturación.
fuente
[1] aborda la pregunta:
Primero, los pesos no deben establecerse en ceros para romper la simetría cuando se reprograma:
Algunas estrategias de inicialización:
W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)
, utilizarlau
como matriz de inicialización.Además, la capacitación previa sin supervisión puede ayudar en algunas situaciones:
Algunas bibliotecas ANN también tienen algunas listas interesantes, por ejemplo, Lasagne :
[1] Bengio, Yoshua. " Recomendaciones prácticas para la formación basada en gradientes de arquitecturas profundas " . Redes neuronales: trucos del oficio. Springer Berlin Heidelberg, 2012. 437-478.
[2] LeCun, Y., Bottou, L., Orr, GB y Muller, K. (1998a). Backprop eficiente. En redes neuronales, trucos del oficio .
[3] Glorot, Xavier y Yoshua Bengio. " Comprender la dificultad de entrenar redes neuronales de alimentación profunda ". Conferencia internacional sobre inteligencia artificial y estadística. 2010
fuente
La pregunta es: ¿cómo elegir mejor los pesos? La idea es elegir valores de los pesos al azar siguiendo una distribución que ayude al proceso de optimización a converger en una solución significativa.
fuente
Bueno, solo como una actualización, Profundizando en los rectificadores: superando el rendimiento a nivel humano n La clasificación de ImageNet de He et al introdujo una inicialización específicamente con la inicialización,
w = U([0,n]) * sqrt(2.0/n)
donden
es el número de entradas de su NN. He visto esta inicialización utilizada en muchos trabajos recientes (también con ReLU). En realidad, muestran cómo esto comienza a reducir la tasa de error mucho más rápido que el (-1 / n, 1 / n) que mencionó. Para una explicación detallada, vea el documento, pero aquí está lo rápido que converge:fuente
La idea es que desee inicializar los pesos de una manera que garantice un buen flujo de datos hacia adelante y hacia atrás a través de la red. Es decir, no desea que las activaciones se reduzcan o aumenten constantemente a medida que avanza por la red.
Esta imagen muestra las activaciones de un Perceptrón multicapa ReLU de 5 capas bajo 3 estrategias de inicialización diferentes después de una pasada de MNIST a través de la red.
En los tres casos, los pesos se extraen de una distribución normal centrada en cero que está determinada por su desviación estándar. Puede ver que si los pesos iniciales son demasiado pequeños (la desviación estándar es pequeña) las activaciones se ahogan, y que si son demasiado grandes las activaciones explotan. El valor medio, que es aproximadamente correcto, se puede encontrar configurando los pesos de manera que la variación de las activaciones y actualizaciones de gradiente permanezca aproximadamente igual a medida que pasa a través de la red.
Escribí una publicación de blog sobre la inicialización del peso que entra en más detalles, pero la idea básica es la siguiente.
fuente
Como resultado, Batch Normalization permite un entrenamiento más rápido al usar tasas de aprendizaje mucho más altas y alivia el problema de una mala inicialización. BN también hace posible el uso de no linealidades de saturación al evitar que la red se atasque en los modos de saturación. En resumen, Batch Normalization es una transformación diferenciable que introduce activaciones normalizadas en la red. En la práctica, se puede insertar una capa BN inmediatamente después de una capa completamente conectada.
fuente