2016-12-27 6 views
0

J'utilise caffe, en détail pycaffe, pour créer mon réseau neuronal. J'ai remarqué que je devais utiliser BatchNormLayer pour obtenir un résultat positif. J'utilise le Kappa-Score comme matrice de résultat. J'ai maintenant vu plusieurs emplacements différents pour les couches BatchNorm dans mon réseau. Mais je suis tombé sur ScaleLayer, qui n'est pas dans le catalogue des calques mais qui est souvent mentionné avec le calque BatchNormDois-je utiliser un Scale-Layer après chaque couche BatchNorm?

Avez-vous toujours besoin de mettre un ScaleLayer après un BatchNorm - Layer et que fait-il?

+1

Copie possible de [Qu'est-ce que "batch normalizaiton"? pourquoi l'utiliser? comment affecte-t-il la prédiction?] (http://stackoverflow.com/questions/41269570/what-is-batch-normalizaiton-why-using-it-how-does-it-affect-prediction) – Shai

+1

Il est presque le même question, mais ne se réfère pas au problème avec la couche d'échelle après la couche batchnorm – Kev1n91

+0

répondre à la plupart de cette question. Envisageriez-vous de le reformuler, de sorte qu'il est plus spécifique aux sujets non couverts par la question liée? – Shai

Répondre

3

De l'original batch normalization paper par Ioffe & Szegedy: "nous nous assurons que la transformation insérée dans le réseau peut représenter la transformation d'identité." Sans la couche Scale après la couche BatchNorm, ce ne serait pas le cas car la couche Caffe BatchNorm n'a pas de paramètres apprenables.

J'ai appris ceci à partir du Deep Residual Networks git repo; Voir l'article 6 sous les clauses de non-responsabilité et les problèmes connus.

+0

Donc, en référence à caffe on doit utiliser ScaleLayer après BatchNorm Layer, mais dans sa forme habituelle, il n'est pas des conseils comme dans la réponse par @Prune – Kev1n91

+0

@ Kev1n91 Après avoir fait ma propre implémentation naïve de la norme de batch (spatiale) en Python, J'ai lutté pour utiliser BatchNorm dans le café correctement. Certaines informations potentiellement plus utiles, que je viens de trébucher, peuvent être trouvées ici: https://github.com/BVLC/caffe/issues/3347 – JefferyRPrice

3

En général, vous ne bénéficierez pas d'une couche d'échelle juxtaposée avec la normalisation par lots. Chacun est une transformation linéaire. Où BatchNorm traduit de sorte que la nouvelle distribution a une moyenne de 0 et une variance de 1, Scale compresse toute la plage dans un intervalle spécifié, généralement [0,1]. Puisqu'il s'agit de deux transformations linéaires, si vous les faites en séquence, la seconde annulera complètement le travail de la première.

Ils traitent également différemment avec les valeurs aberrantes. Considérons un ensemble de données: dix valeurs, cinq chacune de -1 et +1. BatchNorm ne changera pas du tout: il a déjà la moyenne 0 et la variance 1. Pour la cohérence, spécifions le même intervalle pour Scale, [-1, 1], qui est aussi un choix populaire.

Maintenant, ajoutez une valeur aberrante de, disons 99 au mélange. Scale transformera l'ensemble à l'intervalle [-1, 1] de sorte qu'il y ait maintenant cinq valeurs de -1.00, une valeur de +1.00 (l'ancienne 99) et cinq valeurs de -0.96 (auparavant +1).

BatchNorm s'inquiète de l'écart type moyen et non des valeurs max et min. Le nouveau moyen est +9; le S.D. est 28.48 (arrondissant tout à 2 décimales). Les nombres seront mis à l'échelle pour être approximativement cinq valeurs de -35 et -28, et une valeur de 3,16

Si une mise à l'échelle fonctionne mieux que l'autre dépend beaucoup de l'inclinaison et de la dispersion de votre distribution. Je préfère BatchNorm, car il a tendance à mieux se différencier dans les régions denses d'une distribution.