Main Content

trainingOptions

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

Description

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

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
                       MaxEpochs: 20
               LearnRateSchedule: 'piecewise'
             LearnRateDropFactor: 0.2000
             LearnRateDropPeriod: 5
                   MiniBatchSize: 64
                         Shuffle: 'once'
             CheckpointFrequency: 1
         CheckpointFrequencyUnit: 'epoch'
                  SequenceLength: 'longest'
        PreprocessingEnvironment: 'serial'
                L2Regularization: 1.0000e-04
         GradientThresholdMethod: 'l2norm'
               GradientThreshold: Inf
                         Verbose: 1
                VerboseFrequency: 50
                  ValidationData: []
             ValidationFrequency: 50
              ValidationPatience: Inf
             ObjectiveMetricName: 'loss'
                  CheckpointPath: ''
            ExecutionEnvironment: 'auto'
                       OutputFcn: []
                         Metrics: []
                           Plots: 'training-progress'
            SequencePaddingValue: 0
        SequencePaddingDirection: 'right'
                InputDataFormats: "auto"
               TargetDataFormats: "auto"
         ResetInputNormalization: 1
    BatchNormalizationStatistics: 'auto'
                   OutputNetwork: 'auto'
                    Acceleration: "auto"

Cet exemple montre comment surveiller la progression de l’apprentissage des réseaux de Deep Learning.

Lorsque vous entraînez des réseaux pour le Deep Learning, le tracé de diverses métriques pendant l’apprentissage vous permet de suivre la progression de celui-ci. 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 à réaliser un surajustement sur les données d’apprentissage.

Cet exemple montre comment surveiller la progression de l’apprentissage pour des réseaux entraînés avec la fonction trainnet. Si vous entraînez un réseau avec une boucle d’apprentissage personnalisée, utilisez plutôt 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, la fonction trainnet 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, alors la figure montre les métriques de validation chaque fois que trainnet valide le réseau. La figure trace la perte et toutes les métriques spécifiées par l’option de type nom-valeur Metrics. Par défaut, le software utilise une échelle linéaire pour les tracés. Pour spécifier une échelle logarithmique pour l’axe des ordonnées, sélectionnez le bouton correspondant dans la barre d’outils des axes.

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. 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é, trainnet renvoie le réseau entraîné.

Définissez l’option d’apprentissage OutputNetwork à "best-validation" pour obtenir des valeurs finalisées correspondant à l’itération avec la meilleure valeur de métrique de validation, où la métrique optimisée est spécifiée par les options d’apprentissage ObjectiveMetricName. Définissez l’option d’apprentissage OutputNetwork à "last-iteration" pour obtenir des métriques finalisées correspondant à la dernière itération de l’apprentissage.

Des informations sur le temps et les paramètres d’apprentissage s’affichent à droite du volet. 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 as Image 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 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 celui-ci.

Chargez respectivement les données d’apprentissage et de test à partir des fichiers MAT DigitsDataTrain.mat et DigitsDataTest.mat. Les jeux de données d’apprentissage et de test contiennent 5 000 images chacun.

load DigitsDataTrain.mat
load DigitsDataTest.mat

Créez un objet dlnetwork.

net = dlnetwork;

Spécifiez les couches de la branche de classification et ajoutez-les au réseau.

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];

net = addLayers(net,layers);

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. Enregistrez les valeurs des métriques de précision et de F-score. Pour tracer la progression de l’apprentissage pendant l’apprentissage, définissez l’option d’apprentissage Plots à "training-progress".

options = trainingOptions("sgdm", ...
    MaxEpochs=8, ...
    Metrics = ["accuracy","fscore"], ...
    ValidationData={XTest,labelsTest}, ...
    ValidationFrequency=30, ...
    Verbose=false, ...
    Plots="training-progress");

Entraînez le réseau.

net = trainnet(XTrain,labelsTrain,net,"crossentropy",options);

Utilisez des métriques pour l’arrêt précoce et le renvoi du meilleur réseau.

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.

net = dlnetwork;

layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(3,8,Padding="same")
    batchNormalizationLayer
    reluLayer      
    fullyConnectedLayer(10)
    softmaxLayer];

net = addLayers(net,layers);

Spécifiez les options d’apprentissage :

  • Utilisez un solveur SGDM pour l’apprentissage.

  • Surveillez les performances de l’apprentissage en spécifiant des données de validation et une fréquence de validation.

  • Suivez la précision et le rappel pendant l’apprentissage. Pour renvoyer le réseau avec la meilleure valeur de rappel, spécifiez "recall" comme métrique d'évaluation et définissez le réseau de sortie à "best-validation".

  • Spécifiez la patience de la validation à 5 pour que l’apprentissage s’arrête si le rappel n’a pas diminué depuis cinq itérations.

  • Visualisez le tracé de la progression de l’apprentissage du réseau.

  • Désactivez la sortie en clair.

options = trainingOptions("sgdm", ...
    ValidationData={XValidation,YValidation}, ...
    ValidationFrequency=35, ...
    ValidationPatience=5, ...
    Metrics=["accuracy","recall"], ...
    ObjectiveMetricName="recall", ...
    OutputNetwork="best-validation", ...
    Plots="training-progress", ...
    Verbose=false);

Entraînez le réseau.

net = trainnet(XTrain,YTrain,net,"crossentropy",options);

Arguments d'entrée

réduire tout

Solveur pour l'apprentissage du réseau de neurones, spécifié comme l’une des valeurs suivantes :

  • "sgdm" — Descente de gradient stochastique avec momentum (SGDM, Stochastic Gradient Descent with Momentum). SGDM est un solveur stochastique. Pour des options d’apprentissage supplémentaires, veuillez consulter Options des solveurs stochastiques. Pour plus d’informations, veuillez consulter Descente de gradient stochastique avec momentum.

  • "rmsprop" — Propagation de la moyenne quadratique (RMSProp, Root Mean Square Propagation). RMSProp est un solveur stochastique. Pour des options d’apprentissage supplémentaires, veuillez consulter Options des solveurs stochastiques. Pour plus d’informations, veuillez consulter Propagation de la moyenne quadratique.

  • "adam" — Estimation adaptative des moments (Adam, Adaptive moment estimation). Adam est un solveur stochastique. Pour des options d’apprentissage supplémentaires, veuillez consulter Options des solveurs stochastiques. Pour plus d’informations, veuillez consulter Estimation adaptative des moments.

  • "lbfgs" (depuis R2023b) — Méthode Broyden-Fletcher-Goldfarb-Shanno à mémoire limitée (L-BFGS, Limited-memory Broyden–Fletcher–Goldfarb–Shanno). L-BFGS est un solveur en batch. Utilisez l’algorithme L-BFGS pour les réseaux et jeux de données de petite taille que vous pouvez traiter en un seul batch. Pour des options d’apprentissage supplémentaires, veuillez consulter Options du solveur L-BFGS. Pour plus d’informations, veuillez consulter BFGS à mémoire limitée.

La fonction trainBERTDocumentClassifier (Text Analytics Toolbox) supporte uniquement les solveurs "sgdm", "rmsprop" et "adam".

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 : Plots="training-progress",Metrics="accuracy",Verbose=false spécifie de désactiver la sortie en clair et d’afficher la progression de l’apprentissage dans un graphique comprenant également la métrique de précision.

Contrôle

réduire tout

Tracés à afficher pendant l’apprentissage d’un réseau de neurones, spécifiés comme l’une des valeurs suivantes :

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

  • "training-progress" — Tracer la progression de l'apprentissage.

Le contenu du tracé dépend du solveur utilisé.

  • Lorsque l’argument solverName est "sgdm", "adam" ou "rmsprop", le tracé affiche la perte des mini-batchs, la perte de la validation, les métriques d’apprentissage des mini-batchs et de validation spécifiées par l’option Metrics ainsi que des informations complémentaires sur la progression de l’apprentissage.

  • Lorsque l’argument solverName est "lbfgs", le tracé affiche la perte de l’apprentissage et de la validation, les métriques d’apprentissage et de validation spécifiées par l’option Metrics ainsi que des informations complémentaires sur la progression de l’apprentissage.

Pour ouvrir et fermer le tracé de la progression de l’apprentissage de manière programmatique après l’apprentissage, utilisez les fonctions show et close avec la deuxième sortie de la fonction trainnet. Vous pouvez utiliser la fonction show pour afficher la progression de l’apprentissage même si l’option d’apprentissage Plots est définie à "none".

Pour que l’axe des ordonnées passe à une échelle logarithmique, utilisez la barre d’outils des axes. Training plot axes toolbar with log scale enabled and the tooltip "Log scale y-axis".

Depuis R2023b

Métriques à suivre, spécifiées comme un vecteur de caractères ou un string scalar contenant le nom d’une métrique prédéfinie, un tableau de chaînes de caractères contenant des noms, un objet métrique prédéfini ou personnalisé, un handle de fonction (@myMetric), un objet deep.DifferentiableFunction ou un cell array de noms, d’objets métriques et de handles de fonction.

  • Nom de métrique prédéfinie — Spécifiez les métriques comme un string scalar, un vecteur de caractères ou un tableau de string contenant des noms de métriques prédéfinies. Les valeurs supportées sont "accuracy", "auc", "fscore", "precision", "recall" et "rmse".

  • Objet métrique prédéfini — Si vous avez besoin de plus de flexibilité, vous pouvez utiliser des objets métriques prédéfinis. Le software supporte les objets métriques prédéfinis suivants :

    Lorsque vous créez un objet métrique prédéfini, vous pouvez spécifier des options supplémentaires, par exemple le type de moyenne et s’il s’agit d’une tâche à une seule ou plusieurs étiquettes.

  • Handle de fonction de métrique personnalisée — Si aucune métrique prédéfinie ne correspond à vos besoins, vous pouvez spécifier des métriques personnalisées avec un handle de fonction. La fonction doit avoir la syntaxe metric = metricFunction(Y,T), où Y correspond aux prédictions du réseau et T correspond aux réponses cibles. Pour les réseaux possédant plusieurs sorties, la syntaxe doit être metric = metricFunction(Y1,…,YN,T1,…TM), où N est le nombre de sorties et M est le nombre de cibles. Pour plus d’informations, veuillez consulter Define Custom Metric Function.

    Remarque

    Lorsque les données de validation sont dans des mini-batchs, le software calcule la métrique de validation de chaque mini-batch puis renvoie la moyenne de ces valeurs. Pour certaines métriques, ce comportement peut produire une valeur différente de celle obtenue en calculant la métrique sur le jeu de validation entier. Dans la plupart des cas, les valeurs sont similaires. Pour utiliser une métrique personnalisée qui n’est pas moyennée par batch pour les données de validation, vous devez créer un objet métrique personnalisé. Pour plus d’informations, veuillez consulter Define Custom Deep Learning Metric Object.

  • Objet deep.DifferentiableFunction (depuis R2024a) — Objet fonction avec une fonction de rétropropagation personnalisée. Pour plus d’informations, veuillez consulter Define Custom Deep Learning Operations.

  • Objet métrique personnalisé — Si vous avez besoin d’une personnalisation plus poussée, vous pouvez définir votre propre objet métrique personnalisé. Pour un exemple illustrant comment créer une métrique personnalisée, veuillez consulter Define Custom F-Beta Score Metric Object. Pour des informations générales sur la création de métriques personnalisées, veuillez consulter Define Custom Deep Learning Metric Object. Spécifiez votre métrique personnalisée dans l’option Metrics de la fonction trainingOptions.

Cette option supporte uniquement les fonctions trainnet et trainBERTDocumentClassifier (Text Analytics Toolbox).

Exemple : Metrics=["accuracy","fscore"]

Exemple : Metrics={"accuracy",@myFunction,precisionObj}

Depuis R2024a

Nom de la métrique d'évaluation à utiliser pour l’arrêt précoce et le renvoi du meilleur réseau, spécifié comme un string scalar ou un vecteur de caractères.

Le nom de la métrique doit être "loss" ou correspondre au nom d’une métrique spécifiée par l’argument de type nom-valeur Metrics. Les métriques spécifiées avec des handles de fonction ne sont pas supportées. Pour que vous puissiez spécifier le nom d’une métrique personnalisée comme valeur de ObjectiveMetricName, il est nécessaire que la valeur de la propriété Maximize de l’objet métrique personnalisé ne soit pas vide. Pour plus d’informations, veuillez consulter Define Custom Deep Learning Metric Object.

Pour plus d’informations sur la spécification de la métrique d'évaluation pour l’arrêt précoce, veuillez consulter ValidationPatience. Pour plus d’informations sur le renvoi du meilleur réseau avec la métrique d'évaluation, veuillez consulter OutputNetwork.

Types de données : char | string

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

Le contenu de la sortie en clair dépend du type de solveur.

Pour les solveurs stochastiques (SGDM, Adam et RMSProp), la table contient les variables suivantes :

VariableDescription
IterationNuméro d’itération.
EpochNuméro d’epoch.
TimeElapsedTemps écoulé en heures, minutes et secondes.
LearnRateTaux d’apprentissage.
TrainingLossPerte lors de l'apprentissage.
ValidationLossPerte lors de la validation. Si vous ne spécifiez pas de données de validation, le software n’affiche pas cette information.

Pour le solveur L-BFGS, la table contient les variables suivantes :

VariableDescription
IterationNuméro d’itération.
TimeElapsedTemps écoulé en heures, minutes et secondes.
TrainingLossPerte lors de l'apprentissage.
ValidationLossPerte lors de la validation. Si vous ne spécifiez pas de données de validation, le software n’affiche pas cette information.
GradientNormNorme des gradients.
StepNormNorme des pas.

Si vous spécifiez des métriques supplémentaires dans les options d’apprentissage, elles apparaissent également dans la sortie en clair. Par exemple, si vous définissez l’option d’apprentissage Metrics à "accuracy", les informations incluent les variables TrainingAccuracy et ValidationAccuracy.

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

Fréquence de l’impression en clair, qui est le nombre d’itérations entre les impressions dans la fenêtre de commande, spécifiée comme un entier positif.

Si vous effectuez une validation du réseau de neurones pendant son apprentissage, le software affichera également les résultats dans la fenêtre de commande à chaque validation effectuée.

Pour activer cette propriété, définissez l’option d’apprentissage Verbose à 1 (true).

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

Fonctions de sortie à appeler pendant l’apprentissage, spécifiées comme un handle de fonction ou un cell array de handles de fonction. Le software appelle les fonctions une fois avant le début de l’apprentissage, après chaque itération et une fois quand l’apprentissage est terminé.

Les fonctions doivent avoir la syntaxe stopFlag = f(info), où info est une structure contenant des informations sur la progression de l’apprentissage et stopFlag est un scalaire indiquant d’arrêter l’apprentissage de manière précoce. Si stopFlag est à 1 (true), le software arrête l’apprentissage. Sinon, il le poursuit.

La fonction trainnet passe la structure info à la fonction de sortie.

Pour les solveurs stochastiques (SGDM, Adam et RMSProp), info contient les champs suivants :

ChampDescription
EpochNuméro d’epoch
IterationNuméro d’itération
TimeElapsedTemps écoulé depuis le début de l’apprentissage
LearnRateTaux d’apprentissage de l’itération
TrainingLossPerte de l’apprentissage de l’itération
ValidationLossPerte de la validation si spécifiée et évaluée à cette itération.
StateÉtat de l’apprentissage lors de l’itération, spécifié comme "start", "iteration" ou "done".

Pour le solveur L-BFGS, info contient les champs suivants :

ChampDescription
IterationNuméro d’itération
TimeElapsedTemps écoulé en heures, minutes et secondes
TrainingLossPerte lors de l'apprentissage
ValidationLossPerte lors de la validation. Si vous ne spécifiez pas de données de validation, le software n’affiche pas cette information.
GradientNormNorme des gradients
StepNormNorme des pas
StateÉtat de l’apprentissage lors de l’itération, spécifié comme "start", "iteration" ou "done".

Si vous spécifiez des métriques supplémentaires dans les options d’apprentissage, elles apparaissent également dans les informations sur l’apprentissage. Par exemple, si vous définissez l’option d’apprentissage Metrics à "accuracy", les informations incluent les champs TrainingAccuracy et ValidationAccuracy.

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

Vous trouverez un exemple illustrant comment utiliser des fonctions de sortie dans Custom Stopping Criteria for Deep Learning Training.

Types de données : function_handle | cell

Formats de données

réduire tout

Depuis R2023b

Description des dimensions des données en entrée, spécifiée comme un tableau de string, un vecteur de caractères ou un cell array de vecteurs de caractères.

Si InputDataFormats est "auto", le software utilise les formats attendus par l’entrée du réseau. Sinon, il utilise les formats spécifiés pour l’entrée du réseau correspondante.

Un format de données est une chaîne de caractères où chaque caractère décrit le type de la dimension correspondante des données.

Les caractères sont les suivants :

  • "S" — Spatial

  • "C" — Canal

  • "B" — Batch

  • "T" — Temps

  • "U" — Non spécifié

Prenons l’exemple d’un tableau contenant un batch de séquences dont les première, deuxième et troisième dimensions correspondent respectivement aux canaux, aux observations et aux pas de temps. Vous pouvez spécifier que ce tableau a le format "CBT" (canal, batch, temps).

Vous pouvez spécifier plusieurs dimensions ayant l’étiquette "S" ou "U". Vous pouvez utiliser les étiquettes "C", "B" et "T" au maximum une fois. Le software ignore les dimensions unitaires "U" après la deuxième dimension.

Pour un réseau de neurones net possédant plusieurs entrées, spécifiez un tableau de formats de données en entrée où InputDataFormats(i) correspond à l’entrée net.InputNames(i).

Pour plus d’informations, veuillez consulter Deep Learning Data Formats.

Types de données : char | string | cell

Depuis R2023b

Description des dimensions des données cibles, spécifiée comme l’une des valeurs suivantes :

  • "auto" — Si les données cibles ont le même nombre de dimensions que les données en entrée, la fonction trainnet utilise le format spécifié par InputDataFormats. Si les données cibles n’ont pas le même nombre de dimensions que les données en entrée, la fonction trainnet utilise le format attendu par la fonction de perte.

  • Tableau de string, vecteur de caractères ou cell array de vecteurs de caractères — La fonction trainnet utilise les formats de données que vous spécifiez.

Un format de données est une chaîne de caractères où chaque caractère décrit le type de la dimension correspondante des données.

Les caractères sont les suivants :

  • "S" — Spatial

  • "C" — Canal

  • "B" — Batch

  • "T" — Temps

  • "U" — Non spécifié

Prenons l’exemple d’un tableau contenant un batch de séquences dont les première, deuxième et troisième dimensions correspondent respectivement aux canaux, aux observations et aux pas de temps. Vous pouvez spécifier que ce tableau a le format "CBT" (canal, batch, temps).

Vous pouvez spécifier plusieurs dimensions ayant l’étiquette "S" ou "U". Vous pouvez utiliser les étiquettes "C", "B" et "T" au maximum une fois. Le software ignore les dimensions unitaires "U" après la deuxième dimension.

Pour plus d’informations, veuillez consulter Deep Learning Data Formats.

Types de données : char | string | cell

Options des solveurs stochastiques

réduire tout

Nombre maximal d’epochs (passes complètes sur les données) à utiliser pour l’apprentissage, spécifié comme un entier positif.

Cette option supporte uniquement les solveurs stochastiques (lorsque l’argument solverName est "sgdm", "adam" ou "rmsprop").

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, le software ignore les données d’apprentissage qui ne rentrent pas dans le mini-batch complet final de chaque epoch. Si la taille du mini-batch est inférieure au nombre d’échantillons d’apprentissage, le software n’ignore aucune donnée.

Cette option supporte uniquement les solveurs stochastiques (lorsque l’argument solverName est "sgdm", "adam" ou "rmsprop").

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’une des valeurs suivantes :

  • "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 de neurones. Si la taille du mini-batch ne divise pas uniformément le nombre d’échantillons d’apprentissage, le software 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".

Cette option supporte uniquement les solveurs stochastiques (lorsque l’argument solverName est "sgdm", "adam" ou "rmsprop").

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

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.

Cette option supporte uniquement les solveurs stochastiques (lorsque l’argument solverName est "sgdm", "adam" ou "rmsprop").

Lorsque solverName est "sgdm", la valeur par défaut est 0.01. Lorsque solverName est "rmsprop" ou "adam", la valeur par défaut est 0.001.

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

Option de réduction du taux d’apprentissage pendant l’apprentissage, spécifiée comme l’une des valeurs suivantes :

  • "none" — Conserver un taux d’apprentissage constant pendant tout l’apprentissage.

  • "piecewise" — Mettre à jour le taux d’apprentissage à intervalles réguliers en le multipliant par un facteur de réduction. Pour spécifier l’intervalle de mise à jour, utilisez l’option d’apprentissage LearnRateDropPeriod. Pour spécifier le facteur de réduction, utilisez l’option d’apprentissage LearnRateDropFactor.

Cette option supporte uniquement les solveurs stochastiques (lorsque l’argument solverName est "sgdm", "adam" ou "rmsprop").

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.

Cette option supporte uniquement les solveurs stochastiques (lorsque l’argument solverName est "sgdm", "adam" ou "rmsprop").

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.

Cette option supporte uniquement les solveurs stochastiques (lorsque l’argument solverName est "sgdm", "adam" ou "rmsprop").

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, dans la descente de gradient stochastique avec momentum, est définie par 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.

Cette option supporte uniquement le solveur SGDM (lorsque l’argument solverName est "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 défini par un scalaire non négatif inférieur à 1. Le taux de décroissance du gradient est désigné par β1 dans la section Estimation adaptative des moments.

Cette option supporte uniquement le solveur Adam (lorsque l’argument solverName est "adam").

Pour plus d’informations, veuillez consulter Estimation adaptative des moments.

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 défini par un scalaire non négatif inférieur à 1. Le taux de décroissance du gradient au carré est désigné par β2 dans [4].

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.

Cette option supporte uniquement les solveurs Adam et RMSProp (lorsque l’argument solverName est "adam" ou "rmsprop").

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 Estimation adaptative des moments et Propagation de la moyenne quadratique.

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 de neurones pour éviter la division par zéro. La valeur par défaut fonctionne bien pour la plupart des tâches.

Cette option supporte uniquement les solveurs Adam et RMSProp (lorsque l’argument solverName est "adam" ou "rmsprop").

Pour plus d’informations, veuillez consulter Estimation adaptative des moments et Propagation de la moyenne quadratique.

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

Options du solveur L-BFGS

réduire tout

Depuis R2023b

Nombre maximal d’itérations à utiliser pour l’apprentissage, spécifié comme un entier positif.

Le solveur L-BFGS est un solveur en batch complet, ce qui signifie qu’il traite l’intégralité du jeu d’apprentissage en une seule itération.

Cette option supporte uniquement le solveur L-BFGS (lorsque l’argument solverName est "lbfgs").

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

Depuis R2023b

Méthode pour trouver un taux d’apprentissage adapté, spécifiée comme l’une des valeurs suivantes :

  • "weak-wolfe" — Rechercher un taux d’apprentissage satisfaisant aux conditions faibles de Wolfe. Cette méthode maintient une approximation définie positive de la matrice hessienne inverse.

  • "strong-wolfe" — Rechercher un taux d’apprentissage satisfaisant aux conditions fortes de Wolfe. Cette méthode maintient une approximation définie positive de la matrice hessienne inverse.

  • "backtracking" — Rechercher un taux d’apprentissage satisfaisant aux conditions de décroissance suffisante. Cette méthode ne maintient pas une approximation définie positive de la matrice hessienne inverse.

Cette option supporte uniquement le solveur L-BFGS (lorsque l’argument solverName est "lbfgs").

Depuis R2023b

Nombre de mises à jour d’état à stocker, défini par un entier positif. Des valeurs comprises entre 3 et 20 conviennent à la plupart des tâches.

L’algorithme L-BFGS utilise un historique de calculs de gradient pour approximer la matrice hessienne de manière récursive. Pour plus d’informations, veuillez consulter Limited-Memory BFGS.

Cette option supporte uniquement le solveur L-BFGS (lorsque l’argument solverName est "lbfgs").

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

Depuis R2023b

Valeur initiale caractérisant la matrice hessienne inverse approximée, spécifiée comme un scalaire positif.

Pour économiser de la mémoire, l’algorithme L-BFGS ne stocke et n’inverse pas la matrice hessienne dense B. Au lieu de cela, il utilise l’approximation Bkm1λkI, où m est la taille de l’historique, le facteur hessien inverse λk est un scalaire et I est la matrice d’identité. Ensuite, l’algorithme stocke uniquement le facteur hessien inverse scalaire et le met à jour à chaque pas.

Le facteur hessien inverse initial est la valeur de λ0.

Pour plus d’informations, veuillez consulter Limited-Memory BFGS.

Cette option supporte uniquement le solveur L-BFGS (lorsque l’argument solverName est "lbfgs").

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

Depuis R2023b

Nombre maximal d’itérations de recherche linéaire pour déterminer le taux d’apprentissage, défini par un entier positif.

Cette option supporte uniquement le solveur L-BFGS (lorsque l’argument solverName est "lbfgs").

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

Depuis R2023b

Tolérance du gradient relatif, défini par un scalaire positif.

Le software arrête l’apprentissage lorsque le gradient relatif est inférieur ou égal à GradientTolerance.

Cette option supporte uniquement le solveur L-BFGS (lorsque l’argument solverName est "lbfgs").

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

Depuis R2023b

Tolérance du pas, défini par un scalaire positif.

Le software arrête l’apprentissage lorsque le pas pris par l’algorithme est inférieur ou égal à StepTolerance.

Cette option supporte uniquement le solveur L-BFGS (lorsque l’argument solverName est "lbfgs").

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

Validation

réduire tout

Données à utiliser pour la validation pendant l’apprentissage, définies par [], un datastore, une table, un cell array ou un objet minibatchqueue contenant les prédicteurs et cibles de validation.

Pendant l’apprentissage, le software utilise les données de validation pour calculer la perte et les métriques 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 métrique d'évaluation de la validation cesse de s’améliorer. Par défaut, la métrique d'évaluation est définie comme étant la perte (loss). Pour activer l’arrêt automatique de la validation, utiliser l’option d’apprentissage ValidationPatience.

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

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

Le software mélange les données de validation selon l’option d’apprentissage Shuffle. Si Shuffle est "every-epoch", le software mélange les données de validation avant chaque validation du réseau de neurones.

Les formats supportés dépendent de la fonction d’apprentissage utilisée.

Fonction trainnet

Spécifiez les données de validation comme un datastore, un objet minibatchqueue ou le cell array {predictors,targets}, où predictors contient les prédicteurs de la validation et targets contient les cibles de la validation. Spécifiez les prédicteurs et les cibles de la validation avec les formats supportés par la fonction trainnet.

Pour plus d’informations, veuillez consulter les arguments en entrée de la fonction trainnet.

Fonction trainBERTDocumentClassifier (Text Analytics Toolbox)

Spécifiez les données de validation comme l’une des valeurs suivantes :

  • Cell array {documents,targets}, où documents contient les documents en entrée et targets contient les étiquettes de document.

  • Table, où la première variable contient les documents en entrée et la deuxième variable contient les étiquettes de document.

Pour plus d’informations, veuillez consulter les arguments en entrée de la fonction trainBERTDocumentClassifier (Text Analytics Toolbox).

Fréquence de validation du réseau de neurones en nombre d’itérations, 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

Patience de l’arrêt de la validation de l’apprentissage du réseau de neurones, définie par un entier positif ou Inf.

ValidationPatience détermine combien de fois la performance sur le jeu de validation peut être inférieure ou égale à la meilleure performance déjà obtenue sans que cela entraîne l'arrêt de l'apprentissage du réseau de neurones. Si ValidationPatience est Inf, les valeurs de la métrique de validation n’entraînent pas l’arrêt précoce de l’apprentissage. Le software cherche à maximiser ou minimiser la métrique selon ce qu’indique la propriété Maximize de cette métrique. Lorsque la métrique d'évaluation est "loss", le software cherche à minimiser la valeur de la perte.

Le réseau de neurones renvoyé dépend de l’option d’apprentissage OutputNetwork. Pour renvoyer le réseau de neurones avec la meilleure valeur de métrique de validation, définissez l’option d’apprentissage OutputNetwork à "best-validation".

Avant R2024a : Le software calcule la patience de la validation en utilisant la valeur de perte de la validation.

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

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

  • "auto" – Utilise "best-validation" si ValidationData est spécifié. Sinon, utilise "last-iteration".

  • "best-validation" – Renvoie le réseau de neurones correspondant à l’itération d’apprentissage avec la meilleure valeur de métrique de validation, la métrique à optimiser étant spécifiée par l’option ObjectiveMetricName. Pour utiliser cette option, vous devez spécifier l’option d’apprentissage ValidationData.

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

Régularisation et normalisation

réduire tout

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.

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, définie par l'un des éléments suivants :

  • 1 (true) — Réinitialise les statistiques de normalisation de la couche d’entrée et les recalcule au moment de l’apprentissage.

  • 0 (false) — Calcule 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

Mode d’évaluation des statistiques dans les couches de normalisation par batchs, défini par l’un des éléments suivants :

  • "population" — Utilise 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" — Approxime 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 et de la variance mobiles. 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.

  • "auto" — Utilise l’option "moving".

Écrêtage de gradient

réduire tout

Le seuil de gradient est défini par 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.

Séquence

réduire tout

Options de remplissage, de troncature et de division des séquences d’entrée, spécifiées comme l’une des valeurs suivantes :

  • "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 de neurones.

  • "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.

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

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 neurones 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 et de la troncature des séquences, veuillez consulter Sequence Padding and Truncation.

La valeur, avec laquelle le remplissage des séquences en entrée sera effectué, est définie par un scalaire.

Ne remplissez pas des séquences avec NaN, car cela peut propager des erreurs dans tout le réseau de neurones.

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

Hardware et accélération

réduire tout

Ressource hardware pour l'apprentissage du réseau de neurones, définie par l’une des valeurs suivantes :

  • "auto" – Utiliser un GPU local si disponible. Sinon, utiliser le CPU local.

  • "cpu" – Utiliser le CPU local.

  • "gpu" – Utiliser le GPU local.

  • "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-auto" – Utiliser un pool parallèle local ou distant. 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. Les workers en trop deviennent inactifs. Si le pool n’a pas de GPU, l’apprentissage a lieu sur tous les travailleurs CPU disponibles. (depuis R2024a)

    Avant R2024a : Utilisez "parallel" à la place.

  • "parallel-cpu" – Utiliser les ressources CPU dans un pool parallèle local ou distant en ignorant les GPU. S’il n’y a pas de pool parallèle, le software en démarre un avec le profil de cluster par défaut. (depuis R2023b)

  • "parallel-gpu" – Utiliser les GPU dans un pool parallèle local ou distant. Les workers en trop deviennent inactifs. S’il n’y a pas de pool parallèle, le software en démarre un avec le profil de cluster par défaut. (depuis R2023b)

Les options "gpu", "multi-gpu", "parallel-auto", "parallel-cpu" et "parallel-gpu" 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 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.

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", "parallel-auto", "parallel-cpu" et "parallel-gpu" supportent uniquement les solveurs stochastiques (lorsque l’argument solverName est "sgdm", "adam" ou "rmsprop").

Depuis R2024a

Environnement d’extraction et de prétraitement des données à partir d’un datastore pendant l’apprentissage, défini par l’une des valeurs suivantes :

  • "serial" – Extraire et prétraiter les données en série.

  • "background" – Extraire et prétraiter les données avec le backgroundPool.

  • "parallel" – Extraire et prétraiter les données avec des workers parallèles. Le software ouvre un pool parallèle avec le profil par défaut si aucun pool local n’est actuellement ouvert. Les pools parallèles non locaux ne sont pas supportés. L’utilisation de cette option nécessite Parallel Computing Toolbox. Cette option n’est pas supportée lors de l’apprentissage en parallèle (lorsque l’option ExecutionEnvironment est "parallel-auto", "parallel-cpu", "parallel-gpu" ou "multi-gpu").

L’utilisation des options "background" ou "parallel" nécessite que le datastore en entrée puisse être divisé en sous-ensembles ou partitionné. Les datastores personnalisés doivent implémenter la classe matlab.io.datastore.Subsettable.

Les options "background" et "parallel" ne sont pas supportées lorsque l’option Shuffle est "never".

Utilisez les options "background" ou "parallel" lorsque vos mini-batchs nécessitent un prétraitement important. Pour plus d’informations sur l’environnement de prétraitement, veuillez consulter Use Datastore for Parallel Training and Background Preprocessing.

Cette option supporte uniquement les solveurs stochastiques (lorsque l’argument solverName est "sgdm", "adam" ou "rmsprop").

Avant R2024a : Pour prétraiter les données en parallèle, définissez l’option d’apprentissage DispatchInBackground à 1 (true).

Depuis R2024a

Optimisation des performances, spécifiée comme l’une des valeurs suivantes :

  • "auto" – Appliquer automatiquement un certain nombre d’optimisations adaptées au réseau en entrée et aux ressources hardware.

  • "none" – Désactiver toutes les optimisations.

Points de contrôle

réduire tout

Chemin de sauvegarde des réseaux de neurones de point de contrôle, spécifié comme un string scalar ou un vecteur de caractères.

  • 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 neurones de point de contrôle.

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

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

Types de données : char | string

Fréquence de sauvegarde des réseaux de neurones de point de contrôle, définie par un entier positif.

Si solverName est "lbfgs" ou si CheckpointFrequencyUnit est "iteration", le software sauvegarde les réseaux de neurones de point de contrôle pour toutes les itérations définies par CheckpointFrequency. Sinon, le software sauvegarde des réseaux de neurones de point de contrôle pour tous les epochs définis par CheckpointFrequency.

Lorsque solverName est "sgdm", "adam" ou "rmsprop", la valeur par défaut est 1. Lorsque solverName est "lbfgs", la valeur par défaut est 30.

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, définie par "epoch" ou "iteration".

Si CheckpointFrequencyUnit est "epoch", le software sauvegarde des réseaux de neurones de point de contrôle pour tous les epochs définis par CheckpointFrequency.

Si CheckpointFrequencyUnit est "iteration", le software sauvegarde des réseaux de neurones de point de contrôle toutes les itérations définies par CheckpointFrequency.

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

Cette option supporte uniquement les solveurs stochastiques (lorsque l’argument solverName est "sgdm", "adam" ou "rmsprop").

Arguments de sortie

réduire tout

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

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

Conseils

  • Pour la plupart des tâches de Deep Learning, vous pouvez utiliser un réseau de neurones préentraîné et l’adapter à vos propres données. Vous trouverez un exemple illustrant comment utiliser l’apprentissage par transfert pour entraîner un réseau de neurones à convolution afin de classer un nouveau jeu d’images dans Retrain Neural Network to Classify New Images. Vous pouvez également créer et entraîner des réseaux de neurones à partir de zéro avec les fonctions trainnet et trainingOptions.

    Si la fonction trainingOptions ne propose pas les options d’apprentissage dont vous avez besoin pour votre tâche, vous pouvez créer une boucle d’apprentissage personnalisée avec la différenciation automatique. Pour en savoir plus, veuillez consulter Train Network Using Custom Training Loop.

    Si la fonction trainnet ne propose pas la fonction de perte dont vous avez besoin pour votre tâche, vous pouvez spécifier une fonction de perte personnalisée à trainnet via un handle de fonction. Pour les fonctions de perte nécessitant davantage d’entrées que les prédictions et les cibles (par exemple celles nécessitant d’accéder au réseau de neurones ou à des entrées supplémentaires), entraînez le modèle avec une boucle d’apprentissage personnalisée. Pour en savoir plus, veuillez consulter Train Network Using Custom Training Loop.

    Si la fonction Deep Learning Toolbox™ ne propose pas les couches dont vous avez besoin pour votre tâche, vous pouvez créer une couche personnalisée. Pour en savoir plus, veuillez consulter Define Custom Deep Learning Layers. Si un modèle ne peut pas être spécifié comme un réseau de couches, vous pouvez le définir comme une fonction. Pour en savoir plus, veuillez consulter Train Network Using Model Function.

    Pour plus d’informations sur la méthode d’apprentissage à utiliser selon la tâche, veuillez consulter Train Deep Learning Model in MATLAB.

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.

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),

où le taux d’apprentissage α et la valeur de momentum γ déterminent la contribution du pas de gradient précédent à l’itération actuelle.

Propagation de la moyenne quadratique

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. La propagation de la moyenne quadratique (RMSProp) est l’un de ces algorithmes. Elle 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 facteur de décroissance du gradient au carré 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. 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.

Estimation adaptative des moments

L’estimation adaptative des moments (Adam) [4] utilise une mise à jour des paramètres semblable à RMSProp mais avec un terme de momentum supplémentaire. Elle 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

Les taux de décroissance β1 et β2 sont respectivement les facteurs de décroissance du gradient et du gradient au carré. Adam utilise les moyennes mobiles pour mettre à jour les paramètres du réseau comme

θ+1=θαmlvl+ϵ

La valeur α est le taux d’apprentissage. 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. 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].

BFGS à mémoire limitée

L’algorithme L-BFGS [5] est une méthode quasi-Newton qui approxime l’algorithme Broyden-Fletcher-Goldfarb-Shanno (BFGS). Utilisez l’algorithme L-BFGS pour les réseaux et jeux de données de petite taille que vous pouvez traiter en un seul batch.

L’algorithme met à jour les paramètres entraînables W à l’itération k+1, conformément à l’étape de mise à jour donnée par

Wk+1=WkηkBk1J(Wk),

Wk désigne les poids à l’itération k, ηk est le taux d’apprentissage à l’itération k, Bk est une approximation de la matrice hessienne à l’itération k et J(Wk) désigne les gradients de la perte par rapport aux paramètres entraînables à l’itération k.

L’algorithme L-BFGS calcule directement le produit matrice-vecteur Bk1J(Wk). L’algorithme ne nécessite pas de calculer l’inverse de Bk.

Pour économiser de la mémoire, l’algorithme L-BFGS ne stocke et n’inverse pas la matrice hessienne dense B. Au lieu de cela, il utilise l’approximation Bkm1λkI, où m est la taille de l’historique, le facteur hessien inverse λk est un scalaire et I est la matrice d’identité. Ensuite, l’algorithme stocke uniquement le facteur hessien inverse scalaire et le met à jour à chaque pas.

Pour calculer directement le produit matrice-vecteur Bk1J(Wk), l’algorithme L-BFGS utilise l’algorithme récursif suivant :

  1. Définissez r=Bkm1J(Wk), où m est la taille de l’historique.

  2. Pour i=m,,1 :

    1. Soit β=1skiykiykir, où ski et yki sont respectivement les différences de pas et de gradient pour l’itération ki.

    2. Définissez r=r+ski(akiβ), où a est dérivé de s, de y et des gradients de la perte par rapport à la fonction de perte. Pour plus d’informations, veuillez consulter [5].

  3. Renvoyez Bk1J(Wk)=r.

É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.

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).

[5] Liu, Dong C., and Jorge Nocedal. "On the limited memory BFGS method for large scale optimization." Mathematical programming 45, no. 1 (August 1989): 503-528. https://doi.org/10.1007/BF01589116.

Historique des versions

Introduit dans R2016a

développer tout