Keras: différence entre les régularisateurs de noyau et d'activité

87

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

  • Quelles sont les principales différences entre les régulateurs de noyau et d' activité ?
  • Puis-je utiliser activity_regularizer à la place de weight_regularizer ?
Simone
la source

Réponses:

86

Le régulariseur 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, travaille sur les poids, les faisant se désintégrer. Fondamentalement, vous pouvez exprimer la perte de régularisation en fonction de la sortie ( activity_regularizer) ou des poids ( weight_regularizer).

Le nouveau kernel_regularizerremplace weight_regularizer- bien que ce ne soit pas très clair d'après la documentation.

D'après la définition de kernel_regularizer:

kernel_regularizer: fonction de régularisation appliquée à la kernelmatrice de poids (voir régulariseur).

Et activity_regularizer:

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

Modification importante : notez qu'il existe un bogue dans activity_regularizer qui n'a été corrigé que dans la version 2.1.4 de Keras (au moins avec le backend Tensorflow). En effet, dans les anciennes versions, la fonction de régularisation 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). Alors méfiez-vous si vous utilisez une ancienne version de Keras (avant 2.1.4), la régularisation des activités peut probablement ne pas fonctionner comme prévu.

Vous pouvez voir le commit sur GitHub

Il y a cinq mois, François Chollet a fourni un correctif au régulariseur d'activité, qui a ensuite été inclus dans Keras 2.1.4

Michele Tonutti
la source
Êtes-vous complètement sûr de ce kernel_regularizerremplacement weight_regularizer?
Simone
3
Je trouve de nombreux exemples utilisant kernel_regularizer, mais pas pour activity_regularizer. Pouvez-vous commenter les cas d'utilisation de activity_regularizer?
Milad M
1
Pourquoi voudriez-vous régulariser la sortie des couches cachées? Est-ce pour la même raison que nous normalisons les entrées sur la plage (-1, 1) ou (0, 1). C'est-à-dire garder les entrées des couches suivantes plus petites pour faciliter le processus SGD?
Nagabhushan Baddi
1
@NagabhushanBaddi voir cette réponse: datascience.stackexchange.com/a/15195/32811
Michele Tonutti
1
@FinncentPrice Je ne peux que supposer qu'il était là et maintenant il ne l'est plus
Michele Tonutti
35

Cette réponse est un peu tardive, mais est utile pour les futurs lecteurs. Ainsi, la nécessité est 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 pour les poids eux-mêmes ou la sortie de la couche?
Voici la réponse: j'ai rencontré un cas où les poids du filet sont petits et gentils, 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égulariseur de noyau est inutile. Cependant, la sortie de la couche est ÉNORME, en 100.
Gardez à l'esprit que l'entrée du calque est également petite, toujours inférieure à un. Mais ces petites valeurs interagissent avec les pondérations de manière à produire ces extrants massifs. Ici, j'ai réalisé que ce dont j'avais besoin, c'est d'un régulariseur d'activité, plutôt que d'un régulariseur de noyau. Avec cela, je punis la couche pour ces grandes sorties, je m'en fiche si les poids eux-mêmes sont petits, je veux juste le dissuader d'atteindre un tel état car cela sature mon activation sigmoïde et provoque des tonnes d'autres problèmes comme la disparition gradient et stagnation.

Alex Deft
la source
Vraiment intuitif.
Sarang Manjrekar