Couches normalisatrices (LayerNormalization)
Les couches LayerNormalization sont utilisées dans les réseaux de neurones pour normaliser les activations au sein de chaque exemple de manière indépendante. L’objectif est de stabiliser et d’accélérer l’entraînement, notamment dans les architectures récurrentes et les transformers.
Le principe consiste à calculer la moyenne et l’écart-type des activations pour chaque exemple individuellement, puis à appliquer une transformation linéaire avec des paramètres appris (scale et shift). Cette normalisation par exemple rend le réseau moins sensible aux variations des mini-batchs et améliore la stabilité de l’apprentissage.
Les couches LayerNormalization sont utilisées dans les réseaux récurrents, les transformers et d’autres architectures où la taille du batch peut varier ou être petite, et où BatchNormalization serait moins efficace.
En résumé, les couches LayerNormalization permettent de normaliser les activations par exemple, améliorant la stabilité et la performance de l’entraînement dans les architectures sensibles aux variations de batch.
Fonctions :
-
LayerNormalization()
La couche LayerNormalization normalise les activations à l'intérieur de chaque échantillon (plutôt que sur un mini-lot comme BatchNormalization), en calculant la moyenne et la variance sur toutes les caractéristiques d'une couche. Elle est particulièrement efficace pour les modèles séquentiels comme les réseaux récurrents et les transformers.
Importation :
from keras.layers import LayerNormalizationAttributs :
Paramètre Type Description Valeur par défaut axisint ou tuple d’int Axe(s) sur lesquels normaliser (par défaut toutes les caractéristiques sauf batch). -1epsilonfloat Petite valeur pour éviter la division par zéro. 1e-3centerbool Si True, ajoute un paramètre de biais appris.Truescalebool Si True, ajoute un paramètre d’échelle appris.TrueExemple de code :
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LayerNormalization, Activation import numpy as np # Données simulées : 100 exemples avec 20 caractéristiques X = np.random.rand(100, 20) y = np.random.randint(0, 2, size=(100, 1)) # Modèle avec LayerNormalization model = Sequential() model.add(Dense(64, input_shape=(20,))) model.add(LayerNormalization()) model.add(Activation('relu')) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) model.summary()
Explication du code :
Importation des bibliothèques
On importe les couches nécessaires depuis Keras.Création des données
Les données contiennent 100 exemples, chacun avec 20 caractéristiques aléatoires, et une cible binaire.Définition du modèle
Une couche dense est suivie d’une normalisation par couche (`LayerNormalization`), puis d’une activation ReLU.Compilation
Le modèle est compilé avec Adam et une fonction de perte binaire, prêt à l’entraînement.