web-dev-qa-db-fra.com

Keras: Différence entre les régulateurs de noyau et d'activité

J'ai remarqué que weight_regularizer n'est plus disponible dans Keras et qu'à sa place, il y a activité et noya régularisateur. J'aimerais savoir:

  • Quelles sont les principales différences entre les régularisateurs noya et activité?
  • Puis-je utiliser activity_regularizer à la place de weight_regularizer?
60
Simone

Le régularisateur d'activité fonctionne en fonction de la sortie du réseau et est principalement utilisé pour régulariser les unités cachées, tandis que weight_regularizer, comme son nom l'indique, fonctionne sur les poids, les faisant pourrir. Fondamentalement, vous pouvez exprimer la perte de régularisation en fonction de la sortie (activity_regularizer) ou des poids (weight_regularizer).

Le nouveau kernel_regularizer remplace weight_regularizer - bien que ce ne soit pas très clair dans la documentation.

De la définition de kernel_regularizer:

kernel_regularizer: fonction de régularisation appliquée à la matrice de poids kernel (voir régularisateur).

Et activity_regularizer:

activity_regularizer: fonction de régularisation appliquée à la sortie de la couche (son "activation"). (voir régularisateur).

Important Edit : Notez qu’il ya un bogue dans le activity_regularizer qui était uniquement corrigé dans la version 2.1.4 de Keras (au moins avec le backend Tensorflow). En effet, dans les versions plus anciennes, la fonction de régularisateur d'activité est appliquée à l'entrée du calque, au lieu d'être appliquée à la sortie (les activations réelles du calque, comme prévu). Donc, méfiez-vous si vous utilisez une version plus ancienne de Keras (antérieure à 2.1.4), la régularisation des activités risque de ne pas fonctionner correctement.

Vous pouvez voir le commit sur GitHub

François Chollet a fourni il y a cinq mois un correctif au régularisateur d’activités, qui était ensuite inclus dans Keras 2.1.4

71
Michele Tonutti

Cette réponse est un peu en retard, mais est utile pour les futurs lecteurs. La nécessité est donc la mère de l’invention, comme on dit. Je ne l'ai compris que lorsque j'en avais besoin. La réponse ci-dessus n'indique pas vraiment la différence car les deux finissent par affecter les poids, alors quelle est la différence entre punir les poids eux-mêmes ou la sortie du calque? Voici la réponse: j'ai rencontré un cas où les poids du réseau sont petits et de Nice, allant de [-0,3] à [+0,3]. Donc, je ne peux vraiment pas les punir, il n'y a rien de mal avec eux. Un régularisateur de noyau est inutile. Cependant, la sortie de la couche est énorme, sur 100. N'oubliez pas que l'entrée dans la couche est également petite, toujours inférieure à un. Mais ces petites valeurs interagissent avec les poids de manière à produire ces sorties massives. Ici, j’ai réalisé que ce dont j’ai besoin, c’est d’un régularisateur d’activités, plutôt que d’un régulariseur de noyau. Avec cela, je punis la couche pour ces sorties importantes, je ne me soucie pas de savoir si les poids sont eux-mêmes petits, je veux juste le dissuader d'atteindre un tel état, car cela sature mon activation sigmoïde et cause des tonnes d'autres problèmes, comme disparaître gradient et stagnation.

6
Alex Deft