Aquí hay un escenario:
Supongamos que hay una red neuronal con alguna distribución sobre sus entradas X. Veamos una unidad R de ReLU en particular. Para cualquier conjunto fijo de parámetros, la distribución sobre X implica una distribución sobre las entradas hacia R. Supongamos, para facilitar la visualización, que R las entradas se distribuyen como una Gaussiana de baja varianza centrada en +0.1 .
Bajo este escenario:
- ¿Es la red neuronal para la clasificación en un problema esencial de ajuste de línea o problema de agrupamiento?
- ¿Qué se necesita para construir un robot como Nao?
- ¿Cuáles son algunas cosas interesantes que uno puede lograr a través del aprendizaje automático?
- Con la superinteligencia acercándose rápidamente con el avance continuo en el aprendizaje profundo, ¿estamos subconscientemente preparándonos para la extinción?
- ¿Cortana aprende y mejora con cada consulta, o solo mejora con actualizaciones?
- La mayoría de las entradas a R son positivas , por lo tanto
- La mayoría de las entradas harán que la puerta ReLU esté abierta , por lo tanto
- La mayoría de las entradas harán que los gradientes fluyan hacia atrás a través de R, por lo tanto
- Las entradas de R generalmente se actualizan a través de SGD backprop.
Ahora, suponga que durante un backprop particular, hay un gradiente de gran magnitud pasado hacia atrás a R. Dado que R estaba abierto , pasará este gran gradiente hacia atrás a sus entradas. Esto provoca un cambio relativamente grande en la función que calcula la entrada de R. Esto implica que la distribución sobre las entradas de R ha cambiado; digamos que las entradas a R ahora se distribuyen como un Gaussiano de baja varianza centrado en -0.1 .
Ahora tenemos eso:
- La mayoría de las entradas a R son negativas , por lo tanto
- La mayoría de las entradas harán que la puerta ReLU se cierre , por lo tanto
- La mayoría de las entradas harán que los gradientes no fluyan hacia atrás a través de R, por lo tanto
- Las entradas de R generalmente no se actualizan a través de SGD backprop.
¿Que pasó? Un cambio relativamente pequeño en la distribución de entrada de R (-0.2 en promedio) ha llevado a una diferencia cualitativa en el comportamiento de R. Hemos cruzado el límite cero, y R ahora está casi siempre cerrado. Y el problema es que una ReLU cerrada no puede actualizar sus parámetros de entrada , por lo que una ReLU muerta (muerta = siempre cerrada) permanece muerta.
Matemáticamente, esto se debe a que ReLU calcula la función
[matemáticas] r (x) = \ max (x, 0) [/ matemáticas]
cuyo gradiente es:
[matemáticas] \ nabla_x r (x) = \ mathbb {1} \ {x> 0 \} [/ matemáticas]
Por lo tanto, ReLU cerrará la puerta durante el backprop si y solo si cerró la puerta durante el apoyo hacia adelante. Es probable que un ReLU ̶s̶t̶a̶y̶s̶ ̶d̶e̶a̶d̶ muerto permanezca muerto.
(Editar: como han notado Liu Hu y otros, todavía existe la posibilidad de revivir el ReLU. Recuerde que muchos de los parámetros “aguas arriba” que afectan la distribución de entrada de R todavía se están actualizando a través de otras rutas en el gráfico. Por ejemplo, ” los hermanos “incluyen ReLU que están abiertos y aún pasan gradientes hacia atrás. Estas actualizaciones de los parámetros aguas arriba de R pueden hacer que la distribución de entrada de R vuelva a tener un soporte no trivial en el régimen positivo. Los detalles son un poco complejos: tenga en cuenta que, por ejemplo, en una capa afín, el vector de fila que proporciona directamente entrada a R es realmente no actualizable hasta que R se abre. Por lo tanto, un ReLU completamente muerto solo puede revivirse a través de actualizaciones a la capa de transformación lineal anterior . En particular, el 100% no puede revivir un ReLU muerto al principio capa oculta si la transformación lineal es una afinidad típica sin compartir parámetros. En cualquier caso, el asunto merece un estudio empírico).
No estoy seguro de con qué frecuencia ocurre la muerte de ReLU en la práctica, pero aparentemente con la frecuencia suficiente como para ser algo a tener en cuenta. Esperemos que pueda ver por qué una gran tasa de aprendizaje podría ser el culpable aquí. Cuanto mayor sea la magnitud promedio de las actualizaciones de los pasos SGD, mayor es el riesgo de que podamos empujar toda la distribución de las entradas de R al régimen negativo.
Finalmente, a diferencia de mi ejemplo, puede hacer esto en etapas, donde un paso SGD empuja parte de la distribución fuera del régimen positivo, y un paso SGD posterior empuja el resto de la distribución. En general, puede pensar en la distribución de entrada de R como una especie de caminata aleatoria. Si se da un paso relativamente grande, podría terminar con un ReLU muerto.
Una forma de evitar esto sería evitar las no linealidades que tienen regímenes de gradiente cero (p. Ej., “ReLU permeable”), pero no estoy totalmente seguro de si queremos / necesitamos esto. También se podría considerar tratar de “recuperar” ReLU muertos al detectarlos y reinicializar aleatoriamente sus parámetros de entrada; esto retrasaría el aprendizaje pero podría alentar un uso más eficiente de los parámetros.