¿Cuál es el problema de "ReLU moribundo" en las redes neuronales?


119

En referencia a las notas del curso de Stanford sobre Redes neuronales convolucionales para el reconocimiento visual , un párrafo dice:

"Desafortunadamente, las unidades ReLU pueden ser frágiles durante el entrenamiento y pueden" morir ". Por ejemplo, un gran gradiente que fluye a través de una neurona ReLU podría hacer que los pesos se actualicen de tal manera que la neurona nunca se active en ningún punto de datos nuevamente. Si esto sucede, entonces el gradiente que fluye a través de la unidad será para siempre cero a partir de ese momento. Es decir, las unidades ReLU pueden morir irreversiblemente durante el entrenamiento ya que pueden ser eliminadas del múltiple de datos. Por ejemplo, puede encontrar que hasta 40 El porcentaje de su red puede estar "muerto" (es decir, neuronas que nunca se activan en todo el conjunto de datos de entrenamiento) si la tasa de aprendizaje se establece demasiado alta. Con una configuración adecuada de la tasa de aprendizaje, esto es un problema con menos frecuencia ".

¿Qué significa morir de neuronas aquí?

¿Podría por favor proporcionar una explicación intuitiva en términos más simples?


2
¿Alguien puede encontrar una referencia a algún artículo científico sobre "neuronas muertas"? Como este es el primer resultado en los intentos de Google, sería genial si esta pregunta se editara con una referencia.
Marek Židek

¿Podemos evitar el sesgo mediante la regularización para resolver este problema?
Len

3
Dudes, he logrado revitalizar las neuronas relu muertas al dar nuevos valores aleatorios (distribuidos normalmente) en cada época para pesos <= 0. Uso este método solo junto con pesos de congelación a diferentes profundidades a medida que el entrenamiento continúa a épocas más altas (I ' No estoy seguro de si esto es lo que llamamos transición de fase). Ahora puede usar tasas de aprendizaje más altas, produce una precisión general mejor (solo probado en regresión lineal). Es realmente fácil de implementar.
boli

1
@boli, ¿puedes compartir tu implementación aquí?
Anu

Respuestas:


121

Una ReLU "muerta" siempre genera el mismo valor (cero como sucede, pero eso no es importante) para cualquier entrada. Probablemente se llega a esto aprendiendo un término de sesgo negativo grande para sus pesos.

A su vez, eso significa que no tiene ningún papel en la discriminación entre entradas. Para la clasificación, puede visualizar esto como un plano de decisión fuera de todos los datos de entrada posibles.

Una vez que un ReLU termina en este estado, es poco probable que se recupere, porque el gradiente de la función en 0 también es 0, por lo que el aprendizaje del descenso del gradiente no alterará los pesos. Las ReLU "con fugas" con un pequeño gradiente positivo para las entradas negativas ( y=0.01xcuando x <0, por ejemplo) son un intento de abordar este problema y dar la oportunidad de recuperarse.

Las neuronas sigmoideas y de tanh pueden sufrir problemas similares a medida que sus valores se saturan, pero siempre hay al menos un pequeño gradiente que les permite recuperarse a largo plazo.


77
Buen comentario y también vale la pena mencionar las Unidades Lineales Exponenciales (ELU) que pueden ayudar a abordar ese problema de una mejor manera: arxiv.org/abs/1511.07289
padura

14
@alex: porque el sesgo es muy importante para la precisión. Eliminar el sesgo es lo mismo que decir que todos los planos de decisión deben pasar por el origen; con algunas excepciones, esta es una mala elección. De hecho, deshacerse de los términos de sesgo en una red neuronal o modelos relacionados (como la regresión lineal o la regresión logística) generalmente significará que su modelo sufrirá un sesgo. Es una de las pocas maneras en que puede terminar con un modelo que es tanto ajustado como sobrevalorado al mismo tiempo,
Neil Slater

1
@Alex: creo que es común agregar un pequeño sesgo positivo a las ReLU. No sé si eso ayuda con el "problema de muerte de ReLU": probablemente no cambiaría mucho los valores de gradiente numéricamente (porque el gradiente es 1 o 0 para ReLU, y es cuando es 1 que podría sobrepasarse, un pequeño sesgo inicial parecería hacer muy poca diferencia). Principalmente, creo que es solo un truco agregar un pequeño impulso al aprendizaje inicial, pero eso podría ayudar al comenzar mejor y tener gradientes generalmente más bajos antes.
Neil Slater

1
@max: Te falta la parte "para cualquier entrada" de mi respuesta. Ningún gradiente fluirá a ningún peso asociado con la neurona "muerta" en una red de alimentación, porque se cortan todas las rutas a esos pesos ; no hay rutas alternativas para que el gradiente fluya al subconjunto de pesas que alimentan esa unidad ReLU. Es posible que vea una ReLU en, por ejemplo, una CNN o que tenga pesos compartidos, en cuyo caso todas las ubicaciones en el mapa de características necesitarían cero a la vez. Sin embargo, lo vería como otra instancia de "para cualquier entrada".
Neil Slater

1
@anu: Por descenso en gradiente. Un gran gradiente positivo, causado por un gran valor de error, a su vez puede hacer que un solo paso del término de sesgo sea lo suficientemente grande como para "matar" a la neurona, de modo que alcance un estado (para pesos y sesgo) que futuras entradas a la función ReLU nunca se eleva por encima de 0.
Neil Slater

102

Repasemos cómo se ve la ReLU (unidad lineal rectificada):

xn

zn=i=0kwiain
wiainxnReLU=max(0,zn)

Suponiendo una medida de error muy simple

error=ReLUy

errorzn=δn={1zn00zn<0
wj
error=errorwj=errorzn×znwj=δn×ajn={ajnzn00zn<0

=xn

xnx

zn<0

ReLU=max(0.1x,x)ingrese la descripción de la imagen aquí


¿No estás olvidando el término sesgo en la fórmula para la entrada al rectificador?
Tom Hale

Creo que seguí la notación de algunos libros de texto que suponen que a_0 = 1 para todas las capas, y w_0 es el sesgo. El sesgo no es importante, por lo que es mejor omitirlo de todos modos
MohamedEzz

@MohamedEzz, no entendí tu punto What if, for the input 𝑥𝑛, the current weights put the ReLU on the left flat side while it optimally should be on the right side for this particular input ?, si la entrada es negativa, ¿el gradiente sería 0? ¿Qué es óptimo para este caso? ¿Podrías ayudarme a entenderlo?
Anu

1
Por óptimo, quise decir que si la red hiciera una mejor predicción para esta entrada necesitaba ajustar los pesos para que la ReLU dé un valor positivo, no podría hacer este ajuste debido al gradiente 0 que tiene en el lado plano
MohamedEzz

Respuesta asombrosa Gracias
David Refaeli

13

Las neuronas ReLU generan cero y tienen derivadas cero para todas las entradas negativas. Entonces, si los pesos en su red siempre conducen a entradas negativas en una neurona ReLU, esa neurona efectivamente no está contribuyendo al entrenamiento de la red. Matemáticamente, la contribución del gradiente a las actualizaciones de peso provenientes de esa neurona siempre es cero (consulte el Apéndice matemático para obtener más detalles).

L(W)LLWL

En general, lo que sucede depende de cómo fluye la información a través de la red. Puede imaginar que a medida que avanza el entrenamiento, los valores que producen las neuronas pueden desplazarse y hacer posible que los pesos eliminen todo el flujo de datos a través de algunos de ellos. (Sin embargo, a veces, pueden dejar estas configuraciones desfavorables debido a las actualizaciones de peso anteriores en la red). Exploré esta idea en una publicación de blog sobre la inicialización del peso , que también puede contribuir a este problema, y ​​su relación con el flujo de datos. Creo que mi punto aquí puede ilustrarse con una trama de ese artículo:

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

El gráfico muestra las activaciones en un Perceptrón multicapa de 5 capas con activaciones ReLU después de un paso por la red con diferentes estrategias de inicialización. Puede ver que, dependiendo de la configuración del peso, las salidas de su red se pueden estrangular.

Apéndice Matemático

Lxj(i)jif(s)=max(0,s)sj(i)(i+1)i(i+1)

Lwjk(i)=Lxk(i+1)xk(i+1)wjk(i).

El primer término de la derecha se puede calcular de forma recursiva. El segundo término a la derecha es el único lugar que involucra directamente el peso y se puede dividir enwjk(i)

xk(i+1)wjk(i)=f(sj(i))sj(i)sj(i)wjk(i)=f(sj(i))xj(i).

De esto puede ver que si los resultados son siempre negativos, los pesos que conducen a la neurona no se actualizan y la neurona no contribuye al aprendizaje.


¡gran explicación !, ¿podría ayudarme a comprender Therefore, if your inputs are on roughly the same scale, a large step in the direction of the gradient can leave you with weights that give similar inputs which can end up being negative.cómo los pesos se vuelven negativos si las entradas se normalizan?
Anu

@anu La actualización de peso es , por lo que si da un gran paso, lo que significa en este caso seleccionar un gran , y si es positivo, puede ver que puede convertirse en negativo. Esto es especialmente malo si actualizamos el sesgo para que sea un valor negativo grande. wλdwλdww
Johnson

@JohnsonJia, genial, lo tengo :), se necesita una aclaración más, ¿por qué es especialmente malo en caso de sesgo en comparación con el peso, ya que la contribución negativa podría ser tanto en peso como en sesgo, corrígeme si estoy equivocado?
Anu

Debido a que la entrada no modifica el sesgo: , por lo que si es muy negativo, puede permanecer negativo para todos los valores de . b z xz=wx+bbzx
Johnson

5

Para ser más específicos en el lenguaje, mientras que el gradiente local de ReLU (que es ) multiplica el gradiente que fluye hacia atrás debido a la propagación hacia atrás, el resultado del gradiente actualizado podría ser un gran número negativo (si el gradiente que fluye- El reverso es un número negativo grande).1

Tal gradiente actualizado negativo grande produce un negativo cuando la tasa de aprendizaje es relativamente grande, por lo tanto, reprimirá las actualizaciones que sucederán en esta neurona, ya que es casi imposible colocar un número positivo grande para compensar el gran número negativo traído por eso " roto " .w iwiwi


4

El "Dying ReLU" se refiere a la neurona que genera 0 para sus datos en el conjunto de entrenamiento. Esto sucede porque la suma de las entradas de peso * en una neurona (también llamada activación ) se convierte en <= 0 para todos los patrones de entrada. Esto hace que ReLU produzca 0. Como la derivada de ReLU es 0 en este caso, no se realizan actualizaciones de peso y la neurona se atasca en la salida 0.

Cosas a tener en cuenta:

  1. Morir ReLU no significa que la producción de neuronas seguirá siendo cero en el momento de la prueba también. Dependiendo de las diferencias de distribución, este puede o no ser el caso.
  2. Morir ReLU no es una muerte permanente. Si agrega nuevos datos de entrenamiento o usa un modelo previamente entrenado para un nuevo entrenamiento, ¡estas neuronas podrían retroceder!
  3. Técnicamente muriendo ReLU no tiene que generar 0 para TODOS los datos de entrenamiento. Puede suceder que produzca datos distintos de cero para algunos datos, pero el número de épocas no es suficiente para mover pesos significativamente.