Tengo curiosidad acerca de cómo los gradientes se propagan hacia atrás a través de una red neuronal utilizando módulos ResNet / conexiones de omisión. He visto un par de preguntas sobre ResNet (por ejemplo, red neuronal con conexiones de capa de salto ), pero esta pregunta específicamente sobre la propagación hacia atrás de gradientes durante el entrenamiento.
La arquitectura básica está aquí:
Leí este documento, Estudio de redes residuales para el reconocimiento de imágenes , y en la Sección 2 hablan sobre cómo uno de los objetivos de ResNet es permitir una ruta más corta / más clara para que el gradiente se propague hacia atrás a la capa base.
¿Alguien puede explicar cómo fluye el gradiente a través de este tipo de red? No entiendo cómo la operación de adición, y la falta de una capa parametrizada después de la adición, permite una mejor propagación del gradiente. ¿Tiene algo que ver con cómo el gradiente no cambia cuando fluye a través de un operador de suma y de alguna manera se redistribuye sin multiplicación?
Además, puedo entender cómo se alivia el problema del gradiente de fuga si el gradiente no necesita fluir a través de las capas de peso, pero si no hay flujo de gradiente a través de los pesos, ¿cómo se actualizan después del paso hacia atrás?
the gradient doesn't need to flow through the weight layers
, ¿podrías explicar eso?Respuestas:
Agregar envía el gradiente de nuevo por igual a ambas entradas. Puede convencerse de esto ejecutando lo siguiente en tensorflow:
Salida:
Entonces, el gradiente será:
Editar: hay una pregunta: "¿cuál es la operación en el punto donde la conexión de la autopista y el bloque de la red neuronal se unen nuevamente, en la parte inferior de la Figura 2?"
La respuesta es: se resumen. Puede ver esto en la fórmula de la Figura 2:
Lo que esto dice es que:
Edición 2:
Reescribiendo en palabras ligeramente diferentes:
Los bloques residuales modifican los gradientes que fluyen hacia atrás, pero no hay funciones de 'aplastamiento' o 'activación' por las que fluyen los gradientes. Las funciones de 'aplastamiento' / 'activación' son las que causan el problema del gradiente de explosión / desaparición, por lo que al eliminarlas del bus mismo, mitigamos este problema considerablemente.
Edición 3: Personalmente, imagino un resnet en mi cabeza como el siguiente diagrama. Es topológicamente idéntico a la figura 2, pero muestra más claramente tal vez cómo el bus fluye directamente a través de la red, mientras que los bloques residuales simplemente tocan los valores de él y agregan / eliminan algún pequeño vector contra el bus:
fuente