Coupure de gradient lors de la formation de réseaux de neurones profonds

10

Quand voudrait-on effectuer un découpage de gradient lors de la formation d'un RNN ou CNN? Je suis particulièrement intéressé par ce dernier. Quelle serait une bonne valeur de départ pour l'écrêtage? (il peut bien sûr être réglé)

pir
la source

Réponses:

4

Vous souhaitez effectuer un écrêtage de dégradé lorsque vous rencontrez le problème de la disparition des dégradés ou de l'explosion des dégradés. Cependant, pour les deux scénarios, il existe de meilleures solutions:

  • Le gradient explosif se produit lorsque le gradient devient trop grand et que vous obtenez un débordement numérique. Cela peut être facilement résolu en initialisant les poids du réseau à des valeurs plus petites. Si cela ne fonctionne pas, il y a probablement un bogue dans le code.

  • Le gradient de fuite se produit lorsque l'optimisation est coincée dans un point de selle, le gradient devient trop petit pour que l'optimisation progresse. Cela peut être résolu en utilisant une descente de gradient avec une impulsion ou une hélice RMS ou les deux (également connu sous le nom d'optimiseur Adam).

Les valeurs de départ pour la limite supérieure de l'écrêtage du gradient seraient quelque chose de plus petit que le plus grand nombre que la variable peut prendre. Pour la borne inférieure, je dirais que c'est spécifique au problème, mais commencez peut-être par quelque chose comme 1e-10.

Miguel
la source
1
Je ne sais pas si le contexte de cette réponse est censé exclure les RNN, mais si ce n'est pas le cas, les deux solutions proposées ne valent pas mieux que l'écrêtage en gradient, en particulier dans le cas des RNN.
Alex R.
Désolé, je pensais plus dans le contexte des CNN, n'hésitez pas à modifier
Miguel