Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

trainingOptions

Options d’un réseau de neurones d’apprentissage pour le Deep Learning

Description

exemple

options = trainingOptions(solverName) renvoie les options d’apprentissage de l’optimisation spécifiée par solverName. Pour entraîner un réseau, utilisez les options d’apprentissage comme argument d’entrée de la fonction trainNetwork.

exemple

options = trainingOptions(solverName,Name=Value) renvoie des options d’apprentissage avec des options complémentaires spécifiées par un ou plusieurs arguments nom-valeur.

Exemples

réduire tout

Créez un jeu d’options pour l’apprentissage d’un réseau avec une descente de gradient stochastique avec momentum. Réduisez le taux d’apprentissage d’un facteur de 0,2 tous les 5 epochs. Définissez un nombre maximal d’epochs pour l’apprentissage de 20 et utilisez un mini-batch avec 64 observations à chaque itération. Activez le tracé de la progression de l’apprentissage.

options = trainingOptions("sgdm", ...
    LearnRateSchedule="piecewise", ...
    LearnRateDropFactor=0.2, ...
    LearnRateDropPeriod=5, ...
    MaxEpochs=20, ...
    MiniBatchSize=64, ...
    Plots="training-progress")
options = 
  TrainingOptionsSGDM with properties:

                        Momentum: 0.9000
                InitialLearnRate: 0.0100
               LearnRateSchedule: 'piecewise'
             LearnRateDropFactor: 0.2000
             LearnRateDropPeriod: 5
                L2Regularization: 1.0000e-04
         GradientThresholdMethod: 'l2norm'
               GradientThreshold: Inf
                       MaxEpochs: 20
                   MiniBatchSize: 64
                         Verbose: 1
                VerboseFrequency: 50
                  ValidationData: []
             ValidationFrequency: 50
              ValidationPatience: Inf
                         Shuffle: 'once'
                  CheckpointPath: ''
             CheckpointFrequency: 1
         CheckpointFrequencyUnit: 'epoch'
            ExecutionEnvironment: 'auto'
                      WorkerLoad: []
                       OutputFcn: []
                           Plots: 'training-progress'
                  SequenceLength: 'longest'
            SequencePaddingValue: 0
        SequencePaddingDirection: 'right'
            DispatchInBackground: 0
         ResetInputNormalization: 1
    BatchNormalizationStatistics: 'population'
                   OutputNetwork: 'last-iteration'

Cet exemple montre comment surveiller le processus d’apprentissage des réseaux de Deep Learning.

Lorsque vous entraînez des réseaux pour le Deep Learning, il est souvent utile de surveiller la progression de l’apprentissage. En réalisant des tracés de diverses métriques pendant l’apprentissage, vous pouvez savoir comment progresse l’apprentissage. Par exemple, vous pouvez déterminer si la précision du réseau s’améliore et dans quelle mesure, et si le réseau commence à provoquer un surajustement des données d’apprentissage.

Cet exemple montre comment surveiller la progression de l’apprentissage pour des réseaux entraînés avec la fonction trainNetwork. Pour des réseaux entraînés avec une boucle d’apprentissage personnalisée, utilisez un objet trainingProgressMonitor pour tracer les métriques pendant l’apprentissage. Pour plus d’informations, veuillez consulter Monitor Custom Training Loop Progress.

Lorsque vous définissez l’option d’apprentissage Plots à "training-progress" dans trainingOptions et commencez l’apprentissage d’un réseau, trainNetwork crée une figure et affiche les métriques à chaque itération. Chaque itération est une estimation du gradient et une mise à jour des paramètres du réseau. Si vous spécifiez des données de validation dans trainingOptions, la figure montre les métriques de validation chaque fois que trainNetwork valide le réseau. La figure trace les éléments suivants :

  • Précision de l’apprentissage — Précision de la classification sur chaque mini-batch individuel.

  • Précision lissée de l’apprentissage — Précision lissée de l’apprentissage, obtenue en appliquant un algorithme de lissage à la précision de l’apprentissage. Elle présente moins de bruit que la précision non lissée, ce qui permet de repérer plus facilement des tendances.

  • Précision de la validation — Précision de la classification sur l’ensemble du jeu de validation (spécifié avec trainingOptions).

  • Perte de l’apprentissage, perte lissée de l’apprentissage et perte de la validation — La perte sur chaque mini-batch, sa version lissée et la perte sur le jeu de validation. Si la couche finale de votre réseau est une classificationLayer, la fonction de perte est la perte d’entropie croisée. Pour plus d’informations sur les fonctions de perte pour des problèmes de classification et de régression, veuillez consulter Output Layers.

Pour les réseaux de régression, la figure trace la racine de l’erreur quadratique moyenne (RMSE) à la place de la précision.

La figure marque chaque Epoch d’apprentissage avec un arrière-plan ombré. Un epoch est un passage complet sur l’ensemble du jeu de données.

Pendant l’apprentissage, vous pouvez arrêter l’apprentissage et revenir à l’état actuel du réseau en cliquant sur le bouton dans le coin supérieur droit. Par exemple, vous pourriez vouloir arrêter l’apprentissage lorsque la précision du réseau atteint un plateau et qu’il est clair que la précision ne s’améliore plus. Une fois que vous avez cliqué sur le bouton d’arrêt, l’apprentissage peut prendre un certain temps pour s’achever. Une fois l’apprentissage terminé, trainNetwork renvoie le réseau entraîné.

Lorsque l’apprentissage est fini, affichez les Résultats montrant la précision de la validation finalisée et la raison pour laquelle l’apprentissage s’est terminé. Si l’option d’apprentissage OutputNetwork est "last-iteration" (par défaut), les métriques finalisées correspondent à la dernière itération de l’apprentissage. Si l’option d’apprentissage OutputNetwork est "best-validation-loss" (par défaut), les métriques finalisées correspondent à l’itération avec la plus petite perte de validation. L’itération à partir de laquelle les métriques de validation finales sont calculées est étiquetée Final dans les tracés.

Si votre réseau contient des couches de normalisation par batch, les métriques de validation finales peuvent être différentes des métriques de validation évaluées pendant l’apprentissage. En effet, les statistiques de moyenne et de variance utilisées pour la normalisation par batch peuvent être différentes une fois que l’apprentissage est terminé. Par exemple, si l’option d’apprentissage BatchNormalizationStatisics est "population", après l’apprentissage, le software finalise les statistiques de normalisation par batch en passant à nouveau par les données d’apprentissage et utilise la moyenne et la variance correspondantes. Si l’option d’apprentissage BatchNormalizationStatisics est "moving", le software approxime les statistiques pendant l’apprentissage en utilisant une estimation en continue et utilise les dernières valeurs des statistiques.

Des informations sur le temps et les paramètres d’apprentissage s’affichent à droite. Pour en savoir plus sur les options d’apprentissage, veuillez consulter Set Up Parameters and Train Convolutional Neural Network.

Pour enregistrer le tracé de la progression de l’apprentissage, cliquez sur Export Training Plot dans la fenêtre d’apprentissage. Vous pouvez enregistrer le tracé en tant que fichier PNG, JPEG, TIFF ou PDF. Vous pouvez également enregistrer les tracés individuels de perte, de précision et de racine de l’erreur quadratique moyenne avec la barre d’outils des axes.

Tracer la progression de l’apprentissage pendant l’apprentissage

Entraînez un réseau et tracez la progression de l’apprentissage pendant l’apprentissage.

Chargez les données d’apprentissage qui contiennent 5 000 images de chiffres. Réservez 1 000 images pour la validation du réseau.

[XTrain,YTrain] = digitTrain4DArrayData;

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

Construisez un réseau pour classer les images de chiffres.

layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(3,8,Padding="same")
    batchNormalizationLayer
    reluLayer   
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,16,Padding="same")
    batchNormalizationLayer
    reluLayer
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,32,Padding="same")
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Spécifiez les options pour l’apprentissage du réseau. Pour valider le réseau à intervalles réguliers pendant l’apprentissage, spécifiez les données de validation. Choisissez la valeur ValidationFrequency pour que le réseau soit validé environ une fois par epoch. Pour tracer la progression de l’apprentissage pendant l’apprentissage, définissez l’option d’apprentissage Plots à "training-progress".

options = trainingOptions("sgdm", ...
    MaxEpochs=8, ...
    ValidationData={XValidation,YValidation}, ...
    ValidationFrequency=30, ...
    Verbose=false, ...
    Plots="training-progress");

Entraînez le réseau.

net = trainNetwork(XTrain,YTrain,layers,options);

{"String":"Figure Training Progress (05-Nov-2022 09:56:03) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 15 objects of type patch, text, line. Axes object 2 contains 15 objects of type patch, text, line.","Tex":[],"LaTex":[]}

Arguments d'entrée

réduire tout

Solveur pour réseau d’apprentissage, spécifié comme un des éléments suivants :

  • 'sgdm' — Utiliser l’optimisation de la descente de gradient stochastique avec momentum (SGDM). Vous pouvez spécifier la valeur du momentum avec l’option d’apprentissage Momentum.

  • 'rmsprop'— Utiliser l’optimisation RMSProp. Vous pouvez spécifier le taux de décroissance de la moyenne mobile du gradient au carré avec l’option d’apprentissage SquaredGradientDecayFactor.

  • 'adam'— Utiliser l’optimisation Adam. Vous pouvez spécifier les taux de décroissance des moyennes mobiles du gradient au carré avec les options d’apprentissage GradientDecayFactor et SquaredGradientDecayFactor.

Pour plus d’informations sur les différents solveurs, veuillez consulter Descente de gradient stochastique.

Arguments nom-valeur

Spécifiez des paires d’arguments en option selon le modèle Name1=Value1,...,NameN=ValueN, où Name est le nom de l’argument et Value est la valeur correspondante. Les arguments nom-valeur doivent apparaître après les autres arguments, mais l’ordre des paires n’a aucune importance.

Avant R2021a, utilisez des virgules pour séparer les noms et les valeurs, et mettez Name entre guillemets.

Exemple : InitialLearnRate=0.03,L2Regularization=0.0005,LearnRateSchedule="piecewise" spécifie le taux d’apprentissage initial à 0,03 et le facteur de régularisation L2 à 0,0005, et indique au software de réduire le taux d’apprentissage après un nombre d’epochs donné en le multipliant par un certain facteur.

Tracés et affichage

réduire tout

Tracés à afficher pendant l’apprentissage d’un réseau peut être spécifier selon les options suivantes :

  • 'none' — Ne pas afficher de tracés pendant l’apprentissage.

  • 'training-progress' — Tracer la progression de l'apprentissage. Le tracé montre la perte et la précision des mini-batchs, la perte et la précision de la validation et des informations complémentaires sur la progression de l’apprentissage. Le tracé dispose d’un bouton d’arrêt dans le coin supérieur droit. Cliquez sur le bouton pour arrêter l’apprentissage et revenir à l’état actuel du réseau. Vous pouvez enregistrer le tracé d’apprentissage en tant qu’image ou PDF en cliquant sur Export Training Plot. Pour plus d’informations sur le tracé de la progression de l’apprentissage, veuillez consulter Surveiller la progression de l'apprentissage du Deep Learning.

Indicateur pour l’affichage des informations de la progression de l’apprentissage dans la fenêtre de commande, spécifié comme 1 (vrai) ou 0 (faux).

La sortie en clair affiche les informations suivantes :

Réseaux de classification

ChampDescription
EpochNombre d’epochs. Un epoch correspond à un passage complet sur les données.
IterationNombre d’itérations. Une itération correspond à un mini-batch.
Time ElapsedTemps écoulé en heures, minutes et secondes.
Mini-batch AccuracyPrécision de la classification sur le mini-batch.
Validation AccuracyPrécision de la classification sur les données de validation. Si vous ne spécifiez pas de données de validation, la fonction n’affiche pas ce champ.
Mini-batch LossPerte sur le mini-batch. Si la couche de sortie est un objet ClassificationOutputLayer, alors la perte est la perte d’entropie croisée pour des problèmes de classification multiclasses avec des classes mutuellement exclusives.
Validation LossPerte sur les données de validation. Si la couche de sortie est un objet ClassificationOutputLayer, alors la perte est la perte d’entropie croisée pour des problèmes de classification multiclasses avec des classes mutuellement exclusives. Si vous ne spécifiez pas de données de validation, la fonction n’affiche pas ce champ.
Base Learning RateTaux d’apprentissage de base. Le software multiplie les facteurs de taux d’apprentissage des couches par cette valeur.

Réseaux de régression

ChampDescription
EpochNombre d’epochs. Un epoch correspond à un passage complet sur les données.
IterationNombre d’itérations. Une itération correspond à un mini-batch.
Time ElapsedTemps écoulé en heures, minutes et secondes.
Mini-batch RMSERacine de l’erreur quadratique moyenne (RMSE) sur le mini-batch.
Validation RMSERMSE sur les données de validation. Si vous ne spécifiez pas de données de validation, le software n’affiche pas ce champ.
Mini-batch LossPerte sur le mini-batch. Si la couche de sortie est un objet RegressionOutputLayer, alors la perte est la demi-erreur quadratique moyenne.
Validation LossPerte sur les données de validation. Si la couche de sortie est un objet RegressionOutputLayer, alors la perte est la demi-erreur quadratique moyenne. Si vous ne spécifiez pas de données de validation, le software n’affiche pas ce champ.
Base Learning RateTaux d’apprentissage de base. Le software multiplie les facteurs de taux d’apprentissage des couches par cette valeur.

Si l’apprentissage s’arrête, la sortie en clair (verbose) affiche la raison de l’arrêt.

Pour spécifier les données de validation, utilisez l’option d’apprentissage ValidationData.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

La fréquence de l’impression en clair, qui est le nombre d’itérations entre les impressions dans la fenêtre de commande, est spécifiée comme un entier positif. Cette option a un effet uniquement si l’option d’apprentissage Verbose est 1 (vrai).

Si vous validez le réseau pendant l’apprentissage, trainNetwork imprime également dans la fenêtre de commande à chaque validation.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Option du mini-batch

réduire tout

Le nombre maximal d’epochs à utiliser pour l’apprentissage est spécifié comme un entier positif.

Une itération est une étape de l’algorithme de descente de gradient destinée à minimiser la fonction de perte avec un mini-batch. Un epoch est le passage complet de l’algorithme d’apprentissage sur l’ensemble du jeu d’apprentissage.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Taille du mini-batch à utiliser pour chaque itération d’apprentissage, spécifiée comme un entier positif. Un mini-batch est un sous-ensemble du jeu d’apprentissage qui est utilisé pour évaluer le gradient de la fonction de perte et mettre à jour les poids.

Si la taille du mini-batch ne divise pas uniformément le nombre d’échantillons d’apprentissage, trainNetwork ignore les données d’apprentissage qui ne rentrent pas dans le mini-batch complet final de chaque epoch.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Option de mélange des données, spécifiée comme l’un des éléments suivants :

  • 'once' — Mélanger les données d’apprentissage et de validation une fois avant l’apprentissage.

  • 'never' — Ne pas mélanger les données.

  • 'every-epoch' — Mélanger les données d’apprentissage avant chaque epoch d’apprentissage et mélanger les données de validation avant chaque validation du réseau. Si la taille du mini-batch ne divise pas uniformément le nombre d’échantillons d’apprentissage, trainNetwork ignore les données d’apprentissage qui ne rentrent pas dans le mini-batch complet final de chaque epoch. Pour éviter d’ignorer les mêmes données à chaque epoch, définissez l’option d’apprentissage Shuffle à 'every-epoch'.

Validation

réduire tout

Les données à utiliser pour la validation pendant l’apprentissage sont spécifiées en tant que [], datastore, table ou cell array et contiennent les prédicteurs et les réponses de la validation.

Vous pouvez spécifier les prédicteurs et les réponses de la validation avec les formats supportés par la fonction trainNetwork. Vous pouvez spécifier les données de validation comme un datastore, une table ou le cell array {predictors,responses}, où predictors contient les prédicteurs de la validation et responses contient les réponses de la validation.

Pour plus d’informations, veuillez consulter les arguments d’entrée images, sequences et features de la fonction trainNetwork.

Pendant l’apprentissage, trainNetwork calcule la précision et la perte sur les données de validation. Pour spécifier la fréquence de validation, utilisez l’option d’apprentissage ValidationFrequency. Vous pouvez également utiliser les données de validation pour arrêter automatiquement l’apprentissage lorsque la perte de la validation cesse de décroître. Pour activer l’arrêt automatique de la validation, utiliser l’option d’apprentissage ValidationPatience.

Si votre réseau possède des couches qui se comportent différemment entre la prédiction et l’apprentissage (par exemple des couches de décrochage), la précision de la validation peut être supérieure à la précision de l’apprentissage (mini-batch).

Les données de validation sont mélangées selon l’option d’apprentissage Shuffle. Si Shuffle est 'every-epoch', les données de validation sont mélangées avant chaque validation du réseau.

Si ValidationData est [], le software ne valide pas le réseau pendant l’apprentissage.

La fréquence de validation du réseau en nombre d’itérations est spécifiée comme un entier positif.

La valeur ValidationFrequency est le nombre d’itérations entre les évaluations des métriques de validation. Pour spécifier les données de validation, utilisez l’option d’apprentissage ValidationData.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

La patience pour l’arrêt de la validation de l’apprentissage du réseau est spécifiée comme un entier positif ou Inf.

ValidationPatience spécifie le nombre de fois où la perte sur le jeu de validation peut être supérieure ou égale à la plus petite perte précédente avant que l’apprentissage du réseau s’arrête. Si ValidationPatience est Inf, les valeurs de la perte de validation n’entraîne pas l’arrêt précoce de l’apprentissage.

Le réseau renvoyé dépend de l’option d’apprentissage OutputNetwork. Pour renvoyer le réseau avec la plus petite perte de validation, définissez l’option d’apprentissage OutputNetwork à "best-validation-loss".

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Réseau à renvoyer lorsque l’apprentissage est terminé, spécifié comme l’un des éléments suivants :

  • 'last-iteration' – Renvoie le réseau correspondant à la dernière itération d’apprentissage.

  • 'best-validation-loss' – Renvoie le réseau correspondant à l’itération d’apprentissage avec la plus petite perte de validation. Pour utiliser cette option, vous devez spécifier l’option d’apprentissage ValidationData.

Options du solveur

réduire tout

Le taux d’apprentissage initial utilisé pour l’apprentissage est spécifié comme un scalaire positif.

La valeur par défaut est 0.01 pour le solveur 'sgdm' et 0.001 pour les solveurs 'rmsprop' et 'adam'.

Si le taux d’apprentissage est trop faible, l’apprentissage peut prendre beaucoup de temps. Si le taux d’apprentissage est trop élevé, l’apprentissage peut atteindre un résultat sous-optimal ou diverger.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

L'option de réduction du taux d’apprentissage pendant l’apprentissage est spécifiée comme l’un des éléments suivants :

  • 'none' — Le taux d’apprentissage reste constant pendant tout l’apprentissage.

  • 'piecewise' — Le software met à jour le taux d’apprentissage après un certain nombre d’epochs en le multipliant par un certain facteur. Utilisez l’option d’apprentissage LearnRateDropFactor pour spécifier la valeur de ce facteur. Utilisez l’option d’apprentissage LearnRateDropPeriod pour spécifier le nombre d’epochs entre les multiplications.

Le nombre d’epochs pour la réduction du taux d’apprentissage est spécifié en tant qu'un entier positif. Cette option est valide uniquement si l’option d’apprentissage LearnRateSchedule est 'piecewise'.

Le software multiplie le taux d’apprentissage global par le facteur de réduction chaque fois que le nombre spécifié d’epochs est atteint. Spécifiez le facteur de réduction avec l’option d’apprentissage LearnRateDropFactor.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Le facteur pour la réduction du taux d’apprentissage est spécifié comme un scalaire compris entre 0 et 1. Cette option est valide uniquement si l’option d’apprentissage LearnRateSchedule est 'piecewise'.

LearnRateDropFactor est un facteur de multiplication à appliquer au taux d’apprentissage chaque fois qu’un certain nombre d’epochs est atteint. Spécifiez le nombre d’epochs avec l’option d’apprentissage LearnRateDropPeriod.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Le facteur de régularisation L2 (décroissance du poids) est spécifié comme un scalaire non négatif. Pour plus d’informations, veuillez consulter Régularisation L2.

Vous pouvez spécifier un multiplicateur de régularisation L2 pour les couches de réseau avec des paramètres entraînables. Pour plus d’informations, veuillez consulter Set Up Parameters in Convolutional and Fully Connected Layers.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

La contribution de l’étape de mise à jour des paramètres, de l’itération précédente à l’itération actuelle, de la descente de gradient stochastique avec momentum est spécifiée comme un scalaire compris entre 0 et 1.

Une valeur de 0 signifie une absence de contribution de l’étape précédente, tandis qu’une valeur de 1 signifie une contribution maximale de l’étape précédente. La valeur par défaut fonctionne bien pour la plupart des tâches.

Pour spécifier l’option d’apprentissage Momentum, solverName doit être 'sgdm'.

Pour plus d’informations, veuillez consulter Descente de gradient stochastique avec momentum.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Le taux de décroissance de la moyenne mobile du gradient pour le solveur Adam est spécifié comme un scalaire non négatif inférieur à 1. Le taux de décroissance du gradient est désigné par β1 dans la section Adam.

Pour spécifier l’option d’apprentissage GradientDecayFactor, solverName doit être 'adam'.

La valeur par défaut fonctionne bien pour la plupart des tâches.

Pour plus d’informations, veuillez consulter Adam.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Le taux de décroissance de la moyenne mobile du gradient au carré pour les solveurs Adam et RMSProp est spécifié comme un scalaire non négatif inférieur à 1. Le taux de décroissance du gradient au carré est désigné par β2 dans [4].

Pour spécifier l’option d’apprentissage SquaredGradientDecayFactor, solverName doit être 'adam' ou 'rmsprop'.

Les valeurs typiques du taux de décroissance sont 0.9, 0.99 et 0.999, ce qui correspond respectivement aux longueurs moyennes de 10, 100 et 1000 mises à jour de paramètres.

La valeur par défaut est 0.999 pour le solveur Adam. La valeur par défaut est 0.9 pour le solveur RMSProp.

Pour plus d’informations, veuillez consulter Adam et RMSProp.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

L'offset du dénominateur pour les solveurs Adam et RMSProp est spécifié comme un scalaire positif.

Le solveur ajoute l’offset au dénominateur dans les mises à jour des paramètres du réseau pour éviter la division par zéro. La valeur par défaut fonctionne bien pour la plupart des tâches.

Pour spécifier l’option d’apprentissage Epsilon, solverName doit être 'adam' ou 'rmsprop'.

Pour plus d’informations, veuillez consulter Adam et RMSProp.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Option de réinitialisation de la normalisation de la couche d’entrée, spécifiée comme l’un des éléments suivants :

  • 1 (vrai) — Réinitialiser les statistiques de normalisation de la couche d’entrée et les recalculer au moment de l’apprentissage.

  • 0 (faux) — Calculer les statistiques de normalisation au moment de l’apprentissage lorsqu’elles sont vides.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Le mode d’évaluation des statistiques dans les couches de normalisation par batchs est spécifié comme l’un des éléments suivants :

  • 'population' – Utiliser les statistiques de population. Après l’apprentissage, le software finalise les statistiques en passant à nouveau par les données d’apprentissage et utilise la moyenne et la variance correspondantes.

  • 'moving' – Approximer les statistiques pendant l’apprentissage avec une estimation continue donnée par les étapes de mises à jour

    μ*=λμμ^+(1λμ)μσ2*=λσ2σ2^+(1-λσ2)σ2

    μ* et σ2* désignent respectivement la moyenne et la variance mises à jour, λμ et λσ2 désignent respectivement les valeurs de décroissance de la moyenne et de la variance, μ^ et σ2^ désignent respectivement la moyenne et la variance de la couche d’entrée, et μ et σ2 désignent respectivement les dernières valeurs de la moyenne mobile et de la variance. Après l’apprentissage, le software utilise la valeur la plus récente des statistiques de moyenne mobile et de variance. Cette option supporte seulement l’apprentissage sur CPU ou sur un GPU unique.

Écrêtage de gradient

réduire tout

Le seuil de gradient est spécifié comme étant Inf ou un scalaire positif. Si le gradient dépasse la valeur de GradientThreshold, le gradient est écrêté selon l’option d’apprentissage GradientThresholdMethod.

Pour plus d’informations, veuillez consulter Écrêtage de gradient.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

La méthode de seuil de gradient utilisée pour écrêter des valeurs de gradients dépassant le seuil de gradient est spécifiée comme l’un des éléments suivants :

  • 'l2norm' — Si la norme L2 du gradient d’un paramètre entraînable est supérieure à GradientThreshold, mettre à l’échelle le gradient pour que la norme L2 soit égale à GradientThreshold.

  • 'global-l2norm' — Si la norme L2 globale, L, est supérieure à GradientThreshold, mettre à l’échelle tous les gradients par un facteur de GradientThreshold/L. La norme L2 globale prend en compte tous les paramètres entraînables.

  • 'absolute-value' — Si la valeur absolue d’une dérivée partielle individuelle dans le gradient d’un paramètre entraînable est supérieure à GradientThreshold, mettre à l’échelle la dérivée partielle pour avoir une amplitude égale à GradientThreshold et conserver le signe de la dérivée partielle.

Pour plus d’informations, veuillez consulter Écrêtage de gradient.

Options des séquences

réduire tout

Les options de remplissage, de troncature et de division des séquences d’entrée sont spécifiées comme étant l’un des éléments suivants :

  • "longest" — Remplir les séquences dans chaque mini-batch afin qu’elles aient la même longueur que la séquence la plus longue. Cette option n’ignore aucune donnée, mais le remplissage peut introduire du bruit dans le réseau.

  • "shortest" — Tronquer les séquences dans chaque mini-batch afin qu’elles aient la même longueur que la séquence la plus courte. Cette option garantit qu’il n’y a pas de remplissage, mais des données seront ignorées.

  • Entier positif — Pour chaque mini-batch, remplir les séquences à la longueur de la séquence la plus longue dans le mini-batch, puis diviser les séquences en séquences plus petites de la longueur spécifiée. En cas de division, le software crée des mini-batchs supplémentaires. Si la longueur de séquence spécifiée ne divise pas uniformément les longueurs des séquences des données, les mini-batchs contenant les fins de ces séquences auront une longueur plus courte que la longueur de séquence spécifiée. Utilisez cette option si les séquences complètes ne tiennent pas en mémoire. Vous pouvez aussi essayer de réduire le nombre de séquences par mini-batch en définissant l’option MiniBatchSize à une valeur inférieure.

Pour en savoir plus sur l’effet du remplissage, de la troncature et de la division des séquences d’entrée, veuillez consulter Sequence Padding, Truncation, and Splitting.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

La direction du remplissage ou de la troncature est spécifiée comme étant l’un des éléments suivants :

  • "right" — Remplir ou tronquer les séquences sur la droite. Les séquences commencent au même pas de temps et le software tronque ou remplit à la fin des séquences.

  • "left" — Remplir ou tronquer les séquences sur la gauche. Le software tronque ou remplit au début des séquences afin que les séquences finissent au même pas de temps.

Les couches récurrentes traitant les données des séquences un pas de temps à la fois, lorsque la propriété OutputMode de la couche récurrente est 'last', le remplissage des derniers pas de temps peut influencer négativement la sortie de la couche. Pour remplir ou tronquer les données des séquences sur la gauche, définissez l’option SequencePaddingDirection à "left".

Pour les réseaux de séquence à séquence (lorsque la propriété OutputMode est 'sequence' pour chaque couche récurrente), le remplissage des premiers pas de temps peut influencer négativement les prédictions des pas de temps précédents. Pour remplir ou tronquer les données des séquences sur la droite, définissez l’option SequencePaddingDirection à "right".

Pour en savoir plus sur l’effet du remplissage, de la troncature et de la division des séquences d’entrée, veuillez consulter Sequence Padding, Truncation, and Splitting.

La valeur, avec laquelle le remplissage des séquences d’entrée sera effectué, est spécifiée comme un scalaire.

L’option est valide uniquement si SequenceLength est "longest" ou un entier positif. Ne remplissez pas des séquences avec NaN, car cela peut propager des erreurs dans tout le réseau.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Options hardware

réduire tout

L'option de ressources hardware du réseau d’apprentissage est spécifiée comme l’un des éléments suivants :

  • 'auto' — Utiliser un GPU en cas de disponibilité. Sinon, utiliser le CPU.

  • 'cpu' — Utiliser le CPU.

  • 'gpu' — Utiliser le GPU.

  • 'multi-gpu' — Utiliser plusieurs GPU sur une machine, avec un pool parallèle local basé sur votre profil de cluster par défaut. S’il n’y a pas de pool parallèle, le software démarre un pool parallèle avec une taille de pool égale au nombre de GPU disponibles.

  • 'parallel' — Utiliser un pool parallèle local ou distant basé sur votre profil de cluster par défaut. S’il n’y a pas de pool parallèle, le software en démarre un avec le profil de cluster par défaut. Si le pool a accès aux GPU, seuls les workers avec un GPU unique réalisent le calcul d’apprentissage. Si le pool n’a pas de GPU, l’apprentissage a lieu sur tous les travailleurs du CPU disponibles.

Pour plus d’informations sur l’utilisation des différents environnements d’exécution, veuillez consulter Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud.

Les options 'gpu', 'multi-gpu' et 'parallel' nécessitent Parallel Computing Toolbox™. Pour utiliser un GPU pour le Deep Learning, vous devez également disposer d’un équipement GPU supporté. Pour plus d'information sur les dispositifs supportés, veuillez consulter GPU Computing Requirements (Parallel Computing Toolbox). Si vous choisissez une de ces options et que Parallel Computing Toolbox ou un GPU adapté n’est pas disponible, le software renvoie une erreur.

Pour améliorer les performances de l’apprentissage en parallèle, essayez d’augmenter les options d’apprentissage MiniBatchSize et InitialLearnRate par le nombre de GPU.

Les options 'multi-gpu' et 'parallel' ne supportent pas les réseaux contenant des couches personnalisées avec des paramètres d’état ou des couches prédéfinies qui ont un état au moment de l’apprentissage. Par exemple :

La division de charge pour les workers parallèles entre des GPU ou des CPU est spécifiée comme étant l’un des éléments suivants :

  • Scalaire entre 0 et 1 — Fraction des workers sur chaque machine à utiliser pour les calculs lors de l’apprentissage du réseau. Si vous entraînez le réseau avec des données dans un datastore de mini-batchs avec une distribution activée en arrière-plan, les workers restants extraient et prétraitent les données en arrière-plan.

  • Entier positif — Nombre de workers sur chaque machine à utiliser pour les calculs lors de l’apprentissage du réseau. Si vous entraînez le réseau avec des données dans un datastore de mini-batchs avec une distribution activée en arrière-plan, les workers restants extraient et prétraitent les données en arrière-plan.

  • Vecteur numérique — Charge d’apprentissage du réseau pour chaque worker dans le pool parallèle. Pour un vecteur W, le worker i reçoit une fraction W(i)/sum(W) du travail (nombre d’exemples par mini-batch). Si vous entraînez un réseau avec des données dans un datastore de mini-batchs avec une distribution activée en arrière-plan, vous pouvez attribuer une charge de worker de 0 afin d’utiliser ce worker pour l’extraction de données en arrière-plan. Le vecteur spécifié doit contenir une valeur par worker dans le pool parallèle.

Si le pool parallèle a accès aux GPU, les workers sans GPU unique ne sont jamais utilisés pour les calculs d’apprentissage. Par défaut, les pools avec GPU utilisent tous les workers avec un GPU unique pour les calculs d’apprentissage et les workers restants pour la distribution en arrière-plan. Si le pool n’a pas accès aux GPU et que des CPU sont utilisés pour l’apprentissage, un worker par machine est utilisé par défaut pour la répartition des données en arrière-plan.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

L'indicateur d’activation de la répartition en arrière-plan (file d’attente de préextraction asynchrone) pour la lecture des données d’apprentissage dans les datastores est spécifié comme étant 0 (faux) ou 1 (vrai). La répartition en arrière-plan nécessite Parallel Computing Toolbox.

DispatchInBackground est supporté uniquement pour les datastores qui peuvent être partitionnés. Pour plus d’informations, veuillez consulter Use Datastore for Parallel Training and Background Dispatching.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Points de contrôle

réduire tout

Le chemin de sauvegarde des réseaux de point de contrôle est spécifié comme un vecteur de caractères ou un scalaire de type string.

  • Si vous ne spécifiez pas de chemin (c’est-à-dire que vous utilisez le "" par défaut), le software ne sauvegarde pas de réseau de point de contrôle.

  • Si vous spécifiez un chemin, trainNetwork sauvegarde des réseaux de point de contrôle dans ce chemin et attribue un nom unique à chaque réseau. Vous pouvez ensuite charger un réseau de point de contrôle et reprendre l’apprentissage de ce réseau.

    Si le dossier n’existe pas, vous devez d’abord le créer avant de spécifier le chemin de sauvegarde des réseaux de point de contrôle. Si le chemin que vous spécifiez n’existe pas, trainingOptions renvoie une erreur.

Les options CheckpointFrequency et CheckpointFrequencyUnit spécifient la fréquence de sauvegarde des réseaux de point de contrôle.

Pour plus d’informations sur la sauvegarde des réseaux de point de contrôle, veuillez consulter Save Checkpoint Networks and Resume Training.

Types de données : char | string

La fréquence de sauvegarde des réseaux de point de contrôle est spécifiée comme étant un entier positif.

Si CheckpointFrequencyUnit est 'epoch', le software sauvegarde des réseaux de point de contrôle tous les CheckpointFrequency epochs.

Si CheckpointFrequencyUnit est 'iteration', le software sauvegarde des réseaux de point de contrôle toutes les CheckpointFrequency itérations.

Cette option a un effet uniquement si CheckpointPath n’est pas vide.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Unité de fréquence des points de contrôle, spécifiée comme 'epoch' ou 'iteration'.

Si CheckpointFrequencyUnit est 'epoch', le software sauvegarde des réseaux de point de contrôle tous les CheckpointFrequency epochs.

Si CheckpointFrequencyUnit est 'iteration', le software sauvegarde des réseaux de point de contrôle toutes les CheckpointFrequency itérations.

Cette option a un effet uniquement si CheckpointPath n’est pas vide.

Les fonctions de sortie à appeler pendant l’apprentissage sont spécifiées comme un handle de fonction ou un cell array de handles de fonction. trainNetwork appelle les fonctions spécifiées une fois avant le début de l’apprentissage, après chaque itération et une fois quand l’apprentissage est terminé. trainNetwork passe une structure contenant des informations dans les champs suivants :

ChampDescription
EpochNombre courant d’epochs
IterationNombre courant d’itérations
TimeSinceStartTemps en secondes depuis le depuis de l’apprentissage
TrainingLossPerte courante des mini-batchs
ValidationLossPerte sur les données de validation
BaseLearnRateTaux d’apprentissage de base courant
TrainingAccuracy Précision sur le mini-batch courant (réseaux de classification)
TrainingRMSERMSE sur le mini-batch courant (réseaux de régression)
ValidationAccuracyPrécision sur les données de validation (réseaux de classification)
ValidationRMSERMSE sur les données de validation (réseaux de régression)
StateÉtat courant de l’apprentissage, avec une valeur possible de "start", "iteration" ou "done".

Si un champ n’est pas calculé ou pertinent pour un certain appel des fonctions de sortie, ce champ contient un tableau vide.

Vous pouvez utiliser des fonctions de sortie pour afficher ou tracer des informations sur la progression, ou arrêter l’apprentissage. Pour arrêter l’apprentissage de manière précoce, faites en sorte que votre fonction de sortie renvoie 1 (vrai). Si une fonction de sortie renvoie 1 (vrai), l’apprentissage se termine et trainNetwork renvoie le dernier réseau. Vous trouverez un exemple illustrant comment utiliser des fonctions de sortie dans Customize Output During Deep Learning Network Training.

Types de données : function_handle | cell

Arguments de sortie

réduire tout

Options d’apprentissage, renvoyées comme un objet TrainingOptionsSGDM, TrainingOptionsRMSProp ou TrainingOptionsADAM. Pour entraîner un réseau de neurones, utilisez les options d’apprentissage comme argument d’entrée de la fonction trainNetwork.

Si solverName est 'sgdm', 'rmsprop' ou 'adam', les options d’apprentissage sont renvoyées respectivement comme un objet TrainingOptionsSGDM, TrainingOptionsRMSProp ou TrainingOptionsADAM.

Vous pouvez éditer les propriétés des options d’apprentissage de TrainingOptionsSGDM, TrainingOptionsADAM et TrainingOptionsRMSProp directement. Par exemple, pour modifier la taille des mini-batchs après avoir utilisé la fonction trainingOptions, vous pouvez éditer directement la propriété MiniBatchSize :

options = trainingOptions('sgdm');
options.MiniBatchSize = 64;

Conseils

Algorithmes

réduire tout

Poids et biais initiaux

Pour les couches de convolution et entièrement connectés, l’initialisation des poids et des biais est donnée respectivement par les propriétés WeightsInitializer et BiasInitializer des couches. Vous trouverez des exemples illustrant comme modifier l’initialisation des poids et des biais dans Specify Initial Weights and Biases in Convolutional Layer et Specify Initial Weights and Biases in Fully Connected Layer.

Descente de gradient stochastique

L’algorithme de descente de gradient standard met à jour les paramètres du réseau (poids et biais) pour minimiser la fonction de perte en effectuant de petits pas à chaque itération dans la direction du gradient négatif de la perte,

θ+1=θαE(θ),

est le nombre itérations, α>0 est le taux d’apprentissage, θ est le vecteur de paramètres et E(θ) est la fonction de perte. Dans l’algorithme de descente de gradient standard, le gradient de la fonction de perte, E(θ), est évalué avec l’ensemble du jeu d’apprentissage et l’algorithme de descente de gradient standard utilise l’ensemble du jeu de données en une seule fois.

En revanche, à chaque itération, l’algorithme de descente de gradient stochastique évalue le gradient et met à jour les paramètres avec un sous-ensemble des données d’apprentissage. Un sous-ensemble différent, appelé mini-batch, est utilisé à chaque itération. Le passage complet de l’algorithme d’apprentissage sur l’ensemble du jeu d’apprentissage avec des mini-batchs est un epoch. La descente de gradient stochastique est stochastique car la mise à jour des paramètres calculée avec un mini-batch est une estimation bruitée de la mise à jour des paramètres qui résulterait du jeu de données complet. Vous pouvez spécifier la taille des mini-batchs et le nombre maximal d’epochs avec respectivement les options d’apprentissage MiniBatchSize et MaxEpochs.

Descente de gradient stochastique avec momentum

L’algorithme de descente de gradient stochastique peut osciller le long de la trajectoire de la descente la plus forte vers l’optimum. L’ajout d’un terme de momentum à la mise à jour des paramètres est une manière de réduire cette oscillation [2]. La mise à jour de la descente de gradient stochastique avec momentum (SGDM) est

θ+1=θαE(θ)+γ(θθ1),

γ détermine la contribution du pas de gradient précédent à l’itération actuelle. Vous pouvez spécifier cette valeur avec l’option d’apprentissage Momentum. Pour entraîner un réseau de neurones avec l’algorithme de descente de gradient stochastique avec momentum, spécifiez 'sgdm' comme premier argument d’entrée de trainingOptions. Pour spécifier la valeur initiale du taux d’apprentissage α, utilisez l’option d’apprentissage InitialLearnRate. Vous pouvez également spécifier différents taux d’apprentissage pour différentes couches et différents paramètres. Pour plus d’informations, veuillez consulter Set Up Parameters in Convolutional and Fully Connected Layers.

RMSProp

La descente de gradient stochastique avec momentum utilise un seul taux d’apprentissage pour tous les paramètres. D’autres algorithmes d’optimisation cherchent à améliorer l’apprentissage du réseau avec des taux d’apprentissage différents selon le paramètre et peuvent s’adapter automatiquement à la fonction de perte en cours d’optimisation. RMSProp (propagation de la moyenne quadratique) est l’un de ces algorithmes. Il conserve une moyenne mobile des carrés éléments par éléments des gradients des paramètres,

v=β2v1+(1β2)[E(θ)]2

β2 est le taux de décroissance de la moyenne mobile. Les valeurs courantes du taux de décroissance sont 0,9, 0,99 et 0,999. Les longueurs moyennes correspondantes des gradients au carré sont égales à 1/(1-β2), soit respectivement 10, 100 et 1 000 mises à jour des paramètres. Vous pouvez spécifier β2 avec les options d’apprentissage SquaredGradientDecayFactor. L’algorithme RMSProp utilise cette moyenne mobile pour normaliser les mises à jour de chaque paramètre individuellement,

θ+1=θαE(θ)v+ϵ

où la division est effectuée éléments par éléments. L’utilisation de RMSProp diminue efficacement les taux d’apprentissage des paramètres avec des grands gradients, et augmente les taux d’apprentissage des paramètres avec des petits gradients. ɛ est une petite constante ajoutée pour éviter la division par zéro. Vous pouvez spécifier ɛ avec l’option d’apprentissage Epsilon, mais la valeur par défaut fonctionne généralement bien. Pour utiliser RMSProp pour entraîner un réseau de neurones, spécifiez 'rmsprop' comme première entrée de trainingOptions.

Adam

Adam (dérivé d'adaptive moment estimation) [4] utilise une mise à jour des paramètres similaire à RMSProp, mais avec un terme de momentum supplémentaire. Il conserve une moyenne mobile éléments par éléments des gradients des paramètres et de leurs valeurs au carré,

m=β1m1+(1β1)E(θ)

v=β2v1+(1β2)[E(θ)]2

. Vous pouvez spécifier les taux de décroissance β1 et β2 avec respectivement les options d’apprentissage GradientDecayFactor et SquaredGradientDecayFactor. Adam utilise les moyennes mobiles pour mettre à jours les paramètres du réseau comme

θ+1=θαmlvl+ϵ

. Si des gradients sont similaires sur de nombreuses itérations, l’utilisation d’une moyenne mobile du gradient permet aux mises à jour des paramètres d'établir un momentum dans une certaine direction. Si les gradients contiennent principalement du bruit, la moyenne mobile du gradient devient plus petite, de sorte que les mises à jour des paramètres diminuent également. Vous pouvez spécifier ɛ avec l’option d’apprentissage Epsilon. La valeur par défaut fonctionne généralement bien, mais pour certains problèmes, une valeur de 1 fonctionne mieux. Pour utiliser Adam pour entraîner un réseau de neurones, spécifiez 'adam' comme première entrée de trainingOptions. La mise à jour Adam complète inclut également un mécanisme de correction d’un biais qui apparaît au début de l’apprentissage. Pour plus d’informations, veuillez consulter [4].

Spécifiez le taux d’apprentissage α pour tous les algorithmes d’optimisation avec l’option d’apprentissage InitialLearnRate. L’effet du taux d’apprentissage est différent pour les différents algorithmes d’optimisation, donc les taux d’apprentissage optimaux sont généralement différents. Vous pouvez également spécifier des taux d’apprentissage différents selon les couches et le paramètre. Pour plus d’informations, veuillez consulter Set Up Parameters in Convolutional and Fully Connected Layers.

Écrêtage de gradient

Si l’amplitude des gradients augmente de manière exponentielle, l’apprentissage est instable et peut diverger au bout de quelques itérations. Cette « explosion des gradients » est indiquée par une perte de l’apprentissage qui devient NaN ou Inf. L’écrêtage de gradient permet d’éviter l’explosion des gradients en stabilisant l’apprentissage à des taux d’apprentissage élevés et en présence de valeurs aberrantes [3]. L’écrêtage de gradient permet d’entraîner plus rapidement les réseaux et n’a généralement aucun impact sur la précision de la tâche apprise.

Il existe deux types d’écrêtage de gradient.

  • L’écrêtage de gradient en fonction de la norme met à l’échelle le gradient en fonction d’un seuil et ne modifie pas la direction du gradient. Les valeurs 'l2norm' et 'global-l2norm' de GradientThresholdMethod sont des méthodes d’écrêtage de gradient en fonction de la norme.

  • L’écrêtage de gradient en fonction de la valeur écrête toute dérivée partielle supérieure au seuil, ce qui peut entraîner un changement arbitraire de la direction du gradient. L’écrêtage de gradient en fonction de la valeur peut avoir un comportement imprévisible, mais des changements suffisamment petits ne provoquent pas de divergence du réseau. La valeur 'absolute-value' de GradientThresholdMethod est une méthode d’écrêtage du gradient en fonction d'une valeur.

Régularisation L2

L’ajout d’un terme de régularisation des poids à la fonction de perte E(θ) est une manière de réduire le surajustement [1], [2]. Le terme de régularisation est également appelé décroissance du poids. La fonction de perte avec le terme de régularisation prend la forme

ER(θ)=E(θ)+λΩ(w),

w est le vecteur de poids, λ est le facteur (coefficient) de régularisation et la fonction de régularisation Ω(w) est

Ω(w)=12wTw.

Notez que les biais ne sont pas régularisés[2]. Vous pouvez spécifier le facteur de régularisation λ avec l’option d’apprentissage L2Regularization. Vous pouvez également spécifier différents facteurs de régularisation pour différentes couches et différents paramètres. Pour plus d’informations, veuillez consulter Set Up Parameters in Convolutional and Fully Connected Layers.

La fonction de perte que le software utilise pour l’apprentissage du réseau inclut le terme de régularisation. Cependant, la valeur de la perte affichée dans la fenêtre de commande et dans le tracé de la progression de l’apprentissage pendant l’apprentissage est la perte sur les données uniquement et n’inclut pas le terme de régularisation.

Références

[1] Bishop, C. M. Pattern Recognition and Machine Learning. Springer, New York, NY, 2006.

[2] Murphy, K. P. Machine Learning: A Probabilistic Perspective. The MIT Press, Cambridge, Massachusetts, 2012.

[3] Pascanu, R., T. Mikolov, and Y. Bengio. "On the difficulty of training recurrent neural networks". Proceedings of the 30th International Conference on Machine Learning. Vol. 28(3), 2013, pp. 1310–1318.

[4] Kingma, Diederik, and Jimmy Ba. "Adam: A method for stochastic optimization." arXiv preprint arXiv:1412.6980 (2014).

Historique des versions

Introduit dans R2016a

développer tout