¿Cuáles son los buenos pesos iniciales en una red neuronal?

68

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(1d,1d)d

¿Por qué es una buena idea?

elmes
fuente
Consulte mi tesis de maestría, página 81 para obtener una descripción general de las técnicas de inicialización.
Martin Thoma

Respuestas:

47

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 221/10101/220001022002

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 ( - 101d01(1d,1d)0 d[-4,4]d13d[4,4]d

Con entradas que no están normalizadas, esos pesos pueden no ser efectivos para evitar la saturación.

Douglas Zare
fuente
1
Básicamente, uno siempre debería al menos considerar normalizar los datos ... Tiene sentido ahora. ¿Podría explicar por qué la desviación estándar será 1/3 y qué tan pequeña es la probabilidad de suma de entrada fuera del rango <-4,4>?
elmes
1
Hay algunas propiedades básicas de varianza que implican esto: si e son independientes, entonces y si e son independientes y tienen una media de , entonces . Y Var ( X + Y ) = Var ( X ) + Var ( Y ) X Y 0 Var ( X Y ) = Var ( X ) Var ( Y )XYVar(X+Y)=Var(X)+Var(Y)XY0Var(XY)=Var(X)Var(Y)
Douglas Zare
1
Puede estimar la probabilidad de que una variable aleatoria esté al menos a desviaciones estándar de la media utilizando la desigualdad de Chebyshev. En la práctica, esto no es agudo, pero el resultado exacto depende de la distribución. 12
Douglas Zare
Por cierto, calculé mal. La varianza es por lo que la desviación estándar es . 1313
Douglas Zare
1
"La función logística es casi plana para entradas grandes positivas o negativas. La derivada en una entrada de ..." ¿No debería ser el tema relevante la derivada de la función de costo de la regresión logística? ¿Por qué la entrada a la derivada de la función de costo ya está escalada por la función logística a (0,1) independientemente del tamaño de los pesos y las señales?
Moobie
28

[1] aborda la pregunta:

Primero, los pesos no deben establecerse en ceros para romper la simetría cuando se reprograma:

Los sesgos generalmente se pueden inicializar a cero, pero los pesos se deben inicializar con cuidado para romper la simetría entre las unidades ocultas de la misma capa. Debido a que las diferentes unidades de salida reciben diferentes señales de gradiente, este problema de ruptura de simetría no concierne a los pesos de salida (en las unidades de salida), que por lo tanto también se puede establecer en cero.

Algunas estrategias de inicialización:

  • [2] y [3] recomiendan escalar por el inverso de la raíz cuadrada del abanico
  • Glorot y Bengio (2010) y los Tutoriales de aprendizaje profundo utilizan una combinación de fan-in y fan-out:
    • para unidades de tangente hiperbólica: muestrear un Uniforme (-r, r) con (fan-in es el número de entradas de la unidad).r=6fan-in+fan-out
    • para unidades sigmoides: muestre un Uniforme (-r, r) con (fan-in es el número de entradas de la unidad).r=46fan-in+fan-out
  • en el caso de los RBM, un gaussiano de media cero con una pequeña desviación estándar de alrededor de 0.1 o 0.01 funciona bien (Hinton, 2010) para inicializar los pesos.
  • Inicialización de matriz aleatoria ortogonal, es decir W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W), utilizarla ucomo matriz de inicialización.

Además, la capacitación previa sin supervisión puede ayudar en algunas situaciones:

Una elección importante es si se debe usar un entrenamiento previo no supervisado (y qué algoritmo de aprendizaje de características no supervisado usar) para inicializar los parámetros. En la mayoría de los entornos, hemos encontrado pre-entrenamiento no supervisado para ayudar y muy raramente dañar, pero por supuesto eso implica tiempo de entrenamiento adicional e hiperparámetros adicionales.

Algunas bibliotecas ANN también tienen algunas listas interesantes, por ejemplo, Lasagne :

Constant([val]) Initialize weights with constant value.
Normal([std, mean]) Sample initial weights from the Gaussian distribution.
Uniform([range, std, mean]) Sample initial weights from the uniform distribution.
Glorot(initializer[, gain, c01b])   Glorot weight initialization.
GlorotNormal([gain, c01b])  Glorot with weights sampled from the Normal distribution.
GlorotUniform([gain, c01b]) Glorot with weights sampled from the Uniform distribution.
He(initializer[, gain, c01b])   He weight initialization.
HeNormal([gain, c01b])  He initializer with weights sampled from the Normal distribution.
HeUniform([gain, c01b]) He initializer with weights sampled from the Uniform distribution.
Orthogonal([gain])  Intialize weights as Orthogonal matrix.
Sparse([sparsity, std]) Initialize weights as sparse matrix.

[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

Franck Dernoncourt
fuente
2
Me gustaría agregar dos referencias útiles: 1) Profundizar en los rectificadores: Superar el rendimiento a nivel humano en la clasificación de ImageNet - acerca de la importancia de la escala consciente de la activación arxiv.org/abs/1502.01852 2) Soluciones exactas a la dinámica no lineal de aprendizaje en redes neuronales lineales profundas arxiv.org/abs/1312.6120~~V~~3rd - matrices ortonormales son mucho mejor que sólo el ruido de Gauss
viejo-UFO
1
Un editor sugiere que las inicializaciones para el sigmoide y la tangente hiperbólica deben cambiarse para que coincidan con el documento original.
gung - Restablece a Monica
2
¿Querías mantener esta edición, Frank? Si no, puede retrocederlo.
gung - Restablece a Monica
Debo estar perdiendo algo. ¿Dónde dice en el artículo de Glorot y Bengio (2010) que recomiendan usar 4 veces el valor de la ecuación 16 cuando se usan funciones de activación sigmoidea logística? La ecuación 16 se deriva del uso de la ecuación 12 y la varianza de una distribución uniforme, pero la ecuación 16 se deriva asumiendo una activación simétrica con derivada unitaria en 0. Por lo tanto, por ejemplo, una función de activación de tanh, pero no una función de activación logística (no simétrica). Además, ni siquiera prueban esta inicialización propuesta con sigmoide logístico; solo lo prueban con tanh y softsign.
Tommy L
10

<xi>=0
<xi2>=1

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.

y=g(a)
a=i=0dwixi
<a>=i=0d<wixi>=i=0d<wi><xi>=0
<a2>=(i=0dwixi)(i=0dwixi)=i=0d<wi2><xi2>=σ2d
<wiwj>=δij
revs juampa
fuente
<xi2>=10
σααα
Esto es especialmente cierto para las redes neuronales profundas, donde las unidades tienden a saturarse rápidamente a medida que agrega capas. Hay varios documentos que abordan esa pregunta. Un buen punto de partida podría ser "Comprender la dificultad de entrenar redes neuronales de alimentación profunda" por glorot y bengio
jpmuc
10

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)donde nes 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: La convergencia de un modelo grande de 22 capas.

Ambodi
fuente
¡Guauu! Mejora significativa para mí.
Thomas W
Sin embargo, no para grandes cantidades de entradas ... falla con MNIST.
Thomas W
Tenga en cuenta que la inicialización He está específicamente diseñada para (P) ReLU y explica el hecho de que no es simétrica (que es una de las suposiciones en la inicialización Xavier). ¡No se deje engañar por este gráfico fuera de contexto!
Mr Tsjolder
5

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.

Activaciones en un MLP ReLU con diferentes estrategias de inicialización

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.

x(i)iniw(i)(i+1)ff(s)1

Var(x(i+1))=niVar(x(i))Var(w(i))

Var(x(i+1))=Var(x(i))

Var(w(i))=1ni.

Lxj(i)Δj(i)

Var(Δ(i))=ni+1Var(Δ(i+1))Var(w(i)).

ni=ni+1

Var(w(i))=2ni+ni+1.

N(0,σ)σ=2ni+ni+1U(a,a)a=6ni+ni+1Var(U(a,a))=a2/3

tanhReLUf(s)=ReLU(s)

Var(w(i))=2ni.
Andre P
fuente
3

μB=1mi=1Mxi   and   σB2=1mi=1m(xiμB)2x^i=xiμBσB2+ϵ   and   BN(xi)=γx^i+β
xiBN(xi)x^iγβ

γβx^ixixix^iβγdurante el entrenamiento. Por lo tanto, la normalización por lotes estabiliza el aprendizaje.

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.

Vadim Smolyakov
fuente