20.6. Création de réseaux de neurones avec Keras et TensorFlow : application de techniques de régularisation et de normalisation
Lors de la création de réseaux neuronaux à l'aide de Keras et TensorFlow, les data scientists et les développeurs de machine learning sont confrontés à des défis courants tels que le surapprentissage, où le modèle apprend des modèles spécifiques à partir de l'ensemble de données d'entraînement mais ne parvient pas à les généraliser à des données invisibles. Pour lutter contre cela, les techniques de régularisation et de normalisation sont essentielles. Dans ce chapitre, nous explorerons comment ces techniques peuvent être appliquées pour améliorer la généralisation des modèles de réseaux neuronaux.
Comprendre le surapprentissage et le sous-apprentissage
Avant de nous plonger dans les techniques de régularisation et de normalisation, il est important de comprendre ce que sont le surapprentissage et le sous-apprentissage. Le surajustement se produit lorsqu'un modèle est si complexe qu'il apprend non seulement des fonctionnalités utiles à partir des données d'entraînement, mais également du bruit ou des fluctuations aléatoires. D'un autre côté, le sous-ajustement se produit lorsque le modèle est trop simple pour capturer la structure sous-jacente des données.
Régularisation
La régularisation est une technique permettant d'éviter le surajustement en ajoutant une pénalité à la fonction de coût du modèle. L'objectif est de limiter la complexité du modèle en l'obligeant à apprendre uniquement les modèles les plus importants dans les données. Il existe différents types de régularisation, tels que L1 (Lasso), L2 (Ridge) et Elastic Net, qui combinent L1 et L2.
- Régularisation L1 : ajoute la valeur absolue des poids en guise de pénalité à la fonction de coût. Cela peut conduire à des pondérations de valeur nulle, ce qui donne lieu à un modèle plus clairsemé.
- Régularisation L2 : ajoute le carré des poids comme pénalité à la fonction de coût. Cela tend à répartir la pénalité sur tous les poids, ce qui donne lieu à des poids plus petits, mais rarement nuls.
Dans Keras, la régularisation peut être facilement ajoutée aux couches de réseau neuronal à l'aide des arguments kernel_regularizer
, bias_regularizer
et activity_regularizer
. Par exemple :
depuis keras.regularizers importer l2
model.add(Dense(units=64, kernel_regularizer=l2(0.01)))
Abandon
Le dropout est une technique de régularisation dans laquelle, pendant l'entraînement, des unités aléatoires sont ignorées (ou "désactivées") à chaque passage avant et arrière. Cela permet d'éviter que des unités/neurones spécifiques ne s'ajustent trop à l'entraînement. Dans Keras, Dropout est ajouté en tant que calque :
à partir de keras.layers import Dropout
model.add (Abandon (taux = 0,5))
Normalisation par lots
La normalisation par lots est une technique permettant de normaliser les activations des couches internes d'un réseau neuronal. Cela permet de stabiliser le processus d'apprentissage et de réduire le nombre d'époques de formation nécessaires pour former des réseaux approfondis. Dans Keras, la normalisation par lots peut être appliquée à l'aide de la couche BatchNormalization
:
à partir de keras.layers, importez BatchNormalization
model.add (BatchNormalization ())
Appliquer la régularisation et la normalisation dans la pratique
Lors de la création d'un modèle de réseau neuronal, il est courant de combiner plusieurs techniques de régularisation et de normalisation pour obtenir les meilleures performances. Un exemple de la façon dont cela peut être fait dans Keras est présenté ci-dessous :
à partir de keras.models, importation séquentielle
à partir de keras.layers, importez Dense, Dropout, BatchNormalization
depuis keras.regularizers importer l1_l2
# Initialisation du modèle
modèle = Séquentiel()
# Ajout de la première couche dense avec régularisation L1 et L2
model.add(Dense(64, activation='relu', input_shape=(input_shape,),
kernel_regularizer=l1_l2(l1=0.01, l2=0.01)))
model.add (BatchNormalization ())
# Ajout d'un abandon pour une régularisation supplémentaire
modèle.ajouter (Abandon (0.5))
# Ajout de la couche de sortie
model.add(Dense(num_classes, activation='softmax'))
# Compilation du modèle
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
Cet exemple montre un modèle qui utilise la régularisation L1 et L2 dans la première couche dense, suivie d'une normalisation par lots et par abandon. La couche de sortie utilise la fonction d'activation softmax, adaptée aux problèmes de classification multi-classes.
Considérations finales
Lors de l'application de la régularisation et de la normalisation, il est important de surveiller à la fois les performances du modèle sur l'ensemble d'entraînement et sur l'ensemble de validation. Cela vous aidera à identifier si le modèle commence à être surajusté ou sous-ajusté et vous permettra d'ajuster les techniques de régularisation et de normalisation selon vos besoins. De plus, il est recommandé d'expérimenter différentes configurations et hyperparamètres pour trouver la combinaison idéale pour votre cas spécifique.
En résumé, créer des réseaux de neurones efficaces avec Keras et TensorFlow implique nIl ne s'agit pas seulement de sélectionner l'architecture et les hyperparamètres appropriés, mais également d'appliquer soigneusement des techniques de régularisation et de normalisation pour garantir que le modèle se généralise bien aux nouvelles données.